{
  "version": 3,
  "sources": ["../../../node_modules/@transloadit/prettier-bytes/src/prettierBytes.ts", "../../../node_modules/mime-match/node_modules/wildcard/index.js", "../../../node_modules/mime-match/index.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/p-retry/node_modules/retry/lib/retry_operation.js", "../../../node_modules/p-retry/node_modules/retry/lib/retry.js", "../../../node_modules/p-retry/node_modules/retry/index.js", "../../../node_modules/classnames/index.js", "../../../node_modules/eventemitter3/index.js", "../../../node_modules/compressorjs/dist/compressor.js", "../../../node_modules/cropperjs/dist/cropper.js", "../../../node_modules/requires-port/index.js", "../../../node_modules/querystringify/index.js", "../../../node_modules/url-parse/index.js", "../../../node_modules/component-emitter/index.js", "../../../node_modules/is-mobile/index.js", "../../@uppy/utils/lib/hasProperty.js", "../../@uppy/utils/lib/AbortController.js", "../../@uppy/utils/lib/canvasToBlob.js", "../../@uppy/utils/lib/dataURItoBlob.js", "../../@uppy/utils/lib/ErrorWithCause.js", "../../@uppy/utils/lib/emaFilter.js", "../../@uppy/utils/lib/FOCUSABLE_ELEMENTS.js", "../../@uppy/utils/lib/NetworkError.js", "../../@uppy/utils/lib/ProgressTimeout.js", "../../@uppy/utils/lib/fetcher.js", "../../@uppy/utils/lib/fetchWithNetworkError.js", "../../@uppy/utils/lib/fileFilters.js", "../../@uppy/utils/lib/isDOMElement.js", "../../@uppy/utils/lib/findAllDOMElements.js", "../../@uppy/utils/lib/findDOMElement.js", "../../@uppy/utils/lib/getFileNameAndExtension.js", "../../@uppy/utils/lib/mimeTypes.js", "../../@uppy/utils/lib/getFileType.js", "../../@uppy/utils/lib/generateFileID.js", "../../@uppy/utils/lib/getAllowedMetaFields.js", "../../@uppy/utils/lib/toArray.js", "../../@uppy/utils/lib/getDroppedFiles/utils/fallbackApi.js", "../../@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js", "../../@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js", "../../@uppy/utils/lib/getDroppedFiles/index.js", "../../@uppy/utils/lib/getFileTypeExtension.js", "../../@uppy/utils/lib/getSocketHost.js", "../../@uppy/utils/lib/getTextDirection.js", "../../@uppy/utils/lib/getTimeStamp.js", "../../@uppy/utils/lib/isDragDropSupported.js", "../../@uppy/utils/lib/isNetworkError.js", "../../@uppy/utils/lib/isObjectURL.js", "../../@uppy/utils/lib/isPreviewSupported.js", "../../@uppy/utils/lib/secondsToTime.js", "../../@uppy/utils/lib/prettyETA.js", "../../@uppy/utils/lib/RateLimitedQueue.js", "../../@uppy/utils/lib/remoteFileObjToLocal.js", "../../@uppy/utils/lib/TaskQueue.js", "../../@uppy/utils/lib/Translator.js", "../../@uppy/utils/lib/truncateString.js", "../../@uppy/utils/lib/UserFacingApiError.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/jsx-runtime/src/utils.js", "../../../node_modules/preact/src/constants.js", "../../../node_modules/preact/jsx-runtime/src/index.js", "../../../node_modules/preact/hooks/src/index.js", "../../@uppy/utils/lib/VirtualList.js", "../../@uppy/core/lib/BasePlugin.js", "../../@uppy/core/lib/EventManager.js", "../../@uppy/core/lib/loggers.js", "../../@uppy/core/lib/Restricter.js", "../../@uppy/core/lib/UIPlugin.js", "../../@uppy/store-default/package.json", "../../@uppy/store-default/lib/index.js", "../../@uppy/core/lib/Uppy.js", "../../../node_modules/nanoid/non-secure/index.js", "../../@uppy/core/package.json", "../../@uppy/core/lib/getFileName.js", "../../@uppy/core/lib/locale.js", "../../@uppy/core/lib/supportsUploadProgress.js", "../../@uppy/companion-client/lib/index.js", "../../@uppy/companion-client/lib/getAllowedHosts.js", "../../../node_modules/p-retry/index.js", "../../../node_modules/is-network-error/index.js", "../../@uppy/companion-client/package.json", "../../@uppy/companion-client/lib/AuthError.js", "../../@uppy/companion-client/lib/RequestClient.js", "../../@uppy/companion-client/lib/Provider.js", "../../@uppy/companion-client/lib/SearchProvider.js", "../../@uppy/companion-client/lib/tokenStorage.js", "../../@uppy/provider-views/lib/index.js", "../../@uppy/provider-views/lib/useSearchForm.js", "../../@uppy/provider-views/lib/FilterInput.js", "../../@uppy/provider-views/lib/ProviderView/AuthView.js", "../../@uppy/provider-views/lib/GooglePicker/googlePicker.js", "../../@uppy/provider-views/lib/GooglePicker/icons.js", "../../@uppy/provider-views/lib/GooglePicker/GooglePickerView.js", "../../@uppy/provider-views/lib/ProviderView/ProviderView.js", "../../@uppy/provider-views/package.json", "../../@uppy/provider-views/lib/Item/index.js", "../../@uppy/provider-views/lib/Item/components/ItemIcon.js", "../../@uppy/provider-views/lib/Item/components/GridItem.js", "../../@uppy/provider-views/lib/Item/components/ListItem.js", "../../@uppy/provider-views/lib/Browser.js", "../../@uppy/provider-views/lib/FooterActions.js", "../../@uppy/provider-views/lib/utils/PartialTreeUtils/getNumberOfSelectedFiles.js", "../../@uppy/provider-views/lib/utils/companionFileToUppyFile.js", "../../@uppy/provider-views/lib/utils/addFiles.js", "../../@uppy/provider-views/lib/utils/getClickedRange.js", "../../@uppy/provider-views/lib/utils/handleError.js", "../../@uppy/provider-views/lib/utils/PartialTreeUtils/getBreadcrumbs.js", "../../@uppy/provider-views/lib/utils/PartialTreeUtils/getCheckedFilesWithPaths.js", "../../../node_modules/eventemitter3/index.mjs", "../../../node_modules/p-timeout/index.js", "../../../node_modules/p-queue/dist/lower-bound.js", "../../../node_modules/p-queue/dist/priority-queue.js", "../../../node_modules/p-queue/dist/index.js", "../../@uppy/provider-views/lib/utils/PartialTreeUtils/shallowClone.js", "../../@uppy/provider-views/lib/utils/PartialTreeUtils/afterFill.js", "../../@uppy/provider-views/lib/utils/PartialTreeUtils/afterOpenFolder.js", "../../@uppy/provider-views/lib/utils/PartialTreeUtils/afterScrollFolder.js", "../../@uppy/provider-views/lib/utils/PartialTreeUtils/afterToggleCheckbox.js", "../../@uppy/provider-views/lib/utils/PartialTreeUtils/index.js", "../../@uppy/provider-views/lib/utils/shouldHandleScroll.js", "../../@uppy/provider-views/lib/Item/components/SearchResultItem.js", "../../@uppy/provider-views/lib/ProviderView/GlobalSearchView.js", "../../@uppy/provider-views/lib/ProviderView/Header.js", "../../@uppy/provider-views/lib/Breadcrumbs.js", "../../@uppy/provider-views/lib/ProviderView/User.js", "../../@uppy/provider-views/lib/SearchProviderView/SearchProviderView.js", "../../@uppy/provider-views/lib/SearchView.js", "../../@uppy/audio/package.json", "../../@uppy/audio/lib/locale.js", "../../@uppy/audio/lib/PermissionsScreen.js", "../../@uppy/audio/lib/AudioSourceSelect.js", "../../@uppy/audio/lib/audio-oscilloscope/index.js", "../../@uppy/audio/lib/DiscardButton.js", "../../@uppy/audio/lib/RecordButton.js", "../../@uppy/audio/lib/formatSeconds.js", "../../@uppy/audio/lib/RecordingLength.js", "../../@uppy/audio/lib/SubmitButton.js", "../../@uppy/audio/lib/RecordingScreen.js", "../../@uppy/audio/lib/supportsMediaRecorder.js", "../../@uppy/audio/lib/Audio.js", "../../@uppy/aws-s3/package.json", "../../@uppy/aws-s3/lib/createSignedURL.js", "../../@uppy/aws-s3/lib/MultipartUploader.js", "../../@uppy/aws-s3/lib/utils.js", "../../@uppy/aws-s3/lib/HTTPCommunicationQueue.js", "../../@uppy/aws-s3/lib/index.js", "../../@uppy/box/package.json", "../../@uppy/box/lib/locale.js", "../../@uppy/box/lib/Box.js", "../../@uppy/compressor/lib/index.js", "../../@uppy/compressor/lib/locale.js", "../../../node_modules/exifr/dist/mini.esm.mjs", "../../@uppy/thumbnail-generator/package.json", "../../@uppy/thumbnail-generator/lib/locale.js", "../../@uppy/thumbnail-generator/lib/index.js", "../../@uppy/dashboard/package.json", "../../@uppy/dashboard/lib/components/Dashboard.js", "../../@uppy/dashboard/lib/components/AddFiles.js", "../../@uppy/dashboard/lib/components/AddFilesPanel.js", "../../@uppy/dashboard/lib/components/EditorPanel.js", "../../@uppy/dashboard/lib/components/FileCard/index.js", "../../@uppy/dashboard/lib/utils/getFileTypeIcon.js", "../../@uppy/dashboard/lib/utils/ignoreEvent.js", "../../@uppy/dashboard/lib/components/FilePreview.js", "../../@uppy/dashboard/lib/components/FileCard/RenderMetaFields.js", "../../@uppy/dashboard/lib/components/FileItem/index.js", "../../../node_modules/shallow-equal/src/arrays.ts", "../../../node_modules/shallow-equal/src/objects.ts", "../../../node_modules/shallow-equal/src/index.ts", "../../@uppy/dashboard/lib/utils/copyToClipboard.js", "../../@uppy/dashboard/lib/components/FileItem/Buttons/index.js", "../../@uppy/dashboard/lib/components/FileItem/FileInfo/index.js", "../../@uppy/dashboard/lib/components/FileItem/MetaErrorMessage.js", "../../@uppy/dashboard/lib/components/FileItem/FilePreviewAndLink/index.js", "../../@uppy/dashboard/lib/components/FileItem/FileProgress/index.js", "../../@uppy/dashboard/lib/components/FileList.js", "../../@uppy/dashboard/lib/components/Informer/FadeIn.js", "../../@uppy/dashboard/lib/components/Informer/TransitionGroup.js", "../../@uppy/dashboard/lib/components/Informer/Informer.js", "../../@uppy/dashboard/lib/components/PickerPanelContent.js", "../../@uppy/dashboard/lib/components/PickerPanelTopBar.js", "../../@uppy/dashboard/lib/components/Slide.js", "../../@uppy/dashboard/lib/components/StatusBar/StatusBarStates.js", "../../@uppy/dashboard/lib/components/StatusBar/StatusBarUI.js", "../../@uppy/dashboard/lib/components/StatusBar/Components.js", "../../@uppy/dashboard/lib/components/StatusBar/calculateProcessingProgress.js", "../../@uppy/dashboard/lib/components/StatusBar/StatusBar.js", "../../@uppy/dashboard/lib/locale.js", "../../@uppy/dashboard/lib/utils/createSuperFocus.js", "../../@uppy/dashboard/lib/utils/getActiveOverlayEl.js", "../../@uppy/dashboard/lib/utils/trapFocus.js", "../../@uppy/dashboard/lib/Dashboard.js", "../../@uppy/drag-drop/package.json", "../../@uppy/drag-drop/lib/locale.js", "../../@uppy/drag-drop/lib/DragDrop.js", "../../@uppy/drop-target/package.json", "../../@uppy/drop-target/lib/index.js", "../../@uppy/dropbox/package.json", "../../@uppy/dropbox/lib/locale.js", "../../@uppy/dropbox/lib/Dropbox.js", "../../@uppy/facebook/package.json", "../../@uppy/facebook/lib/locale.js", "../../@uppy/facebook/lib/Facebook.js", "../../../node_modules/get-form-data/es/index.js", "../../@uppy/form/package.json", "../../@uppy/form/lib/index.js", "../../@uppy/golden-retriever/package.json", "../../@uppy/golden-retriever/lib/IndexedDBStore.js", "../../@uppy/golden-retriever/lib/MetaDataStore.js", "../../@uppy/golden-retriever/lib/ServiceWorkerStore.js", "../../@uppy/golden-retriever/lib/index.js", "../../@uppy/google-drive/package.json", "../../@uppy/google-drive/lib/DriveProviderViews.js", "../../@uppy/google-drive/lib/locale.js", "../../@uppy/google-drive/lib/GoogleDrive.js", "../../@uppy/google-drive-picker/package.json", "../../@uppy/google-drive-picker/lib/locale.js", "../../@uppy/google-drive-picker/lib/GoogleDrivePicker.js", "../../@uppy/google-photos-picker/package.json", "../../@uppy/google-photos-picker/lib/locale.js", "../../@uppy/google-photos-picker/lib/GooglePhotosPicker.js", "../../@uppy/image-editor/lib/ImageEditor.js", "../../@uppy/image-editor/package.json", "../../@uppy/image-editor/lib/Editor.js", "../../@uppy/image-editor/lib/locale.js", "../../@uppy/image-editor/lib/utils/getCanvasDataThatFitsPerfectlyIntoContainer.js", "../../@uppy/image-editor/lib/utils/getScaleFactorThatRemovesDarkCorners.js", "../../@uppy/image-editor/lib/utils/limitCropboxMovementOnMove.js", "../../@uppy/image-editor/lib/utils/limitCropboxMovementOnResize.js", "../../@uppy/instagram/package.json", "../../@uppy/instagram/lib/locale.js", "../../@uppy/instagram/lib/Instagram.js", "../../@uppy/onedrive/package.json", "../../@uppy/onedrive/lib/locale.js", "../../@uppy/onedrive/lib/OneDrive.js", "../../@uppy/unsplash/package.json", "../../@uppy/unsplash/lib/locale.js", "../../@uppy/unsplash/lib/Unsplash.js", "../../@uppy/url/package.json", "../../@uppy/url/lib/locale.js", "../../@uppy/url/lib/UrlUI.js", "../../@uppy/url/lib/utils/forEachDroppedOrPastedUrl.js", "../../@uppy/url/lib/Url.js", "../../@uppy/zoom/package.json", "../../@uppy/zoom/lib/locale.js", "../../@uppy/zoom/lib/Zoom.js", "../../@uppy/remote-sources/package.json", "../../@uppy/remote-sources/lib/index.js", "../../@uppy/screen-capture/package.json", "../../@uppy/screen-capture/lib/locale.js", "../../@uppy/screen-capture/lib/DiscardButton.js", "../../@uppy/screen-capture/lib/RecordButton.js", "../../@uppy/screen-capture/lib/ScreenshotButton.js", "../../@uppy/screen-capture/lib/StopWatch.js", "../../@uppy/screen-capture/lib/StreamStatus.js", "../../@uppy/screen-capture/lib/SubmitButton.js", "../../@uppy/screen-capture/lib/RecorderScreen.js", "../../@uppy/screen-capture/lib/ScreenRecIcon.js", "../../@uppy/screen-capture/lib/ScreenCapture.js", "../../@uppy/status-bar/package.json", "../../@uppy/status-bar/lib/locale.js", "../../@uppy/status-bar/lib/StatusBarStates.js", "../../@uppy/status-bar/lib/StatusBarUI.js", "../../@uppy/status-bar/lib/Components.js", "../../@uppy/status-bar/lib/calculateProcessingProgress.js", "../../@uppy/status-bar/lib/StatusBar.js", "../../../node_modules/tus-js-client/lib.esm/error.js", "../../../node_modules/tus-js-client/lib.esm/logger.js", "../../../node_modules/tus-js-client/lib.esm/noopUrlStorage.js", "../../../node_modules/js-base64/base64.mjs", "../../../node_modules/tus-js-client/lib.esm/upload.js", "../../../node_modules/tus-js-client/lib.esm/uuid.js", "../../../node_modules/tus-js-client/lib.esm/browser/isReactNative.js", "../../../node_modules/tus-js-client/lib.esm/browser/uriToBlob.js", "../../../node_modules/tus-js-client/lib.esm/browser/sources/isCordova.js", "../../../node_modules/tus-js-client/lib.esm/browser/sources/readAsByteArray.js", "../../../node_modules/tus-js-client/lib.esm/browser/sources/FileSource.js", "../../../node_modules/tus-js-client/lib.esm/browser/sources/StreamSource.js", "../../../node_modules/tus-js-client/lib.esm/browser/fileReader.js", "../../../node_modules/tus-js-client/lib.esm/browser/fileSignature.js", "../../../node_modules/tus-js-client/lib.esm/browser/httpStack.js", "../../../node_modules/tus-js-client/lib.esm/browser/urlStorage.js", "../../../node_modules/tus-js-client/lib.esm/browser/index.js", "../../@uppy/tus/package.json", "../../@uppy/tus/lib/getFingerprint.js", "../../@uppy/tus/lib/index.js", "../../@uppy/transloadit/package.json", "../../@uppy/transloadit/lib/Assembly.js", "../../@uppy/transloadit/lib/AssemblyWatcher.js", "../../@uppy/transloadit/lib/Client.js", "../../@uppy/transloadit/lib/locale.js", "../../@uppy/transloadit/lib/index.js", "../../@uppy/webcam/lib/Webcam.js", "../../@uppy/webcam/package.json", "../../@uppy/webcam/lib/CameraIcon.js", "../../@uppy/webcam/lib/DiscardButton.js", "../../@uppy/webcam/lib/RecordButton.js", "../../@uppy/webcam/lib/formatSeconds.js", "../../@uppy/webcam/lib/RecordingLength.js", "../../@uppy/webcam/lib/SnapshotButton.js", "../../@uppy/webcam/lib/SubmitButton.js", "../../@uppy/webcam/lib/VideoSourceSelect.js", "../../@uppy/webcam/lib/CameraScreen.js", "../../@uppy/webcam/lib/locale.js", "../../@uppy/webcam/lib/PermissionsScreen.js", "../../@uppy/webcam/lib/supportsMediaRecorder.js", "../../@uppy/xhr-upload/package.json", "../../@uppy/xhr-upload/lib/locale.js", "../../@uppy/xhr-upload/lib/index.js", "../src/bundle.ts"],
  "sourcesContent": ["// 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(num: number): string {\n  if (typeof num !== 'number' || Number.isNaN(num)) {\n    throw new TypeError(`Expected a number, got ${typeof num}`)\n  }\n\n  const neg = num < 0\n  const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n\n  if (neg) {\n    num = -num\n  }\n\n  if (num < 1) {\n    return `${(neg ? '-' : '') + num} B`\n  }\n\n  const exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1)\n  num = Number(num / 1024 ** exponent)\n  const unit = units[exponent]\n\n  if (num >= 10 || num % 1 === 0) {\n    // Do not show decimals when the number is two-digit, or if the number has no\n    // decimal component.\n    return `${(neg ? '-' : '') + num.toFixed(0)} ${unit}`\n  }\n\n  return `${(neg ? '-' : '') + num.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", "/**\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", "function RetryOperation(timeouts, options) {\n  // Compatibility for the old (timeouts, retryForever) signature\n  if (typeof options === 'boolean') {\n    options = { forever: options };\n  }\n\n  this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n  this._timeouts = timeouts;\n  this._options = options || {};\n  this._maxRetryTime = options && options.maxRetryTime || Infinity;\n  this._fn = null;\n  this._errors = [];\n  this._attempts = 1;\n  this._operationTimeout = null;\n  this._operationTimeoutCb = null;\n  this._timeout = null;\n  this._operationStart = null;\n  this._timer = null;\n\n  if (this._options.forever) {\n    this._cachedTimeouts = this._timeouts.slice(0);\n  }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n  this._attempts = 1;\n  this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n  if (this._timeout) {\n    clearTimeout(this._timeout);\n  }\n  if (this._timer) {\n    clearTimeout(this._timer);\n  }\n\n  this._timeouts       = [];\n  this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n  if (this._timeout) {\n    clearTimeout(this._timeout);\n  }\n\n  if (!err) {\n    return false;\n  }\n  var currentTime = new Date().getTime();\n  if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n    this._errors.push(err);\n    this._errors.unshift(new Error('RetryOperation timeout occurred'));\n    return false;\n  }\n\n  this._errors.push(err);\n\n  var timeout = this._timeouts.shift();\n  if (timeout === undefined) {\n    if (this._cachedTimeouts) {\n      // retry forever, only keep last error\n      this._errors.splice(0, this._errors.length - 1);\n      timeout = this._cachedTimeouts.slice(-1);\n    } else {\n      return false;\n    }\n  }\n\n  var self = this;\n  this._timer = setTimeout(function() {\n    self._attempts++;\n\n    if (self._operationTimeoutCb) {\n      self._timeout = setTimeout(function() {\n        self._operationTimeoutCb(self._attempts);\n      }, self._operationTimeout);\n\n      if (self._options.unref) {\n          self._timeout.unref();\n      }\n    }\n\n    self._fn(self._attempts);\n  }, timeout);\n\n  if (this._options.unref) {\n      this._timer.unref();\n  }\n\n  return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n  this._fn = fn;\n\n  if (timeoutOps) {\n    if (timeoutOps.timeout) {\n      this._operationTimeout = timeoutOps.timeout;\n    }\n    if (timeoutOps.cb) {\n      this._operationTimeoutCb = timeoutOps.cb;\n    }\n  }\n\n  var self = this;\n  if (this._operationTimeoutCb) {\n    this._timeout = setTimeout(function() {\n      self._operationTimeoutCb();\n    }, self._operationTimeout);\n  }\n\n  this._operationStart = new Date().getTime();\n\n  this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n  console.log('Using RetryOperation.try() is deprecated');\n  this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n  console.log('Using RetryOperation.start() is deprecated');\n  this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n  return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n  return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n  if (this._errors.length === 0) {\n    return null;\n  }\n\n  var counts = {};\n  var mainError = null;\n  var mainErrorCount = 0;\n\n  for (var i = 0; i < this._errors.length; i++) {\n    var error = this._errors[i];\n    var message = error.message;\n    var count = (counts[message] || 0) + 1;\n\n    counts[message] = count;\n\n    if (count >= mainErrorCount) {\n      mainError = error;\n      mainErrorCount = count;\n    }\n  }\n\n  return mainError;\n};\n", "var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n  var timeouts = exports.timeouts(options);\n  return new RetryOperation(timeouts, {\n      forever: options && (options.forever || options.retries === Infinity),\n      unref: options && options.unref,\n      maxRetryTime: options && options.maxRetryTime\n  });\n};\n\nexports.timeouts = function(options) {\n  if (options instanceof Array) {\n    return [].concat(options);\n  }\n\n  var opts = {\n    retries: 10,\n    factor: 2,\n    minTimeout: 1 * 1000,\n    maxTimeout: Infinity,\n    randomize: false\n  };\n  for (var key in options) {\n    opts[key] = options[key];\n  }\n\n  if (opts.minTimeout > opts.maxTimeout) {\n    throw new Error('minTimeout is greater than maxTimeout');\n  }\n\n  var timeouts = [];\n  for (var i = 0; i < opts.retries; i++) {\n    timeouts.push(this.createTimeout(i, opts));\n  }\n\n  if (options && options.forever && !timeouts.length) {\n    timeouts.push(this.createTimeout(i, opts));\n  }\n\n  // sort the array numerically ascending\n  timeouts.sort(function(a,b) {\n    return a - b;\n  });\n\n  return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n  var random = (opts.randomize)\n    ? (Math.random() + 1)\n    : 1;\n\n  var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n  timeout = Math.min(timeout, opts.maxTimeout);\n\n  return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n  if (options instanceof Array) {\n    methods = options;\n    options = null;\n  }\n\n  if (!methods) {\n    methods = [];\n    for (var key in obj) {\n      if (typeof obj[key] === 'function') {\n        methods.push(key);\n      }\n    }\n  }\n\n  for (var i = 0; i < methods.length; i++) {\n    var method   = methods[i];\n    var original = obj[method];\n\n    obj[method] = function retryWrapper(original) {\n      var op       = exports.operation(options);\n      var args     = Array.prototype.slice.call(arguments, 1);\n      var callback = args.pop();\n\n      args.push(function(err) {\n        if (op.retry(err)) {\n          return;\n        }\n        if (err) {\n          arguments[0] = op.mainError();\n        }\n        callback.apply(this, arguments);\n      });\n\n      op.attempt(function() {\n        original.apply(obj, args);\n      });\n    }.bind(obj, original);\n    obj[method].options = options;\n  }\n};\n", "module.exports = require('./lib/retry');", "/*!\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", "'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n", "/*!\n * Compressor.js v1.2.1\n * https://fengyuanchen.github.io/compressorjs\n *\n * Copyright 2018-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2023-02-28T14:09:41.732Z\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Compressor = factory());\n})(this, (function () { 'use strict';\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n    return keys;\n  }\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n    return target;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n    }\n  }\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    Object.defineProperty(Constructor, \"prototype\", {\n      writable: false\n    });\n    return Constructor;\n  }\n  function _defineProperty(obj, key, value) {\n    key = _toPropertyKey(key);\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n    return obj;\n  }\n  function _extends() {\n    _extends = Object.assign ? Object.assign.bind() : function (target) {\n      for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i];\n        for (var key in source) {\n          if (Object.prototype.hasOwnProperty.call(source, key)) {\n            target[key] = source[key];\n          }\n        }\n      }\n      return target;\n    };\n    return _extends.apply(this, arguments);\n  }\n  function _toPrimitive(input, hint) {\n    if (typeof input !== \"object\" || input === null) return input;\n    var prim = input[Symbol.toPrimitive];\n    if (prim !== undefined) {\n      var res = prim.call(input, hint || \"default\");\n      if (typeof res !== \"object\") return res;\n      throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n    }\n    return (hint === \"string\" ? String : Number)(input);\n  }\n  function _toPropertyKey(arg) {\n    var key = _toPrimitive(arg, \"string\");\n    return typeof key === \"symbol\" ? key : String(key);\n  }\n\n  var canvasToBlob = {exports: {}};\n\n  /*\n   * JavaScript Canvas to Blob\n   * https://github.com/blueimp/JavaScript-Canvas-to-Blob\n   *\n   * Copyright 2012, Sebastian Tschan\n   * https://blueimp.net\n   *\n   * Licensed under the MIT license:\n   * https://opensource.org/licenses/MIT\n   *\n   * Based on stackoverflow user Stoive's code snippet:\n   * http://stackoverflow.com/q/4998908\n   */\n  (function (module) {\n  if (typeof window === 'undefined') {\n    return;\n  }\n    (function (window) {\n\n      var CanvasPrototype = window.HTMLCanvasElement && window.HTMLCanvasElement.prototype;\n      var hasBlobConstructor = window.Blob && function () {\n        try {\n          return Boolean(new Blob());\n        } catch (e) {\n          return false;\n        }\n      }();\n      var hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array && function () {\n        try {\n          return new Blob([new Uint8Array(100)]).size === 100;\n        } catch (e) {\n          return false;\n        }\n      }();\n      var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n      var dataURIPattern = /^data:((.*?)(;charset=.*?)?)(;base64)?,/;\n      var dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob && window.ArrayBuffer && window.Uint8Array && function (dataURI) {\n        var matches, mediaType, isBase64, dataString, byteString, arrayBuffer, intArray, i, bb;\n        // Parse the dataURI components as per RFC 2397\n        matches = dataURI.match(dataURIPattern);\n        if (!matches) {\n          throw new Error('invalid data URI');\n        }\n        // Default to text/plain;charset=US-ASCII\n        mediaType = matches[2] ? matches[1] : 'text/plain' + (matches[3] || ';charset=US-ASCII');\n        isBase64 = !!matches[4];\n        dataString = dataURI.slice(matches[0].length);\n        if (isBase64) {\n          // Convert base64 to raw binary data held in a string:\n          byteString = atob(dataString);\n        } else {\n          // Convert base64/URLEncoded data component to raw binary:\n          byteString = decodeURIComponent(dataString);\n        }\n        // Write the bytes of the string to an ArrayBuffer:\n        arrayBuffer = new ArrayBuffer(byteString.length);\n        intArray = new Uint8Array(arrayBuffer);\n        for (i = 0; i < byteString.length; i += 1) {\n          intArray[i] = byteString.charCodeAt(i);\n        }\n        // Write the ArrayBuffer (or ArrayBufferView) to a blob:\n        if (hasBlobConstructor) {\n          return new Blob([hasArrayBufferViewSupport ? intArray : arrayBuffer], {\n            type: mediaType\n          });\n        }\n        bb = new BlobBuilder();\n        bb.append(arrayBuffer);\n        return bb.getBlob(mediaType);\n      };\n      if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) {\n        if (CanvasPrototype.mozGetAsFile) {\n          CanvasPrototype.toBlob = function (callback, type, quality) {\n            var self = this;\n            setTimeout(function () {\n              if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) {\n                callback(dataURLtoBlob(self.toDataURL(type, quality)));\n              } else {\n                callback(self.mozGetAsFile('blob', type));\n              }\n            });\n          };\n        } else if (CanvasPrototype.toDataURL && dataURLtoBlob) {\n          if (CanvasPrototype.msToBlob) {\n            CanvasPrototype.toBlob = function (callback, type, quality) {\n              var self = this;\n              setTimeout(function () {\n                if ((type && type !== 'image/png' || quality) && CanvasPrototype.toDataURL && dataURLtoBlob) {\n                  callback(dataURLtoBlob(self.toDataURL(type, quality)));\n                } else {\n                  callback(self.msToBlob(type));\n                }\n              });\n            };\n          } else {\n            CanvasPrototype.toBlob = function (callback, type, quality) {\n              var self = this;\n              setTimeout(function () {\n                callback(dataURLtoBlob(self.toDataURL(type, quality)));\n              });\n            };\n          }\n        }\n      }\n      if (module.exports) {\n        module.exports = dataURLtoBlob;\n      } else {\n        window.dataURLtoBlob = dataURLtoBlob;\n      }\n    })(window);\n  })(canvasToBlob);\n  var toBlob = canvasToBlob.exports;\n\n  var isBlob = function isBlob(value) {\n    if (typeof Blob === 'undefined') {\n      return false;\n    }\n    return value instanceof Blob || Object.prototype.toString.call(value) === '[object Blob]';\n  };\n\n  var DEFAULTS = {\n    /**\n     * Indicates if output the original image instead of the compressed one\n     * when the size of the compressed image is greater than the original one's\n     * @type {boolean}\n     */\n    strict: true,\n    /**\n     * Indicates if read the image's Exif Orientation information,\n     * and then rotate or flip the image automatically.\n     * @type {boolean}\n     */\n    checkOrientation: true,\n    /**\n     * Indicates if retain the image's Exif information after compressed.\n     * @type {boolean}\n    */\n    retainExif: false,\n    /**\n     * The max width of the output image.\n     * @type {number}\n     */\n    maxWidth: Infinity,\n    /**\n     * The max height of the output image.\n     * @type {number}\n     */\n    maxHeight: Infinity,\n    /**\n     * The min width of the output image.\n     * @type {number}\n     */\n    minWidth: 0,\n    /**\n     * The min height of the output image.\n     * @type {number}\n     */\n    minHeight: 0,\n    /**\n     * The width of the output image.\n     * If not specified, the natural width of the source image will be used.\n     * @type {number}\n     */\n    width: undefined,\n    /**\n     * The height of the output image.\n     * If not specified, the natural height of the source image will be used.\n     * @type {number}\n     */\n    height: undefined,\n    /**\n     * Sets how the size of the image should be resized to the container\n     * specified by the `width` and `height` options.\n     * @type {string}\n     */\n    resize: 'none',\n    /**\n     * The quality of the output image.\n     * It must be a number between `0` and `1`,\n     * and only available for `image/jpeg` and `image/webp` images.\n     * Check out {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob canvas.toBlob}.\n     * @type {number}\n     */\n    quality: 0.8,\n    /**\n     * The mime type of the output image.\n     * By default, the original mime type of the source image file will be used.\n     * @type {string}\n     */\n    mimeType: 'auto',\n    /**\n     * Files whose file type is included in this list,\n     * and whose file size exceeds the `convertSize` value will be converted to JPEGs.\n     * @type {string\uFF5CArray}\n     */\n    convertTypes: ['image/png'],\n    /**\n     * PNG files over this size (5 MB by default) will be converted to JPEGs.\n     * To disable this, just set the value to `Infinity`.\n     * @type {number}\n     */\n    convertSize: 5000000,\n    /**\n     * The hook function to execute before draw the image into the canvas for compression.\n     * @type {Function}\n     * @param {CanvasRenderingContext2D} context - The 2d rendering context of the canvas.\n     * @param {HTMLCanvasElement} canvas - The canvas for compression.\n     * @example\n     * function (context, canvas) {\n     *   context.fillStyle = '#fff';\n     * }\n     */\n    beforeDraw: null,\n    /**\n     * The hook function to execute after drew the image into the canvas for compression.\n     * @type {Function}\n     * @param {CanvasRenderingContext2D} context - The 2d rendering context of the canvas.\n     * @param {HTMLCanvasElement} canvas - The canvas for compression.\n     * @example\n     * function (context, canvas) {\n     *   context.filter = 'grayscale(100%)';\n     * }\n     */\n    drew: null,\n    /**\n     * The hook function to execute when success to compress the image.\n     * @type {Function}\n     * @param {File} file - The compressed image File object.\n     * @example\n     * function (file) {\n     *   console.log(file);\n     * }\n     */\n    success: null,\n    /**\n     * The hook function to execute when fail to compress the image.\n     * @type {Function}\n     * @param {Error} err - An Error object.\n     * @example\n     * function (err) {\n     *   console.log(err.message);\n     * }\n     */\n    error: null\n  };\n\n  var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  var WINDOW = IS_BROWSER ? window : {};\n\n  /**\n   * Check if the given value is a positive number.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n   */\n  var isPositiveNumber = function isPositiveNumber(value) {\n    return value > 0 && value < Infinity;\n  };\n  var slice = Array.prototype.slice;\n\n  /**\n   * Convert array-like or iterable object to an array.\n   * @param {*} value - The value to convert.\n   * @returns {Array} Returns a new array.\n   */\n  function toArray(value) {\n    return Array.from ? Array.from(value) : slice.call(value);\n  }\n  var REGEXP_IMAGE_TYPE = /^image\\/.+$/;\n\n  /**\n   * Check if the given value is a mime type of image.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given is a mime type of image, else `false`.\n   */\n  function isImageType(value) {\n    return REGEXP_IMAGE_TYPE.test(value);\n  }\n\n  /**\n   * Convert image type to extension.\n   * @param {string} value - The image type to convert.\n   * @returns {boolean} Returns the image extension.\n   */\n  function imageTypeToExtension(value) {\n    var extension = isImageType(value) ? value.substr(6) : '';\n    if (extension === 'jpeg') {\n      extension = 'jpg';\n    }\n    return \".\".concat(extension);\n  }\n  var fromCharCode = String.fromCharCode;\n\n  /**\n   * Get string from char code in data view.\n   * @param {DataView} dataView - The data view for read.\n   * @param {number} start - The start index.\n   * @param {number} length - The read length.\n   * @returns {string} The read result.\n   */\n  function getStringFromCharCode(dataView, start, length) {\n    var str = '';\n    var i;\n    length += start;\n    for (i = start; i < length; i += 1) {\n      str += fromCharCode(dataView.getUint8(i));\n    }\n    return str;\n  }\n  var btoa = WINDOW.btoa;\n\n  /**\n   * Transform array buffer to Data URL.\n   * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n   * @param {string} mimeType - The mime type of the Data URL.\n   * @returns {string} The result Data URL.\n   */\n  function arrayBufferToDataURL(arrayBuffer, mimeType) {\n    var chunks = [];\n    var chunkSize = 8192;\n    var uint8 = new Uint8Array(arrayBuffer);\n    while (uint8.length > 0) {\n      // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n      // eslint-disable-next-line prefer-spread\n      chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n      uint8 = uint8.subarray(chunkSize);\n    }\n    return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n  }\n\n  /**\n   * Get orientation value from given array buffer.\n   * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n   * @returns {number} The read orientation value.\n   */\n  function resetAndGetOrientation(arrayBuffer) {\n    var dataView = new DataView(arrayBuffer);\n    var orientation;\n\n    // Ignores range error when the image does not have correct Exif information\n    try {\n      var littleEndian;\n      var app1Start;\n      var ifdStart;\n\n      // Only handle JPEG image (start by 0xFFD8)\n      if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n        var length = dataView.byteLength;\n        var offset = 2;\n        while (offset + 1 < length) {\n          if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n            app1Start = offset;\n            break;\n          }\n          offset += 1;\n        }\n      }\n      if (app1Start) {\n        var exifIDCode = app1Start + 4;\n        var tiffOffset = app1Start + 10;\n        if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n          var endianness = dataView.getUint16(tiffOffset);\n          littleEndian = endianness === 0x4949;\n          if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n            if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n              var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n              if (firstIFDOffset >= 0x00000008) {\n                ifdStart = tiffOffset + firstIFDOffset;\n              }\n            }\n          }\n        }\n      }\n      if (ifdStart) {\n        var _length = dataView.getUint16(ifdStart, littleEndian);\n        var _offset;\n        var i;\n        for (i = 0; i < _length; i += 1) {\n          _offset = ifdStart + i * 12 + 2;\n          if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n            // 8 is the offset of the current tag's value\n            _offset += 8;\n\n            // Get the original orientation value\n            orientation = dataView.getUint16(_offset, littleEndian);\n\n            // Override the orientation with its default value\n            dataView.setUint16(_offset, 1, littleEndian);\n            break;\n          }\n        }\n      }\n    } catch (e) {\n      orientation = 1;\n    }\n    return orientation;\n  }\n\n  /**\n   * Parse Exif Orientation value.\n   * @param {number} orientation - The orientation to parse.\n   * @returns {Object} The parsed result.\n   */\n  function parseOrientation(orientation) {\n    var rotate = 0;\n    var scaleX = 1;\n    var scaleY = 1;\n    switch (orientation) {\n      // Flip horizontal\n      case 2:\n        scaleX = -1;\n        break;\n\n      // Rotate left 180\u00B0\n      case 3:\n        rotate = -180;\n        break;\n\n      // Flip vertical\n      case 4:\n        scaleY = -1;\n        break;\n\n      // Flip vertical and rotate right 90\u00B0\n      case 5:\n        rotate = 90;\n        scaleY = -1;\n        break;\n\n      // Rotate right 90\u00B0\n      case 6:\n        rotate = 90;\n        break;\n\n      // Flip horizontal and rotate right 90\u00B0\n      case 7:\n        rotate = 90;\n        scaleX = -1;\n        break;\n\n      // Rotate left 90\u00B0\n      case 8:\n        rotate = -90;\n        break;\n    }\n    return {\n      rotate: rotate,\n      scaleX: scaleX,\n      scaleY: scaleY\n    };\n  }\n  var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n  /**\n   * Normalize decimal number.\n   * Check out {@link https://0.30000000000000004.com/}\n   * @param {number} value - The value to normalize.\n   * @param {number} [times=100000000000] - The times for normalizing.\n   * @returns {number} Returns the normalized number.\n   */\n  function normalizeDecimalNumber(value) {\n    var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n    return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n  }\n\n  /**\n   * Get the max sizes in a rectangle under the given aspect ratio.\n   * @param {Object} data - The original sizes.\n   * @param {string} [type='contain'] - The adjust type.\n   * @returns {Object} The result sizes.\n   */\n  function getAdjustedSizes(_ref) {\n    var aspectRatio = _ref.aspectRatio,\n      height = _ref.height,\n      width = _ref.width;\n    var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'none';\n    var isValidWidth = isPositiveNumber(width);\n    var isValidHeight = isPositiveNumber(height);\n    if (isValidWidth && isValidHeight) {\n      var adjustedWidth = height * aspectRatio;\n      if ((type === 'contain' || type === 'none') && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n        height = width / aspectRatio;\n      } else {\n        width = height * aspectRatio;\n      }\n    } else if (isValidWidth) {\n      height = width / aspectRatio;\n    } else if (isValidHeight) {\n      width = height * aspectRatio;\n    }\n    return {\n      width: width,\n      height: height\n    };\n  }\n\n  /**\n   * Get Exif information from the given array buffer.\n   * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n   * @returns {Array} The read Exif information.\n   */\n  function getExif(arrayBuffer) {\n    var array = toArray(new Uint8Array(arrayBuffer));\n    var length = array.length;\n    var segments = [];\n    var start = 0;\n    while (start + 3 < length) {\n      var value = array[start];\n      var next = array[start + 1];\n\n      // SOS (Start of Scan)\n      if (value === 0xFF && next === 0xDA) {\n        break;\n      }\n\n      // SOI (Start of Image)\n      if (value === 0xFF && next === 0xD8) {\n        start += 2;\n      } else {\n        var offset = array[start + 2] * 256 + array[start + 3];\n        var end = start + offset + 2;\n        var segment = array.slice(start, end);\n        segments.push(segment);\n        start = end;\n      }\n    }\n    return segments.reduce(function (exifArray, current) {\n      if (current[0] === 0xFF && current[1] === 0xE1) {\n        return exifArray.concat(current);\n      }\n      return exifArray;\n    }, []);\n  }\n\n  /**\n   * Insert Exif information into the given array buffer.\n   * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n   * @param {Array} exifArray - The Exif information to insert.\n   * @returns {ArrayBuffer} The transformed array buffer.\n   */\n  function insertExif(arrayBuffer, exifArray) {\n    var array = toArray(new Uint8Array(arrayBuffer));\n    if (array[2] !== 0xFF || array[3] !== 0xE0) {\n      return arrayBuffer;\n    }\n    var app0Length = array[4] * 256 + array[5];\n    var newArrayBuffer = [0xFF, 0xD8].concat(exifArray, array.slice(4 + app0Length));\n    return new Uint8Array(newArrayBuffer);\n  }\n\n  var ArrayBuffer$1 = WINDOW.ArrayBuffer,\n    FileReader = WINDOW.FileReader;\n  var URL = WINDOW.URL || WINDOW.webkitURL;\n  var REGEXP_EXTENSION = /\\.\\w+$/;\n  var AnotherCompressor = WINDOW.Compressor;\n\n  /**\n   * Creates a new image compressor.\n   * @class\n   */\n  var Compressor = /*#__PURE__*/function () {\n    /**\n     * The constructor of Compressor.\n     * @param {File|Blob} file - The target image file for compressing.\n     * @param {Object} [options] - The options for compressing.\n     */\n    function Compressor(file, options) {\n      _classCallCheck(this, Compressor);\n      this.file = file;\n      this.exif = [];\n      this.image = new Image();\n      this.options = _objectSpread2(_objectSpread2({}, DEFAULTS), options);\n      this.aborted = false;\n      this.result = null;\n      this.init();\n    }\n    _createClass(Compressor, [{\n      key: \"init\",\n      value: function init() {\n        var _this = this;\n        var file = this.file,\n          options = this.options;\n        if (!isBlob(file)) {\n          this.fail(new Error('The first argument must be a File or Blob object.'));\n          return;\n        }\n        var mimeType = file.type;\n        if (!isImageType(mimeType)) {\n          this.fail(new Error('The first argument must be an image File or Blob object.'));\n          return;\n        }\n        if (!URL || !FileReader) {\n          this.fail(new Error('The current browser does not support image compression.'));\n          return;\n        }\n        if (!ArrayBuffer$1) {\n          options.checkOrientation = false;\n          options.retainExif = false;\n        }\n        var isJPEGImage = mimeType === 'image/jpeg';\n        var checkOrientation = isJPEGImage && options.checkOrientation;\n        var retainExif = isJPEGImage && options.retainExif;\n        if (URL && !checkOrientation && !retainExif) {\n          this.load({\n            url: URL.createObjectURL(file)\n          });\n        } else {\n          var reader = new FileReader();\n          this.reader = reader;\n          reader.onload = function (_ref) {\n            var target = _ref.target;\n            var result = target.result;\n            var data = {};\n            var orientation = 1;\n            if (checkOrientation) {\n              // Reset the orientation value to its default value 1\n              // as some iOS browsers will render image with its orientation\n              orientation = resetAndGetOrientation(result);\n              if (orientation > 1) {\n                _extends(data, parseOrientation(orientation));\n              }\n            }\n            if (retainExif) {\n              _this.exif = getExif(result);\n            }\n            if (checkOrientation || retainExif) {\n              if (!URL\n\n              // Generate a new URL with the default orientation value 1.\n              || orientation > 1) {\n                data.url = arrayBufferToDataURL(result, mimeType);\n              } else {\n                data.url = URL.createObjectURL(file);\n              }\n            } else {\n              data.url = result;\n            }\n            _this.load(data);\n          };\n          reader.onabort = function () {\n            _this.fail(new Error('Aborted to read the image with FileReader.'));\n          };\n          reader.onerror = function () {\n            _this.fail(new Error('Failed to read the image with FileReader.'));\n          };\n          reader.onloadend = function () {\n            _this.reader = null;\n          };\n          if (checkOrientation || retainExif) {\n            reader.readAsArrayBuffer(file);\n          } else {\n            reader.readAsDataURL(file);\n          }\n        }\n      }\n    }, {\n      key: \"load\",\n      value: function load(data) {\n        var _this2 = this;\n        var file = this.file,\n          image = this.image;\n        image.onload = function () {\n          _this2.draw(_objectSpread2(_objectSpread2({}, data), {}, {\n            naturalWidth: image.naturalWidth,\n            naturalHeight: image.naturalHeight\n          }));\n        };\n        image.onabort = function () {\n          _this2.fail(new Error('Aborted to load the image.'));\n        };\n        image.onerror = function () {\n          _this2.fail(new Error('Failed to load the image.'));\n        };\n\n        // Match all browsers that use WebKit as the layout engine in iOS devices,\n        // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n        if (WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent)) {\n          // Fix the `The operation is insecure` error (#57)\n          image.crossOrigin = 'anonymous';\n        }\n        image.alt = file.name;\n        image.src = data.url;\n      }\n    }, {\n      key: \"draw\",\n      value: function draw(_ref2) {\n        var _this3 = this;\n        var naturalWidth = _ref2.naturalWidth,\n          naturalHeight = _ref2.naturalHeight,\n          _ref2$rotate = _ref2.rotate,\n          rotate = _ref2$rotate === void 0 ? 0 : _ref2$rotate,\n          _ref2$scaleX = _ref2.scaleX,\n          scaleX = _ref2$scaleX === void 0 ? 1 : _ref2$scaleX,\n          _ref2$scaleY = _ref2.scaleY,\n          scaleY = _ref2$scaleY === void 0 ? 1 : _ref2$scaleY;\n        var file = this.file,\n          image = this.image,\n          options = this.options;\n        var canvas = document.createElement('canvas');\n        var context = canvas.getContext('2d');\n        var is90DegreesRotated = Math.abs(rotate) % 180 === 90;\n        var resizable = (options.resize === 'contain' || options.resize === 'cover') && isPositiveNumber(options.width) && isPositiveNumber(options.height);\n        var maxWidth = Math.max(options.maxWidth, 0) || Infinity;\n        var maxHeight = Math.max(options.maxHeight, 0) || Infinity;\n        var minWidth = Math.max(options.minWidth, 0) || 0;\n        var minHeight = Math.max(options.minHeight, 0) || 0;\n        var aspectRatio = naturalWidth / naturalHeight;\n        var width = options.width,\n          height = options.height;\n        if (is90DegreesRotated) {\n          var _ref3 = [maxHeight, maxWidth];\n          maxWidth = _ref3[0];\n          maxHeight = _ref3[1];\n          var _ref4 = [minHeight, minWidth];\n          minWidth = _ref4[0];\n          minHeight = _ref4[1];\n          var _ref5 = [height, width];\n          width = _ref5[0];\n          height = _ref5[1];\n        }\n        if (resizable) {\n          aspectRatio = width / height;\n        }\n        var _getAdjustedSizes = getAdjustedSizes({\n          aspectRatio: aspectRatio,\n          width: maxWidth,\n          height: maxHeight\n        }, 'contain');\n        maxWidth = _getAdjustedSizes.width;\n        maxHeight = _getAdjustedSizes.height;\n        var _getAdjustedSizes2 = getAdjustedSizes({\n          aspectRatio: aspectRatio,\n          width: minWidth,\n          height: minHeight\n        }, 'cover');\n        minWidth = _getAdjustedSizes2.width;\n        minHeight = _getAdjustedSizes2.height;\n        if (resizable) {\n          var _getAdjustedSizes3 = getAdjustedSizes({\n            aspectRatio: aspectRatio,\n            width: width,\n            height: height\n          }, options.resize);\n          width = _getAdjustedSizes3.width;\n          height = _getAdjustedSizes3.height;\n        } else {\n          var _getAdjustedSizes4 = getAdjustedSizes({\n            aspectRatio: aspectRatio,\n            width: width,\n            height: height\n          });\n          var _getAdjustedSizes4$wi = _getAdjustedSizes4.width;\n          width = _getAdjustedSizes4$wi === void 0 ? naturalWidth : _getAdjustedSizes4$wi;\n          var _getAdjustedSizes4$he = _getAdjustedSizes4.height;\n          height = _getAdjustedSizes4$he === void 0 ? naturalHeight : _getAdjustedSizes4$he;\n        }\n        width = Math.floor(normalizeDecimalNumber(Math.min(Math.max(width, minWidth), maxWidth)));\n        height = Math.floor(normalizeDecimalNumber(Math.min(Math.max(height, minHeight), maxHeight)));\n        var destX = -width / 2;\n        var destY = -height / 2;\n        var destWidth = width;\n        var destHeight = height;\n        var params = [];\n        if (resizable) {\n          var srcX = 0;\n          var srcY = 0;\n          var srcWidth = naturalWidth;\n          var srcHeight = naturalHeight;\n          var _getAdjustedSizes5 = getAdjustedSizes({\n            aspectRatio: aspectRatio,\n            width: naturalWidth,\n            height: naturalHeight\n          }, {\n            contain: 'cover',\n            cover: 'contain'\n          }[options.resize]);\n          srcWidth = _getAdjustedSizes5.width;\n          srcHeight = _getAdjustedSizes5.height;\n          srcX = (naturalWidth - srcWidth) / 2;\n          srcY = (naturalHeight - srcHeight) / 2;\n          params.push(srcX, srcY, srcWidth, srcHeight);\n        }\n        params.push(destX, destY, destWidth, destHeight);\n        if (is90DegreesRotated) {\n          var _ref6 = [height, width];\n          width = _ref6[0];\n          height = _ref6[1];\n        }\n        canvas.width = width;\n        canvas.height = height;\n        if (!isImageType(options.mimeType)) {\n          options.mimeType = file.type;\n        }\n        var fillStyle = 'transparent';\n\n        // Converts PNG files over the `convertSize` to JPEGs.\n        if (file.size > options.convertSize && options.convertTypes.indexOf(options.mimeType) >= 0) {\n          options.mimeType = 'image/jpeg';\n        }\n        var isJPEGImage = options.mimeType === 'image/jpeg';\n        if (isJPEGImage) {\n          fillStyle = '#fff';\n        }\n\n        // Override the default fill color (#000, black)\n        context.fillStyle = fillStyle;\n        context.fillRect(0, 0, width, height);\n        if (options.beforeDraw) {\n          options.beforeDraw.call(this, context, canvas);\n        }\n        if (this.aborted) {\n          return;\n        }\n        context.save();\n        context.translate(width / 2, height / 2);\n        context.rotate(rotate * Math.PI / 180);\n        context.scale(scaleX, scaleY);\n        context.drawImage.apply(context, [image].concat(params));\n        context.restore();\n        if (options.drew) {\n          options.drew.call(this, context, canvas);\n        }\n        if (this.aborted) {\n          return;\n        }\n        var callback = function callback(blob) {\n          if (!_this3.aborted) {\n            var done = function done(result) {\n              return _this3.done({\n                naturalWidth: naturalWidth,\n                naturalHeight: naturalHeight,\n                result: result\n              });\n            };\n            if (blob && isJPEGImage && options.retainExif && _this3.exif && _this3.exif.length > 0) {\n              var next = function next(arrayBuffer) {\n                return done(toBlob(arrayBufferToDataURL(insertExif(arrayBuffer, _this3.exif), options.mimeType)));\n              };\n              if (blob.arrayBuffer) {\n                blob.arrayBuffer().then(next).catch(function () {\n                  _this3.fail(new Error('Failed to read the compressed image with Blob.arrayBuffer().'));\n                });\n              } else {\n                var reader = new FileReader();\n                _this3.reader = reader;\n                reader.onload = function (_ref7) {\n                  var target = _ref7.target;\n                  next(target.result);\n                };\n                reader.onabort = function () {\n                  _this3.fail(new Error('Aborted to read the compressed image with FileReader.'));\n                };\n                reader.onerror = function () {\n                  _this3.fail(new Error('Failed to read the compressed image with FileReader.'));\n                };\n                reader.onloadend = function () {\n                  _this3.reader = null;\n                };\n                reader.readAsArrayBuffer(blob);\n              }\n            } else {\n              done(blob);\n            }\n          }\n        };\n        if (canvas.toBlob) {\n          canvas.toBlob(callback, options.mimeType, options.quality);\n        } else {\n          callback(toBlob(canvas.toDataURL(options.mimeType, options.quality)));\n        }\n      }\n    }, {\n      key: \"done\",\n      value: function done(_ref8) {\n        var naturalWidth = _ref8.naturalWidth,\n          naturalHeight = _ref8.naturalHeight,\n          result = _ref8.result;\n        var file = this.file,\n          image = this.image,\n          options = this.options;\n        if (URL && image.src.indexOf('blob:') === 0) {\n          URL.revokeObjectURL(image.src);\n        }\n        if (result) {\n          // Returns original file if the result is greater than it and without size related options\n          if (options.strict && !options.retainExif && result.size > file.size && options.mimeType === file.type && !(options.width > naturalWidth || options.height > naturalHeight || options.minWidth > naturalWidth || options.minHeight > naturalHeight || options.maxWidth < naturalWidth || options.maxHeight < naturalHeight)) {\n            result = file;\n          } else {\n            var date = new Date();\n            result.lastModified = date.getTime();\n            result.lastModifiedDate = date;\n            result.name = file.name;\n\n            // Convert the extension to match its type\n            if (result.name && result.type !== file.type) {\n              result.name = result.name.replace(REGEXP_EXTENSION, imageTypeToExtension(result.type));\n            }\n          }\n        } else {\n          // Returns original file if the result is null in some cases.\n          result = file;\n        }\n        this.result = result;\n        if (options.success) {\n          options.success.call(this, result);\n        }\n      }\n    }, {\n      key: \"fail\",\n      value: function fail(err) {\n        var options = this.options;\n        if (options.error) {\n          options.error.call(this, err);\n        } else {\n          throw err;\n        }\n      }\n    }, {\n      key: \"abort\",\n      value: function abort() {\n        if (!this.aborted) {\n          this.aborted = true;\n          if (this.reader) {\n            this.reader.abort();\n          } else if (!this.image.complete) {\n            this.image.onload = null;\n            this.image.onabort();\n          } else {\n            this.fail(new Error('The compression process has been aborted.'));\n          }\n        }\n      }\n\n      /**\n       * Get the no conflict compressor class.\n       * @returns {Compressor} The compressor class.\n       */\n    }], [{\n      key: \"noConflict\",\n      value: function noConflict() {\n        window.Compressor = AnotherCompressor;\n        return Compressor;\n      }\n\n      /**\n       * Change the default options.\n       * @param {Object} options - The new default options.\n       */\n    }, {\n      key: \"setDefaults\",\n      value: function setDefaults(options) {\n        _extends(DEFAULTS, options);\n      }\n    }]);\n    return Compressor;\n  }();\n\n  return Compressor;\n\n}));\n", "/*!\n * Cropper.js v1.6.2\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2024-04-21T07:43:05.335Z\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, (function () { 'use strict';\n\n  function 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  }\n  function _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  }\n  function _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  }\n  function _toPropertyKey(t) {\n    var i = _toPrimitive(t, \"string\");\n    return \"symbol\" == typeof i ? i : i + \"\";\n  }\n  function _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  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n    }\n  }\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    Object.defineProperty(Constructor, \"prototype\", {\n      writable: false\n    });\n    return Constructor;\n  }\n  function _defineProperty(obj, key, value) {\n    key = _toPropertyKey(key);\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n    return obj;\n  }\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n    return arr2;\n  }\n  function _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  }\n\n  var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  var WINDOW = IS_BROWSER ? window : {};\n  var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n  var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n  var NAMESPACE = 'cropper';\n\n  // Actions\n  var ACTION_ALL = 'all';\n  var ACTION_CROP = 'crop';\n  var ACTION_MOVE = 'move';\n  var ACTION_ZOOM = 'zoom';\n  var ACTION_EAST = 'e';\n  var ACTION_WEST = 'w';\n  var ACTION_SOUTH = 's';\n  var ACTION_NORTH = 'n';\n  var ACTION_NORTH_EAST = 'ne';\n  var ACTION_NORTH_WEST = 'nw';\n  var ACTION_SOUTH_EAST = 'se';\n  var ACTION_SOUTH_WEST = 'sw';\n\n  // Classes\n  var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n  var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n  var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n  var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n  var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n  var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n  var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n  // Data keys\n  var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n  var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n  // Drag modes\n  var DRAG_MODE_CROP = 'crop';\n  var DRAG_MODE_MOVE = 'move';\n  var DRAG_MODE_NONE = 'none';\n\n  // Events\n  var EVENT_CROP = 'crop';\n  var EVENT_CROP_END = 'cropend';\n  var EVENT_CROP_MOVE = 'cropmove';\n  var EVENT_CROP_START = 'cropstart';\n  var EVENT_DBLCLICK = 'dblclick';\n  var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n  var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n  var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n  var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n  var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n  var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n  var EVENT_READY = 'ready';\n  var EVENT_RESIZE = 'resize';\n  var EVENT_WHEEL = 'wheel';\n  var EVENT_ZOOM = 'zoom';\n\n  // Mime types\n  var MIME_TYPE_JPEG = 'image/jpeg';\n\n  // RegExps\n  var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n  var REGEXP_DATA_URL = /^data:/;\n  var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n  var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n  // Misc\n  // Inspired by the default width and height of a canvas element.\n  var MIN_CONTAINER_WIDTH = 200;\n  var MIN_CONTAINER_HEIGHT = 100;\n\n  var DEFAULTS = {\n    // Define the view mode of the cropper\n    viewMode: 0,\n    // 0, 1, 2, 3\n\n    // Define the dragging mode of the cropper\n    dragMode: DRAG_MODE_CROP,\n    // 'crop', 'move' or 'none'\n\n    // Define the initial aspect ratio of the crop box\n    initialAspectRatio: NaN,\n    // Define the aspect ratio of the crop box\n    aspectRatio: NaN,\n    // An object with the previous cropping result data\n    data: null,\n    // A selector for adding extra containers to preview\n    preview: '',\n    // Re-render the cropper when resize the window\n    responsive: true,\n    // Restore the cropped area after resize the window\n    restore: true,\n    // Check if the current image is a cross-origin image\n    checkCrossOrigin: true,\n    // Check the current image's Exif Orientation information\n    checkOrientation: true,\n    // Show the black modal\n    modal: true,\n    // Show the dashed lines for guiding\n    guides: true,\n    // Show the center indicator for guiding\n    center: true,\n    // Show the white modal to highlight the crop box\n    highlight: true,\n    // Show the grid background\n    background: true,\n    // Enable to crop the image automatically when initialize\n    autoCrop: true,\n    // Define the percentage of automatic cropping area when initializes\n    autoCropArea: 0.8,\n    // Enable to move the image\n    movable: true,\n    // Enable to rotate the image\n    rotatable: true,\n    // Enable to scale the image\n    scalable: true,\n    // Enable to zoom the image\n    zoomable: true,\n    // Enable to zoom the image by dragging touch\n    zoomOnTouch: true,\n    // Enable to zoom the image by wheeling mouse\n    zoomOnWheel: true,\n    // Define zoom ratio when zoom the image by wheeling mouse\n    wheelZoomRatio: 0.1,\n    // Enable to move the crop box\n    cropBoxMovable: true,\n    // Enable to resize the crop box\n    cropBoxResizable: true,\n    // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n    toggleDragModeOnDblclick: true,\n    // Size limitation\n    minCanvasWidth: 0,\n    minCanvasHeight: 0,\n    minCropBoxWidth: 0,\n    minCropBoxHeight: 0,\n    minContainerWidth: MIN_CONTAINER_WIDTH,\n    minContainerHeight: MIN_CONTAINER_HEIGHT,\n    // Shortcuts of events\n    ready: null,\n    cropstart: null,\n    cropmove: null,\n    cropend: null,\n    crop: null,\n    zoom: null\n  };\n\n  var TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n  /**\n   * Check if the given value is not a number.\n   */\n  var isNaN = Number.isNaN || WINDOW.isNaN;\n\n  /**\n   * Check if the given value is a number.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n   */\n  function isNumber(value) {\n    return typeof value === 'number' && !isNaN(value);\n  }\n\n  /**\n   * Check if the given value is a positive number.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n   */\n  var isPositiveNumber = function isPositiveNumber(value) {\n    return value > 0 && value < Infinity;\n  };\n\n  /**\n   * Check if the given value is undefined.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n   */\n  function isUndefined(value) {\n    return typeof value === 'undefined';\n  }\n\n  /**\n   * Check if the given value is an object.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n   */\n  function isObject(value) {\n    return _typeof(value) === 'object' && value !== null;\n  }\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n  /**\n   * Check if the given value is a plain object.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n   */\n  function isPlainObject(value) {\n    if (!isObject(value)) {\n      return false;\n    }\n    try {\n      var _constructor = value.constructor;\n      var prototype = _constructor.prototype;\n      return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n    } catch (error) {\n      return false;\n    }\n  }\n\n  /**\n   * Check if the given value is a function.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n   */\n  function isFunction(value) {\n    return typeof value === 'function';\n  }\n  var slice = Array.prototype.slice;\n\n  /**\n   * Convert array-like or iterable object to an array.\n   * @param {*} value - The value to convert.\n   * @returns {Array} Returns a new array.\n   */\n  function toArray(value) {\n    return Array.from ? Array.from(value) : slice.call(value);\n  }\n\n  /**\n   * Iterate the given data.\n   * @param {*} data - The data to iterate.\n   * @param {Function} callback - The process function for each element.\n   * @returns {*} The original data.\n   */\n  function forEach(data, callback) {\n    if (data && isFunction(callback)) {\n      if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n        toArray(data).forEach(function (value, key) {\n          callback.call(data, value, key, data);\n        });\n      } else if (isObject(data)) {\n        Object.keys(data).forEach(function (key) {\n          callback.call(data, data[key], key, data);\n        });\n      }\n    }\n    return data;\n  }\n\n  /**\n   * Extend the given object.\n   * @param {*} target - The target object to extend.\n   * @param {*} args - The rest objects for merging to the target object.\n   * @returns {Object} The extended object.\n   */\n  var assign = Object.assign || function assign(target) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    if (isObject(target) && args.length > 0) {\n      args.forEach(function (arg) {\n        if (isObject(arg)) {\n          Object.keys(arg).forEach(function (key) {\n            target[key] = arg[key];\n          });\n        }\n      });\n    }\n    return target;\n  };\n  var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n  /**\n   * Normalize decimal number.\n   * Check out {@link https://0.30000000000000004.com/}\n   * @param {number} value - The value to normalize.\n   * @param {number} [times=100000000000] - The times for normalizing.\n   * @returns {number} Returns the normalized number.\n   */\n  function normalizeDecimalNumber(value) {\n    var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n    return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n  }\n  var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n  /**\n   * Apply styles to the given element.\n   * @param {Element} element - The target element.\n   * @param {Object} styles - The styles for applying.\n   */\n  function setStyle(element, styles) {\n    var style = element.style;\n    forEach(styles, function (value, property) {\n      if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n        value = \"\".concat(value, \"px\");\n      }\n      style[property] = value;\n    });\n  }\n\n  /**\n   * Check if the given element has a special class.\n   * @param {Element} element - The element to check.\n   * @param {string} value - The class to search.\n   * @returns {boolean} Returns `true` if the special class was found.\n   */\n  function hasClass(element, value) {\n    return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n  }\n\n  /**\n   * Add classes to the given element.\n   * @param {Element} element - The target element.\n   * @param {string} value - The classes to be added.\n   */\n  function addClass(element, value) {\n    if (!value) {\n      return;\n    }\n    if (isNumber(element.length)) {\n      forEach(element, function (elem) {\n        addClass(elem, value);\n      });\n      return;\n    }\n    if (element.classList) {\n      element.classList.add(value);\n      return;\n    }\n    var className = element.className.trim();\n    if (!className) {\n      element.className = value;\n    } else if (className.indexOf(value) < 0) {\n      element.className = \"\".concat(className, \" \").concat(value);\n    }\n  }\n\n  /**\n   * Remove classes from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} value - The classes to be removed.\n   */\n  function removeClass(element, value) {\n    if (!value) {\n      return;\n    }\n    if (isNumber(element.length)) {\n      forEach(element, function (elem) {\n        removeClass(elem, value);\n      });\n      return;\n    }\n    if (element.classList) {\n      element.classList.remove(value);\n      return;\n    }\n    if (element.className.indexOf(value) >= 0) {\n      element.className = element.className.replace(value, '');\n    }\n  }\n\n  /**\n   * Add or remove classes from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} value - The classes to be toggled.\n   * @param {boolean} added - Add only.\n   */\n  function toggleClass(element, value, added) {\n    if (!value) {\n      return;\n    }\n    if (isNumber(element.length)) {\n      forEach(element, function (elem) {\n        toggleClass(elem, value, added);\n      });\n      return;\n    }\n\n    // IE10-11 doesn't support the second parameter of `classList.toggle`\n    if (added) {\n      addClass(element, value);\n    } else {\n      removeClass(element, value);\n    }\n  }\n  var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n  /**\n   * Transform the given string from camelCase to kebab-case\n   * @param {string} value - The value to transform.\n   * @returns {string} The transformed value.\n   */\n  function toParamCase(value) {\n    return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n  }\n\n  /**\n   * Get data from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} name - The data key to get.\n   * @returns {string} The data value.\n   */\n  function getData(element, name) {\n    if (isObject(element[name])) {\n      return element[name];\n    }\n    if (element.dataset) {\n      return element.dataset[name];\n    }\n    return element.getAttribute(\"data-\".concat(toParamCase(name)));\n  }\n\n  /**\n   * Set data to the given element.\n   * @param {Element} element - The target element.\n   * @param {string} name - The data key to set.\n   * @param {string} data - The data value.\n   */\n  function setData(element, name, data) {\n    if (isObject(data)) {\n      element[name] = data;\n    } else if (element.dataset) {\n      element.dataset[name] = data;\n    } else {\n      element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n    }\n  }\n\n  /**\n   * Remove data from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} name - The data key to remove.\n   */\n  function removeData(element, name) {\n    if (isObject(element[name])) {\n      try {\n        delete element[name];\n      } catch (error) {\n        element[name] = undefined;\n      }\n    } else if (element.dataset) {\n      // #128 Safari not allows to delete dataset property\n      try {\n        delete element.dataset[name];\n      } catch (error) {\n        element.dataset[name] = undefined;\n      }\n    } else {\n      element.removeAttribute(\"data-\".concat(toParamCase(name)));\n    }\n  }\n  var REGEXP_SPACES = /\\s\\s*/;\n  var onceSupported = function () {\n    var supported = false;\n    if (IS_BROWSER) {\n      var once = false;\n      var listener = function listener() {};\n      var options = Object.defineProperty({}, 'once', {\n        get: function get() {\n          supported = true;\n          return once;\n        },\n        /**\n         * This setter can fix a `TypeError` in strict mode\n         * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n         * @param {boolean} value - The value to set\n         */\n        set: function set(value) {\n          once = value;\n        }\n      });\n      WINDOW.addEventListener('test', listener, options);\n      WINDOW.removeEventListener('test', listener, options);\n    }\n    return supported;\n  }();\n\n  /**\n   * Remove event listener from the target element.\n   * @param {Element} element - The event target.\n   * @param {string} type - The event type(s).\n   * @param {Function} listener - The event listener.\n   * @param {Object} options - The event options.\n   */\n  function removeListener(element, type, listener) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var handler = listener;\n    type.trim().split(REGEXP_SPACES).forEach(function (event) {\n      if (!onceSupported) {\n        var listeners = element.listeners;\n        if (listeners && listeners[event] && listeners[event][listener]) {\n          handler = listeners[event][listener];\n          delete listeners[event][listener];\n          if (Object.keys(listeners[event]).length === 0) {\n            delete listeners[event];\n          }\n          if (Object.keys(listeners).length === 0) {\n            delete element.listeners;\n          }\n        }\n      }\n      element.removeEventListener(event, handler, options);\n    });\n  }\n\n  /**\n   * Add event listener to the target element.\n   * @param {Element} element - The event target.\n   * @param {string} type - The event type(s).\n   * @param {Function} listener - The event listener.\n   * @param {Object} options - The event options.\n   */\n  function addListener(element, type, listener) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var _handler = listener;\n    type.trim().split(REGEXP_SPACES).forEach(function (event) {\n      if (options.once && !onceSupported) {\n        var _element$listeners = element.listeners,\n          listeners = _element$listeners === void 0 ? {} : _element$listeners;\n        _handler = function handler() {\n          delete listeners[event][listener];\n          element.removeEventListener(event, _handler, options);\n          for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            args[_key2] = arguments[_key2];\n          }\n          listener.apply(element, args);\n        };\n        if (!listeners[event]) {\n          listeners[event] = {};\n        }\n        if (listeners[event][listener]) {\n          element.removeEventListener(event, listeners[event][listener], options);\n        }\n        listeners[event][listener] = _handler;\n        element.listeners = listeners;\n      }\n      element.addEventListener(event, _handler, options);\n    });\n  }\n\n  /**\n   * Dispatch event on the target element.\n   * @param {Element} element - The event target.\n   * @param {string} type - The event type(s).\n   * @param {Object} data - The additional event data.\n   * @returns {boolean} Indicate if the event is default prevented or not.\n   */\n  function dispatchEvent(element, type, data) {\n    var event;\n\n    // Event and CustomEvent on IE9-11 are global objects, not constructors\n    if (isFunction(Event) && isFunction(CustomEvent)) {\n      event = new CustomEvent(type, {\n        detail: data,\n        bubbles: true,\n        cancelable: true\n      });\n    } else {\n      event = document.createEvent('CustomEvent');\n      event.initCustomEvent(type, true, true, data);\n    }\n    return element.dispatchEvent(event);\n  }\n\n  /**\n   * Get the offset base on the document.\n   * @param {Element} element - The target element.\n   * @returns {Object} The offset data.\n   */\n  function getOffset(element) {\n    var box = element.getBoundingClientRect();\n    return {\n      left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n      top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n    };\n  }\n  var location = WINDOW.location;\n  var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n  /**\n   * Check if the given URL is a cross origin URL.\n   * @param {string} url - The target URL.\n   * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n   */\n  function isCrossOriginURL(url) {\n    var parts = url.match(REGEXP_ORIGINS);\n    return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n  }\n\n  /**\n   * Add timestamp to the given URL.\n   * @param {string} url - The target URL.\n   * @returns {string} The result URL.\n   */\n  function addTimestamp(url) {\n    var timestamp = \"timestamp=\".concat(new Date().getTime());\n    return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n  }\n\n  /**\n   * Get transforms base on the given object.\n   * @param {Object} obj - The target object.\n   * @returns {string} A string contains transform values.\n   */\n  function getTransforms(_ref) {\n    var rotate = _ref.rotate,\n      scaleX = _ref.scaleX,\n      scaleY = _ref.scaleY,\n      translateX = _ref.translateX,\n      translateY = _ref.translateY;\n    var values = [];\n    if (isNumber(translateX) && translateX !== 0) {\n      values.push(\"translateX(\".concat(translateX, \"px)\"));\n    }\n    if (isNumber(translateY) && translateY !== 0) {\n      values.push(\"translateY(\".concat(translateY, \"px)\"));\n    }\n\n    // Rotate should come first before scale to match orientation transform\n    if (isNumber(rotate) && rotate !== 0) {\n      values.push(\"rotate(\".concat(rotate, \"deg)\"));\n    }\n    if (isNumber(scaleX) && scaleX !== 1) {\n      values.push(\"scaleX(\".concat(scaleX, \")\"));\n    }\n    if (isNumber(scaleY) && scaleY !== 1) {\n      values.push(\"scaleY(\".concat(scaleY, \")\"));\n    }\n    var transform = values.length ? values.join(' ') : 'none';\n    return {\n      WebkitTransform: transform,\n      msTransform: transform,\n      transform: transform\n    };\n  }\n\n  /**\n   * Get the max ratio of a group of pointers.\n   * @param {string} pointers - The target pointers.\n   * @returns {number} The result ratio.\n   */\n  function getMaxZoomRatio(pointers) {\n    var pointers2 = _objectSpread2({}, pointers);\n    var maxRatio = 0;\n    forEach(pointers, function (pointer, pointerId) {\n      delete pointers2[pointerId];\n      forEach(pointers2, function (pointer2) {\n        var x1 = Math.abs(pointer.startX - pointer2.startX);\n        var y1 = Math.abs(pointer.startY - pointer2.startY);\n        var x2 = Math.abs(pointer.endX - pointer2.endX);\n        var y2 = Math.abs(pointer.endY - pointer2.endY);\n        var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n        var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n        var ratio = (z2 - z1) / z1;\n        if (Math.abs(ratio) > Math.abs(maxRatio)) {\n          maxRatio = ratio;\n        }\n      });\n    });\n    return maxRatio;\n  }\n\n  /**\n   * Get a pointer from an event object.\n   * @param {Object} event - The target event object.\n   * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n   * @returns {Object} The result pointer contains start and/or end point coordinates.\n   */\n  function getPointer(_ref2, endOnly) {\n    var pageX = _ref2.pageX,\n      pageY = _ref2.pageY;\n    var end = {\n      endX: pageX,\n      endY: pageY\n    };\n    return endOnly ? end : _objectSpread2({\n      startX: pageX,\n      startY: pageY\n    }, end);\n  }\n\n  /**\n   * Get the center point coordinate of a group of pointers.\n   * @param {Object} pointers - The target pointers.\n   * @returns {Object} The center point coordinate.\n   */\n  function getPointersCenter(pointers) {\n    var pageX = 0;\n    var pageY = 0;\n    var count = 0;\n    forEach(pointers, function (_ref3) {\n      var startX = _ref3.startX,\n        startY = _ref3.startY;\n      pageX += startX;\n      pageY += startY;\n      count += 1;\n    });\n    pageX /= count;\n    pageY /= count;\n    return {\n      pageX: pageX,\n      pageY: pageY\n    };\n  }\n\n  /**\n   * Get the max sizes in a rectangle under the given aspect ratio.\n   * @param {Object} data - The original sizes.\n   * @param {string} [type='contain'] - The adjust type.\n   * @returns {Object} The result sizes.\n   */\n  function getAdjustedSizes(_ref4) {\n    var aspectRatio = _ref4.aspectRatio,\n      height = _ref4.height,\n      width = _ref4.width;\n    var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n    var isValidWidth = isPositiveNumber(width);\n    var isValidHeight = isPositiveNumber(height);\n    if (isValidWidth && isValidHeight) {\n      var adjustedWidth = height * aspectRatio;\n      if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n        height = width / aspectRatio;\n      } else {\n        width = height * aspectRatio;\n      }\n    } else if (isValidWidth) {\n      height = width / aspectRatio;\n    } else if (isValidHeight) {\n      width = height * aspectRatio;\n    }\n    return {\n      width: width,\n      height: height\n    };\n  }\n\n  /**\n   * Get the new sizes of a rectangle after rotated.\n   * @param {Object} data - The original sizes.\n   * @returns {Object} The result sizes.\n   */\n  function getRotatedSizes(_ref5) {\n    var width = _ref5.width,\n      height = _ref5.height,\n      degree = _ref5.degree;\n    degree = Math.abs(degree) % 180;\n    if (degree === 90) {\n      return {\n        width: height,\n        height: width\n      };\n    }\n    var arc = degree % 90 * Math.PI / 180;\n    var sinArc = Math.sin(arc);\n    var cosArc = Math.cos(arc);\n    var newWidth = width * cosArc + height * sinArc;\n    var newHeight = width * sinArc + height * cosArc;\n    return degree > 90 ? {\n      width: newHeight,\n      height: newWidth\n    } : {\n      width: newWidth,\n      height: newHeight\n    };\n  }\n\n  /**\n   * Get a canvas which drew the given image.\n   * @param {HTMLImageElement} image - The image for drawing.\n   * @param {Object} imageData - The image data.\n   * @param {Object} canvasData - The canvas data.\n   * @param {Object} options - The options.\n   * @returns {HTMLCanvasElement} The result canvas.\n   */\n  function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n    var imageAspectRatio = _ref6.aspectRatio,\n      imageNaturalWidth = _ref6.naturalWidth,\n      imageNaturalHeight = _ref6.naturalHeight,\n      _ref6$rotate = _ref6.rotate,\n      rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n      _ref6$scaleX = _ref6.scaleX,\n      scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n      _ref6$scaleY = _ref6.scaleY,\n      scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n    var aspectRatio = _ref7.aspectRatio,\n      naturalWidth = _ref7.naturalWidth,\n      naturalHeight = _ref7.naturalHeight;\n    var _ref8$fillColor = _ref8.fillColor,\n      fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n      _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n      imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n      _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n      imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n      _ref8$maxWidth = _ref8.maxWidth,\n      maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n      _ref8$maxHeight = _ref8.maxHeight,\n      maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n      _ref8$minWidth = _ref8.minWidth,\n      minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n      _ref8$minHeight = _ref8.minHeight,\n      minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n    var canvas = document.createElement('canvas');\n    var context = canvas.getContext('2d');\n    var maxSizes = getAdjustedSizes({\n      aspectRatio: aspectRatio,\n      width: maxWidth,\n      height: maxHeight\n    });\n    var minSizes = getAdjustedSizes({\n      aspectRatio: aspectRatio,\n      width: minWidth,\n      height: minHeight\n    }, 'cover');\n    var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n    var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n    // Note: should always use image's natural sizes for drawing as\n    // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n    var destMaxSizes = getAdjustedSizes({\n      aspectRatio: imageAspectRatio,\n      width: maxWidth,\n      height: maxHeight\n    });\n    var destMinSizes = getAdjustedSizes({\n      aspectRatio: imageAspectRatio,\n      width: minWidth,\n      height: minHeight\n    }, 'cover');\n    var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n    var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n    var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n    canvas.width = normalizeDecimalNumber(width);\n    canvas.height = normalizeDecimalNumber(height);\n    context.fillStyle = fillColor;\n    context.fillRect(0, 0, width, height);\n    context.save();\n    context.translate(width / 2, height / 2);\n    context.rotate(rotate * Math.PI / 180);\n    context.scale(scaleX, scaleY);\n    context.imageSmoothingEnabled = imageSmoothingEnabled;\n    context.imageSmoothingQuality = imageSmoothingQuality;\n    context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n      return Math.floor(normalizeDecimalNumber(param));\n    }))));\n    context.restore();\n    return canvas;\n  }\n  var fromCharCode = String.fromCharCode;\n\n  /**\n   * Get string from char code in data view.\n   * @param {DataView} dataView - The data view for read.\n   * @param {number} start - The start index.\n   * @param {number} length - The read length.\n   * @returns {string} The read result.\n   */\n  function getStringFromCharCode(dataView, start, length) {\n    var str = '';\n    length += start;\n    for (var i = start; i < length; i += 1) {\n      str += fromCharCode(dataView.getUint8(i));\n    }\n    return str;\n  }\n  var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n  /**\n   * Transform Data URL to array buffer.\n   * @param {string} dataURL - The Data URL to transform.\n   * @returns {ArrayBuffer} The result array buffer.\n   */\n  function dataURLToArrayBuffer(dataURL) {\n    var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n    var binary = atob(base64);\n    var arrayBuffer = new ArrayBuffer(binary.length);\n    var uint8 = new Uint8Array(arrayBuffer);\n    forEach(uint8, function (value, i) {\n      uint8[i] = binary.charCodeAt(i);\n    });\n    return arrayBuffer;\n  }\n\n  /**\n   * Transform array buffer to Data URL.\n   * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n   * @param {string} mimeType - The mime type of the Data URL.\n   * @returns {string} The result Data URL.\n   */\n  function arrayBufferToDataURL(arrayBuffer, mimeType) {\n    var chunks = [];\n\n    // Chunk Typed Array for better performance (#435)\n    var chunkSize = 8192;\n    var uint8 = new Uint8Array(arrayBuffer);\n    while (uint8.length > 0) {\n      // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n      // eslint-disable-next-line prefer-spread\n      chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n      uint8 = uint8.subarray(chunkSize);\n    }\n    return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n  }\n\n  /**\n   * Get orientation value from given array buffer.\n   * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n   * @returns {number} The read orientation value.\n   */\n  function resetAndGetOrientation(arrayBuffer) {\n    var dataView = new DataView(arrayBuffer);\n    var orientation;\n\n    // Ignores range error when the image does not have correct Exif information\n    try {\n      var littleEndian;\n      var app1Start;\n      var ifdStart;\n\n      // Only handle JPEG image (start by 0xFFD8)\n      if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n        var length = dataView.byteLength;\n        var offset = 2;\n        while (offset + 1 < length) {\n          if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n            app1Start = offset;\n            break;\n          }\n          offset += 1;\n        }\n      }\n      if (app1Start) {\n        var exifIDCode = app1Start + 4;\n        var tiffOffset = app1Start + 10;\n        if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n          var endianness = dataView.getUint16(tiffOffset);\n          littleEndian = endianness === 0x4949;\n          if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n            if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n              var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n              if (firstIFDOffset >= 0x00000008) {\n                ifdStart = tiffOffset + firstIFDOffset;\n              }\n            }\n          }\n        }\n      }\n      if (ifdStart) {\n        var _length = dataView.getUint16(ifdStart, littleEndian);\n        var _offset;\n        var i;\n        for (i = 0; i < _length; i += 1) {\n          _offset = ifdStart + i * 12 + 2;\n          if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n            // 8 is the offset of the current tag's value\n            _offset += 8;\n\n            // Get the original orientation value\n            orientation = dataView.getUint16(_offset, littleEndian);\n\n            // Override the orientation with its default value\n            dataView.setUint16(_offset, 1, littleEndian);\n            break;\n          }\n        }\n      }\n    } catch (error) {\n      orientation = 1;\n    }\n    return orientation;\n  }\n\n  /**\n   * Parse Exif Orientation value.\n   * @param {number} orientation - The orientation to parse.\n   * @returns {Object} The parsed result.\n   */\n  function parseOrientation(orientation) {\n    var rotate = 0;\n    var scaleX = 1;\n    var scaleY = 1;\n    switch (orientation) {\n      // Flip horizontal\n      case 2:\n        scaleX = -1;\n        break;\n\n      // Rotate left 180\u00B0\n      case 3:\n        rotate = -180;\n        break;\n\n      // Flip vertical\n      case 4:\n        scaleY = -1;\n        break;\n\n      // Flip vertical and rotate right 90\u00B0\n      case 5:\n        rotate = 90;\n        scaleY = -1;\n        break;\n\n      // Rotate right 90\u00B0\n      case 6:\n        rotate = 90;\n        break;\n\n      // Flip horizontal and rotate right 90\u00B0\n      case 7:\n        rotate = 90;\n        scaleX = -1;\n        break;\n\n      // Rotate left 90\u00B0\n      case 8:\n        rotate = -90;\n        break;\n    }\n    return {\n      rotate: rotate,\n      scaleX: scaleX,\n      scaleY: scaleY\n    };\n  }\n\n  var render = {\n    render: function render() {\n      this.initContainer();\n      this.initCanvas();\n      this.initCropBox();\n      this.renderCanvas();\n      if (this.cropped) {\n        this.renderCropBox();\n      }\n    },\n    initContainer: function initContainer() {\n      var element = this.element,\n        options = this.options,\n        container = this.container,\n        cropper = this.cropper;\n      var minWidth = Number(options.minContainerWidth);\n      var minHeight = Number(options.minContainerHeight);\n      addClass(cropper, CLASS_HIDDEN);\n      removeClass(element, CLASS_HIDDEN);\n      var containerData = {\n        width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n        height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n      };\n      this.containerData = containerData;\n      setStyle(cropper, {\n        width: containerData.width,\n        height: containerData.height\n      });\n      addClass(element, CLASS_HIDDEN);\n      removeClass(cropper, CLASS_HIDDEN);\n    },\n    // Canvas (image wrapper)\n    initCanvas: function initCanvas() {\n      var containerData = this.containerData,\n        imageData = this.imageData;\n      var viewMode = this.options.viewMode;\n      var rotated = Math.abs(imageData.rotate) % 180 === 90;\n      var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n      var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n      var aspectRatio = naturalWidth / naturalHeight;\n      var canvasWidth = containerData.width;\n      var canvasHeight = containerData.height;\n      if (containerData.height * aspectRatio > containerData.width) {\n        if (viewMode === 3) {\n          canvasWidth = containerData.height * aspectRatio;\n        } else {\n          canvasHeight = containerData.width / aspectRatio;\n        }\n      } else if (viewMode === 3) {\n        canvasHeight = containerData.width / aspectRatio;\n      } else {\n        canvasWidth = containerData.height * aspectRatio;\n      }\n      var canvasData = {\n        aspectRatio: aspectRatio,\n        naturalWidth: naturalWidth,\n        naturalHeight: naturalHeight,\n        width: canvasWidth,\n        height: canvasHeight\n      };\n      this.canvasData = canvasData;\n      this.limited = viewMode === 1 || viewMode === 2;\n      this.limitCanvas(true, true);\n      canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n      canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n      canvasData.left = (containerData.width - canvasData.width) / 2;\n      canvasData.top = (containerData.height - canvasData.height) / 2;\n      canvasData.oldLeft = canvasData.left;\n      canvasData.oldTop = canvasData.top;\n      this.initialCanvasData = assign({}, canvasData);\n    },\n    limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n      var options = this.options,\n        containerData = this.containerData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData;\n      var viewMode = options.viewMode;\n      var aspectRatio = canvasData.aspectRatio;\n      var cropped = this.cropped && cropBoxData;\n      if (sizeLimited) {\n        var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n        var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n        if (viewMode > 1) {\n          minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n          minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n          if (viewMode === 3) {\n            if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n              minCanvasWidth = minCanvasHeight * aspectRatio;\n            } else {\n              minCanvasHeight = minCanvasWidth / aspectRatio;\n            }\n          }\n        } else if (viewMode > 0) {\n          if (minCanvasWidth) {\n            minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n          } else if (minCanvasHeight) {\n            minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n          } else if (cropped) {\n            minCanvasWidth = cropBoxData.width;\n            minCanvasHeight = cropBoxData.height;\n            if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n              minCanvasWidth = minCanvasHeight * aspectRatio;\n            } else {\n              minCanvasHeight = minCanvasWidth / aspectRatio;\n            }\n          }\n        }\n        var _getAdjustedSizes = getAdjustedSizes({\n          aspectRatio: aspectRatio,\n          width: minCanvasWidth,\n          height: minCanvasHeight\n        });\n        minCanvasWidth = _getAdjustedSizes.width;\n        minCanvasHeight = _getAdjustedSizes.height;\n        canvasData.minWidth = minCanvasWidth;\n        canvasData.minHeight = minCanvasHeight;\n        canvasData.maxWidth = Infinity;\n        canvasData.maxHeight = Infinity;\n      }\n      if (positionLimited) {\n        if (viewMode > (cropped ? 0 : 1)) {\n          var newCanvasLeft = containerData.width - canvasData.width;\n          var newCanvasTop = containerData.height - canvasData.height;\n          canvasData.minLeft = Math.min(0, newCanvasLeft);\n          canvasData.minTop = Math.min(0, newCanvasTop);\n          canvasData.maxLeft = Math.max(0, newCanvasLeft);\n          canvasData.maxTop = Math.max(0, newCanvasTop);\n          if (cropped && this.limited) {\n            canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n            canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n            canvasData.maxLeft = cropBoxData.left;\n            canvasData.maxTop = cropBoxData.top;\n            if (viewMode === 2) {\n              if (canvasData.width >= containerData.width) {\n                canvasData.minLeft = Math.min(0, newCanvasLeft);\n                canvasData.maxLeft = Math.max(0, newCanvasLeft);\n              }\n              if (canvasData.height >= containerData.height) {\n                canvasData.minTop = Math.min(0, newCanvasTop);\n                canvasData.maxTop = Math.max(0, newCanvasTop);\n              }\n            }\n          }\n        } else {\n          canvasData.minLeft = -canvasData.width;\n          canvasData.minTop = -canvasData.height;\n          canvasData.maxLeft = containerData.width;\n          canvasData.maxTop = containerData.height;\n        }\n      }\n    },\n    renderCanvas: function renderCanvas(changed, transformed) {\n      var canvasData = this.canvasData,\n        imageData = this.imageData;\n      if (transformed) {\n        var _getRotatedSizes = getRotatedSizes({\n            width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n            height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n            degree: imageData.rotate || 0\n          }),\n          naturalWidth = _getRotatedSizes.width,\n          naturalHeight = _getRotatedSizes.height;\n        var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n        var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n        canvasData.left -= (width - canvasData.width) / 2;\n        canvasData.top -= (height - canvasData.height) / 2;\n        canvasData.width = width;\n        canvasData.height = height;\n        canvasData.aspectRatio = naturalWidth / naturalHeight;\n        canvasData.naturalWidth = naturalWidth;\n        canvasData.naturalHeight = naturalHeight;\n        this.limitCanvas(true, false);\n      }\n      if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n        canvasData.left = canvasData.oldLeft;\n      }\n      if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n        canvasData.top = canvasData.oldTop;\n      }\n      canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n      canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n      this.limitCanvas(false, true);\n      canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n      canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n      canvasData.oldLeft = canvasData.left;\n      canvasData.oldTop = canvasData.top;\n      setStyle(this.canvas, assign({\n        width: canvasData.width,\n        height: canvasData.height\n      }, getTransforms({\n        translateX: canvasData.left,\n        translateY: canvasData.top\n      })));\n      this.renderImage(changed);\n      if (this.cropped && this.limited) {\n        this.limitCropBox(true, true);\n      }\n    },\n    renderImage: function renderImage(changed) {\n      var canvasData = this.canvasData,\n        imageData = this.imageData;\n      var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n      var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n      assign(imageData, {\n        width: width,\n        height: height,\n        left: (canvasData.width - width) / 2,\n        top: (canvasData.height - height) / 2\n      });\n      setStyle(this.image, assign({\n        width: imageData.width,\n        height: imageData.height\n      }, getTransforms(assign({\n        translateX: imageData.left,\n        translateY: imageData.top\n      }, imageData))));\n      if (changed) {\n        this.output();\n      }\n    },\n    initCropBox: function initCropBox() {\n      var options = this.options,\n        canvasData = this.canvasData;\n      var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n      var autoCropArea = Number(options.autoCropArea) || 0.8;\n      var cropBoxData = {\n        width: canvasData.width,\n        height: canvasData.height\n      };\n      if (aspectRatio) {\n        if (canvasData.height * aspectRatio > canvasData.width) {\n          cropBoxData.height = cropBoxData.width / aspectRatio;\n        } else {\n          cropBoxData.width = cropBoxData.height * aspectRatio;\n        }\n      }\n      this.cropBoxData = cropBoxData;\n      this.limitCropBox(true, true);\n\n      // Initialize auto crop area\n      cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n      cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n      // The width/height of auto crop area must large than \"minWidth/Height\"\n      cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n      cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n      cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n      cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n      cropBoxData.oldLeft = cropBoxData.left;\n      cropBoxData.oldTop = cropBoxData.top;\n      this.initialCropBoxData = assign({}, cropBoxData);\n    },\n    limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n      var options = this.options,\n        containerData = this.containerData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData,\n        limited = this.limited;\n      var aspectRatio = options.aspectRatio;\n      if (sizeLimited) {\n        var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n        var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n        var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n        var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n        // The min/maxCropBoxWidth/Height must be less than container's width/height\n        minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n        minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n        if (aspectRatio) {\n          if (minCropBoxWidth && minCropBoxHeight) {\n            if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n              minCropBoxHeight = minCropBoxWidth / aspectRatio;\n            } else {\n              minCropBoxWidth = minCropBoxHeight * aspectRatio;\n            }\n          } else if (minCropBoxWidth) {\n            minCropBoxHeight = minCropBoxWidth / aspectRatio;\n          } else if (minCropBoxHeight) {\n            minCropBoxWidth = minCropBoxHeight * aspectRatio;\n          }\n          if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n            maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n          } else {\n            maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n          }\n        }\n\n        // The minWidth/Height must be less than maxWidth/Height\n        cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n        cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n        cropBoxData.maxWidth = maxCropBoxWidth;\n        cropBoxData.maxHeight = maxCropBoxHeight;\n      }\n      if (positionLimited) {\n        if (limited) {\n          cropBoxData.minLeft = Math.max(0, canvasData.left);\n          cropBoxData.minTop = Math.max(0, canvasData.top);\n          cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n          cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n        } else {\n          cropBoxData.minLeft = 0;\n          cropBoxData.minTop = 0;\n          cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n          cropBoxData.maxTop = containerData.height - cropBoxData.height;\n        }\n      }\n    },\n    renderCropBox: function renderCropBox() {\n      var options = this.options,\n        containerData = this.containerData,\n        cropBoxData = this.cropBoxData;\n      if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n        cropBoxData.left = cropBoxData.oldLeft;\n      }\n      if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n        cropBoxData.top = cropBoxData.oldTop;\n      }\n      cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n      cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n      this.limitCropBox(false, true);\n      cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n      cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n      cropBoxData.oldLeft = cropBoxData.left;\n      cropBoxData.oldTop = cropBoxData.top;\n      if (options.movable && options.cropBoxMovable) {\n        // Turn to move the canvas when the crop box is equal to the container\n        setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n      }\n      setStyle(this.cropBox, assign({\n        width: cropBoxData.width,\n        height: cropBoxData.height\n      }, getTransforms({\n        translateX: cropBoxData.left,\n        translateY: cropBoxData.top\n      })));\n      if (this.cropped && this.limited) {\n        this.limitCanvas(true, true);\n      }\n      if (!this.disabled) {\n        this.output();\n      }\n    },\n    output: function output() {\n      this.preview();\n      dispatchEvent(this.element, EVENT_CROP, this.getData());\n    }\n  };\n\n  var preview = {\n    initPreview: function initPreview() {\n      var element = this.element,\n        crossOrigin = this.crossOrigin;\n      var preview = this.options.preview;\n      var url = crossOrigin ? this.crossOriginUrl : this.url;\n      var alt = element.alt || 'The image to preview';\n      var image = document.createElement('img');\n      if (crossOrigin) {\n        image.crossOrigin = crossOrigin;\n      }\n      image.src = url;\n      image.alt = alt;\n      this.viewBox.appendChild(image);\n      this.viewBoxImage = image;\n      if (!preview) {\n        return;\n      }\n      var previews = preview;\n      if (typeof preview === 'string') {\n        previews = element.ownerDocument.querySelectorAll(preview);\n      } else if (preview.querySelector) {\n        previews = [preview];\n      }\n      this.previews = previews;\n      forEach(previews, function (el) {\n        var img = document.createElement('img');\n\n        // Save the original size for recover\n        setData(el, DATA_PREVIEW, {\n          width: el.offsetWidth,\n          height: el.offsetHeight,\n          html: el.innerHTML\n        });\n        if (crossOrigin) {\n          img.crossOrigin = crossOrigin;\n        }\n        img.src = url;\n        img.alt = alt;\n\n        /**\n         * Override img element styles\n         * Add `display:block` to avoid margin top issue\n         * Add `height:auto` to override `height` attribute on IE8\n         * (Occur only when margin-top <= -height)\n         */\n        img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n        el.innerHTML = '';\n        el.appendChild(img);\n      });\n    },\n    resetPreview: function resetPreview() {\n      forEach(this.previews, function (element) {\n        var data = getData(element, DATA_PREVIEW);\n        setStyle(element, {\n          width: data.width,\n          height: data.height\n        });\n        element.innerHTML = data.html;\n        removeData(element, DATA_PREVIEW);\n      });\n    },\n    preview: function preview() {\n      var imageData = this.imageData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData;\n      var cropBoxWidth = cropBoxData.width,\n        cropBoxHeight = cropBoxData.height;\n      var width = imageData.width,\n        height = imageData.height;\n      var left = cropBoxData.left - canvasData.left - imageData.left;\n      var top = cropBoxData.top - canvasData.top - imageData.top;\n      if (!this.cropped || this.disabled) {\n        return;\n      }\n      setStyle(this.viewBoxImage, assign({\n        width: width,\n        height: height\n      }, getTransforms(assign({\n        translateX: -left,\n        translateY: -top\n      }, imageData))));\n      forEach(this.previews, function (element) {\n        var data = getData(element, DATA_PREVIEW);\n        var originalWidth = data.width;\n        var originalHeight = data.height;\n        var newWidth = originalWidth;\n        var newHeight = originalHeight;\n        var ratio = 1;\n        if (cropBoxWidth) {\n          ratio = originalWidth / cropBoxWidth;\n          newHeight = cropBoxHeight * ratio;\n        }\n        if (cropBoxHeight && newHeight > originalHeight) {\n          ratio = originalHeight / cropBoxHeight;\n          newWidth = cropBoxWidth * ratio;\n          newHeight = originalHeight;\n        }\n        setStyle(element, {\n          width: newWidth,\n          height: newHeight\n        });\n        setStyle(element.getElementsByTagName('img')[0], assign({\n          width: width * ratio,\n          height: height * ratio\n        }, getTransforms(assign({\n          translateX: -left * ratio,\n          translateY: -top * ratio\n        }, imageData))));\n      });\n    }\n  };\n\n  var events = {\n    bind: function bind() {\n      var element = this.element,\n        options = this.options,\n        cropper = this.cropper;\n      if (isFunction(options.cropstart)) {\n        addListener(element, EVENT_CROP_START, options.cropstart);\n      }\n      if (isFunction(options.cropmove)) {\n        addListener(element, EVENT_CROP_MOVE, options.cropmove);\n      }\n      if (isFunction(options.cropend)) {\n        addListener(element, EVENT_CROP_END, options.cropend);\n      }\n      if (isFunction(options.crop)) {\n        addListener(element, EVENT_CROP, options.crop);\n      }\n      if (isFunction(options.zoom)) {\n        addListener(element, EVENT_ZOOM, options.zoom);\n      }\n      addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n      if (options.zoomable && options.zoomOnWheel) {\n        addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n          passive: false,\n          capture: true\n        });\n      }\n      if (options.toggleDragModeOnDblclick) {\n        addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n      }\n      addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n      addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n      if (options.responsive) {\n        addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n      }\n    },\n    unbind: function unbind() {\n      var element = this.element,\n        options = this.options,\n        cropper = this.cropper;\n      if (isFunction(options.cropstart)) {\n        removeListener(element, EVENT_CROP_START, options.cropstart);\n      }\n      if (isFunction(options.cropmove)) {\n        removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n      }\n      if (isFunction(options.cropend)) {\n        removeListener(element, EVENT_CROP_END, options.cropend);\n      }\n      if (isFunction(options.crop)) {\n        removeListener(element, EVENT_CROP, options.crop);\n      }\n      if (isFunction(options.zoom)) {\n        removeListener(element, EVENT_ZOOM, options.zoom);\n      }\n      removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n      if (options.zoomable && options.zoomOnWheel) {\n        removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n          passive: false,\n          capture: true\n        });\n      }\n      if (options.toggleDragModeOnDblclick) {\n        removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n      }\n      removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n      removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n      if (options.responsive) {\n        removeListener(window, EVENT_RESIZE, this.onResize);\n      }\n    }\n  };\n\n  var handlers = {\n    resize: function resize() {\n      if (this.disabled) {\n        return;\n      }\n      var options = this.options,\n        container = this.container,\n        containerData = this.containerData;\n      var ratioX = container.offsetWidth / containerData.width;\n      var ratioY = container.offsetHeight / containerData.height;\n      var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n      // Resize when width changed or height changed\n      if (ratio !== 1) {\n        var canvasData;\n        var cropBoxData;\n        if (options.restore) {\n          canvasData = this.getCanvasData();\n          cropBoxData = this.getCropBoxData();\n        }\n        this.render();\n        if (options.restore) {\n          this.setCanvasData(forEach(canvasData, function (n, i) {\n            canvasData[i] = n * ratio;\n          }));\n          this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n            cropBoxData[i] = n * ratio;\n          }));\n        }\n      }\n    },\n    dblclick: function dblclick() {\n      if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n        return;\n      }\n      this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n    },\n    wheel: function wheel(event) {\n      var _this = this;\n      var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n      var delta = 1;\n      if (this.disabled) {\n        return;\n      }\n      event.preventDefault();\n\n      // Limit wheel speed to prevent zoom too fast (#21)\n      if (this.wheeling) {\n        return;\n      }\n      this.wheeling = true;\n      setTimeout(function () {\n        _this.wheeling = false;\n      }, 50);\n      if (event.deltaY) {\n        delta = event.deltaY > 0 ? 1 : -1;\n      } else if (event.wheelDelta) {\n        delta = -event.wheelDelta / 120;\n      } else if (event.detail) {\n        delta = event.detail > 0 ? 1 : -1;\n      }\n      this.zoom(-delta * ratio, event);\n    },\n    cropStart: function cropStart(event) {\n      var buttons = event.buttons,\n        button = event.button;\n      if (this.disabled\n\n      // Handle mouse event and pointer event and ignore touch event\n      || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n      // No primary button (Usually the left button)\n      isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n      // Open context menu\n      || event.ctrlKey)) {\n        return;\n      }\n      var options = this.options,\n        pointers = this.pointers;\n      var action;\n      if (event.changedTouches) {\n        // Handle touch event\n        forEach(event.changedTouches, function (touch) {\n          pointers[touch.identifier] = getPointer(touch);\n        });\n      } else {\n        // Handle mouse event and pointer event\n        pointers[event.pointerId || 0] = getPointer(event);\n      }\n      if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n        action = ACTION_ZOOM;\n      } else {\n        action = getData(event.target, DATA_ACTION);\n      }\n      if (!REGEXP_ACTIONS.test(action)) {\n        return;\n      }\n      if (dispatchEvent(this.element, EVENT_CROP_START, {\n        originalEvent: event,\n        action: action\n      }) === false) {\n        return;\n      }\n\n      // This line is required for preventing page zooming in iOS browsers\n      event.preventDefault();\n      this.action = action;\n      this.cropping = false;\n      if (action === ACTION_CROP) {\n        this.cropping = true;\n        addClass(this.dragBox, CLASS_MODAL);\n      }\n    },\n    cropMove: function cropMove(event) {\n      var action = this.action;\n      if (this.disabled || !action) {\n        return;\n      }\n      var pointers = this.pointers;\n      event.preventDefault();\n      if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n        originalEvent: event,\n        action: action\n      }) === false) {\n        return;\n      }\n      if (event.changedTouches) {\n        forEach(event.changedTouches, function (touch) {\n          // The first parameter should not be undefined (#432)\n          assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n        });\n      } else {\n        assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n      }\n      this.change(event);\n    },\n    cropEnd: function cropEnd(event) {\n      if (this.disabled) {\n        return;\n      }\n      var action = this.action,\n        pointers = this.pointers;\n      if (event.changedTouches) {\n        forEach(event.changedTouches, function (touch) {\n          delete pointers[touch.identifier];\n        });\n      } else {\n        delete pointers[event.pointerId || 0];\n      }\n      if (!action) {\n        return;\n      }\n      event.preventDefault();\n      if (!Object.keys(pointers).length) {\n        this.action = '';\n      }\n      if (this.cropping) {\n        this.cropping = false;\n        toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n      }\n      dispatchEvent(this.element, EVENT_CROP_END, {\n        originalEvent: event,\n        action: action\n      });\n    }\n  };\n\n  var change = {\n    change: function change(event) {\n      var options = this.options,\n        canvasData = this.canvasData,\n        containerData = this.containerData,\n        cropBoxData = this.cropBoxData,\n        pointers = this.pointers;\n      var action = this.action;\n      var aspectRatio = options.aspectRatio;\n      var left = cropBoxData.left,\n        top = cropBoxData.top,\n        width = cropBoxData.width,\n        height = cropBoxData.height;\n      var right = left + width;\n      var bottom = top + height;\n      var minLeft = 0;\n      var minTop = 0;\n      var maxWidth = containerData.width;\n      var maxHeight = containerData.height;\n      var renderable = true;\n      var offset;\n\n      // Locking aspect ratio in \"free mode\" by holding shift key\n      if (!aspectRatio && event.shiftKey) {\n        aspectRatio = width && height ? width / height : 1;\n      }\n      if (this.limited) {\n        minLeft = cropBoxData.minLeft;\n        minTop = cropBoxData.minTop;\n        maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n        maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n      }\n      var pointer = pointers[Object.keys(pointers)[0]];\n      var range = {\n        x: pointer.endX - pointer.startX,\n        y: pointer.endY - pointer.startY\n      };\n      var check = function check(side) {\n        switch (side) {\n          case ACTION_EAST:\n            if (right + range.x > maxWidth) {\n              range.x = maxWidth - right;\n            }\n            break;\n          case ACTION_WEST:\n            if (left + range.x < minLeft) {\n              range.x = minLeft - left;\n            }\n            break;\n          case ACTION_NORTH:\n            if (top + range.y < minTop) {\n              range.y = minTop - top;\n            }\n            break;\n          case ACTION_SOUTH:\n            if (bottom + range.y > maxHeight) {\n              range.y = maxHeight - bottom;\n            }\n            break;\n        }\n      };\n      switch (action) {\n        // Move crop box\n        case ACTION_ALL:\n          left += range.x;\n          top += range.y;\n          break;\n\n        // Resize crop box\n        case ACTION_EAST:\n          if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_EAST);\n          width += range.x;\n          if (width < 0) {\n            action = ACTION_WEST;\n            width = -width;\n            left -= width;\n          }\n          if (aspectRatio) {\n            height = width / aspectRatio;\n            top += (cropBoxData.height - height) / 2;\n          }\n          break;\n        case ACTION_NORTH:\n          if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_NORTH);\n          height -= range.y;\n          top += range.y;\n          if (height < 0) {\n            action = ACTION_SOUTH;\n            height = -height;\n            top -= height;\n          }\n          if (aspectRatio) {\n            width = height * aspectRatio;\n            left += (cropBoxData.width - width) / 2;\n          }\n          break;\n        case ACTION_WEST:\n          if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_WEST);\n          width -= range.x;\n          left += range.x;\n          if (width < 0) {\n            action = ACTION_EAST;\n            width = -width;\n            left -= width;\n          }\n          if (aspectRatio) {\n            height = width / aspectRatio;\n            top += (cropBoxData.height - height) / 2;\n          }\n          break;\n        case ACTION_SOUTH:\n          if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_SOUTH);\n          height += range.y;\n          if (height < 0) {\n            action = ACTION_NORTH;\n            height = -height;\n            top -= height;\n          }\n          if (aspectRatio) {\n            width = height * aspectRatio;\n            left += (cropBoxData.width - width) / 2;\n          }\n          break;\n        case ACTION_NORTH_EAST:\n          if (aspectRatio) {\n            if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_NORTH);\n            height -= range.y;\n            top += range.y;\n            width = height * aspectRatio;\n          } else {\n            check(ACTION_NORTH);\n            check(ACTION_EAST);\n            if (range.x >= 0) {\n              if (right < maxWidth) {\n                width += range.x;\n              } else if (range.y <= 0 && top <= minTop) {\n                renderable = false;\n              }\n            } else {\n              width += range.x;\n            }\n            if (range.y <= 0) {\n              if (top > minTop) {\n                height -= range.y;\n                top += range.y;\n              }\n            } else {\n              height -= range.y;\n              top += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_SOUTH_WEST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_NORTH_WEST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_SOUTH_EAST;\n            height = -height;\n            top -= height;\n          }\n          break;\n        case ACTION_NORTH_WEST:\n          if (aspectRatio) {\n            if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_NORTH);\n            height -= range.y;\n            top += range.y;\n            width = height * aspectRatio;\n            left += cropBoxData.width - width;\n          } else {\n            check(ACTION_NORTH);\n            check(ACTION_WEST);\n            if (range.x <= 0) {\n              if (left > minLeft) {\n                width -= range.x;\n                left += range.x;\n              } else if (range.y <= 0 && top <= minTop) {\n                renderable = false;\n              }\n            } else {\n              width -= range.x;\n              left += range.x;\n            }\n            if (range.y <= 0) {\n              if (top > minTop) {\n                height -= range.y;\n                top += range.y;\n              }\n            } else {\n              height -= range.y;\n              top += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_SOUTH_EAST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_NORTH_EAST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_SOUTH_WEST;\n            height = -height;\n            top -= height;\n          }\n          break;\n        case ACTION_SOUTH_WEST:\n          if (aspectRatio) {\n            if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_WEST);\n            width -= range.x;\n            left += range.x;\n            height = width / aspectRatio;\n          } else {\n            check(ACTION_SOUTH);\n            check(ACTION_WEST);\n            if (range.x <= 0) {\n              if (left > minLeft) {\n                width -= range.x;\n                left += range.x;\n              } else if (range.y >= 0 && bottom >= maxHeight) {\n                renderable = false;\n              }\n            } else {\n              width -= range.x;\n              left += range.x;\n            }\n            if (range.y >= 0) {\n              if (bottom < maxHeight) {\n                height += range.y;\n              }\n            } else {\n              height += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_NORTH_EAST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_SOUTH_EAST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_NORTH_WEST;\n            height = -height;\n            top -= height;\n          }\n          break;\n        case ACTION_SOUTH_EAST:\n          if (aspectRatio) {\n            if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_EAST);\n            width += range.x;\n            height = width / aspectRatio;\n          } else {\n            check(ACTION_SOUTH);\n            check(ACTION_EAST);\n            if (range.x >= 0) {\n              if (right < maxWidth) {\n                width += range.x;\n              } else if (range.y >= 0 && bottom >= maxHeight) {\n                renderable = false;\n              }\n            } else {\n              width += range.x;\n            }\n            if (range.y >= 0) {\n              if (bottom < maxHeight) {\n                height += range.y;\n              }\n            } else {\n              height += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_NORTH_WEST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_SOUTH_WEST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_NORTH_EAST;\n            height = -height;\n            top -= height;\n          }\n          break;\n\n        // Move canvas\n        case ACTION_MOVE:\n          this.move(range.x, range.y);\n          renderable = false;\n          break;\n\n        // Zoom canvas\n        case ACTION_ZOOM:\n          this.zoom(getMaxZoomRatio(pointers), event);\n          renderable = false;\n          break;\n\n        // Create crop box\n        case ACTION_CROP:\n          if (!range.x || !range.y) {\n            renderable = false;\n            break;\n          }\n          offset = getOffset(this.cropper);\n          left = pointer.startX - offset.left;\n          top = pointer.startY - offset.top;\n          width = cropBoxData.minWidth;\n          height = cropBoxData.minHeight;\n          if (range.x > 0) {\n            action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n          } else if (range.x < 0) {\n            left -= width;\n            action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n          }\n          if (range.y < 0) {\n            top -= height;\n          }\n\n          // Show the crop box if is hidden\n          if (!this.cropped) {\n            removeClass(this.cropBox, CLASS_HIDDEN);\n            this.cropped = true;\n            if (this.limited) {\n              this.limitCropBox(true, true);\n            }\n          }\n          break;\n      }\n      if (renderable) {\n        cropBoxData.width = width;\n        cropBoxData.height = height;\n        cropBoxData.left = left;\n        cropBoxData.top = top;\n        this.action = action;\n        this.renderCropBox();\n      }\n\n      // Override\n      forEach(pointers, function (p) {\n        p.startX = p.endX;\n        p.startY = p.endY;\n      });\n    }\n  };\n\n  var methods = {\n    // Show the crop box manually\n    crop: function crop() {\n      if (this.ready && !this.cropped && !this.disabled) {\n        this.cropped = true;\n        this.limitCropBox(true, true);\n        if (this.options.modal) {\n          addClass(this.dragBox, CLASS_MODAL);\n        }\n        removeClass(this.cropBox, CLASS_HIDDEN);\n        this.setCropBoxData(this.initialCropBoxData);\n      }\n      return this;\n    },\n    // Reset the image and crop box to their initial states\n    reset: function reset() {\n      if (this.ready && !this.disabled) {\n        this.imageData = assign({}, this.initialImageData);\n        this.canvasData = assign({}, this.initialCanvasData);\n        this.cropBoxData = assign({}, this.initialCropBoxData);\n        this.renderCanvas();\n        if (this.cropped) {\n          this.renderCropBox();\n        }\n      }\n      return this;\n    },\n    // Clear the crop box\n    clear: function clear() {\n      if (this.cropped && !this.disabled) {\n        assign(this.cropBoxData, {\n          left: 0,\n          top: 0,\n          width: 0,\n          height: 0\n        });\n        this.cropped = false;\n        this.renderCropBox();\n        this.limitCanvas(true, true);\n\n        // Render canvas after crop box rendered\n        this.renderCanvas();\n        removeClass(this.dragBox, CLASS_MODAL);\n        addClass(this.cropBox, CLASS_HIDDEN);\n      }\n      return this;\n    },\n    /**\n     * Replace the image's src and rebuild the cropper\n     * @param {string} url - The new URL.\n     * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n     * @returns {Cropper} this\n     */\n    replace: function replace(url) {\n      var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      if (!this.disabled && url) {\n        if (this.isImg) {\n          this.element.src = url;\n        }\n        if (hasSameSize) {\n          this.url = url;\n          this.image.src = url;\n          if (this.ready) {\n            this.viewBoxImage.src = url;\n            forEach(this.previews, function (element) {\n              element.getElementsByTagName('img')[0].src = url;\n            });\n          }\n        } else {\n          if (this.isImg) {\n            this.replaced = true;\n          }\n          this.options.data = null;\n          this.uncreate();\n          this.load(url);\n        }\n      }\n      return this;\n    },\n    // Enable (unfreeze) the cropper\n    enable: function enable() {\n      if (this.ready && this.disabled) {\n        this.disabled = false;\n        removeClass(this.cropper, CLASS_DISABLED);\n      }\n      return this;\n    },\n    // Disable (freeze) the cropper\n    disable: function disable() {\n      if (this.ready && !this.disabled) {\n        this.disabled = true;\n        addClass(this.cropper, CLASS_DISABLED);\n      }\n      return this;\n    },\n    /**\n     * Destroy the cropper and remove the instance from the image\n     * @returns {Cropper} this\n     */\n    destroy: function destroy() {\n      var element = this.element;\n      if (!element[NAMESPACE]) {\n        return this;\n      }\n      element[NAMESPACE] = undefined;\n      if (this.isImg && this.replaced) {\n        element.src = this.originalUrl;\n      }\n      this.uncreate();\n      return this;\n    },\n    /**\n     * Move the canvas with relative offsets\n     * @param {number} offsetX - The relative offset distance on the x-axis.\n     * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n     * @returns {Cropper} this\n     */\n    move: function move(offsetX) {\n      var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n      var _this$canvasData = this.canvasData,\n        left = _this$canvasData.left,\n        top = _this$canvasData.top;\n      return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n    },\n    /**\n     * Move the canvas to an absolute point\n     * @param {number} x - The x-axis coordinate.\n     * @param {number} [y=x] - The y-axis coordinate.\n     * @returns {Cropper} this\n     */\n    moveTo: function moveTo(x) {\n      var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n      var canvasData = this.canvasData;\n      var changed = false;\n      x = Number(x);\n      y = Number(y);\n      if (this.ready && !this.disabled && this.options.movable) {\n        if (isNumber(x)) {\n          canvasData.left = x;\n          changed = true;\n        }\n        if (isNumber(y)) {\n          canvasData.top = y;\n          changed = true;\n        }\n        if (changed) {\n          this.renderCanvas(true);\n        }\n      }\n      return this;\n    },\n    /**\n     * Zoom the canvas with a relative ratio\n     * @param {number} ratio - The target ratio.\n     * @param {Event} _originalEvent - The original event if any.\n     * @returns {Cropper} this\n     */\n    zoom: function zoom(ratio, _originalEvent) {\n      var canvasData = this.canvasData;\n      ratio = Number(ratio);\n      if (ratio < 0) {\n        ratio = 1 / (1 - ratio);\n      } else {\n        ratio = 1 + ratio;\n      }\n      return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n    },\n    /**\n     * Zoom the canvas to an absolute ratio\n     * @param {number} ratio - The target ratio.\n     * @param {Object} pivot - The zoom pivot point coordinate.\n     * @param {Event} _originalEvent - The original event if any.\n     * @returns {Cropper} this\n     */\n    zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n      var options = this.options,\n        canvasData = this.canvasData;\n      var width = canvasData.width,\n        height = canvasData.height,\n        naturalWidth = canvasData.naturalWidth,\n        naturalHeight = canvasData.naturalHeight;\n      ratio = Number(ratio);\n      if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n        var newWidth = naturalWidth * ratio;\n        var newHeight = naturalHeight * ratio;\n        if (dispatchEvent(this.element, EVENT_ZOOM, {\n          ratio: ratio,\n          oldRatio: width / naturalWidth,\n          originalEvent: _originalEvent\n        }) === false) {\n          return this;\n        }\n        if (_originalEvent) {\n          var pointers = this.pointers;\n          var offset = getOffset(this.cropper);\n          var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n            pageX: _originalEvent.pageX,\n            pageY: _originalEvent.pageY\n          };\n\n          // Zoom from the triggering point of the event\n          canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n          canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n        } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n          canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n          canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n        } else {\n          // Zoom from the center of the canvas\n          canvasData.left -= (newWidth - width) / 2;\n          canvasData.top -= (newHeight - height) / 2;\n        }\n        canvasData.width = newWidth;\n        canvasData.height = newHeight;\n        this.renderCanvas(true);\n      }\n      return this;\n    },\n    /**\n     * Rotate the canvas with a relative degree\n     * @param {number} degree - The rotate degree.\n     * @returns {Cropper} this\n     */\n    rotate: function rotate(degree) {\n      return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n    },\n    /**\n     * Rotate the canvas to an absolute degree\n     * @param {number} degree - The rotate degree.\n     * @returns {Cropper} this\n     */\n    rotateTo: function rotateTo(degree) {\n      degree = Number(degree);\n      if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n        this.imageData.rotate = degree % 360;\n        this.renderCanvas(true, true);\n      }\n      return this;\n    },\n    /**\n     * Scale the image on the x-axis.\n     * @param {number} scaleX - The scale ratio on the x-axis.\n     * @returns {Cropper} this\n     */\n    scaleX: function scaleX(_scaleX) {\n      var scaleY = this.imageData.scaleY;\n      return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n    },\n    /**\n     * Scale the image on the y-axis.\n     * @param {number} scaleY - The scale ratio on the y-axis.\n     * @returns {Cropper} this\n     */\n    scaleY: function scaleY(_scaleY) {\n      var scaleX = this.imageData.scaleX;\n      return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n    },\n    /**\n     * Scale the image\n     * @param {number} scaleX - The scale ratio on the x-axis.\n     * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n     * @returns {Cropper} this\n     */\n    scale: function scale(scaleX) {\n      var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n      var imageData = this.imageData;\n      var transformed = false;\n      scaleX = Number(scaleX);\n      scaleY = Number(scaleY);\n      if (this.ready && !this.disabled && this.options.scalable) {\n        if (isNumber(scaleX)) {\n          imageData.scaleX = scaleX;\n          transformed = true;\n        }\n        if (isNumber(scaleY)) {\n          imageData.scaleY = scaleY;\n          transformed = true;\n        }\n        if (transformed) {\n          this.renderCanvas(true, true);\n        }\n      }\n      return this;\n    },\n    /**\n     * Get the cropped area position and size data (base on the original image)\n     * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n     * @returns {Object} The result cropped data.\n     */\n    getData: function getData() {\n      var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var options = this.options,\n        imageData = this.imageData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData;\n      var data;\n      if (this.ready && this.cropped) {\n        data = {\n          x: cropBoxData.left - canvasData.left,\n          y: cropBoxData.top - canvasData.top,\n          width: cropBoxData.width,\n          height: cropBoxData.height\n        };\n        var ratio = imageData.width / imageData.naturalWidth;\n        forEach(data, function (n, i) {\n          data[i] = n / ratio;\n        });\n        if (rounded) {\n          // In case rounding off leads to extra 1px in right or bottom border\n          // we should round the top-left corner and the dimension (#343).\n          var bottom = Math.round(data.y + data.height);\n          var right = Math.round(data.x + data.width);\n          data.x = Math.round(data.x);\n          data.y = Math.round(data.y);\n          data.width = right - data.x;\n          data.height = bottom - data.y;\n        }\n      } else {\n        data = {\n          x: 0,\n          y: 0,\n          width: 0,\n          height: 0\n        };\n      }\n      if (options.rotatable) {\n        data.rotate = imageData.rotate || 0;\n      }\n      if (options.scalable) {\n        data.scaleX = imageData.scaleX || 1;\n        data.scaleY = imageData.scaleY || 1;\n      }\n      return data;\n    },\n    /**\n     * Set the cropped area position and size with new data\n     * @param {Object} data - The new data.\n     * @returns {Cropper} this\n     */\n    setData: function setData(data) {\n      var options = this.options,\n        imageData = this.imageData,\n        canvasData = this.canvasData;\n      var cropBoxData = {};\n      if (this.ready && !this.disabled && isPlainObject(data)) {\n        var transformed = false;\n        if (options.rotatable) {\n          if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n            imageData.rotate = data.rotate;\n            transformed = true;\n          }\n        }\n        if (options.scalable) {\n          if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n            imageData.scaleX = data.scaleX;\n            transformed = true;\n          }\n          if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n            imageData.scaleY = data.scaleY;\n            transformed = true;\n          }\n        }\n        if (transformed) {\n          this.renderCanvas(true, true);\n        }\n        var ratio = imageData.width / imageData.naturalWidth;\n        if (isNumber(data.x)) {\n          cropBoxData.left = data.x * ratio + canvasData.left;\n        }\n        if (isNumber(data.y)) {\n          cropBoxData.top = data.y * ratio + canvasData.top;\n        }\n        if (isNumber(data.width)) {\n          cropBoxData.width = data.width * ratio;\n        }\n        if (isNumber(data.height)) {\n          cropBoxData.height = data.height * ratio;\n        }\n        this.setCropBoxData(cropBoxData);\n      }\n      return this;\n    },\n    /**\n     * Get the container size data.\n     * @returns {Object} The result container data.\n     */\n    getContainerData: function getContainerData() {\n      return this.ready ? assign({}, this.containerData) : {};\n    },\n    /**\n     * Get the image position and size data.\n     * @returns {Object} The result image data.\n     */\n    getImageData: function getImageData() {\n      return this.sized ? assign({}, this.imageData) : {};\n    },\n    /**\n     * Get the canvas position and size data.\n     * @returns {Object} The result canvas data.\n     */\n    getCanvasData: function getCanvasData() {\n      var canvasData = this.canvasData;\n      var data = {};\n      if (this.ready) {\n        forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n          data[n] = canvasData[n];\n        });\n      }\n      return data;\n    },\n    /**\n     * Set the canvas position and size with new data.\n     * @param {Object} data - The new canvas data.\n     * @returns {Cropper} this\n     */\n    setCanvasData: function setCanvasData(data) {\n      var canvasData = this.canvasData;\n      var aspectRatio = canvasData.aspectRatio;\n      if (this.ready && !this.disabled && isPlainObject(data)) {\n        if (isNumber(data.left)) {\n          canvasData.left = data.left;\n        }\n        if (isNumber(data.top)) {\n          canvasData.top = data.top;\n        }\n        if (isNumber(data.width)) {\n          canvasData.width = data.width;\n          canvasData.height = data.width / aspectRatio;\n        } else if (isNumber(data.height)) {\n          canvasData.height = data.height;\n          canvasData.width = data.height * aspectRatio;\n        }\n        this.renderCanvas(true);\n      }\n      return this;\n    },\n    /**\n     * Get the crop box position and size data.\n     * @returns {Object} The result crop box data.\n     */\n    getCropBoxData: function getCropBoxData() {\n      var cropBoxData = this.cropBoxData;\n      var data;\n      if (this.ready && this.cropped) {\n        data = {\n          left: cropBoxData.left,\n          top: cropBoxData.top,\n          width: cropBoxData.width,\n          height: cropBoxData.height\n        };\n      }\n      return data || {};\n    },\n    /**\n     * Set the crop box position and size with new data.\n     * @param {Object} data - The new crop box data.\n     * @returns {Cropper} this\n     */\n    setCropBoxData: function setCropBoxData(data) {\n      var cropBoxData = this.cropBoxData;\n      var aspectRatio = this.options.aspectRatio;\n      var widthChanged;\n      var heightChanged;\n      if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n        if (isNumber(data.left)) {\n          cropBoxData.left = data.left;\n        }\n        if (isNumber(data.top)) {\n          cropBoxData.top = data.top;\n        }\n        if (isNumber(data.width) && data.width !== cropBoxData.width) {\n          widthChanged = true;\n          cropBoxData.width = data.width;\n        }\n        if (isNumber(data.height) && data.height !== cropBoxData.height) {\n          heightChanged = true;\n          cropBoxData.height = data.height;\n        }\n        if (aspectRatio) {\n          if (widthChanged) {\n            cropBoxData.height = cropBoxData.width / aspectRatio;\n          } else if (heightChanged) {\n            cropBoxData.width = cropBoxData.height * aspectRatio;\n          }\n        }\n        this.renderCropBox();\n      }\n      return this;\n    },\n    /**\n     * Get a canvas drawn the cropped image.\n     * @param {Object} [options={}] - The config options.\n     * @returns {HTMLCanvasElement} - The result canvas.\n     */\n    getCroppedCanvas: function getCroppedCanvas() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      if (!this.ready || !window.HTMLCanvasElement) {\n        return null;\n      }\n      var canvasData = this.canvasData;\n      var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n      // Returns the source canvas if it is not cropped.\n      if (!this.cropped) {\n        return source;\n      }\n      var _this$getData = this.getData(options.rounded),\n        initialX = _this$getData.x,\n        initialY = _this$getData.y,\n        initialWidth = _this$getData.width,\n        initialHeight = _this$getData.height;\n      var ratio = source.width / Math.floor(canvasData.naturalWidth);\n      if (ratio !== 1) {\n        initialX *= ratio;\n        initialY *= ratio;\n        initialWidth *= ratio;\n        initialHeight *= ratio;\n      }\n      var aspectRatio = initialWidth / initialHeight;\n      var maxSizes = getAdjustedSizes({\n        aspectRatio: aspectRatio,\n        width: options.maxWidth || Infinity,\n        height: options.maxHeight || Infinity\n      });\n      var minSizes = getAdjustedSizes({\n        aspectRatio: aspectRatio,\n        width: options.minWidth || 0,\n        height: options.minHeight || 0\n      }, 'cover');\n      var _getAdjustedSizes = getAdjustedSizes({\n          aspectRatio: aspectRatio,\n          width: options.width || (ratio !== 1 ? source.width : initialWidth),\n          height: options.height || (ratio !== 1 ? source.height : initialHeight)\n        }),\n        width = _getAdjustedSizes.width,\n        height = _getAdjustedSizes.height;\n      width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n      height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n      var canvas = document.createElement('canvas');\n      var context = canvas.getContext('2d');\n      canvas.width = normalizeDecimalNumber(width);\n      canvas.height = normalizeDecimalNumber(height);\n      context.fillStyle = options.fillColor || 'transparent';\n      context.fillRect(0, 0, width, height);\n      var _options$imageSmoothi = options.imageSmoothingEnabled,\n        imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n        imageSmoothingQuality = options.imageSmoothingQuality;\n      context.imageSmoothingEnabled = imageSmoothingEnabled;\n      if (imageSmoothingQuality) {\n        context.imageSmoothingQuality = imageSmoothingQuality;\n      }\n\n      // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n      var sourceWidth = source.width;\n      var sourceHeight = source.height;\n\n      // Source canvas parameters\n      var srcX = initialX;\n      var srcY = initialY;\n      var srcWidth;\n      var srcHeight;\n\n      // Destination canvas parameters\n      var dstX;\n      var dstY;\n      var dstWidth;\n      var dstHeight;\n      if (srcX <= -initialWidth || srcX > sourceWidth) {\n        srcX = 0;\n        srcWidth = 0;\n        dstX = 0;\n        dstWidth = 0;\n      } else if (srcX <= 0) {\n        dstX = -srcX;\n        srcX = 0;\n        srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n        dstWidth = srcWidth;\n      } else if (srcX <= sourceWidth) {\n        dstX = 0;\n        srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n        dstWidth = srcWidth;\n      }\n      if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n        srcY = 0;\n        srcHeight = 0;\n        dstY = 0;\n        dstHeight = 0;\n      } else if (srcY <= 0) {\n        dstY = -srcY;\n        srcY = 0;\n        srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n        dstHeight = srcHeight;\n      } else if (srcY <= sourceHeight) {\n        dstY = 0;\n        srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n        dstHeight = srcHeight;\n      }\n      var params = [srcX, srcY, srcWidth, srcHeight];\n\n      // Avoid \"IndexSizeError\"\n      if (dstWidth > 0 && dstHeight > 0) {\n        var scale = width / initialWidth;\n        params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n      }\n\n      // All the numerical parameters should be integer for `drawImage`\n      // https://github.com/fengyuanchen/cropper/issues/476\n      context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n        return Math.floor(normalizeDecimalNumber(param));\n      }))));\n      return canvas;\n    },\n    /**\n     * Change the aspect ratio of the crop box.\n     * @param {number} aspectRatio - The new aspect ratio.\n     * @returns {Cropper} this\n     */\n    setAspectRatio: function setAspectRatio(aspectRatio) {\n      var options = this.options;\n      if (!this.disabled && !isUndefined(aspectRatio)) {\n        // 0 -> NaN\n        options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n        if (this.ready) {\n          this.initCropBox();\n          if (this.cropped) {\n            this.renderCropBox();\n          }\n        }\n      }\n      return this;\n    },\n    /**\n     * Change the drag mode.\n     * @param {string} mode - The new drag mode.\n     * @returns {Cropper} this\n     */\n    setDragMode: function setDragMode(mode) {\n      var options = this.options,\n        dragBox = this.dragBox,\n        face = this.face;\n      if (this.ready && !this.disabled) {\n        var croppable = mode === DRAG_MODE_CROP;\n        var movable = options.movable && mode === DRAG_MODE_MOVE;\n        mode = croppable || movable ? mode : DRAG_MODE_NONE;\n        options.dragMode = mode;\n        setData(dragBox, DATA_ACTION, mode);\n        toggleClass(dragBox, CLASS_CROP, croppable);\n        toggleClass(dragBox, CLASS_MOVE, movable);\n        if (!options.cropBoxMovable) {\n          // Sync drag mode to crop box when it is not movable\n          setData(face, DATA_ACTION, mode);\n          toggleClass(face, CLASS_CROP, croppable);\n          toggleClass(face, CLASS_MOVE, movable);\n        }\n      }\n      return this;\n    }\n  };\n\n  var AnotherCropper = WINDOW.Cropper;\n  var Cropper = /*#__PURE__*/function () {\n    /**\n     * Create a new Cropper.\n     * @param {Element} element - The target element for cropping.\n     * @param {Object} [options={}] - The configuration options.\n     */\n    function Cropper(element) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      _classCallCheck(this, Cropper);\n      if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n        throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n      }\n      this.element = element;\n      this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n      this.cropped = false;\n      this.disabled = false;\n      this.pointers = {};\n      this.ready = false;\n      this.reloading = false;\n      this.replaced = false;\n      this.sized = false;\n      this.sizing = false;\n      this.init();\n    }\n    return _createClass(Cropper, [{\n      key: \"init\",\n      value: function init() {\n        var element = this.element;\n        var tagName = element.tagName.toLowerCase();\n        var url;\n        if (element[NAMESPACE]) {\n          return;\n        }\n        element[NAMESPACE] = this;\n        if (tagName === 'img') {\n          this.isImg = true;\n\n          // e.g.: \"img/picture.jpg\"\n          url = element.getAttribute('src') || '';\n          this.originalUrl = url;\n\n          // Stop when it's a blank image\n          if (!url) {\n            return;\n          }\n\n          // e.g.: \"https://example.com/img/picture.jpg\"\n          url = element.src;\n        } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n          url = element.toDataURL();\n        }\n        this.load(url);\n      }\n    }, {\n      key: \"load\",\n      value: function load(url) {\n        var _this = this;\n        if (!url) {\n          return;\n        }\n        this.url = url;\n        this.imageData = {};\n        var element = this.element,\n          options = this.options;\n        if (!options.rotatable && !options.scalable) {\n          options.checkOrientation = false;\n        }\n\n        // Only IE10+ supports Typed Arrays\n        if (!options.checkOrientation || !window.ArrayBuffer) {\n          this.clone();\n          return;\n        }\n\n        // Detect the mime type of the image directly if it is a Data URL\n        if (REGEXP_DATA_URL.test(url)) {\n          // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n          if (REGEXP_DATA_URL_JPEG.test(url)) {\n            this.read(dataURLToArrayBuffer(url));\n          } else {\n            // Only a JPEG image may contains Exif Orientation information,\n            // the rest types of Data URLs are not necessary to check orientation at all.\n            this.clone();\n          }\n          return;\n        }\n\n        // 1. Detect the mime type of the image by a XMLHttpRequest.\n        // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n        var xhr = new XMLHttpRequest();\n        var clone = this.clone.bind(this);\n        this.reloading = true;\n        this.xhr = xhr;\n\n        // 1. Cross origin requests are only supported for protocol schemes:\n        // http, https, data, chrome, chrome-extension.\n        // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n        // in some browsers as IE11 and Safari.\n        xhr.onabort = clone;\n        xhr.onerror = clone;\n        xhr.ontimeout = clone;\n        xhr.onprogress = function () {\n          // Abort the request directly if it not a JPEG image for better performance\n          if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n            xhr.abort();\n          }\n        };\n        xhr.onload = function () {\n          _this.read(xhr.response);\n        };\n        xhr.onloadend = function () {\n          _this.reloading = false;\n          _this.xhr = null;\n        };\n\n        // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n        if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n          url = addTimestamp(url);\n        }\n\n        // The third parameter is required for avoiding side-effect (#682)\n        xhr.open('GET', url, true);\n        xhr.responseType = 'arraybuffer';\n        xhr.withCredentials = element.crossOrigin === 'use-credentials';\n        xhr.send();\n      }\n    }, {\n      key: \"read\",\n      value: function read(arrayBuffer) {\n        var options = this.options,\n          imageData = this.imageData;\n\n        // Reset the orientation value to its default value 1\n        // as some iOS browsers will render image with its orientation\n        var orientation = resetAndGetOrientation(arrayBuffer);\n        var rotate = 0;\n        var scaleX = 1;\n        var scaleY = 1;\n        if (orientation > 1) {\n          // Generate a new URL which has the default orientation value\n          this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n          var _parseOrientation = parseOrientation(orientation);\n          rotate = _parseOrientation.rotate;\n          scaleX = _parseOrientation.scaleX;\n          scaleY = _parseOrientation.scaleY;\n        }\n        if (options.rotatable) {\n          imageData.rotate = rotate;\n        }\n        if (options.scalable) {\n          imageData.scaleX = scaleX;\n          imageData.scaleY = scaleY;\n        }\n        this.clone();\n      }\n    }, {\n      key: \"clone\",\n      value: function clone() {\n        var element = this.element,\n          url = this.url;\n        var crossOrigin = element.crossOrigin;\n        var crossOriginUrl = url;\n        if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n          if (!crossOrigin) {\n            crossOrigin = 'anonymous';\n          }\n\n          // Bust cache when there is not a \"crossOrigin\" property (#519)\n          crossOriginUrl = addTimestamp(url);\n        }\n        this.crossOrigin = crossOrigin;\n        this.crossOriginUrl = crossOriginUrl;\n        var image = document.createElement('img');\n        if (crossOrigin) {\n          image.crossOrigin = crossOrigin;\n        }\n        image.src = crossOriginUrl || url;\n        image.alt = element.alt || 'The image to crop';\n        this.image = image;\n        image.onload = this.start.bind(this);\n        image.onerror = this.stop.bind(this);\n        addClass(image, CLASS_HIDE);\n        element.parentNode.insertBefore(image, element.nextSibling);\n      }\n    }, {\n      key: \"start\",\n      value: function start() {\n        var _this2 = this;\n        var image = this.image;\n        image.onload = null;\n        image.onerror = null;\n        this.sizing = true;\n\n        // Match all browsers that use WebKit as the layout engine in iOS devices,\n        // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n        var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n        var done = function done(naturalWidth, naturalHeight) {\n          assign(_this2.imageData, {\n            naturalWidth: naturalWidth,\n            naturalHeight: naturalHeight,\n            aspectRatio: naturalWidth / naturalHeight\n          });\n          _this2.initialImageData = assign({}, _this2.imageData);\n          _this2.sizing = false;\n          _this2.sized = true;\n          _this2.build();\n        };\n\n        // Most modern browsers (excepts iOS WebKit)\n        if (image.naturalWidth && !isIOSWebKit) {\n          done(image.naturalWidth, image.naturalHeight);\n          return;\n        }\n        var sizingImage = document.createElement('img');\n        var body = document.body || document.documentElement;\n        this.sizingImage = sizingImage;\n        sizingImage.onload = function () {\n          done(sizingImage.width, sizingImage.height);\n          if (!isIOSWebKit) {\n            body.removeChild(sizingImage);\n          }\n        };\n        sizingImage.src = image.src;\n\n        // iOS WebKit will convert the image automatically\n        // with its orientation once append it into DOM (#279)\n        if (!isIOSWebKit) {\n          sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n          body.appendChild(sizingImage);\n        }\n      }\n    }, {\n      key: \"stop\",\n      value: function stop() {\n        var image = this.image;\n        image.onload = null;\n        image.onerror = null;\n        image.parentNode.removeChild(image);\n        this.image = null;\n      }\n    }, {\n      key: \"build\",\n      value: function build() {\n        if (!this.sized || this.ready) {\n          return;\n        }\n        var element = this.element,\n          options = this.options,\n          image = this.image;\n\n        // Create cropper elements\n        var container = element.parentNode;\n        var template = document.createElement('div');\n        template.innerHTML = TEMPLATE;\n        var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n        var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n        var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n        var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n        var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n        this.container = container;\n        this.cropper = cropper;\n        this.canvas = canvas;\n        this.dragBox = dragBox;\n        this.cropBox = cropBox;\n        this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n        this.face = face;\n        canvas.appendChild(image);\n\n        // Hide the original image\n        addClass(element, CLASS_HIDDEN);\n\n        // Inserts the cropper after to the current image\n        container.insertBefore(cropper, element.nextSibling);\n\n        // Show the hidden image\n        removeClass(image, CLASS_HIDE);\n        this.initPreview();\n        this.bind();\n        options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n        options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n        options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n        addClass(cropBox, CLASS_HIDDEN);\n        if (!options.guides) {\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n        }\n        if (!options.center) {\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n        }\n        if (options.background) {\n          addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n        }\n        if (!options.highlight) {\n          addClass(face, CLASS_INVISIBLE);\n        }\n        if (options.cropBoxMovable) {\n          addClass(face, CLASS_MOVE);\n          setData(face, DATA_ACTION, ACTION_ALL);\n        }\n        if (!options.cropBoxResizable) {\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n        }\n        this.render();\n        this.ready = true;\n        this.setDragMode(options.dragMode);\n        if (options.autoCrop) {\n          this.crop();\n        }\n        this.setData(options.data);\n        if (isFunction(options.ready)) {\n          addListener(element, EVENT_READY, options.ready, {\n            once: true\n          });\n        }\n        dispatchEvent(element, EVENT_READY);\n      }\n    }, {\n      key: \"unbuild\",\n      value: function unbuild() {\n        if (!this.ready) {\n          return;\n        }\n        this.ready = false;\n        this.unbind();\n        this.resetPreview();\n        var parentNode = this.cropper.parentNode;\n        if (parentNode) {\n          parentNode.removeChild(this.cropper);\n        }\n        removeClass(this.element, CLASS_HIDDEN);\n      }\n    }, {\n      key: \"uncreate\",\n      value: function uncreate() {\n        if (this.ready) {\n          this.unbuild();\n          this.ready = false;\n          this.cropped = false;\n        } else if (this.sizing) {\n          this.sizingImage.onload = null;\n          this.sizing = false;\n          this.sized = false;\n        } else if (this.reloading) {\n          this.xhr.onabort = null;\n          this.xhr.abort();\n        } else if (this.image) {\n          this.stop();\n        }\n      }\n\n      /**\n       * Get the no conflict cropper class.\n       * @returns {Cropper} The cropper class.\n       */\n    }], [{\n      key: \"noConflict\",\n      value: function noConflict() {\n        window.Cropper = AnotherCropper;\n        return Cropper;\n      }\n\n      /**\n       * Change the default options.\n       * @param {Object} options - The new default options.\n       */\n    }, {\n      key: \"setDefaults\",\n      value: function setDefaults(options) {\n        assign(DEFAULTS, isPlainObject(options) && options);\n      }\n    }]);\n  }();\n  assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n  return Cropper;\n\n}));\n", "'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n", "'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n  try {\n    return decodeURIComponent(input.replace(/\\+/g, ' '));\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n  try {\n    return encodeURIComponent(input);\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?#&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  while (part = parser.exec(query)) {\n    var key = decode(part[1])\n      , value = decode(part[2]);\n\n    //\n    // Prevent overriding of existing properties. This ensures that build-in\n    // methods like `toString` or __proto__ are not overriden by malicious\n    // querystrings.\n    //\n    // In the case if failed decoding, we want to omit the key/value pairs\n    // from the result.\n    //\n    if (key === null || value === null || key in result) continue;\n    result[key] = value;\n  }\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = []\n    , value\n    , key;\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (key in obj) {\n    if (has.call(obj, key)) {\n      value = obj[key];\n\n      //\n      // Edge cases where we actually want to encode the value to an empty\n      // string instead of the stringified value.\n      //\n      if (!value && (value === null || value === undef || isNaN(value))) {\n        value = '';\n      }\n\n      key = encode(key);\n      value = encode(value);\n\n      //\n      // If we failed to encode the strings, we should bail out as we don't\n      // want to add invalid strings to the query.\n      //\n      if (key === null || value === null) continue;\n      pairs.push(key +'='+ value);\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n", "'use strict';\n\nvar required = require('requires-port')\n  , qs = require('querystringify')\n  , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n  , CRHTLF = /[\\n\\r\\t]/g\n  , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n  , port = /:\\d+$/\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n  , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n *     characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n  return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  function sanitize(address, url) {     // Sanitize what is left of the address\n    return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n  },\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d*)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n  var globalVar;\n\n  if (typeof window !== 'undefined') globalVar = window;\n  else if (typeof global !== 'undefined') globalVar = global;\n  else if (typeof self !== 'undefined') globalVar = self;\n  else globalVar = {};\n\n  var location = globalVar.location || {};\n  loc = loc || location;\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new Url(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new Url(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n  return (\n    scheme === 'file:' ||\n    scheme === 'ftp:' ||\n    scheme === 'http:' ||\n    scheme === 'https:' ||\n    scheme === 'ws:' ||\n    scheme === 'wss:'\n  );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n  location = location || {};\n\n  var match = protocolre.exec(address);\n  var protocol = match[1] ? match[1].toLowerCase() : '';\n  var forwardSlashes = !!match[2];\n  var otherSlashes = !!match[3];\n  var slashesCount = 0;\n  var rest;\n\n  if (forwardSlashes) {\n    if (otherSlashes) {\n      rest = match[2] + match[3] + match[4];\n      slashesCount = match[2].length + match[3].length;\n    } else {\n      rest = match[2] + match[4];\n      slashesCount = match[2].length;\n    }\n  } else {\n    if (otherSlashes) {\n      rest = match[3] + match[4];\n      slashesCount = match[3].length;\n    } else {\n      rest = match[4]\n    }\n  }\n\n  if (protocol === 'file:') {\n    if (slashesCount >= 2) {\n      rest = rest.slice(2);\n    }\n  } else if (isSpecial(protocol)) {\n    rest = match[4];\n  } else if (protocol) {\n    if (forwardSlashes) {\n      rest = rest.slice(2);\n    }\n  } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n    rest = match[4];\n  }\n\n  return {\n    protocol: protocol,\n    slashes: forwardSlashes || isSpecial(protocol),\n    slashesCount: slashesCount,\n    rest: rest\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n  if (relative === '') return base;\n\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n\n  if (!(this instanceof Url)) {\n    return new Url(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '', location);\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (\n    extracted.protocol === 'file:' && (\n      extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n    (!extracted.slashes &&\n      (extracted.protocol ||\n        extracted.slashesCount < 2 ||\n        !isSpecial(url.protocol)))\n  ) {\n    instructions[3] = [/(.*)/, 'pathname'];\n  }\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n\n    if (typeof instruction === 'function') {\n      address = instruction(address, url);\n      continue;\n    }\n\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      index = parse === '@'\n        ? address.lastIndexOf(parse)\n        : address.indexOf(parse);\n\n      if (~index) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // Default to a / for pathname if none exists. This normalizes the URL\n  // to always have a /\n  //\n  if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n    url.pathname = '/' + url.pathname;\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!required(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n\n  if (url.auth) {\n    index = url.auth.indexOf(':');\n\n    if (~index) {\n      url.username = url.auth.slice(0, index);\n      url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n      url.password = url.auth.slice(index + 1);\n      url.password = encodeURIComponent(decodeURIComponent(url.password))\n    } else {\n      url.username = encodeURIComponent(decodeURIComponent(url.auth));\n    }\n\n    url.auth = url.password ? url.username +':'+ url.password : url.username;\n  }\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || qs.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!required(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (port.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n    case 'hash':\n      if (value) {\n        var char = part === 'pathname' ? '/' : '#';\n        url[part] = value.charAt(0) !== char ? char + value : value;\n      } else {\n        url[part] = value;\n      }\n      break;\n\n    case 'username':\n    case 'password':\n      url[part] = encodeURIComponent(value);\n      break;\n\n    case 'auth':\n      var index = value.indexOf(':');\n\n      if (~index) {\n        url.username = value.slice(0, index);\n        url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n        url.password = value.slice(index + 1);\n        url.password = encodeURIComponent(decodeURIComponent(url.password));\n      } else {\n        url.username = encodeURIComponent(decodeURIComponent(value));\n      }\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n  var query\n    , url = this\n    , host = url.host\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result =\n    protocol +\n    ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  } else if (url.password) {\n    result += ':'+ url.password;\n    result += '@';\n  } else if (\n    url.protocol !== 'file:' &&\n    isSpecial(url.protocol) &&\n    !host &&\n    url.pathname !== '/'\n  ) {\n    //\n    // Add back the empty userinfo, otherwise the original invalid URL\n    // might be transformed into a valid one with `url.pathname` as host.\n    //\n    result += '@';\n  }\n\n  //\n  // Trailing colon is removed from `url.host` when it is parsed. If it still\n  // ends with a colon, then add back the trailing colon that was removed. This\n  // prevents an invalid URL from being transformed into a valid one.\n  //\n  if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n    host += ':';\n  }\n\n  result += host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n", "function Emitter(object) {\n\tif (object) {\n\t\treturn mixin(object);\n\t}\n\n\tthis._callbacks = new Map();\n}\n\nfunction mixin(object) {\n\tObject.assign(object, Emitter.prototype);\n\tobject._callbacks = new Map();\n\treturn object;\n}\n\nEmitter.prototype.on = function (event, listener) {\n\tconst callbacks = this._callbacks.get(event) ?? [];\n\tcallbacks.push(listener);\n\tthis._callbacks.set(event, callbacks);\n\treturn this;\n};\n\nEmitter.prototype.once = function (event, listener) {\n\tconst on = (...arguments_) => {\n\t\tthis.off(event, on);\n\t\tlistener.apply(this, arguments_);\n\t};\n\n\ton.fn = listener;\n\tthis.on(event, on);\n\treturn this;\n};\n\nEmitter.prototype.off = function (event, listener) {\n\tif (event === undefined && listener === undefined) {\n\t\tthis._callbacks.clear();\n\t\treturn this;\n\t}\n\n\tif (listener === undefined) {\n\t\tthis._callbacks.delete(event);\n\t\treturn this;\n\t}\n\n\tconst callbacks = this._callbacks.get(event);\n\tif (callbacks) {\n\t\tfor (const [index, callback] of callbacks.entries()) {\n\t\t\tif (callback === listener || callback.fn === listener) {\n\t\t\t\tcallbacks.splice(index, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (callbacks.length === 0) {\n\t\t\tthis._callbacks.delete(event);\n\t\t} else {\n\t\t\tthis._callbacks.set(event, callbacks);\n\t\t}\n\t}\n\n\treturn this;\n};\n\nEmitter.prototype.emit = function (event, ...arguments_) {\n\tconst callbacks = this._callbacks.get(event);\n\tif (callbacks) {\n\t\t// Create a copy of the callbacks array to avoid issues if it's modified during iteration\n\t\tconst callbacksCopy = [...callbacks];\n\n\t\tfor (const callback of callbacksCopy) {\n\t\t\tcallback.apply(this, arguments_);\n\t\t}\n\t}\n\n\treturn this;\n};\n\nEmitter.prototype.listeners = function (event) {\n\treturn this._callbacks.get(event) ?? [];\n};\n\nEmitter.prototype.listenerCount = function (event) {\n\tif (event) {\n\t\treturn this.listeners(event).length;\n\t}\n\n\tlet totalCount = 0;\n\tfor (const callbacks of this._callbacks.values()) {\n\t\ttotalCount += callbacks.length;\n\t}\n\n\treturn totalCount;\n};\n\nEmitter.prototype.hasListeners = function (event) {\n\treturn this.listenerCount(event) > 0;\n};\n\n// Aliases\nEmitter.prototype.addEventListener = Emitter.prototype.on;\nEmitter.prototype.removeListener = Emitter.prototype.off;\nEmitter.prototype.removeEventListener = Emitter.prototype.off;\nEmitter.prototype.removeAllListeners = Emitter.prototype.off;\n\nif (typeof module !== 'undefined') {\n\tmodule.exports = Emitter;\n}\n", "'use strict'\n\nmodule.exports = isMobile\nmodule.exports.isMobile = isMobile\nmodule.exports.default = isMobile\n\nconst mobileRE = /(android|bb\\d+|meego).+mobile|armv7l|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i\nconst notMobileRE = /CrOS/\n\nconst tabletRE = /android|ipad|playbook|silk/i\n\nfunction isMobile (opts) {\n  if (!opts) opts = {}\n  let ua = opts.ua\n  if (!ua && typeof navigator !== 'undefined') ua = navigator.userAgent\n  if (ua && ua.headers && typeof ua.headers['user-agent'] === 'string') {\n    ua = ua.headers['user-agent']\n  }\n  if (typeof ua !== 'string') return false\n\n  let result =\n    (mobileRE.test(ua) && !notMobileRE.test(ua)) ||\n    (!!opts.tablet && tabletRE.test(ua))\n\n  if (\n    !result &&\n    opts.tablet &&\n    opts.featureDetect &&\n    navigator &&\n    navigator.maxTouchPoints > 1 &&\n    ua.indexOf('Macintosh') !== -1 &&\n    ua.indexOf('Safari') !== -1\n  ) {\n    result = true\n  }\n\n  return result\n}\n", "export default function hasProperty(object, key) {\n    return Object.hasOwn(object, key);\n}\n", "import hasProperty from './hasProperty.js';\n/**\n * Little AbortController proxy module so we can swap out the implementation easily later.\n */\nexport const { AbortController } = globalThis;\nexport const { AbortSignal } = globalThis;\nexport const createAbortError = (message = 'Aborted', options) => {\n    const err = new DOMException(message, 'AbortError');\n    if (options != null && hasProperty(options, 'cause')) {\n        Object.defineProperty(err, 'cause', {\n            // @ts-expect-error TS is drunk\n            __proto__: null,\n            configurable: true,\n            writable: true,\n            value: options.cause,\n        });\n    }\n    return err;\n};\n", "/**\n * Save a <canvas> element's content to a Blob object.\n *\n * @param {HTMLCanvasElement} canvas\n * @returns {Promise}\n */\nexport default function canvasToBlob(canvas, type, quality) {\n    return new Promise((resolve) => {\n        canvas.toBlob(resolve, type, quality);\n    });\n}\n", "const DATA_URL_PATTERN = /^data:([^/]+\\/[^,;]+(?:[^,]*?))(;base64)?,([\\s\\S]*)$/;\nfunction dataURItoBlob(dataURI, opts, toFile) {\n    // get the base64 data\n    const dataURIData = DATA_URL_PATTERN.exec(dataURI);\n    // user may provide mime type, if not get it from data URI\n    const mimeType = opts.mimeType ?? dataURIData?.[1] ?? 'plain/text';\n    let data; // We add `!` to tell TS we're OK with `data` being not defined when the dataURI is invalid.\n    if (dataURIData?.[2] != null) {\n        const binary = atob(decodeURIComponent(dataURIData[3]));\n        const bytes = new Uint8Array(binary.length);\n        for (let i = 0; i < binary.length; i++) {\n            bytes[i] = binary.charCodeAt(i);\n        }\n        data = [bytes];\n    }\n    else if (dataURIData?.[3] != null) {\n        data = [decodeURIComponent(dataURIData[3])];\n    }\n    // Convert to a File?\n    if (toFile) {\n        return new File(data, opts.name || '', { type: mimeType });\n    }\n    return new Blob(data, { type: mimeType });\n}\nexport default dataURItoBlob;\n", "import hasProperty from './hasProperty.js';\nclass ErrorWithCause extends Error {\n    isNetworkError;\n    cause;\n    constructor(message, options) {\n        super(message);\n        this.cause = options?.cause;\n        if (this.cause && hasProperty(this.cause, 'isNetworkError')) {\n            this.isNetworkError = this.cause.isNetworkError;\n        }\n        else {\n            this.isNetworkError = false;\n        }\n    }\n}\nexport default ErrorWithCause;\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", "export default [\n    'a[href]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])',\n    'area[href]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])',\n    'input:not([disabled]):not([inert]):not([aria-hidden])',\n    'select:not([disabled]):not([inert]):not([aria-hidden])',\n    'textarea:not([disabled]):not([inert]):not([aria-hidden])',\n    'button:not([disabled]):not([inert]):not([aria-hidden])',\n    'iframe:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])',\n    'object:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])',\n    'embed:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])',\n    '[contenteditable]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])',\n    '[tabindex]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])',\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            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            function 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            signal?.addEventListener('abort', abort);\n            if (signal?.aborted) {\n                // in case the signal was already aborted\n                abort();\n                return;\n            }\n            await onBeforeRequest(xhr, retryCount);\n            xhr.send(body);\n        });\n    }\n    return requestWithRetry();\n}\n", "import NetworkError from './NetworkError.js';\n/**\n * Wrapper around window.fetch that throws a NetworkError when appropriate\n */\nexport default function fetchWithNetworkError(...options) {\n    return fetch(...options).catch((err) => {\n        if (err.name === 'AbortError') {\n            throw err;\n        }\n        else {\n            throw new NetworkError(err);\n        }\n    });\n}\n", "const hasError = (file) => 'error' in file && !!file.error;\n// We don't need to re-upload already successfully uploaded files\n// so let's exclude them here:\n// https://github.com/transloadit/uppy/issues/5930\n// This happens for example when restoring a partially finished session (e.g. using golden retriever).\nconst isCompleted = (file) => file.progress.uploadComplete;\nexport function filterFilesToUpload(files) {\n    return files.filter((file) => !hasError(file) && !isCompleted(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", "/**\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';\n/**\n * Find one or more DOM elements.\n */\nfunction findAllDOMElements(element) {\n    if (typeof element === 'string') {\n        const elements = document.querySelectorAll(element);\n        return elements.length === 0 ? null : Array.from(elements);\n    }\n    if (typeof element === 'object' && isDOMElement(element)) {\n        return [element];\n    }\n    return null;\n}\nexport default findAllDOMElements;\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 * 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", "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", "/**\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", "const mimeToExtensions = {\n    __proto__: null,\n    'audio/mp3': 'mp3',\n    'audio/mp4': 'mp4',\n    'audio/ogg': 'ogg',\n    'audio/webm': 'webm',\n    'image/gif': 'gif',\n    'image/heic': 'heic',\n    'image/heif': 'heif',\n    'image/jpeg': 'jpg',\n    'image/webp': 'webp',\n    'image/png': 'png',\n    'image/svg+xml': 'svg',\n    'video/mp4': 'mp4',\n    'video/ogg': 'ogv',\n    'video/quicktime': 'mov',\n    'video/webm': 'webm',\n    'video/x-matroska': 'mkv',\n    'video/x-msvideo': 'avi',\n};\nexport default function getFileTypeExtension(mimeType) {\n    // Remove the ; bit in 'video/x-matroska;codecs=avc1'\n    ;\n    [mimeType] = mimeType.split(';', 1);\n    return mimeToExtensions[mimeType] || null;\n}\n", "export default function getSocketHost(url) {\n    // get the host domain\n    const regex = /^(?:https?:\\/\\/|\\/\\/)?(?:[^@\\n]+@)?([^\\n]+)/i;\n    const host = regex.exec(url)?.[1];\n    const socketProtocol = /^http:\\/\\//i.test(url) ? 'ws' : 'wss';\n    return `${socketProtocol}://${host}`;\n}\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", "/**\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", "/**\n * Checks if the browser supports Drag & Drop (not supported on mobile devices, for example).\n */\nexport default function isDragDropSupported() {\n    if (typeof window === 'undefined') {\n        return false;\n    }\n    const body = document.body;\n    // sometimes happens in the wild: https://github.com/transloadit/uppy/issues/5953\n    if (body == null || window == null) {\n        return false;\n    }\n    if (!('draggable' in body) ||\n        !('ondragstart' in body) ||\n        !('ondrop' in body)) {\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", "function isNetworkError(xhr) {\n    if (!xhr)\n        return false;\n    // finished but status is 0 \u2014 usually indicates a network/CORS/file error\n    return xhr.readyState === 4 && xhr.status === 0;\n}\nexport default isNetworkError;\n", "/**\n * Check if a URL string is an object URL from `URL.createObjectURL`.\n */\nexport default function isObjectURL(url) {\n    return url.startsWith('blob:');\n}\n", "export default function isPreviewSupported(fileType) {\n    if (!fileType)\n        return false;\n    // list of images that browsers can preview\n    return /^[^/]+\\/(jpe?g|gif|png|svg|svg\\+xml|bmp|webp|avif)$/.test(fileType);\n}\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", "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", "import getFileNameAndExtension from './getFileNameAndExtension.js';\nexport default function remoteFileObjToLocal(file) {\n    return {\n        ...file,\n        type: file.mimeType,\n        extension: file.name ? getFileNameAndExtension(file.name).extension : null,\n    };\n}\n", "/**\n * A concurrent task queue with FIFO ordering.\n *\n * Tasks are functions that receive an AbortSignal and return a Promise.\n * The queue manages concurrency and processes tasks in insertion order.\n *\n * @example\n * ```ts\n * const queue = new TaskQueue({ concurrency: 3 })\n *\n * const promise = queue.add(async (signal) => {\n *   const response = await fetch(url, { signal })\n *   return response.json()\n * })\n *\n * // To abort:\n * promise.abort()\n * ```\n */\nexport class TaskQueue {\n    #queue = [];\n    #running = 0;\n    #concurrency;\n    #paused = false;\n    constructor(options) {\n        const limit = options?.concurrency;\n        this.#concurrency =\n            typeof limit !== 'number' || limit === 0 ? Infinity : limit;\n    }\n    /**\n     * Add a task to the queue.\n     *\n     * @param task - Function receiving AbortSignal, returns Promise\n     * @returns AbortablePromise that resolves with task result\n     */\n    add(task) {\n        const controller = new AbortController();\n        let resolve;\n        let reject;\n        const promise = new Promise((res, rej) => {\n            resolve = res;\n            reject = rej;\n        });\n        const queuedTask = {\n            run: () => task(controller.signal),\n            resolve,\n            reject,\n            controller,\n        };\n        // Handle abort while queued\n        controller.signal.addEventListener('abort', () => {\n            const index = this.#queue.indexOf(queuedTask);\n            if (index !== -1) {\n                this.#queue.splice(index, 1);\n                reject(controller.signal.reason ??\n                    new DOMException('Aborted', 'AbortError'));\n            }\n        }, { once: true });\n        promise.abort = (reason) => {\n            controller.abort(reason ?? new DOMException('Aborted', 'AbortError'));\n        };\n        // Legacy compatibility: abortOn method\n        promise.abortOn = (signal) => {\n            if (signal) {\n                const onAbort = () => promise.abort(signal.reason);\n                signal.addEventListener('abort', onAbort, { once: true });\n                promise.then(() => signal.removeEventListener('abort', onAbort), () => signal.removeEventListener('abort', onAbort));\n            }\n            return promise;\n        };\n        // Run immediately or queue\n        if (!this.#paused && this.#running < this.#concurrency) {\n            this.#execute(queuedTask);\n        }\n        else {\n            this.#queue.push(queuedTask);\n        }\n        return promise;\n    }\n    #execute(task) {\n        this.#running++;\n        // Check if already aborted before starting\n        if (task.controller.signal.aborted) {\n            this.#running--;\n            task.reject(task.controller.signal.reason ??\n                new DOMException('Aborted', 'AbortError'));\n            this.#advance();\n            return;\n        }\n        let runPromise;\n        try {\n            runPromise = task.run();\n        }\n        catch (error) {\n            runPromise = Promise.reject(error);\n        }\n        runPromise\n            .then((result) => {\n            if (task.controller.signal.aborted) {\n                task.reject(task.controller.signal.reason ??\n                    new DOMException('Aborted', 'AbortError'));\n            }\n            else {\n                task.resolve(result);\n            }\n        }, (error) => {\n            task.reject(error);\n        })\n            .finally(() => {\n            this.#running--;\n            this.#advance();\n        });\n    }\n    #advance() {\n        // Use microtask to allow batch aborts without starting new tasks\n        queueMicrotask(() => {\n            if (this.#paused || this.#running >= this.#concurrency)\n                return;\n            while (this.#queue.length > 0) {\n                const next = this.#queue.shift();\n                if (next.controller.signal.aborted)\n                    continue;\n                this.#execute(next);\n                return;\n            }\n        });\n    }\n    /**\n     * Pause the queue. Running tasks continue, but no new tasks start.\n     */\n    pause() {\n        this.#paused = true;\n    }\n    /**\n     * Resume the queue and start processing pending tasks.\n     */\n    resume() {\n        this.#paused = false;\n        // Kick off tasks up to concurrency limit\n        const available = this.#concurrency - this.#running;\n        for (let i = 0; i < available; i++) {\n            this.#advance();\n        }\n    }\n    /**\n     * Clear all pending tasks from the queue.\n     * Running tasks are not affected.\n     *\n     * @param reason - Optional reason for rejection (defaults to AbortError)\n     */\n    clear(reason) {\n        const tasks = this.#queue.splice(0);\n        const error = reason ?? new DOMException('Cleared', 'AbortError');\n        for (const task of tasks) {\n            task.controller.abort(error);\n            task.reject(error);\n        }\n    }\n    get concurrency() {\n        return this.#concurrency;\n    }\n    set concurrency(value) {\n        this.#concurrency =\n            typeof value !== 'number' || value === 0 ? Infinity : value;\n        // If concurrency increased, try to start more tasks\n        if (!this.#paused) {\n            const available = this.#concurrency - this.#running;\n            for (let i = 0; i < available; i++) {\n                this.#advance();\n            }\n        }\n    }\n    get pending() {\n        return this.#queue.length;\n    }\n    get running() {\n        return this.#running;\n    }\n    get isPaused() {\n        return this.#paused;\n    }\n    /**\n     * @deprecated Legacy compatibility wrapper for RateLimitedQueue API.\n     * Wraps a function so that when called, it's queued and returns an AbortablePromise.\n     * Note: for legacy compatibility with RateLimitedQueue, the wrapped function\n     * does not receive this queue's AbortSignal. Aborting the returned promise\n     * will reject it, but it will not automatically cancel work inside the wrapped\n     * function unless that function is wired to an external AbortSignal.\n     */\n    wrapPromiseFunction(fn) {\n        return (...args) => {\n            return this.add((signal) => {\n                // The wrapped function doesn't receive signal directly,\n                // caller is responsible for using signal if needed\n                void signal;\n                return fn(...args);\n            });\n        };\n    }\n}\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 * Truncates a string to the given number of chars (maxLength) by inserting '...' in the middle of that string.\n * Partially taken from https://stackoverflow.com/a/5723274/3192470.\n */\nconst separator = '...';\nexport default function truncateString(string, maxLength) {\n    // Return the empty string if maxLength is zero\n    if (maxLength === 0)\n        return '';\n    // Return original string if it's already shorter than maxLength\n    if (string.length <= maxLength)\n        return string;\n    // Return truncated substring appended of the ellipsis char if string can't be meaningfully truncated\n    if (maxLength <= separator.length + 1)\n        return `${string.slice(0, maxLength - 1)}\u2026`;\n    const charsToShow = maxLength - separator.length;\n    const frontChars = Math.ceil(charsToShow / 2);\n    const backChars = Math.floor(charsToShow / 2);\n    return string.slice(0, frontChars) + separator + string.slice(-backChars);\n}\n", "class UserFacingApiError extends Error {\n    name = 'UserFacingApiError';\n}\nexport default UserFacingApiError;\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\tlet oldVNode = component._vnode,\n\t\toldDom = oldVNode._dom,\n\t\tcommitQueue = [],\n\t\trefQueue = [];\n\n\tif (component._parentDom) {\n\t\tconst newVNode = 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\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child != NULL && child._dom != NULL) {\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\n\t\t\t\tbreak;\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\tlet c,\n\t\tl = 1;\n\n\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t// process() calls from getting scheduled while `queue` is still being consumed.\n\twhile (rerenderQueue.length) {\n\t\t// Keep the rerender queue sorted by (depth, insertion order). The queue\n\t\t// will initially be sorted on the first iteration only if it has more than 1 item.\n\t\t//\n\t\t// New items can be added to the queue e.g. when rerendering a provider, so we want to\n\t\t// keep the order from top to bottom with those new items so we can handle them in a\n\t\t// single pass\n\t\tif (rerenderQueue.length > l) {\n\t\t\trerenderQueue.sort(depthSort);\n\t\t}\n\n\t\tc = rerenderQueue.shift();\n\t\tl = rerenderQueue.length;\n\n\t\tif (c._dirty) {\n\t\t\trenderComponent(c);\n\t\t}\n\t}\n\tprocess._rerenderCount = 0;\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\tif (childVNode._index == -1) {\n\t\t\toldVNode = EMPTY_OBJ;\n\t\t} else {\n\t\t\toldVNode = oldChildren[childVNode._index] || EMPTY_OBJ;\n\t\t}\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_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 =\n\t\t\t\t'prototype' in newType && 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\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t\t}\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\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t}\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 isTopLevelFragment =\n\t\t\t\ttmp != NULL && tmp.type === Fragment && tmp.key == NULL;\n\t\t\tlet renderResult = tmp;\n\n\t\t\tif (isTopLevelFragment) {\n\t\t\t\trenderResult = cloneNode(tmp.props.children);\n\t\t\t}\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 && vnode._component) vnode._component._force = true;\n\tif (vnode && vnode._children) vnode._children.forEach(markAsForce);\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 (\n\t\ttypeof node != 'object' ||\n\t\tnode == NULL ||\n\t\t(node._depth && node._depth > 0)\n\t) {\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 == 'children') {\n\t\t\t} else if (i == 'dangerouslySetInnerHTML') {\n\t\t\t\toldHtml = value;\n\t\t\t} else if (!(i in newProps)) {\n\t\t\t\tif (\n\t\t\t\t\t(i == 'value' && 'defaultValue' in newProps) ||\n\t\t\t\t\t(i == 'checked' && 'defaultChecked' in newProps)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\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", "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 { 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.forEach(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.forEach(invokeCleanup);\n\t\t\thooks._pendingEffects.forEach(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.forEach(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.forEach(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.forEach(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\t/** @type {(x: import('./internal').HookState) => x is import('./internal').ReducerHookState} */\n\t\t\t\tconst isStateHook = x => !!x._component;\n\t\t\t\tconst stateHooks =\n\t\t\t\t\thookState._component.__hooks._list.filter(isStateHook);\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.forEach(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\tif (!component._parentDom || !component.__hooks) continue;\n\t\ttry {\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeCleanup);\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeEffect);\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t} catch (e) {\n\t\t\tcomponent.__hooks._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", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\nconst STYLE_INNER = {\n    position: 'relative',\n    // Disabled for our use case: the wrapper elements around FileList already deal with overflow,\n    // and this additional property would hide things that we want to show.\n    //\n    // overflow: 'hidden',\n    width: '100%',\n    minHeight: '100%',\n};\nconst STYLE_CONTENT = {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    // Because the `top` value gets set to some offset, this `height` being 100% would make the scrollbar\n    // stretch far beyond the content. For our use case, the content div actually can get its height from\n    // the elements inside it, so we don't need to specify a `height` property at all.\n    //\n    // height: '100%',\n    width: '100%',\n    overflow: 'visible',\n};\nexport default function VirtualList({ data, rowHeight, renderRow, overscanCount = 10, padding = 4, ...props }) {\n    const scrollerRef = useRef(null);\n    const [offset, setOffset] = useState(0);\n    const [height, setHeight] = useState(0);\n    useEffect(() => {\n        function resize() {\n            if (scrollerRef.current != null &&\n                height !== scrollerRef.current.offsetHeight) {\n                setHeight(scrollerRef.current.offsetHeight);\n            }\n        }\n        resize();\n        window.addEventListener('resize', resize);\n        return () => {\n            window.removeEventListener('resize', resize);\n        };\n    }, [height]);\n    const handleScroll = useCallback(() => {\n        if (scrollerRef.current)\n            setOffset(scrollerRef.current.scrollTop);\n    }, []);\n    // first visible row index\n    let start = Math.floor(offset / rowHeight);\n    // actual number of visible rows (without overscan)\n    let visibleRowCount = Math.floor(height / rowHeight);\n    // Overscan: render blocks of rows modulo an overscan row count\n    // This dramatically reduces DOM writes during scrolling\n    if (overscanCount) {\n        start = Math.max(0, start - (start % overscanCount));\n        visibleRowCount += overscanCount;\n    }\n    const end = start + visibleRowCount + padding;\n    // data slice currently in viewport plus overscan items\n    const selection = data.slice(start, end);\n    const styleInner = { ...STYLE_INNER, height: data.length * rowHeight };\n    const styleContent = { ...STYLE_CONTENT, top: start * rowHeight };\n    // The `role=\"presentation\"` attributes ensure that these wrapper elements are not treated as list\n    // items by accessibility and outline tools.\n    return (_jsx(\"div\", { onScroll: handleScroll, ref: scrollerRef, ...props, children: _jsx(\"div\", { role: \"presentation\", style: styleInner, children: _jsx(\"div\", { role: \"presentation\", style: styleContent, children: selection.map(renderRow) }) }) }));\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';\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 * 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", "import { getTimeStamp } from '@uppy/utils';\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", "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", "import { findDOMElement, getTextDirection } from '@uppy/utils';\nimport { render } from 'preact';\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\": \"5.0.0\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index.js\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"files\": [\n    \"src\",\n    \"lib\",\n    \"dist\",\n    \"CHANGELOG.md\"\n  ]\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", "/* global AggregateError */\nimport DefaultStore, {} from '@uppy/store-default';\nimport { getFileNameAndExtension, getFileType, getSafeFileId, Translator, } from '@uppy/utils';\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                meta: {},\n                isRemote: false,\n                source: undefined,\n                preview: undefined,\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 = {\n            ...file.meta,\n            name: fileName,\n            type: fileType,\n        };\n        // `null` means the size is unknown.\n        const size = Number.isFinite(file.data.size) ? file.data.size : 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            progress: {\n                percentage: 0,\n                bytesUploaded: false,\n                bytesTotal: size,\n                uploadComplete: false,\n                uploadStarted: null,\n            },\n            size,\n            isGhost: false,\n            ...(file.isRemote\n                ? {\n                    isRemote: true,\n                    remote: file.remote,\n                    data: file.data,\n                }\n                : {\n                    isRemote: false,\n                    data: file.data,\n                }),\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                this.#assertNewUploadAllowed(newFile);\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 existingFile = existingFiles[newFile.id];\n                const isGhost = existingFile?.isGhost;\n                if (isGhost && !newFile.isRemote) {\n                    if (newFile.data == null)\n                        throw new Error('File data is missing');\n                    newFile = {\n                        ...existingFile,\n                        isGhost: false,\n                        data: newFile.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: newFile });\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: newFile });\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        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        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    /**\n     * Retry a specific file that has errored.\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            const needsPostProcessing = this.#postProcessors.size > 0;\n            this.setFileState(file.id, {\n                progress: {\n                    ...currentProgress,\n                    postprocess: needsPostProcessing\n                        ? {\n                            mode: 'indeterminate',\n                        }\n                        : undefined,\n                    uploadComplete: true,\n                    ...(!needsPostProcessing && { complete: 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', (fileIn) => {\n            const file = fileIn && this.getFile(fileIn.id);\n            if (file == null) {\n                this.log(`Not setting progress for a file that has been removed: ${fileIn?.id}`);\n                return;\n            }\n            const { postprocess: _deleted, ...newProgress } = file.progress;\n            this.patchFilesState({\n                [file.id]: {\n                    progress: {\n                        ...newProgress,\n                        complete: true,\n                    },\n                },\n            });\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    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        }\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 (!('remote' in file && 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    async restore(uploadID) {\n        this.log(`Core: Running restored upload \"${uploadID}\"`);\n        const result = await this.#runUpload(uploadID);\n        this.emit('complete', result);\n        return result;\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 { [uploadID]: _deleted, ...currentUploads } = this.getState().currentUploads;\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        if (!currentUpload) {\n            throw new Error('Nonexistent upload');\n        }\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                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                if (!currentUpload) {\n                    break;\n                }\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            throw 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        try {\n            this.#restricter.validateMinNumberOfFiles(files);\n            if (!this.#checkRequiredMetaFields(files)) {\n                throw new RestrictionError(this.i18n('missingRequiredMetaField'));\n            }\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 = Object.keys(files).filter((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                return (file &&\n                    !file.progress.uploadStarted &&\n                    !currentlyUploadingFiles.includes(fileID));\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.#informAndEmit([err]);\n            throw err;\n        }\n    }\n}\nexport default Uppy;\n", "let 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\": \"5.2.0\",\n  \"license\": \"MIT\",\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@transloadit/prettier-bytes\": \"^0.3.4\",\n    \"@uppy/store-default\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"lodash\": \"^4.17.23\",\n    \"mime-match\": \"^1.0.2\",\n    \"namespace-emitter\": \"^2.0.1\",\n    \"nanoid\": \"^5.0.9\",\n    \"preact\": \"^10.26.10\"\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}\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", "// 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", "/**\n * Manages communications with Companion\n */\nexport { default as getAllowedHosts } from './getAllowedHosts.js';\nexport { default as Provider } from './Provider.js';\nexport { default as RequestClient } from './RequestClient.js';\nexport { default as SearchProvider } from './SearchProvider.js';\nexport * as tokenStorage from './tokenStorage.js';\n", "// https://stackoverflow.com/a/3561711/6519037\nfunction escapeRegex(string) {\n    return string.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\nfunction wrapInRegex(value) {\n    if (typeof value === 'string') {\n        return new RegExp(value); // throws if invalid regex\n    }\n    if (value instanceof RegExp) {\n        return value;\n    }\n    return undefined;\n}\nexport default function getAllowedHosts(companionAllowedHosts, companionUrl) {\n    if (companionAllowedHosts) {\n        const validate = (value) => {\n            if (!(typeof value === 'string' && wrapInRegex(value)) && // wrapInRegex throws if invalid regex\n                !(value instanceof RegExp)) {\n                throw new TypeError(`The option \"companionAllowedHosts\" must be one of string, Array, RegExp`);\n            }\n        };\n        if (Array.isArray(companionAllowedHosts)) {\n            companionAllowedHosts.every(validate);\n        }\n        else {\n            validate(companionAllowedHosts);\n        }\n        return companionAllowedHosts;\n    }\n    // if it does not start with https://, prefix it (and remove any leading slashes)\n    let ret = companionUrl;\n    if (/^(?!https?:\\/\\/).*$/i.test(ret)) {\n        ret = `https://${companionUrl.replace(/^\\/\\//, '')}`;\n    }\n    ret = new URL(ret).origin;\n    ret = escapeRegex(ret);\n    return ret;\n}\nexport function isOriginAllowed(origin, allowedOrigin) {\n    const patterns = Array.isArray(allowedOrigin)\n        ? allowedOrigin.map(wrapInRegex)\n        : [wrapInRegex(allowedOrigin)];\n    return patterns.some((pattern) => pattern?.test(origin) || pattern?.test(`${origin}/`)); // allowing for trailing '/'\n}\n", "import retry from 'retry';\nimport isNetworkError from 'is-network-error';\n\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nexport default async function pRetry(input, options) {\n\treturn new Promise((resolve, reject) => {\n\t\toptions = {\n\t\t\tonFailedAttempt() {},\n\t\t\tretries: 10,\n\t\t\tshouldRetry: () => true,\n\t\t\t...options,\n\t\t};\n\n\t\tconst operation = retry.operation(options);\n\n\t\tconst abortHandler = () => {\n\t\t\toperation.stop();\n\t\t\treject(options.signal?.reason);\n\t\t};\n\n\t\tif (options.signal && !options.signal.aborted) {\n\t\t\toptions.signal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tconst cleanUp = () => {\n\t\t\toptions.signal?.removeEventListener('abort', abortHandler);\n\t\t\toperation.stop();\n\t\t};\n\n\t\toperation.attempt(async attemptNumber => {\n\t\t\ttry {\n\t\t\t\tconst result = await input(attemptNumber);\n\t\t\t\tcleanUp();\n\t\t\t\tresolve(result);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t\t\tthrow new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof AbortError) {\n\t\t\t\t\t\tthrow error.originalError;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof TypeError && !isNetworkError(error)) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\t\tif (!(await options.shouldRetry(error))) {\n\t\t\t\t\t\toperation.stop();\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\n\t\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\t\tthrow operation.mainError();\n\t\t\t\t\t}\n\t\t\t\t} catch (finalError) {\n\t\t\t\t\tdecorateErrorWithCounts(finalError, attemptNumber, options);\n\t\t\t\t\tcleanUp();\n\t\t\t\t\treject(finalError);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n", "const objectToString = Object.prototype.toString;\n\nconst isError = value => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Load failed', // Safari 17+\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n]);\n\nexport default function isNetworkError(error) {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\t// We do an extra check for Safari 17+ as it has a very generic error message.\n\t// Network errors in Safari have no stack.\n\tif (error.message === 'Load failed') {\n\t\treturn error.stack === undefined;\n\t}\n\n\treturn errorMessages.has(error.message);\n}\n", "{\n  \"name\": \"@uppy/companion-client\",\n  \"description\": \"Client library for communication with Companion. Intended for use in Uppy plugins.\",\n  \"version\": \"5.1.1\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\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-plugin\",\n    \"companion\",\n    \"provider\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\",\n    \"namespace-emitter\": \"^2.0.1\",\n    \"p-retry\": \"^6.1.0\"\n  },\n  \"devDependencies\": {\n    \"jsdom\": \"^26.1.0\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  }\n}\n", "class AuthError extends Error {\n    isAuthError;\n    constructor() {\n        super('Authorization required');\n        this.name = 'AuthError';\n        // we use a property because of instanceof is unsafe:\n        // https://github.com/transloadit/uppy/pull/4619#discussion_r1406225982\n        this.isAuthError = true;\n    }\n}\nexport default AuthError;\n", "import { ErrorWithCause, fetchWithNetworkError, getSocketHost, UserFacingApiError, } from '@uppy/utils';\nimport pRetry, { AbortError } from 'p-retry';\nimport packageJson from '../package.json' with { type: 'json' };\nimport AuthError from './AuthError.js';\n// Remove the trailing slash so we can always safely append /xyz.\nfunction stripSlash(url) {\n    return url.replace(/\\/$/, '');\n}\nconst retryCount = 10; // set to a low number, like 2 to test manual user retries\nconst socketActivityTimeoutMs = 5 * 60 * 1000; // set to a low number like 10000 to test this\nexport const authErrorStatusCode = 401;\nclass HttpError extends Error {\n    statusCode;\n    constructor({ statusCode, message, }) {\n        super(message);\n        this.name = 'HttpError';\n        this.statusCode = statusCode;\n    }\n}\nasync function handleJSONResponse(res) {\n    if (res.status === authErrorStatusCode) {\n        throw new AuthError();\n    }\n    if (res.ok) {\n        return res.json();\n    }\n    let errMsg = `Failed request with status: ${res.status}. ${res.statusText}`;\n    let errData;\n    try {\n        errData = await res.json();\n        if (errData.message)\n            errMsg = `${errMsg} message: ${errData.message}`;\n        if (errData.requestId)\n            errMsg = `${errMsg} request-Id: ${errData.requestId}`;\n    }\n    catch (cause) {\n        // if the response contains invalid JSON, let's ignore the error data\n        throw new Error(errMsg, { cause });\n    }\n    if (res.status >= 400 && res.status <= 499 && errData.message) {\n        throw new UserFacingApiError(errData.message);\n    }\n    throw new HttpError({ statusCode: res.status, message: errMsg });\n}\nfunction emitSocketProgress(uploader, progressData, file) {\n    const { progress, bytesUploaded, bytesTotal } = progressData;\n    if (progress) {\n        uploader.uppy.log(`Upload progress: ${progress}`);\n        uploader.uppy.emit('upload-progress', file, {\n            uploadStarted: file.progress.uploadStarted ?? 0,\n            bytesUploaded,\n            bytesTotal,\n        });\n    }\n}\nexport default class RequestClient {\n    static VERSION = packageJson.version;\n    #companionHeaders;\n    uppy;\n    opts;\n    constructor(uppy, opts) {\n        this.uppy = uppy;\n        this.opts = opts;\n        this.onReceiveResponse = this.onReceiveResponse.bind(this);\n        this.#companionHeaders = opts.companionHeaders;\n    }\n    setCompanionHeaders(headers) {\n        this.#companionHeaders = headers;\n    }\n    [Symbol.for('uppy test: getCompanionHeaders')]() {\n        return this.#companionHeaders;\n    }\n    get hostname() {\n        const { companion } = this.uppy.getState();\n        const host = this.opts.companionUrl;\n        return stripSlash(companion?.[host] ? companion[host] : host);\n    }\n    async headers(emptyBody = false) {\n        const defaultHeaders = {\n            Accept: 'application/json',\n            ...(emptyBody\n                ? undefined\n                : {\n                    // Passing those headers on requests with no data forces browsers to first make a preflight request.\n                    'Content-Type': 'application/json',\n                }),\n        };\n        return {\n            ...defaultHeaders,\n            ...this.#companionHeaders,\n        };\n    }\n    onReceiveResponse(res) {\n        const { headers } = res;\n        const state = this.uppy.getState();\n        const companion = state.companion || {};\n        const host = this.opts.companionUrl;\n        // Store the self-identified domain name for the Companion instance we just hit.\n        if (headers.has('i-am') && headers.get('i-am') !== companion[host]) {\n            this.uppy.setState({\n                companion: { ...companion, [host]: headers.get('i-am') },\n            });\n        }\n    }\n    #getUrl(url) {\n        if (/^(https?:|)\\/\\//.test(url)) {\n            return url;\n        }\n        return `${this.hostname}/${url}`;\n    }\n    async request({ path, method = 'GET', data, skipPostResponse, signal, }) {\n        try {\n            const headers = await this.headers(!data);\n            const response = await fetchWithNetworkError(this.#getUrl(path), {\n                method,\n                signal,\n                headers,\n                credentials: this.opts.companionCookiesRule || 'same-origin',\n                body: data ? JSON.stringify(data) : null,\n            });\n            if (!skipPostResponse)\n                this.onReceiveResponse(response);\n            return await handleJSONResponse(response);\n        }\n        catch (err) {\n            // pass these through\n            if (err.isAuthError ||\n                err.name === 'UserFacingApiError' ||\n                err.name === 'AbortError')\n                throw err;\n            throw new ErrorWithCause(`Could not ${method} ${this.#getUrl(path)}`, {\n                cause: err,\n            });\n        }\n    }\n    async get(path, options) {\n        return this.request({ ...options, path });\n    }\n    async post(path, data, options) {\n        return this.request({ ...options, path, method: 'POST', data });\n    }\n    async delete(path, data, options) {\n        return this.request({ ...options, path, method: 'DELETE', data });\n    }\n    /**\n     * Remote uploading consists of two steps:\n     * 1. #requestSocketToken which starts the download/upload in companion and returns a unique token for the upload.\n     * Then companion will halt the upload until:\n     * 2. #awaitRemoteFileUpload is called, which will open/ensure a websocket connection towards companion, with the\n     * previously generated token provided. It returns a promise that will resolve/reject once the file has finished\n     * uploading or is otherwise done (failed, canceled)\n     */\n    async uploadRemoteFile(file, reqBody, options) {\n        try {\n            const { signal, getQueue } = options || {};\n            return await pRetry(async () => {\n                // if we already have a serverToken, assume that we are resuming the existing server upload id\n                const existingServerToken = this.uppy.getFile(file.id)?.serverToken;\n                if (existingServerToken != null) {\n                    this.uppy.log(`Connecting to exiting websocket ${existingServerToken}`);\n                    return this.#awaitRemoteFileUpload({\n                        file,\n                        queue: getQueue(),\n                        signal,\n                    });\n                }\n                const queueRequestSocketToken = getQueue().wrapPromiseFunction(async (...args) => {\n                    try {\n                        return await this.#requestSocketToken(...args);\n                    }\n                    catch (outerErr) {\n                        // throwing AbortError will cause p-retry to stop retrying\n                        if (outerErr.isAuthError)\n                            throw new AbortError(outerErr);\n                        if (outerErr.cause == null)\n                            throw outerErr;\n                        const err = outerErr.cause;\n                        const isRetryableHttpError = () => [408, 409, 429, 418, 423].includes(err.statusCode) ||\n                            (err.statusCode >= 500 &&\n                                err.statusCode <= 599 &&\n                                ![501, 505].includes(err.statusCode));\n                        if (err.name === 'HttpError' && !isRetryableHttpError())\n                            throw new AbortError(err);\n                        // p-retry will retry most other errors,\n                        // but it will not retry TypeError (except network error TypeErrors)\n                        throw err;\n                    }\n                }, { priority: -1 });\n                const serverToken = await queueRequestSocketToken({\n                    file,\n                    postBody: reqBody,\n                    signal,\n                }).abortOn(signal);\n                if (!this.uppy.getFile(file.id))\n                    return undefined; // has file since been removed?\n                this.uppy.setFileState(file.id, { serverToken });\n                return this.#awaitRemoteFileUpload({\n                    file: this.uppy.getFile(file.id), // re-fetching file because it might have changed in the meantime\n                    queue: getQueue(),\n                    signal,\n                });\n            }, {\n                retries: retryCount,\n                signal,\n                onFailedAttempt: (err) => this.uppy.log(`Retrying upload due to: ${err.message}`, 'warning'),\n            });\n        }\n        catch (err) {\n            // this is a bit confusing, but note that an error with the `name` prop set to 'AbortError' (from AbortController)\n            // is not the same as `p-retry` `AbortError`\n            if (err.name === 'AbortError') {\n                // The file upload was aborted, it\u2019s not an error\n                return undefined;\n            }\n            this.uppy.emit('upload-error', file, err);\n            throw err;\n        }\n    }\n    #requestSocketToken = async ({ file, postBody, signal, }) => {\n        if (file.remote?.url == null) {\n            throw new Error('Cannot connect to an undefined URL');\n        }\n        const res = await this.post(file.remote.url, {\n            ...file.remote.body,\n            ...postBody,\n        }, { signal });\n        return res.token;\n    };\n    /**\n     * This method will ensure a websocket for the specified file and returns a promise that resolves\n     * when the file has finished downloading, or rejects if it fails.\n     * It will retry if the websocket gets disconnected\n     */\n    async #awaitRemoteFileUpload({ file, queue, signal, }) {\n        let removeEventHandlers;\n        const { capabilities } = this.uppy.getState();\n        try {\n            return await new Promise((resolve, reject) => {\n                const token = file.serverToken;\n                const host = getSocketHost(file.remote.companionUrl);\n                let socket;\n                let socketAbortController;\n                let activityTimeout;\n                let { isPaused } = file;\n                const socketSend = (action, payload) => {\n                    if (socket == null || socket.readyState !== socket.OPEN) {\n                        this.uppy.log(`Cannot send \"${action}\" to socket ${file.id} because the socket state was ${String(socket?.readyState)}`, 'warning');\n                        return;\n                    }\n                    socket.send(JSON.stringify({\n                        action,\n                        payload: payload ?? {},\n                    }));\n                };\n                function sendState() {\n                    if (!capabilities.resumableUploads)\n                        return;\n                    if (isPaused)\n                        socketSend('pause');\n                    else\n                        socketSend('resume');\n                }\n                const createWebsocket = async () => {\n                    if (socketAbortController)\n                        socketAbortController.abort();\n                    socketAbortController = new AbortController();\n                    const onFatalError = (err) => {\n                        // Remove the serverToken so that a new one will be created for the retry.\n                        this.uppy.setFileState(file.id, { serverToken: null });\n                        socketAbortController?.abort?.();\n                        reject(err);\n                    };\n                    // todo instead implement the ability for users to cancel / retry *currently uploading files* in the UI\n                    function resetActivityTimeout() {\n                        clearTimeout(activityTimeout);\n                        if (isPaused)\n                            return;\n                        activityTimeout = setTimeout(() => onFatalError(new Error('Timeout waiting for message from Companion socket')), socketActivityTimeoutMs);\n                    }\n                    try {\n                        await queue\n                            .wrapPromiseFunction(async () => {\n                            const reconnectWebsocket = async () => new Promise((_, rejectSocket) => {\n                                socket = new WebSocket(`${host}/api/${token}`);\n                                resetActivityTimeout();\n                                socket.addEventListener('close', () => {\n                                    socket = undefined;\n                                    rejectSocket(new Error('Socket closed unexpectedly'));\n                                });\n                                socket.addEventListener('error', (error) => {\n                                    this.uppy.log(`Companion socket error ${JSON.stringify(error)}, closing socket`, 'warning');\n                                    socket?.close(); // will 'close' event to be emitted\n                                });\n                                socket.addEventListener('open', () => {\n                                    sendState();\n                                });\n                                socket.addEventListener('message', (e) => {\n                                    resetActivityTimeout();\n                                    try {\n                                        const { action, payload } = JSON.parse(e.data);\n                                        switch (action) {\n                                            case 'progress': {\n                                                emitSocketProgress(this, payload, this.uppy.getFile(file.id));\n                                                break;\n                                            }\n                                            case 'success': {\n                                                // payload.response is sent from companion for xhr-upload (aka uploadMultipart in companion) and\n                                                // s3 multipart (aka uploadS3Multipart)\n                                                // but not for tus/transloadit (aka uploadTus)\n                                                // responseText is a string which may or may not be in JSON format\n                                                // this means that an upload destination of xhr or s3 multipart MUST respond with valid JSON\n                                                // to companion, or the JSON.parse will crash\n                                                const text = payload.response?.responseText;\n                                                this.uppy.emit('upload-success', this.uppy.getFile(file.id), {\n                                                    uploadURL: payload.url,\n                                                    status: payload.response?.status ?? 200,\n                                                    body: text\n                                                        ? JSON.parse(text)\n                                                        : undefined,\n                                                });\n                                                socketAbortController?.abort?.();\n                                                resolve();\n                                                break;\n                                            }\n                                            case 'error': {\n                                                const { message } = payload.error;\n                                                throw Object.assign(new Error(message), {\n                                                    cause: payload.error,\n                                                });\n                                            }\n                                            default:\n                                                this.uppy.log(`Companion socket unknown action ${action}`, 'warning');\n                                        }\n                                    }\n                                    catch (err) {\n                                        onFatalError(err);\n                                    }\n                                });\n                                const closeSocket = () => {\n                                    this.uppy.log(`Closing socket ${file.id}`);\n                                    clearTimeout(activityTimeout);\n                                    if (socket)\n                                        socket.close();\n                                    socket = undefined;\n                                };\n                                socketAbortController.signal.addEventListener('abort', () => {\n                                    closeSocket();\n                                });\n                            });\n                            await pRetry(reconnectWebsocket, {\n                                retries: retryCount,\n                                signal: socketAbortController.signal,\n                                onFailedAttempt: () => {\n                                    if (socketAbortController.signal.aborted)\n                                        return; // don't log in this case\n                                    this.uppy.log(`Retrying websocket ${file.id}`);\n                                },\n                            });\n                        })()\n                            .abortOn(socketAbortController.signal);\n                    }\n                    catch (err) {\n                        if (socketAbortController.signal.aborted)\n                            return;\n                        onFatalError(err);\n                    }\n                };\n                const pause = (newPausedState) => {\n                    if (!capabilities.resumableUploads)\n                        return;\n                    isPaused = newPausedState;\n                    if (socket)\n                        sendState();\n                };\n                const onFileRemove = (targetFile) => {\n                    if (!capabilities.individualCancellation)\n                        return;\n                    if (targetFile.id !== file.id)\n                        return;\n                    socketSend('cancel');\n                    socketAbortController?.abort?.();\n                    this.uppy.log(`upload ${file.id} was removed`);\n                    resolve();\n                };\n                const onCancelAll = () => {\n                    socketSend('cancel');\n                    socketAbortController?.abort?.();\n                    this.uppy.log(`upload ${file.id} was canceled`);\n                    resolve();\n                };\n                const onFilePausedChange = (targetFile, newPausedState) => {\n                    if (targetFile?.id !== file.id)\n                        return;\n                    pause(newPausedState);\n                };\n                const onPauseAll = () => pause(true);\n                const onResumeAll = () => pause(false);\n                this.uppy.on('file-removed', onFileRemove);\n                this.uppy.on('cancel-all', onCancelAll);\n                this.uppy.on('upload-pause', onFilePausedChange);\n                this.uppy.on('pause-all', onPauseAll);\n                this.uppy.on('resume-all', onResumeAll);\n                removeEventHandlers = () => {\n                    this.uppy.off('file-removed', onFileRemove);\n                    this.uppy.off('cancel-all', onCancelAll);\n                    this.uppy.off('upload-pause', onFilePausedChange);\n                    this.uppy.off('pause-all', onPauseAll);\n                    this.uppy.off('resume-all', onResumeAll);\n                };\n                signal.addEventListener('abort', () => {\n                    socketAbortController?.abort();\n                });\n                createWebsocket();\n            });\n        }\n        finally {\n            // @ts-expect-error used before defined\n            removeEventHandlers?.();\n        }\n    }\n}\n", "import { isOriginAllowed } from './getAllowedHosts.js';\nimport RequestClient, { authErrorStatusCode } from './RequestClient.js';\nconst getName = (id) => {\n    return id\n        .split('-')\n        .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n        .join(' ');\n};\nfunction getOrigin() {\n    return location.origin;\n}\nexport default class Provider extends RequestClient {\n    #refreshingTokenPromise;\n    provider;\n    id;\n    name;\n    pluginId;\n    tokenKey;\n    companionKeysParams;\n    preAuthToken;\n    supportsRefreshToken;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.provider = opts.provider;\n        this.id = this.provider;\n        this.name = this.opts.name || getName(this.id);\n        this.pluginId = this.opts.pluginId;\n        this.tokenKey = `companion-${this.pluginId}-auth-token`;\n        this.companionKeysParams = this.opts.companionKeysParams;\n        this.preAuthToken = null;\n        this.supportsRefreshToken = !!opts.supportsRefreshToken;\n    }\n    async headers() {\n        const [headers, token] = await Promise.all([\n            super.headers(),\n            this.#getAuthToken(),\n        ]);\n        const authHeaders = {};\n        if (token) {\n            authHeaders['uppy-auth-token'] = token;\n        }\n        if (this.companionKeysParams) {\n            authHeaders['uppy-credentials-params'] = btoa(JSON.stringify({ params: this.companionKeysParams }));\n        }\n        return { ...headers, ...authHeaders };\n    }\n    onReceiveResponse(response) {\n        super.onReceiveResponse(response);\n        const plugin = this.#getPlugin();\n        const oldAuthenticated = plugin.getPluginState().authenticated;\n        const authenticated = oldAuthenticated\n            ? response.status !== authErrorStatusCode\n            : response.status < 400;\n        plugin.setPluginState({ authenticated });\n        return response;\n    }\n    async setAuthToken(token) {\n        return this.#getPlugin().storage.setItem(this.tokenKey, token);\n    }\n    async #getAuthToken() {\n        return this.#getPlugin().storage.getItem(this.tokenKey);\n    }\n    async removeAuthToken() {\n        return this.#getPlugin().storage.removeItem(this.tokenKey);\n    }\n    #getPlugin() {\n        const plugin = this.uppy.getPlugin(this.pluginId);\n        if (plugin == null)\n            throw new Error('Plugin was nullish');\n        return plugin;\n    }\n    /**\n     * Ensure we have a preauth token if necessary. Attempts to fetch one if we don't,\n     * or rejects if loading one fails.\n     */\n    async ensurePreAuth() {\n        if (this.companionKeysParams && !this.preAuthToken) {\n            await this.fetchPreAuthToken();\n            if (!this.preAuthToken) {\n                throw new Error('Could not load authentication data required for third-party login. Please try again later.');\n            }\n        }\n    }\n    authQuery(data) {\n        return {};\n    }\n    authUrl({ authFormData, query, }) {\n        const params = new URLSearchParams({\n            ...query,\n            // This is only used for Companion instances configured to accept multiple origins.\n            state: btoa(JSON.stringify({ origin: getOrigin() })),\n            ...this.authQuery({ authFormData }),\n        });\n        if (this.preAuthToken) {\n            params.set('uppyPreAuthToken', this.preAuthToken);\n        }\n        return `${this.hostname}/${this.id}/connect?${params}`;\n    }\n    async loginSimpleAuth({ uppyVersions, authFormData, signal, }) {\n        const response = await this.post(`${this.id}/simple-auth`, { form: authFormData }, { qs: { uppyVersions }, signal });\n        this.setAuthToken(response.uppyAuthToken);\n    }\n    async loginOAuth({ uppyVersions, authFormData, signal, }) {\n        await this.ensurePreAuth();\n        signal.throwIfAborted();\n        const link = this.authUrl({ query: { uppyVersions }, authFormData });\n        const authWindow = window.open(link, '_blank');\n        let interval;\n        let handleMessage;\n        try {\n            return await new Promise((resolve, reject) => {\n                handleMessage = (e) => {\n                    if (e.source !== authWindow) {\n                        let jsonData = '';\n                        try {\n                            // TODO improve our uppy logger so that it can take an arbitrary number of arguments,\n                            // each either objects, errors or strings,\n                            // then we don\u2019t have to manually do these things like json stringify when logging.\n                            // the logger should never throw an error.\n                            jsonData = JSON.stringify(e.data);\n                        }\n                        catch (_err) {\n                            // in case JSON.stringify fails (ignored)\n                        }\n                        this.uppy.log(`ignoring event from unknown source ${jsonData}`, 'warning');\n                        return;\n                    }\n                    const { companionAllowedHosts } = this.#getPlugin().opts;\n                    if (!isOriginAllowed(e.origin, companionAllowedHosts)) {\n                        this.uppy.log(`ignoring event from ${e.origin} vs allowed pattern ${companionAllowedHosts}`, 'warning');\n                        // We cannot reject here because the page might send events from other origins\n                        // before sending the \"real\" auth completed event.\n                        // for example Box has a \"Pendo\" tool that sends events to the opener\n                        // https://github.com/transloadit/uppy/pull/5719\n                        return;\n                    }\n                    // Check if it's a string before doing the JSON.parse to maintain support\n                    // for older Companion versions that used object references\n                    const data = typeof e.data === 'string' ? JSON.parse(e.data) : e.data;\n                    if (data.error) {\n                        const { uppy } = this;\n                        const message = uppy.i18n('authAborted');\n                        uppy.info({ message }, 'warning', 5000);\n                        reject(new Error('auth aborted'));\n                        return;\n                    }\n                    if (!data.token) {\n                        reject(new Error('did not receive token from auth window'));\n                        return;\n                    }\n                    resolve(this.setAuthToken(data.token));\n                };\n                // poll for user closure of the window, so we can reject when it happens\n                if (authWindow) {\n                    interval = window.setInterval(() => {\n                        if (authWindow.closed) {\n                            reject(new Error('Auth window was closed by the user'));\n                        }\n                    }, 500);\n                }\n                signal.addEventListener('abort', () => reject(new Error('Aborted')));\n                window.addEventListener('message', handleMessage);\n            });\n        }\n        finally {\n            // cleanup:\n            authWindow?.close();\n            window.clearInterval(interval);\n            if (handleMessage)\n                window.removeEventListener('message', handleMessage);\n        }\n    }\n    async login({ uppyVersions, authFormData, signal, }) {\n        return this.loginOAuth({ uppyVersions, authFormData, signal });\n    }\n    refreshTokenUrl() {\n        return `${this.hostname}/${this.id}/refresh-token`;\n    }\n    fileUrl(id) {\n        return `${this.hostname}/${this.id}/get/${id}`;\n    }\n    async request(...args) {\n        await this.#refreshingTokenPromise;\n        try {\n            // to test simulate access token expired (leading to a token token refresh),\n            // see mockAccessTokenExpiredError in companion/drive.\n            // If you want to test refresh token *and* access token invalid, do this for example with Google Drive:\n            // While uploading, go to your google account settings,\n            // \"Third-party apps & services\", then click \"Companion\" and \"Remove access\".\n            return await super.request(...args);\n        }\n        catch (err) {\n            if (!this.supportsRefreshToken)\n                throw err;\n            // only handle auth errors (401 from provider), and only handle them if we have a (refresh) token\n            const authTokenAfter = await this.#getAuthToken();\n            if (!err.isAuthError || !authTokenAfter)\n                throw err;\n            if (this.#refreshingTokenPromise == null) {\n                // Many provider requests may be starting at once, however refresh token should only be called once.\n                // Once a refresh token operation has started, we need all other request to wait for this operation (atomically)\n                this.#refreshingTokenPromise = (async () => {\n                    try {\n                        this.uppy.log(`[CompanionClient] Refreshing expired auth token`);\n                        const response = await super.request({\n                            path: this.refreshTokenUrl(),\n                            method: 'POST',\n                        });\n                        await this.setAuthToken(response.uppyAuthToken);\n                    }\n                    catch (refreshTokenErr) {\n                        if (refreshTokenErr.isAuthError) {\n                            // if refresh-token has failed with auth error, delete token, so we don't keep trying to refresh in future\n                            await this.removeAuthToken();\n                        }\n                        throw err;\n                    }\n                    finally {\n                        this.#refreshingTokenPromise = undefined;\n                    }\n                })();\n            }\n            await this.#refreshingTokenPromise;\n            // now retry the request with our new refresh token\n            return super.request(...args);\n        }\n    }\n    async fetchPreAuthToken() {\n        if (!this.companionKeysParams) {\n            return;\n        }\n        try {\n            const res = await this.post(`${this.id}/preauth/`, {\n                params: this.companionKeysParams,\n            });\n            this.preAuthToken = res.token;\n        }\n        catch (err) {\n            this.uppy.log(`[CompanionClient] unable to fetch preAuthToken ${err}`, 'warning');\n        }\n    }\n    list(directory, options) {\n        return this.get(`${this.id}/list/${directory || ''}`, options);\n    }\n    search(text, options = {}) {\n        const qs = new URLSearchParams();\n        qs.set('q', text);\n        if (options.path)\n            qs.set('path', options.path);\n        if (options.cursor)\n            qs.set('cursor', options.cursor);\n        const base = `${this.id}/search`;\n        const path = `${base}?${qs.toString()}`;\n        return this.get(path, options);\n    }\n    async logout(options) {\n        const response = await this.get(`${this.id}/logout`, options);\n        await this.removeAuthToken();\n        return response;\n    }\n}\n", "import RequestClient, {} from './RequestClient.js';\nconst getName = (id) => {\n    return id\n        .split('-')\n        .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n        .join(' ');\n};\nexport default class SearchProvider extends RequestClient {\n    provider;\n    id;\n    name;\n    pluginId;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.provider = opts.provider;\n        this.id = this.provider;\n        this.name = this.opts.name || getName(this.id);\n        this.pluginId = this.opts.pluginId;\n    }\n    fileUrl(id) {\n        return `${this.hostname}/search/${this.id}/get/${id}`;\n    }\n    search(text, queries) {\n        return this.get(`search/${this.id}/list?q=${encodeURIComponent(text)}${queries ? `&${queries}` : ''}`);\n    }\n}\n", "/**\n * This module serves as an Async wrapper for LocalStorage\n * Why? Because the Provider API `storage` option allows an async storage\n */\nexport async function setItem(key, value) {\n    localStorage.setItem(key, value);\n}\nexport async function getItem(key) {\n    return localStorage.getItem(key);\n}\nexport async function removeItem(key) {\n    localStorage.removeItem(key);\n}\n", "export { default as FilterInput } from './FilterInput.js';\nexport { default as GooglePickerView } from './GooglePicker/GooglePickerView.js';\nexport { authorize, ensureScriptsInjected, logout, pollPickingSession, showDrivePicker, showPhotosPicker, } from './GooglePicker/googlePicker.js';\nexport { GoogleDriveIcon, GooglePhotosIcon } from './GooglePicker/icons.js';\nexport { default as ProviderViews, defaultPickerIcon, } from './ProviderView/index.js';\nexport { default as SearchProviderViews } from './SearchProviderView/index.js';\nexport { default as SearchView } from './SearchView.js';\nexport { useSearchForm } from './useSearchForm.js';\n", "import { nanoid } from 'nanoid/non-secure';\nimport { useCallback, useEffect, useState } from 'preact/hooks';\n/**\n * Hook to create a form element outside the component tree to avoid nested forms.\n * Returns a formId that can be used with the `form` attribute on inputs and buttons.\n *\n * This allows form submission (Enter key) to work properly even when the component\n * is rendered inside another form element.\n *\n * @param onSubmit - Callback to execute when the form is submitted\n * @returns Object containing the formId to use with form attribute\n */\nexport function useSearchForm(onSubmit) {\n    const submit = useCallback((ev) => {\n        ev.preventDefault();\n        onSubmit();\n    }, [onSubmit]);\n    // We create a form element and append it to document.body to avoid nested <form>s\n    // (See https://github.com/transloadit/uppy/pull/5050#discussion_r1640392516)\n    const [form] = useState(() => {\n        const formEl = document.createElement('form');\n        formEl.setAttribute('tabindex', '-1');\n        formEl.id = nanoid();\n        return formEl;\n    });\n    useEffect(() => {\n        document.body.appendChild(form);\n        form.addEventListener('submit', submit);\n        return () => {\n            form.removeEventListener('submit', submit);\n            document.body.removeChild(form);\n        };\n    }, [form, submit]);\n    return { formId: form.id };\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { useSearchForm } from './useSearchForm.js';\n/**\n * FilterInput component for client-side filtering with search icon and clear button.\n * Supports Enter key submission via form element.\n */\nfunction FilterInput({ value, onChange, onSubmit, inputLabel, i18n, }) {\n    const { formId } = useSearchForm(onSubmit);\n    return (_jsxs(\"section\", { className: \"uppy-ProviderBrowser-searchFilter\", children: [_jsx(\"input\", { className: \"uppy-u-reset uppy-ProviderBrowser-searchFilterInput\", type: \"search\", \"aria-label\": inputLabel, placeholder: inputLabel, value: value, onInput: (e) => onChange(e.target.value), form: formId, \"data-uppy-super-focusable\": true }), _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon uppy-ProviderBrowser-searchFilterIcon\", width: \"12\", height: \"12\", viewBox: \"0 0 12 12\", children: _jsx(\"path\", { d: \"M8.638 7.99l3.172 3.172a.492.492 0 1 1-.697.697L7.91 8.656a4.977 4.977 0 0 1-2.983.983C2.206 9.639 0 7.481 0 4.819 0 2.158 2.206 0 4.927 0c2.721 0 4.927 2.158 4.927 4.82a4.74 4.74 0 0 1-1.216 3.17zm-3.71.685c2.176 0 3.94-1.726 3.94-3.856 0-2.129-1.764-3.855-3.94-3.855C2.75.964.984 2.69.984 4.819c0 2.13 1.765 3.856 3.942 3.856z\" }) }), value && (_jsx(\"button\", { className: \"uppy-u-reset uppy-ProviderBrowser-searchFilterReset\", type: \"button\", \"aria-label\": i18n('resetFilter'), onClick: () => onChange(''), children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", viewBox: \"0 0 19 19\", children: _jsx(\"path\", { d: \"M17.318 17.232L9.94 9.854 9.586 9.5l-.354.354-7.378 7.378h.707l-.62-.62v.706L9.318 9.94l.354-.354-.354-.354L1.94 1.854v.707l.62-.62h-.706l7.378 7.378.354.354.354-.354 7.378-7.378h-.707l.622.62v-.706L9.854 9.232l-.354.354.354.354 7.378 7.378.708-.707-7.38-7.378v.708l7.38-7.38.353-.353-.353-.353-.622-.622-.353-.353-.354.352-7.378 7.38h.708L2.56 1.23 2.208.88l-.353.353-.622.62-.353.355.352.353 7.38 7.38v-.708l-7.38 7.38-.353.353.352.353.622.622.353.353.354-.353 7.38-7.38h-.708l7.38 7.38z\" }) }) }))] }));\n}\nexport default FilterInput;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { useCallback } from 'preact/hooks';\nfunction GoogleIcon() {\n    return (_jsx(\"svg\", { width: \"26\", height: \"26\", viewBox: \"0 0 26 26\", xmlns: \"http://www.w3.org/2000/svg\", children: _jsxs(\"g\", { fill: \"none\", \"fill-rule\": \"evenodd\", children: [_jsx(\"circle\", { fill: \"#FFF\", cx: \"13\", cy: \"13\", r: \"13\" }), _jsx(\"path\", { d: \"M21.64 13.205c0-.639-.057-1.252-.164-1.841H13v3.481h4.844a4.14 4.14 0 01-1.796 2.716v2.259h2.908c1.702-1.567 2.684-3.875 2.684-6.615z\", fill: \"#4285F4\", \"fill-rule\": \"nonzero\" }), _jsx(\"path\", { d: \"M13 22c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H4.957v2.332A8.997 8.997 0 0013 22z\", fill: \"#34A853\", \"fill-rule\": \"nonzero\" }), _jsx(\"path\", { d: \"M7.964 14.71A5.41 5.41 0 017.682 13c0-.593.102-1.17.282-1.71V8.958H4.957A8.996 8.996 0 004 13c0 1.452.348 2.827.957 4.042l3.007-2.332z\", fill: \"#FBBC05\", \"fill-rule\": \"nonzero\" }), _jsx(\"path\", { d: \"M13 7.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C17.463 4.891 15.426 4 13 4a8.997 8.997 0 00-8.043 4.958l3.007 2.332C8.672 9.163 10.656 7.58 13 7.58z\", fill: \"#EA4335\", \"fill-rule\": \"nonzero\" }), _jsx(\"path\", { d: \"M4 4h18v18H4z\" })] }) }));\n}\nfunction DefaultForm({ pluginName, i18n, onAuth, }) {\n    // In order to comply with Google's brand we need to create a different button\n    // for the Google Drive plugin\n    const isGoogleDrive = pluginName === 'Google Drive';\n    const onSubmit = useCallback((e) => {\n        e.preventDefault();\n        onAuth();\n    }, [onAuth]);\n    return (_jsx(\"form\", { onSubmit: onSubmit, children: isGoogleDrive ? (_jsxs(\"button\", { type: \"submit\", className: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-Provider-authBtn uppy-Provider-btn-google\", \"data-uppy-super-focusable\": true, children: [_jsx(GoogleIcon, {}), i18n('signInWithGoogle')] })) : (_jsx(\"button\", { type: \"submit\", className: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-Provider-authBtn\", \"data-uppy-super-focusable\": true, children: i18n('authenticateWith', { pluginName }) })) }));\n}\nconst defaultRenderForm = ({ pluginName, i18n, onAuth, }) => _jsx(DefaultForm, { pluginName: pluginName, i18n: i18n, onAuth: onAuth });\nexport default function AuthView({ loading, pluginName, pluginIcon, i18n, handleAuth, renderForm = defaultRenderForm, }) {\n    return (_jsxs(\"div\", { className: \"uppy-Provider-auth\", children: [_jsx(\"div\", { className: \"uppy-Provider-authIcon\", children: pluginIcon() }), _jsx(\"div\", { className: \"uppy-Provider-authTitle\", children: i18n('authenticateWithTitle', {\n                    pluginName,\n                }) }), renderForm({ pluginName, i18n, loading, onAuth: handleAuth })] }));\n}\n", "const getAuthHeader = (token) => ({\n    authorization: `Bearer ${token}`,\n});\nconst injectedScripts = new Set();\nlet driveApiLoaded = false;\n// https://stackoverflow.com/a/39008859/6519037\nasync function injectScript(src) {\n    if (injectedScripts.has(src))\n        return;\n    await new Promise((resolve, reject) => {\n        const script = document.createElement('script');\n        script.src = src;\n        script.addEventListener('load', () => resolve());\n        script.addEventListener('error', (e) => reject(e.error));\n        document.head.appendChild(script);\n    });\n    injectedScripts.add(src);\n}\nexport async function ensureScriptsInjected(pickerType) {\n    await Promise.all([\n        injectScript('https://accounts.google.com/gsi/client'), // Google Identity Services\n        (async () => {\n            await injectScript('https://apis.google.com/js/api.js');\n            if (pickerType === 'drive' && !driveApiLoaded) {\n                await new Promise((resolve) => gapi.load('client:picker', () => resolve()));\n                await gapi.client.load('https://www.googleapis.com/discovery/v1/apis/drive/v3/rest');\n                driveApiLoaded = true;\n            }\n        })(),\n    ]);\n}\nasync function isTokenValid(accessToken, signal) {\n    const response = await fetch(`https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=${encodeURIComponent(accessToken)}`, { signal });\n    if (response.ok) {\n        return true;\n    }\n    // console.warn('Token is invalid or expired:', response.status, await response.text());\n    // Token is invalid or expired\n    return false;\n}\nexport async function authorize({ pickerType, clientId, accessToken, }) {\n    const response = await new Promise((resolve, reject) => {\n        const scopes = pickerType === 'drive'\n            ? ['https://www.googleapis.com/auth/drive.file']\n            : ['https://www.googleapis.com/auth/photospicker.mediaitems.readonly'];\n        const tokenClient = google.accounts.oauth2.initTokenClient({\n            client_id: clientId,\n            // Authorization scopes required by the API; multiple scopes can be included, separated by spaces.\n            scope: scopes.join(' '),\n            callback: resolve,\n            error_callback: reject,\n        });\n        if (accessToken === null) {\n            // Prompt the user to select a Google Account and ask for consent to share their data\n            // when establishing a new session.\n            tokenClient.requestAccessToken({ prompt: 'consent' });\n        }\n        else {\n            // Skip display of account chooser and consent dialog for an existing session.\n            tokenClient.requestAccessToken({ prompt: '' });\n        }\n    });\n    if (response.error) {\n        throw new Error(`OAuth2 error: ${response.error}`);\n    }\n    return response.access_token;\n}\nexport async function logout(accessToken) {\n    await new Promise((resolve) => google.accounts.oauth2.revoke(accessToken, resolve));\n}\nexport class InvalidTokenError extends Error {\n    constructor() {\n        super('Invalid or expired token');\n        this.name = 'InvalidTokenError';\n    }\n}\nexport async function showDrivePicker({ token, apiKey, appId, onFilesPicked, signal, onLoadingChange, onError, }) {\n    // google drive picker will crash hard if given an invalid token, so we need to check it first\n    // https://github.com/transloadit/uppy/pull/5443#pullrequestreview-2452439265\n    if (!(await isTokenValid(token, signal))) {\n        throw new InvalidTokenError();\n    }\n    async function handleDocObjectRecursively({ doc, token, signal, }) {\n        if (doc.mimeType === 'application/vnd.google-apps.shortcut') {\n            if (doc.shortcutDetails?.targetMimeType ===\n                'application/vnd.google-apps.folder') {\n                // If we were to recurse into shortcuts to folders, it could get a bit crazy. We could end up picking things outside of the user's intended scope as well as infinite loops\n                // If we were to just pass it through as-is, Companion would not be able to download it, so we just ignore it entirely\n                return [];\n            }\n            // for other shortcut types, we just treat them as normal files and pass them to Companion to resolve\n            return [\n                {\n                    platform: 'drive',\n                    id: doc.id,\n                    name: doc.name,\n                    mimeType: doc.mimeType,\n                },\n            ];\n        }\n        if (doc.mimeType !== 'application/vnd.google-apps.folder') {\n            return [\n                {\n                    platform: 'drive',\n                    id: doc.id,\n                    name: doc.name,\n                    mimeType: doc.mimeType,\n                },\n            ];\n        }\n        const headers = getAuthHeader(token);\n        const items = [];\n        let pageToken;\n        do {\n            const params = new URLSearchParams({\n                q: `'${doc.id.replace(/'/g, \"\\\\'\")}' in parents and trashed = false`,\n                fields: 'nextPageToken, files(id, name, mimeType, shortcutDetails(targetMimeType))',\n                includeItemsFromAllDrives: 'true',\n                supportsAllDrives: 'true',\n                pageSize: '1000',\n                ...(pageToken && { pageToken }),\n            });\n            const res = await fetch(`https://www.googleapis.com/drive/v3/files?${params.toString()}`, { headers, signal });\n            if (!res.ok) {\n                throw new Error(`Failed to list folder contents for '${doc.name}' (${doc.id}): ${res.status} ${res.statusText}`);\n            }\n            const json = await res.json();\n            pageToken = json.nextPageToken;\n            for (const file of json.files) {\n                items.push(...(await handleDocObjectRecursively({ doc: file, token, signal })));\n            }\n        } while (pageToken);\n        return items;\n    }\n    const onPicked = async (picked) => {\n        if (picked.action !== google.picker.Action.PICKED)\n            return;\n        try {\n            onLoadingChange(true);\n            const results = [];\n            for (const doc of picked.docs) {\n                results.push(...(await handleDocObjectRecursively({ doc, token, signal })));\n            }\n            onFilesPicked(results, token);\n        }\n        catch (err) {\n            onError(err);\n        }\n        finally {\n            onLoadingChange(false);\n        }\n    };\n    const picker = new google.picker.PickerBuilder()\n        .enableFeature(google.picker.Feature.NAV_HIDDEN)\n        .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)\n        .setDeveloperKey(apiKey)\n        .setAppId(appId)\n        .setOAuthToken(token)\n        .addView(new google.picker.DocsView(google.picker.ViewId.DOCS)\n        .setIncludeFolders(true)\n        // Note: setEnableDrives doesn't seem to work\n        // .setEnableDrives(true)\n        .setSelectFolderEnabled(true)\n        .setMode(google.picker.DocsViewMode.LIST))\n        // NOTE: photos is broken and results in an error being returned from Google\n        // I think it's the old Picasa photos\n        // .addView(google.picker.ViewId.PHOTOS)\n        .setCallback(onPicked)\n        .build();\n    picker.setVisible(true);\n    signal?.addEventListener('abort', () => picker.dispose());\n}\nexport async function showPhotosPicker({ token, pickingSession, onPickingSessionChange, signal, }) {\n    // https://developers.google.com/photos/picker/guides/get-started-picker\n    const headers = getAuthHeader(token);\n    let newPickingSession = pickingSession;\n    if (newPickingSession == null) {\n        const createSessionResponse = await fetch('https://photospicker.googleapis.com/v1/sessions', { method: 'post', headers, signal });\n        if (createSessionResponse.status === 401) {\n            const resp = await createSessionResponse.json();\n            if (resp.error?.status === 'UNAUTHENTICATED') {\n                throw new InvalidTokenError();\n            }\n        }\n        if (!createSessionResponse.ok) {\n            throw new Error('Failed to create a session');\n        }\n        newPickingSession = (await createSessionResponse.json());\n        onPickingSessionChange(newPickingSession);\n    }\n    const w = window.open(newPickingSession.pickerUri);\n    signal?.addEventListener('abort', () => w?.close());\n}\nasync function resolvePickedPhotos({ accessToken, pickingSession, signal, }) {\n    const headers = getAuthHeader(accessToken);\n    let pageToken;\n    let mediaItems = [];\n    do {\n        const pageSize = 100;\n        const response = await fetch(`https://photospicker.googleapis.com/v1/mediaItems?${new URLSearchParams({ sessionId: pickingSession.id, pageSize: String(pageSize), ...(pageToken && { pageToken }) }).toString()}`, { headers, signal });\n        if (!response.ok)\n            throw new Error('Failed to get a media items');\n        const { mediaItems: batchMediaItems, nextPageToken, } = await response.json();\n        pageToken = nextPageToken;\n        mediaItems.push(...batchMediaItems);\n    } while (pageToken);\n    // Filter out items that aren't fully processed or ready\n    mediaItems = mediaItems.flatMap((i) => i.type === 'PHOTO' ||\n        (i.type === 'VIDEO' &&\n            i.mediaFile.mediaFileMetadata.videoMetadata.processingStatus === 'READY')\n        ? [i]\n        : []);\n    // Transform media items into picked items with appropriate metadata\n    return mediaItems.map((mediaItem) => {\n        const { id, type, mediaFile: { mimeType, filename, baseUrl }, } = mediaItem;\n        return {\n            platform: 'photos',\n            id,\n            mimeType,\n            // we want the original resolution, so we don't append any parameter to the baseUrl\n            // https://developers.google.com/photos/library/guides/access-media-items#base-urls\n            url: type === 'VIDEO' ? `${baseUrl}=dv` : `${baseUrl}=d`, // dv to download video, d to get original image (non cropped)\n            name: filename,\n            metadata: {\n                // Note that metadata keys `filename` and `type` have special meanings in Companion\n                // and should not be overridden\n                googlePhotosFileType: mediaItem.type,\n                createTime: mediaItem.createTime,\n                width: mediaItem.mediaFile.mediaFileMetadata.width,\n                height: mediaItem.mediaFile.mediaFileMetadata.height,\n                ...(mediaItem.type === 'PHOTO' && {\n                    cameraMake: mediaItem.mediaFile.mediaFileMetadata.photoMetadata?.cameraMake,\n                    cameraModel: mediaItem.mediaFile.mediaFileMetadata.photoMetadata?.cameraModel,\n                    focalLength: mediaItem.mediaFile.mediaFileMetadata.photoMetadata?.focalLength,\n                    apertureFNumber: mediaItem.mediaFile.mediaFileMetadata.photoMetadata\n                        ?.apertureFNumber,\n                    isoEquivalent: mediaItem.mediaFile.mediaFileMetadata.photoMetadata?.isoEquivalent,\n                    exposureTime: mediaItem.mediaFile.mediaFileMetadata.photoMetadata?.exposureTime,\n                }),\n                ...(mediaItem.type === 'VIDEO' && {\n                    cameraMake: mediaItem.mediaFile.mediaFileMetadata.videoMetadata.cameraMake,\n                    cameraModel: mediaItem.mediaFile.mediaFileMetadata.videoMetadata.cameraModel,\n                    fps: mediaItem.mediaFile.mediaFileMetadata.videoMetadata.fps,\n                    processingStatus: mediaItem.mediaFile.mediaFileMetadata.videoMetadata\n                        .processingStatus,\n                }),\n            },\n        };\n    });\n}\nexport async function pollPickingSession({ pickingSessionRef, accessTokenRef, signal, onFilesPicked, onError, }) {\n    // if we have an active session, poll it until it either times out, or the user selects some photos.\n    // Note that the user can also just close the page, but we get no indication of that from Google when polling,\n    // so we just have to continue polling in the background, so we can react to it\n    // in case the user opens the photo selector again. Hence the infinite for loop\n    for (let interval = 1;;) {\n        try {\n            if (pickingSessionRef.current != null) {\n                interval = parseFloat(pickingSessionRef.current.pollingConfig.pollInterval);\n            }\n            else {\n                interval = 1;\n            }\n            await Promise.race([\n                new Promise((resolve) => setTimeout(resolve, interval * 1000)),\n                new Promise((_resolve, reject) => {\n                    signal.addEventListener('abort', reject);\n                }),\n            ]);\n            signal.throwIfAborted();\n            const accessToken = accessTokenRef.current;\n            const pickingSession = pickingSessionRef.current;\n            if (pickingSession != null && accessToken != null) {\n                const headers = getAuthHeader(accessToken);\n                // https://developers.google.com/photos/picker/reference/rest/v1/sessions\n                const response = await fetch(`https://photospicker.googleapis.com/v1/sessions/${encodeURIComponent(pickingSession.id)}`, { headers, signal });\n                if (!response.ok)\n                    throw new Error('Failed to get session');\n                const json = await response.json();\n                if (json.mediaItemsSet) {\n                    // console.log('User picked!', json)\n                    const resolvedPhotos = await resolvePickedPhotos({\n                        accessToken,\n                        pickingSession,\n                        signal,\n                    });\n                    pickingSessionRef.current = undefined;\n                    onFilesPicked(resolvedPhotos, accessToken);\n                }\n                if (pickingSession.pollingConfig.timeoutIn === '0s') {\n                    pickingSessionRef.current = undefined;\n                }\n            }\n        }\n        catch (err) {\n            if (err instanceof Error && err.name === 'AbortError') {\n                return;\n            }\n            // just report the error and continue polling\n            onError(err);\n        }\n    }\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nexport const GooglePhotosIcon = () => (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"-7 -7 73 73\", children: _jsxs(\"g\", { fill: \"none\", \"fill-rule\": \"evenodd\", children: [_jsx(\"path\", { d: \"M-3-3h64v64H-3z\" }), _jsxs(\"g\", { \"fill-rule\": \"nonzero\", children: [_jsx(\"path\", { fill: \"#FBBC04\", d: \"M14.8 13.4c8.1 0 14.7 6.6 14.7 14.8v1.3H1.3c-.7 0-1.3-.6-1.3-1.3C0 20 6.6 13.4 14.8 13.4z\" }), _jsx(\"path\", { fill: \"#EA4335\", d: \"M45.6 14.8c0 8.1-6.6 14.7-14.8 14.7h-1.3V1.3c0-.7.6-1.3 1.3-1.3C39 0 45.6 6.6 45.6 14.8z\" }), _jsx(\"path\", { fill: \"#4285F4\", d: \"M44.3 45.6c-8.2 0-14.8-6.6-14.8-14.8v-1.3h28.2c.7 0 1.3.6 1.3 1.3 0 8.2-6.6 14.8-14.8 14.8z\" }), _jsx(\"path\", { fill: \"#34A853\", d: \"M13.4 44.3c0-8.2 6.6-14.8 14.8-14.8h1.3v28.2c0 .7-.6 1.3-1.3 1.3-8.2 0-14.8-6.6-14.8-14.8z\" })] })] }) }));\nexport const GoogleDriveIcon = () => (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsxs(\"g\", { fillRule: \"nonzero\", fill: \"none\", children: [_jsx(\"path\", { d: \"M6.663 22.284l.97 1.62c.202.34.492.609.832.804l3.465-5.798H5c0 .378.1.755.302 1.096l1.361 2.278z\", fill: \"#0066DA\" }), _jsx(\"path\", { d: \"M16 12.09l-3.465-5.798c-.34.195-.63.463-.832.804l-6.4 10.718A2.15 2.15 0 005 18.91h6.93L16 12.09z\", fill: \"#00AC47\" }), _jsx(\"path\", { d: \"M23.535 24.708c.34-.195.63-.463.832-.804l.403-.67 1.928-3.228c.201-.34.302-.718.302-1.096h-6.93l1.474 2.802 1.991 2.996z\", fill: \"#EA4335\" }), _jsx(\"path\", { d: \"M16 12.09l3.465-5.798A2.274 2.274 0 0018.331 6h-4.662c-.403 0-.794.11-1.134.292L16 12.09z\", fill: \"#00832D\" }), _jsx(\"path\", { d: \"M20.07 18.91h-8.14l-3.465 5.798c.34.195.73.292 1.134.292h12.802c.403 0 .794-.11 1.134-.292L20.07 18.91z\", fill: \"#2684FC\" }), _jsx(\"path\", { d: \"M23.497 12.455l-3.2-5.359a2.252 2.252 0 00-.832-.804L16 12.09l4.07 6.82h6.917c0-.377-.1-.755-.302-1.096l-3.188-5.359z\", fill: \"#FFBA00\" })] }) }));\n", "import { jsxs as _jsxs, jsx as _jsx } from \"preact/jsx-runtime\";\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\nimport AuthView from '../ProviderView/AuthView.js';\nimport { authorize, ensureScriptsInjected, InvalidTokenError, logout, pollPickingSession, showDrivePicker, showPhotosPicker, } from './googlePicker.js';\nimport { GoogleDriveIcon, GooglePhotosIcon } from './icons.js';\nfunction useStore(store, key) {\n    const [value, setValueState] = useState();\n    useEffect(() => {\n        ;\n        (async () => {\n            setValueState(await store.getItem(key));\n        })();\n    }, [key, store]);\n    const setValue = useCallback(async (v) => {\n        setValueState(v);\n        if (v == null) {\n            return store.removeItem(key);\n        }\n        return store.setItem(key, v);\n    }, [key, store]);\n    return [value, setValue];\n}\nexport default function GooglePickerView({ uppy, i18n, clientId, onFilesPicked, pickerType, apiKey, appId, storage, }) {\n    const [loading, setLoading] = useState(false);\n    const [accessToken, setAccessTokenStored] = useStore(storage, `uppy:google-${pickerType}-picker:accessToken`);\n    const pickingSessionRef = useRef();\n    const accessTokenRef = useRef(accessToken);\n    const shownPickerRef = useRef(false);\n    const setAccessToken = useCallback((t) => {\n        uppy.log('Access token updated');\n        setAccessTokenStored(t);\n        accessTokenRef.current = t;\n    }, [setAccessTokenStored, uppy]);\n    // keep access token in sync with the ref\n    useEffect(() => {\n        accessTokenRef.current = accessToken;\n    }, [accessToken]);\n    const showPicker = useCallback(async (signal) => {\n        let newAccessToken = accessToken;\n        const doShowPicker = async (token) => {\n            if (pickerType === 'drive') {\n                await showDrivePicker({\n                    token,\n                    apiKey,\n                    appId,\n                    onFilesPicked,\n                    signal,\n                    onLoadingChange: (isLoading) => setLoading(isLoading),\n                    onError: (err) => {\n                        uppy.log(err);\n                        uppy.info(i18n('failedToAddFiles'), 'error');\n                    },\n                });\n            }\n            else {\n                // photos\n                const onPickingSessionChange = (newPickingSession) => {\n                    pickingSessionRef.current = newPickingSession;\n                };\n                await showPhotosPicker({\n                    token,\n                    pickingSession: pickingSessionRef.current,\n                    onPickingSessionChange,\n                    signal,\n                });\n            }\n        };\n        setLoading(true);\n        try {\n            try {\n                await ensureScriptsInjected(pickerType);\n                if (newAccessToken == null) {\n                    newAccessToken = await authorize({ clientId, pickerType });\n                }\n                if (newAccessToken == null)\n                    throw new Error();\n                await doShowPicker(newAccessToken);\n                shownPickerRef.current = true;\n                setAccessToken(newAccessToken);\n            }\n            catch (err) {\n                if (err instanceof InvalidTokenError) {\n                    uppy.log('Token is invalid or expired, reauthenticating');\n                    newAccessToken = await authorize({\n                        pickerType,\n                        accessToken: newAccessToken,\n                        clientId,\n                    });\n                    // now try again:\n                    await doShowPicker(newAccessToken);\n                    shownPickerRef.current = true;\n                    setAccessToken(newAccessToken);\n                }\n                else {\n                    throw err;\n                }\n            }\n        }\n        catch (err) {\n            if (err instanceof Error &&\n                'type' in err &&\n                err.type === 'popup_closed') {\n                // user closed the auth popup, ignore\n            }\n            else {\n                setAccessToken(null);\n                uppy.log(err);\n            }\n        }\n        finally {\n            setLoading(false);\n        }\n    }, [\n        accessToken,\n        apiKey,\n        appId,\n        clientId,\n        onFilesPicked,\n        pickerType,\n        setAccessToken,\n        uppy,\n        i18n,\n    ]);\n    useEffect(() => {\n        const abortController = new AbortController();\n        pollPickingSession({\n            pickingSessionRef,\n            accessTokenRef,\n            signal: abortController.signal,\n            onFilesPicked,\n            onError: (err) => uppy.log(err),\n        });\n        return () => abortController.abort();\n    }, [onFilesPicked, uppy]);\n    useEffect(() => {\n        // when mounting, once we have a token, be nice to the user and automatically show the picker\n        // accessToken === undefined means not yet loaded from storage, so wait for that first\n        if (accessToken === undefined || shownPickerRef.current) {\n            return undefined;\n        }\n        const abortController = new AbortController();\n        showPicker(abortController.signal);\n        return () => {\n            // only abort the picker if it's not yet shown\n            if (!shownPickerRef.current)\n                abortController.abort();\n        };\n    }, [accessToken, showPicker]);\n    const handleLogoutClick = useCallback(async () => {\n        if (accessToken) {\n            await logout(accessToken);\n            setAccessToken(null);\n            pickingSessionRef.current = undefined;\n        }\n    }, [accessToken, setAccessToken]);\n    if (loading) {\n        return _jsxs(\"div\", { children: [i18n('pleaseWait'), \"...\"] });\n    }\n    if (accessToken == null) {\n        return (_jsx(AuthView, { pluginName: pickerType === 'drive'\n                ? i18n('pluginNameGoogleDrivePicker')\n                : i18n('pluginNameGooglePhotosPicker'), pluginIcon: pickerType === 'drive' ? GoogleDriveIcon : GooglePhotosIcon, handleAuth: showPicker, i18n: i18n, loading: loading }));\n    }\n    return (_jsxs(\"div\", { style: { textAlign: 'center' }, children: [_jsx(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary\", style: { display: 'block', marginBottom: '1em' }, disabled: loading, onClick: () => showPicker(), children: pickerType === 'drive' ? i18n('pickFiles') : i18n('pickPhotos') }), _jsx(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn\", disabled: loading, onClick: handleLogoutClick, children: i18n('logOut') })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { remoteFileObjToLocal } from '@uppy/utils';\nimport classNames from 'classnames';\nimport debounce from 'lodash/debounce.js';\nimport packageJson from '../../package.json' with { type: 'json' };\nimport Browser from '../Browser.js';\nimport FilterInput from '../FilterInput.js';\nimport FooterActions from '../FooterActions.js';\nimport addFiles from '../utils/addFiles.js';\nimport getClickedRange from '../utils/getClickedRange.js';\nimport handleError from '../utils/handleError.js';\nimport getBreadcrumbs from '../utils/PartialTreeUtils/getBreadcrumbs.js';\nimport getCheckedFilesWithPaths from '../utils/PartialTreeUtils/getCheckedFilesWithPaths.js';\nimport getNumberOfSelectedFiles from '../utils/PartialTreeUtils/getNumberOfSelectedFiles.js';\nimport PartialTreeUtils from '../utils/PartialTreeUtils/index.js';\nimport shouldHandleScroll from '../utils/shouldHandleScroll.js';\nimport AuthView from './AuthView.js';\nimport GlobalSearchView from './GlobalSearchView.js';\nimport Header from './Header.js';\nexport function defaultPickerIcon() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"30\", height: \"30\", viewBox: \"0 0 30 30\", children: _jsx(\"path\", { d: \"M15 30c8.284 0 15-6.716 15-15 0-8.284-6.716-15-15-15C6.716 0 0 6.716 0 15c0 8.284 6.716 15 15 15zm4.258-12.676v6.846h-8.426v-6.846H5.204l9.82-12.364 9.82 12.364H19.26z\" }) }));\n}\nconst getDefaultState = (rootFolderId) => ({\n    authenticated: undefined, // we don't know yet\n    partialTree: [\n        {\n            type: 'root',\n            id: rootFolderId,\n            cached: false,\n            nextPagePath: null,\n        },\n    ],\n    currentFolderId: rootFolderId,\n    searchString: '',\n    didFirstRender: false,\n    username: null,\n    loading: false,\n});\n/**\n * Class to easily generate generic views for Provider plugins\n *\n * We have a *search view* and a *normal view*.\n * Search view is only used when the Provider supports server side search i.e. provider.search method is implemented for the provider.\n * The state is stored in searchResults.\n * Search view is implemented in components GlobalSearchView and SearchResultItem.\n * We conditionally switch between search view and normal in the render method when a server side search is initiated.\n * When users type their search query in search input box (SearchInput component), we debounce the input and call provider.search method to fetch results from the server.\n * when the user enters a folder in search results or clears the search input query we switch back to Normal View.\n */\nexport default class ProviderView {\n    static VERSION = packageJson.version;\n    // Test hook (mirrors GoldenRetriever pattern): allow tests to override debounce time\n    // @ts-expect-error test-only hook key\n    static [Symbol.for('uppy test: searchDebounceMs')];\n    plugin;\n    provider;\n    opts;\n    isHandlingScroll = false;\n    previousCheckbox = null;\n    #searchDebounced;\n    constructor(plugin, opts) {\n        this.plugin = plugin;\n        this.provider = opts.provider;\n        const defaultOptions = {\n            viewType: 'list',\n            showTitles: true,\n            showFilter: true,\n            showBreadcrumbs: true,\n            loadAllFiles: false,\n            virtualList: false,\n        };\n        this.opts = { ...defaultOptions, ...opts };\n        this.openFolder = this.openFolder.bind(this);\n        this.logout = this.logout.bind(this);\n        this.handleAuth = this.handleAuth.bind(this);\n        this.handleScroll = this.handleScroll.bind(this);\n        this.resetPluginState = this.resetPluginState.bind(this);\n        this.donePicking = this.donePicking.bind(this);\n        this.render = this.render.bind(this);\n        this.cancelSelection = this.cancelSelection.bind(this);\n        this.toggleCheckbox = this.toggleCheckbox.bind(this);\n        this.openSearchResultFolder = this.openSearchResultFolder.bind(this);\n        this.clearSearchState = this.clearSearchState.bind(this);\n        // Set default state for the plugin\n        this.resetPluginState();\n        // todo\n        // @ts-expect-error this should be typed in @uppy/dashboard.\n        this.plugin.uppy.on('dashboard:close-panel', this.resetPluginState);\n        this.plugin.uppy.registerRequestClient(this.provider.provider, this.provider);\n        // Configure debounced search with test override\n        const testHookSymbol = Symbol.for('uppy test: searchDebounceMs');\n        const testWait = ProviderView[testHookSymbol];\n        const wait = testWait ?? 500;\n        const debounceOpts = testWait === 0 ? { leading: true, trailing: true } : undefined;\n        this.#searchDebounced = debounce(this.#search, wait, debounceOpts);\n    }\n    resetPluginState() {\n        this.plugin.setPluginState(getDefaultState(this.plugin.rootFolderId));\n    }\n    tearDown() {\n        // Nothing.\n    }\n    setLoading(loading) {\n        this.plugin.setPluginState({ loading });\n    }\n    get isLoading() {\n        return this.plugin.getPluginState().loading;\n    }\n    cancelSelection() {\n        const { partialTree } = this.plugin.getPluginState();\n        const newPartialTree = partialTree.map((item) => item.type === 'root' ? item : { ...item, status: 'unchecked' });\n        this.plugin.setPluginState({ partialTree: newPartialTree });\n    }\n    clearSearchState() {\n        this.plugin.setPluginState({\n            searchResults: undefined,\n        });\n    }\n    #abortController;\n    async #withAbort(op) {\n        // prevent multiple requests in parallel from causing race conditions\n        this.#abortController?.abort();\n        const abortController = new AbortController();\n        this.#abortController = abortController;\n        const cancelRequest = () => {\n            abortController.abort();\n        };\n        try {\n            // @ts-expect-error this should be typed in @uppy/dashboard.\n            // Even then I don't think we can make this work without adding dashboard\n            // as a dependency to provider-views.\n            this.plugin.uppy.on('dashboard:close-panel', cancelRequest);\n            this.plugin.uppy.on('cancel-all', cancelRequest);\n            await op(abortController.signal);\n        }\n        finally {\n            // @ts-expect-error this should be typed in @uppy/dashboard.\n            // Even then I don't think we can make this work without adding dashboard\n            // as a dependency to provider-views.\n            this.plugin.uppy.off('dashboard:close-panel', cancelRequest);\n            this.plugin.uppy.off('cancel-all', cancelRequest);\n            this.#abortController = undefined;\n        }\n    }\n    async #search() {\n        const { partialTree, currentFolderId, searchString } = this.plugin.getPluginState();\n        const currentFolder = partialTree.find((i) => i.id === currentFolderId);\n        if (searchString.trim() === '') {\n            this.#abortController?.abort();\n            this.clearSearchState();\n            return;\n        }\n        this.setLoading(true);\n        await this.#withAbort(async (signal) => {\n            const scopePath = currentFolder.type === 'root' ? undefined : currentFolderId;\n            const { items } = await this.provider.search(searchString, {\n                signal,\n                path: scopePath,\n            });\n            // For each searched file, build the entire path (from the root all the way to the leaf node)\n            // This is because we need to make sure all ancestor folders are present in the partialTree before we open the folder or check the file.\n            // This is needed because when the user opens a folder we need to have all its parent folders in the partialTree to be able to render the breadcrumbs correctly.\n            // Similarly when the user checks a file, we need to have all it's ancestor folders in the partialTree to be able to percolateUp the checked state correctly to its ancestors.\n            const { partialTree } = this.plugin.getPluginState();\n            const newPartialTree = [...partialTree];\n            for (const file of items) {\n                // Decode URI and split into path segments\n                const decodedPath = decodeURIComponent(file.requestPath);\n                const segments = decodedPath.split('/').filter((s) => s.length > 0);\n                // Start from root\n                let parentId = this.plugin.rootFolderId;\n                let isParentFolderChecked;\n                // Walk through each segment starting from the root and build child nodes if they don't exist\n                segments.forEach((segment, index, arr) => {\n                    const pathSegments = segments.slice(0, index + 1);\n                    const encodedPath = encodeURIComponent(`/${pathSegments.join('/')}`);\n                    // Skip if node already exists\n                    const existingNode = newPartialTree.find((n) => n.id === encodedPath && n.type !== 'root');\n                    if (existingNode) {\n                        parentId = encodedPath;\n                        isParentFolderChecked = existingNode.status === 'checked';\n                        return;\n                    }\n                    const isLeafNode = index === arr.length - 1;\n                    let node;\n                    // propagate checked state from parent to children, if the user has checked the parent folder before searching\n                    // and the parent folder is an ancestor of the searched file\n                    // see also afterOpenFolder which contains similar logic, we should probably refactor and reuse some\n                    const status = isParentFolderChecked ? 'checked' : 'unchecked';\n                    // Build the Leaf Node, it can be a file (`PartialTreeFile`) or a folder (`PartialTreeFolderNode`).\n                    // Since we Already have the leaf node's data (`file`, `CompanionFile`) from the searchResults: CompanionFile[], we just use that.\n                    if (isLeafNode) {\n                        if (file.isFolder) {\n                            node = {\n                                type: 'folder',\n                                id: encodedPath,\n                                cached: false,\n                                nextPagePath: null,\n                                status,\n                                parentId,\n                                data: file,\n                            };\n                        }\n                        else {\n                            const restrictionError = this.validateSingleFile(file);\n                            node = {\n                                type: 'file',\n                                id: encodedPath,\n                                restrictionError,\n                                status: !restrictionError ? status : 'unchecked',\n                                parentId,\n                                data: file,\n                            };\n                        }\n                    }\n                    else {\n                        // not leaf node, so by definition it is a folder leading up to the leaf node\n                        node = {\n                            type: 'folder',\n                            id: encodedPath,\n                            cached: false,\n                            nextPagePath: null,\n                            status,\n                            parentId,\n                            data: {\n                                // we don't have any data, so fill only the necessary fields\n                                name: decodeURIComponent(segment),\n                                icon: 'folder',\n                                isFolder: true,\n                            },\n                        };\n                    }\n                    newPartialTree.push(node);\n                    parentId = encodedPath; // This node becomes parent for the next iteration\n                    isParentFolderChecked = status === 'checked';\n                });\n            }\n            this.plugin.setPluginState({\n                partialTree: newPartialTree,\n                searchResults: items.map((item) => item.requestPath),\n            });\n        }).catch(handleError(this.plugin.uppy));\n        this.setLoading(false);\n    }\n    // debounced search function is initialized in the constructor\n    onSearchInput = (s) => {\n        this.plugin.setPluginState({ searchString: s });\n        if (this.opts.supportsSearch) {\n            this.#searchDebounced();\n        }\n    };\n    async openSearchResultFolder(folderId) {\n        // stop searching\n        this.plugin.setPluginState({ searchString: '' });\n        // now open folder using the normal view\n        await this.openFolder(folderId);\n    }\n    async openFolder(folderId) {\n        // always switch away from the search view when opening a folder, whether it happens from the search view or by clicking breadcrumbs\n        this.clearSearchState();\n        this.previousCheckbox = null;\n        // Returning cached folder\n        const { partialTree } = this.plugin.getPluginState();\n        const clickedFolder = partialTree.find((folder) => folder.id === folderId);\n        if (clickedFolder.cached) {\n            this.plugin.setPluginState({\n                currentFolderId: folderId,\n                searchString: '',\n            });\n            return;\n        }\n        this.setLoading(true);\n        await this.#withAbort(async (signal) => {\n            let currentPagePath = folderId;\n            let currentItems = [];\n            do {\n                const { username, nextPagePath, items } = await this.provider.list(currentPagePath, { signal });\n                // It's important to set the username during one of our first fetches\n                this.plugin.setPluginState({ username });\n                currentPagePath = nextPagePath;\n                currentItems = currentItems.concat(items);\n                this.setLoading(this.plugin.uppy.i18n('loadedXFiles', {\n                    numFiles: currentItems.length,\n                }));\n            } while (this.opts.loadAllFiles && currentPagePath);\n            const newPartialTree = PartialTreeUtils.afterOpenFolder(partialTree, currentItems, clickedFolder, currentPagePath, this.validateSingleFile);\n            this.plugin.setPluginState({\n                partialTree: newPartialTree,\n                currentFolderId: folderId,\n                searchString: '',\n            });\n        }).catch(handleError(this.plugin.uppy));\n        this.setLoading(false);\n    }\n    /**\n     * Removes session token on client side.\n     */\n    async logout() {\n        await this.#withAbort(async (signal) => {\n            const res = await this.provider.logout({\n                signal,\n            });\n            // res.ok is from the JSON body, not to be confused with Response.ok\n            if (res.ok) {\n                if (!res.revoked) {\n                    const message = this.plugin.uppy.i18n('companionUnauthorizeHint', {\n                        provider: this.plugin.title,\n                        url: res.manual_revoke_url,\n                    });\n                    this.plugin.uppy.info(message, 'info', 7000);\n                }\n                this.plugin.setPluginState({\n                    ...getDefaultState(this.plugin.rootFolderId),\n                    authenticated: false,\n                });\n            }\n        }).catch(handleError(this.plugin.uppy));\n    }\n    async handleAuth(authFormData) {\n        await this.#withAbort(async (signal) => {\n            this.setLoading(true);\n            await this.provider.login({ authFormData, signal });\n            this.plugin.setPluginState({ authenticated: true });\n            await Promise.all([\n                this.provider.fetchPreAuthToken(),\n                this.openFolder(this.plugin.rootFolderId),\n            ]);\n        }).catch(handleError(this.plugin.uppy));\n        this.setLoading(false);\n    }\n    async handleScroll(event) {\n        const { partialTree, currentFolderId } = this.plugin.getPluginState();\n        const currentFolder = partialTree.find((i) => i.id === currentFolderId);\n        if (shouldHandleScroll(event) &&\n            !this.isHandlingScroll &&\n            currentFolder.nextPagePath) {\n            this.isHandlingScroll = true;\n            await this.#withAbort(async (signal) => {\n                const { nextPagePath, items } = await this.provider.list(currentFolder.nextPagePath, { signal });\n                const newPartialTree = PartialTreeUtils.afterScrollFolder(partialTree, currentFolderId, items, nextPagePath, this.validateSingleFile);\n                this.plugin.setPluginState({ partialTree: newPartialTree });\n            }).catch(handleError(this.plugin.uppy));\n            this.isHandlingScroll = false;\n        }\n    }\n    validateSingleFile = (file) => {\n        const companionFile = remoteFileObjToLocal(file);\n        const result = this.plugin.uppy.validateSingleFile(companionFile);\n        return result;\n    };\n    async donePicking() {\n        const { partialTree } = this.plugin.getPluginState();\n        if (this.isLoading)\n            return;\n        this.setLoading(true);\n        await this.#withAbort(async (signal) => {\n            // 1. Enrich our partialTree by fetching all 'checked' but not-yet-fetched folders\n            const enrichedTree = await PartialTreeUtils.afterFill(partialTree, (path) => this.provider.list(path, { signal }), this.validateSingleFile, (n) => {\n                this.setLoading(this.plugin.uppy.i18n('addedNumFiles', { numFiles: n }));\n            });\n            // 2. Now that we know how many files there are - recheck aggregateRestrictions!\n            const aggregateRestrictionError = this.validateAggregateRestrictions(enrichedTree);\n            if (aggregateRestrictionError) {\n                this.plugin.setPluginState({ partialTree: enrichedTree });\n                return;\n            }\n            // 3. Add files\n            const companionFiles = getCheckedFilesWithPaths(enrichedTree);\n            addFiles(companionFiles, this.plugin, this.provider);\n            // 4. Reset state\n            this.resetPluginState();\n        }).catch(handleError(this.plugin.uppy));\n        this.setLoading(false);\n    }\n    toggleCheckbox(ourItem, isShiftKeyPressed) {\n        const { partialTree } = this.plugin.getPluginState();\n        const clickedRange = getClickedRange(ourItem.id, this.getDisplayedPartialTree(), isShiftKeyPressed, this.previousCheckbox);\n        const newPartialTree = PartialTreeUtils.afterToggleCheckbox(partialTree, clickedRange);\n        this.plugin.setPluginState({ partialTree: newPartialTree });\n        this.previousCheckbox = ourItem.id;\n    }\n    getDisplayedPartialTree = () => {\n        const { partialTree, currentFolderId, searchString } = this.plugin.getPluginState();\n        const inThisFolder = partialTree.filter((item) => item.type !== 'root' && item.parentId === currentFolderId);\n        // If provider supports server side search, we don't filter the items client side\n        const filtered = this.opts.supportsSearch || searchString.trim() === ''\n            ? inThisFolder\n            : inThisFolder.filter((item) => (item.data.name ?? this.plugin.uppy.i18n('unnamed'))\n                .toLowerCase()\n                .indexOf(searchString.trim().toLowerCase()) !== -1);\n        return filtered;\n    };\n    getBreadcrumbs = () => {\n        const { partialTree, currentFolderId } = this.plugin.getPluginState();\n        return getBreadcrumbs(partialTree, currentFolderId);\n    };\n    getSelectedAmount = () => {\n        const { partialTree } = this.plugin.getPluginState();\n        return getNumberOfSelectedFiles(partialTree);\n    };\n    validateAggregateRestrictions = (partialTree) => {\n        const checkedFiles = partialTree.filter((item) => item.type === 'file' && item.status === 'checked');\n        const uppyFiles = checkedFiles.map((file) => file.data);\n        return this.plugin.uppy.validateAggregateRestrictions(uppyFiles);\n    };\n    #renderSearchResults() {\n        const { i18n } = this.plugin.uppy;\n        const { searchResults: ids, partialTree } = this.plugin.getPluginState();\n        // todo memoize this so we don't have to do it on every render\n        const itemsById = new Map();\n        partialTree.forEach((item) => {\n            if (item.type !== 'root') {\n                itemsById.set(item.id, item);\n            }\n        });\n        // the search results view needs data from the partial tree,\n        const searchResults = ids.map((id) => {\n            const partialTreeItem = itemsById.get(id);\n            if (partialTreeItem == null)\n                throw new Error('Partial tree not complete');\n            return partialTreeItem;\n        });\n        return (_jsx(GlobalSearchView, { searchResults: searchResults, openFolder: this.openSearchResultFolder, toggleCheckbox: this.toggleCheckbox, i18n: i18n }));\n    }\n    render(state, viewOptions = {}) {\n        const { didFirstRender } = this.plugin.getPluginState();\n        const { i18n } = this.plugin.uppy;\n        if (!didFirstRender) {\n            this.plugin.setPluginState({ didFirstRender: true });\n            this.provider.fetchPreAuthToken();\n            this.openFolder(this.plugin.rootFolderId);\n        }\n        const opts = { ...this.opts, ...viewOptions };\n        const { authenticated, loading } = this.plugin.getPluginState();\n        const pluginIcon = this.plugin.icon || defaultPickerIcon;\n        if (authenticated === false) {\n            return (_jsx(AuthView, { pluginName: this.plugin.title, pluginIcon: pluginIcon, handleAuth: this.handleAuth, i18n: this.plugin.uppy.i18n, renderForm: opts.renderAuthForm, loading: loading }));\n        }\n        const { partialTree, username, searchString, searchResults } = this.plugin.getPluginState();\n        const breadcrumbs = this.getBreadcrumbs();\n        return (_jsxs(\"div\", { className: classNames('uppy-ProviderBrowser', `uppy-ProviderBrowser-viewType--${opts.viewType}`), children: [_jsx(Header, { showBreadcrumbs: opts.showBreadcrumbs, openFolder: this.openFolder, breadcrumbs: breadcrumbs, pluginIcon: pluginIcon, title: this.plugin.title, logout: this.logout, username: username, i18n: i18n }), opts.showFilter && (_jsx(FilterInput, { value: searchString, onChange: (s) => this.onSearchInput(s), onSubmit: () => { }, inputLabel: i18n('filter'), i18n: i18n })), searchResults ? (this.#renderSearchResults()) : (_jsx(Browser, { toggleCheckbox: this.toggleCheckbox, displayedPartialTree: this.getDisplayedPartialTree(), openFolder: this.openFolder, virtualList: opts.virtualList, noResultsLabel: i18n('noFilesFound'), handleScroll: this.handleScroll, viewType: opts.viewType, showTitles: opts.showTitles, i18n: this.plugin.uppy.i18n, isLoading: loading, utmSource: \"Companion\" })), _jsx(FooterActions, { partialTree: partialTree, donePicking: this.donePicking, cancelSelection: this.cancelSelection, i18n: i18n, validateAggregateRestrictions: this.validateAggregateRestrictions })] }));\n    }\n}\n", "{\n  \"name\": \"@uppy/provider-views\",\n  \"description\": \"View library for Uppy remote provider plugins.\",\n  \"version\": \"5.2.2\",\n  \"license\": \"MIT\",\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  ],\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\",\n    \"classnames\": \"^2.2.6\",\n    \"lodash\": \"^4.17.23\",\n    \"nanoid\": \"^5.0.9\",\n    \"p-queue\": \"^8.0.0\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"devDependencies\": {\n    \"@types/gapi\": \"^0.0.47\",\n    \"@types/google.accounts\": \"^0.0.14\",\n    \"@types/google.picker\": \"^0.0.42\",\n    \"cssnano\": \"^7.0.7\",\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  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  }\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\nimport GridItem from './components/GridItem.js';\nimport ListItem from './components/ListItem.js';\nexport default function Item(props) {\n    const { viewType, toggleCheckbox, showTitles, i18n, openFolder, file, utmSource, } = props;\n    const restrictionError = file.type === 'folder' ? null : file.restrictionError;\n    const isDisabled = !!restrictionError && file.status !== 'checked';\n    const ourProps = {\n        file,\n        openFolder,\n        toggleCheckbox,\n        utmSource,\n        i18n,\n        viewType,\n        showTitles,\n        className: classNames('uppy-ProviderBrowserItem', { 'uppy-ProviderBrowserItem--disabled': isDisabled }, { 'uppy-ProviderBrowserItem--noPreview': file.data.icon === 'video' }, { 'uppy-ProviderBrowserItem--is-checked': file.status === 'checked' }, { 'uppy-ProviderBrowserItem--is-partial': file.status === 'partial' }),\n        isDisabled,\n        restrictionError,\n    };\n    switch (viewType) {\n        case 'grid':\n            return _jsx(GridItem, { ...ourProps });\n        case 'list':\n            return _jsx(ListItem, { ...ourProps });\n        case 'unsplash':\n            return (_jsx(GridItem, { ...ourProps, children: _jsx(\"a\", { href: `${file.data.author.url}?utm_source=${utmSource}&utm_medium=referral`, target: \"_blank\", rel: \"noopener noreferrer\", className: \"uppy-ProviderBrowserItem-author\", tabIndex: -1, children: file.data.author.name }) }));\n        default:\n            throw new Error(`There is no such type ${viewType}`);\n    }\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nfunction FileIcon() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: 11, height: 14.5, viewBox: \"0 0 44 58\", children: _jsx(\"path\", { d: \"M27.437.517a1 1 0 0 0-.094.03H4.25C2.037.548.217 2.368.217 4.58v48.405c0 2.212 1.82 4.03 4.03 4.03H39.03c2.21 0 4.03-1.818 4.03-4.03V15.61a1 1 0 0 0-.03-.28 1 1 0 0 0 0-.093 1 1 0 0 0-.03-.032 1 1 0 0 0 0-.03 1 1 0 0 0-.032-.063 1 1 0 0 0-.03-.063 1 1 0 0 0-.032 0 1 1 0 0 0-.03-.063 1 1 0 0 0-.032-.03 1 1 0 0 0-.03-.063 1 1 0 0 0-.063-.062l-14.593-14a1 1 0 0 0-.062-.062A1 1 0 0 0 28 .708a1 1 0 0 0-.374-.157 1 1 0 0 0-.156 0 1 1 0 0 0-.03-.03l-.003-.003zM4.25 2.547h22.218v9.97c0 2.21 1.82 4.03 4.03 4.03h10.564v36.438a2.02 2.02 0 0 1-2.032 2.032H4.25c-1.13 0-2.032-.9-2.032-2.032V4.58c0-1.13.902-2.032 2.03-2.032zm24.218 1.345l10.375 9.937.75.718H30.5c-1.13 0-2.032-.9-2.032-2.03V3.89z\" }) }));\n}\nfunction FolderIcon() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", style: { minWidth: 16, marginRight: 3 }, viewBox: \"0 0 276.157 276.157\", children: _jsx(\"path\", { d: \"M273.08 101.378c-3.3-4.65-8.86-7.32-15.254-7.32h-24.34V67.59c0-10.2-8.3-18.5-18.5-18.5h-85.322c-3.63 0-9.295-2.875-11.436-5.805l-6.386-8.735c-4.982-6.814-15.104-11.954-23.546-11.954H58.73c-9.292 0-18.638 6.608-21.737 15.372l-2.033 5.752c-.958 2.71-4.72 5.37-7.596 5.37H18.5C8.3 49.09 0 57.39 0 67.59v167.07c0 .886.16 1.73.443 2.52.152 3.306 1.18 6.424 3.053 9.064 3.3 4.652 8.86 7.32 15.255 7.32h188.487c11.395 0 23.27-8.425 27.035-19.18l40.677-116.188c2.11-6.035 1.43-12.164-1.87-16.816zM18.5 64.088h8.864c9.295 0 18.64-6.607 21.738-15.37l2.032-5.75c.96-2.712 4.722-5.373 7.597-5.373h29.565c3.63 0 9.295 2.876 11.437 5.806l6.386 8.735c4.982 6.815 15.104 11.954 23.546 11.954h85.322c1.898 0 3.5 1.602 3.5 3.5v26.47H69.34c-11.395 0-23.27 8.423-27.035 19.178L15 191.23V67.59c0-1.898 1.603-3.5 3.5-3.5zm242.29 49.15l-40.676 116.188c-1.674 4.78-7.812 9.135-12.877 9.135H18.75c-1.447 0-2.576-.372-3.02-.997-.442-.625-.422-1.814.057-3.18l40.677-116.19c1.674-4.78 7.812-9.134 12.877-9.134h188.487c1.448 0 2.577.372 3.02.997.443.625.423 1.814-.056 3.18z\" }) }));\n}\nfunction VideoIcon() {\n    return (_jsxs(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", style: { width: 16, marginRight: 4 }, viewBox: \"0 0 58 58\", children: [_jsx(\"path\", { d: \"M36.537 28.156l-11-7a1.005 1.005 0 0 0-1.02-.033C24.2 21.3 24 21.635 24 22v14a1 1 0 0 0 1.537.844l11-7a1.002 1.002 0 0 0 0-1.688zM26 34.18V23.82L34.137 29 26 34.18z\" }), _jsx(\"path\", { d: \"M57 6H1a1 1 0 0 0-1 1v44a1 1 0 0 0 1 1h56a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1zM10 28H2v-9h8v9zm-8 2h8v9H2v-9zm10 10V8h34v42H12V40zm44-12h-8v-9h8v9zm-8 2h8v9h-8v-9zm8-22v9h-8V8h8zM2 8h8v9H2V8zm0 42v-9h8v9H2zm54 0h-8v-9h8v9z\" })] }));\n}\nexport default function ItemIcon({ itemIconString, alt = undefined, }) {\n    if (itemIconString === null)\n        return null;\n    switch (itemIconString) {\n        case 'file':\n            return _jsx(FileIcon, {});\n        case 'folder':\n            return _jsx(FolderIcon, {});\n        case 'video':\n            return _jsx(VideoIcon, {});\n        default: {\n            return (_jsx(\"img\", { src: itemIconString, alt: alt, referrerPolicy: \"no-referrer\", loading: \"lazy\", width: 16, height: 16 }));\n        }\n    }\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport ItemIcon from './ItemIcon.js';\nfunction GridItem({ file, toggleCheckbox, className, isDisabled, restrictionError, showTitles, children = null, i18n, }) {\n    return (_jsxs(\"li\", { className: className, title: isDisabled && restrictionError ? restrictionError : undefined, children: [_jsx(\"input\", { type: \"checkbox\", className: \"uppy-u-reset uppy-ProviderBrowserItem-checkbox uppy-ProviderBrowserItem-checkbox--grid\", onChange: toggleCheckbox, name: \"listitem\", id: file.id, checked: file.status === 'checked', disabled: isDisabled, \"data-uppy-super-focusable\": true }), _jsxs(\"label\", { htmlFor: file.id, \"aria-label\": file.data.name ?? i18n('unnamed'), className: \"uppy-u-reset uppy-ProviderBrowserItem-inner\", children: [_jsx(ItemIcon, { itemIconString: file.data.thumbnail || file.data.icon }), showTitles && (file.data.name ?? i18n('unnamed')), children] })] }));\n}\nexport default GridItem;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport ItemIcon from './ItemIcon.js';\nexport default function ListItem({ file, openFolder, className, isDisabled, restrictionError, toggleCheckbox, showTitles, i18n, }) {\n    return (_jsxs(\"li\", { className: className, title: file.status !== 'checked' && restrictionError\n            ? restrictionError\n            : undefined, children: [_jsx(\"input\", { type: \"checkbox\", className: \"uppy-u-reset uppy-ProviderBrowserItem-checkbox\", onChange: toggleCheckbox, \n                // for the <label/>\n                name: \"listitem\", id: file.id, checked: file.status === 'checked', \"aria-label\": file.data.isFolder\n                    ? i18n('allFilesFromFolderNamed', {\n                        name: file.data.name ?? i18n('unnamed'),\n                    })\n                    : null, disabled: isDisabled, \"data-uppy-super-focusable\": true }), file.data.isFolder ? (\n            // button to open a folder\n            _jsxs(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-ProviderBrowserItem-inner\", onClick: () => openFolder(file.id), \"aria-label\": i18n('openFolderNamed', {\n                    name: file.data.name ?? i18n('unnamed'),\n                }), children: [_jsx(\"div\", { className: \"uppy-ProviderBrowserItem-iconWrap\", children: _jsx(ItemIcon, { itemIconString: file.data.icon }) }), showTitles && file.data.name ? (_jsx(\"span\", { className: \"uppy-truncate-text\", children: file.data.name })) : (i18n('unnamed'))] })) : (\n            // label for a checkbox\n            _jsxs(\"label\", { htmlFor: file.id, className: \"uppy-u-reset uppy-ProviderBrowserItem-inner\", children: [_jsx(\"div\", { className: \"uppy-ProviderBrowserItem-iconWrap\", children: _jsx(ItemIcon, { itemIconString: file.data.icon }) }), showTitles && (_jsx(\"span\", { className: \"uppy-truncate-text\", children: file.data.name ?? i18n('unnamed') }))] }))] }));\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { VirtualList } from '@uppy/utils';\nimport { useEffect, useState } from 'preact/hooks';\nimport Item from './Item/index.js';\nfunction Browser(props) {\n    const { displayedPartialTree, viewType, toggleCheckbox, handleScroll, showTitles, i18n, isLoading, openFolder, noResultsLabel, virtualList, utmSource, } = props;\n    const [isShiftKeyPressed, setIsShiftKeyPressed] = useState(false);\n    // This records whether the user is holding the SHIFT key this very moment.\n    // Typically, this is implemented using `onClick((e) => e.shiftKey)` -\n    // however we can't use that, because for accessibility reasons\n    // we're using html tags that don't support `e.shiftKey` property (see #3768).\n    useEffect(() => {\n        const handleKeyUp = (e) => {\n            if (e.key === 'Shift')\n                setIsShiftKeyPressed(false);\n        };\n        const handleKeyDown = (e) => {\n            if (e.key === 'Shift')\n                setIsShiftKeyPressed(true);\n        };\n        document.addEventListener('keyup', handleKeyUp);\n        document.addEventListener('keydown', handleKeyDown);\n        return () => {\n            document.removeEventListener('keyup', handleKeyUp);\n            document.removeEventListener('keydown', handleKeyDown);\n        };\n    }, []);\n    if (isLoading) {\n        return (_jsx(\"div\", { className: \"uppy-Provider-loading\", children: typeof isLoading === 'string' ? isLoading : i18n('loading') }));\n    }\n    if (displayedPartialTree.length === 0) {\n        return _jsx(\"div\", { className: \"uppy-Provider-empty\", children: noResultsLabel });\n    }\n    const renderItem = (item) => (_jsx(Item, { viewType: viewType, toggleCheckbox: (event) => {\n            event.stopPropagation();\n            event.preventDefault();\n            // Prevent shift-clicking from highlighting file names\n            // (https://stackoverflow.com/a/1527797/3192470)\n            document.getSelection()?.removeAllRanges();\n            toggleCheckbox(item, isShiftKeyPressed);\n        }, showTitles: showTitles, i18n: i18n, openFolder: openFolder, file: item, utmSource: utmSource }, item.id));\n    // todo remove virtuallist option and always use virtual list\n    if (virtualList) {\n        return (_jsx(\"div\", { className: \"uppy-ProviderBrowser-body\", children: _jsx(VirtualList, { className: \"uppy-ProviderBrowser-list\", data: displayedPartialTree, renderRow: renderItem, rowHeight: 35.5 }) }));\n    }\n    return (_jsx(\"div\", { className: \"uppy-ProviderBrowser-body\", children: _jsx(\"ul\", { className: \"uppy-ProviderBrowser-list\", onScroll: handleScroll, \n            // making <ul> not focusable for firefox\n            tabIndex: -1, children: displayedPartialTree.map(renderItem) }) }));\n}\nexport default Browser;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\nimport { useMemo } from 'preact/hooks';\nimport getNumberOfSelectedFiles from './utils/PartialTreeUtils/getNumberOfSelectedFiles.js';\nexport default function FooterActions({ cancelSelection, donePicking, i18n, partialTree, validateAggregateRestrictions, }) {\n    const aggregateRestrictionError = useMemo(() => {\n        return validateAggregateRestrictions(partialTree);\n    }, [partialTree, validateAggregateRestrictions]);\n    const nOfSelectedFiles = useMemo(() => {\n        return getNumberOfSelectedFiles(partialTree);\n    }, [partialTree]);\n    if (nOfSelectedFiles === 0) {\n        return null;\n    }\n    return (_jsxs(\"div\", { className: \"uppy-ProviderBrowser-footer\", children: [_jsxs(\"div\", { className: \"uppy-ProviderBrowser-footer-buttons\", children: [_jsx(\"button\", { className: classNames('uppy-u-reset uppy-c-btn uppy-c-btn-primary', {\n                            'uppy-c-btn--disabled': aggregateRestrictionError,\n                        }), disabled: !!aggregateRestrictionError, onClick: donePicking, type: \"button\", children: i18n('selectX', {\n                            smart_count: nOfSelectedFiles,\n                        }) }), _jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-c-btn-link\", onClick: cancelSelection, type: \"button\", children: i18n('cancel') })] }), aggregateRestrictionError && (_jsx(\"div\", { className: \"uppy-ProviderBrowser-footer-error\", children: aggregateRestrictionError }))] }));\n}\n", "/**\n * We're interested in all 'checked' leaves of this tree,\n * but we don't yet know how many files there are inside of each checked folder.\n * `getNumberOfSelectedFiles()` returns the most intuitive number we can show to the user\n * in this situation.\n */\nconst getNumberOfSelectedFiles = (partialTree) => {\n    const checkedLeaves = partialTree.filter((item) => {\n        if (item.type === 'file' && item.status === 'checked') {\n            return true;\n        }\n        if (item.type === 'folder' && item.status === 'checked') {\n            const doesItHaveChildren = partialTree.some((i) => i.type !== 'root' && i.parentId === item.id);\n            return !doesItHaveChildren;\n        }\n        return false;\n    });\n    return checkedLeaves.length;\n};\nexport default getNumberOfSelectedFiles;\n", "const companionFileToUppyFile = (file, plugin, provider) => {\n    const name = file.name || file.id;\n    return {\n        id: file.id,\n        source: plugin.id,\n        name,\n        type: file.mimeType,\n        isRemote: true,\n        data: file,\n        preview: file.thumbnail || undefined,\n        // @ts-expect-error TODO: fixme\n        meta: {\n            // name, // todo shouldn't this be here?\n            authorName: file.author?.name,\n            authorUrl: file.author?.url,\n            // We need to do this `|| null` check, because null value\n            // for .relDirPath is `undefined` and for .relativePath is `null`.\n            // I do think we should just use `null` everywhere.\n            relativePath: file.relDirPath || null,\n            absolutePath: file.absDirPath,\n        },\n        body: {\n            fileId: file.id,\n        },\n        remote: {\n            companionUrl: plugin.opts.companionUrl,\n            url: `${provider.fileUrl(file.requestPath)}`,\n            body: {\n                fileId: file.id,\n            },\n            providerName: provider.name,\n            provider: provider.provider,\n            requestClientId: provider.provider,\n        },\n    };\n};\nexport default companionFileToUppyFile;\n", "import { getSafeFileId } from '@uppy/utils';\nimport companionFileToUppyFile from './companionFileToUppyFile.js';\nconst addFiles = (companionFiles, plugin, provider) => {\n    const uppyFiles = companionFiles.map((f) => companionFileToUppyFile(f, plugin, provider));\n    const filesToAdd = [];\n    const filesAlreadyAdded = [];\n    uppyFiles.forEach((file) => {\n        if (plugin.uppy.checkIfFileAlreadyExists(getSafeFileId(file, plugin.uppy.getID()))) {\n            filesAlreadyAdded.push(file);\n        }\n        else {\n            filesToAdd.push(file);\n        }\n    });\n    if (filesToAdd.length > 0) {\n        plugin.uppy.info(plugin.uppy.i18n('addedNumFiles', { numFiles: filesToAdd.length }));\n    }\n    if (filesAlreadyAdded.length > 0) {\n        plugin.uppy.info(`Not adding ${filesAlreadyAdded.length} files because they already exist`);\n    }\n    plugin.uppy.addFiles(filesToAdd);\n};\nexport default addFiles;\n", "// Shift-clicking selects a single consecutive list of items\n// starting at the previous click.\nconst getClickedRange = (clickedId, displayedPartialTree, isShiftKeyPressed, previousCheckbox) => {\n    const previousCheckboxIndex = displayedPartialTree.findIndex((item) => item.id === previousCheckbox);\n    if (previousCheckboxIndex !== -1 && isShiftKeyPressed) {\n        const newCheckboxIndex = displayedPartialTree.findIndex((item) => item.id === clickedId);\n        const clickedRange = displayedPartialTree.slice(Math.min(previousCheckboxIndex, newCheckboxIndex), Math.max(previousCheckboxIndex, newCheckboxIndex) + 1);\n        return clickedRange.map((item) => item.id);\n    }\n    return [clickedId];\n};\nexport default getClickedRange;\n", "const handleError = (uppy) => (error) => {\n    // authError just means we're not authenticated, don't report it\n    if (error.isAuthError) {\n        return;\n    }\n    // AbortError means the user has clicked \"cancel\" on an operation\n    if (error.name === 'AbortError') {\n        uppy.log('Aborting request', 'warning');\n        return;\n    }\n    uppy.log(error, 'error');\n    if (error.name === 'UserFacingApiError') {\n        uppy.info({\n            message: uppy.i18n('companionError'),\n            details: uppy.i18n(error.message),\n        }, 'warning', 5000);\n    }\n};\nexport default handleError;\n", "const getBreadcrumbs = (partialTree, currentFolderId) => {\n    let folder = partialTree.find((f) => f.id === currentFolderId);\n    let breadcrumbs = [];\n    while (true) {\n        breadcrumbs = [folder, ...breadcrumbs];\n        if (folder.type === 'root')\n            break;\n        const currentParentId = folder.parentId;\n        folder = partialTree.find((f) => f.id === currentParentId);\n    }\n    return breadcrumbs;\n};\nexport default getBreadcrumbs;\n", "const getPath = (partialTree, id, cache) => {\n    const sId = id === null ? 'null' : id;\n    if (cache[sId])\n        return cache[sId];\n    const file = partialTree.find((f) => f.id === id);\n    if (file.type === 'root')\n        return [];\n    const meAndParentPath = [...getPath(partialTree, file.parentId, cache), file];\n    cache[sId] = meAndParentPath;\n    return meAndParentPath;\n};\n// See \"Uppy file properties\" documentation for `.absolutePath` and `.relativePath`\n// (https://uppy.io/docs/uppy/#working-with-uppy-files)\nconst getCheckedFilesWithPaths = (partialTree) => {\n    // Equivalent to `const cache = {}`, but makes keys such as 'hasOwnProperty' safe too\n    const cache = Object.create(null);\n    // We're only interested in injecting paths into 'checked' files\n    const checkedFiles = partialTree.filter((item) => item.type === 'file' && item.status === 'checked');\n    const companionFilesWithInjectedPaths = checkedFiles.map((file) => {\n        const absFolders = getPath(partialTree, file.id, cache);\n        const firstCheckedFolderIndex = absFolders.findIndex((i) => i.type === 'folder' && i.status === 'checked');\n        const relFolders = absFolders.slice(firstCheckedFolderIndex);\n        const absDirPath = `/${absFolders.map((i) => i.data.name).join('/')}`;\n        const relDirPath = relFolders.length === 1\n            ? // Must return `undefined` (which later turns into `null` in `.companionFileToUppyFile()`)\n                // (https://github.com/transloadit/uppy/pull/4537#issuecomment-1629136652)\n                undefined\n            : relFolders.map((i) => i.data.name).join('/');\n        return {\n            ...file.data,\n            absDirPath,\n            relDirPath,\n        };\n    });\n    return companionFilesWithInjectedPaths;\n};\nexport default getCheckedFilesWithPaths;\n", "import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n", "export class TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\n/**\nAn error to be thrown when the request is aborted by AbortController.\nDOMException is thrown instead of this Error when DOMException is available.\n*/\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\n/**\nTODO: Remove AbortError and just throw DOMException when targeting Node 18.\n*/\nconst getDOMException = errorMessage => globalThis.DOMException === undefined\n\t? new AbortError(errorMessage)\n\t: new DOMException(errorMessage);\n\n/**\nTODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.\n*/\nconst getAbortedReason = signal => {\n\tconst reason = signal.reason === undefined\n\t\t? getDOMException('This operation was aborted.')\n\t\t: signal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, options) {\n\tconst {\n\t\tmilliseconds,\n\t\tfallback,\n\t\tmessage,\n\t\tcustomTimers = {setTimeout, clearTimeout},\n\t} = options;\n\n\tlet timer;\n\n\tconst wrappedPromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {\n\t\t\tthrow new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${milliseconds}\\``);\n\t\t}\n\n\t\tif (options.signal) {\n\t\t\tconst {signal} = options;\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t});\n\t\t}\n\n\t\tif (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tpromise.then(resolve, reject);\n\t\t\treturn;\n\t\t}\n\n\t\t// We create the error outside of `setTimeout` to preserve the stack trace.\n\t\tconst timeoutError = new TimeoutError();\n\n\t\ttimer = customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (fallback) {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\tif (message === false) {\n\t\t\t\tresolve();\n\t\t\t} else if (message instanceof Error) {\n\t\t\t\treject(message);\n\t\t\t} else {\n\t\t\t\ttimeoutError.message = message ?? `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\t\treject(timeoutError);\n\t\t\t}\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t})();\n\t});\n\n\tconst cancelablePromise = wrappedPromise.finally(() => {\n\t\tcancelablePromise.clear();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tcustomTimers.clearTimeout.call(undefined, timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n}\n", "// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nexport default function lowerBound(array, value, comparator) {\n    let first = 0;\n    let count = array.length;\n    while (count > 0) {\n        const step = Math.trunc(count / 2);\n        let it = first + step;\n        if (comparator(array[it], value) <= 0) {\n            first = ++it;\n            count -= step + 1;\n        }\n        else {\n            count = step;\n        }\n    }\n    return first;\n}\n", "import lowerBound from './lower-bound.js';\nexport default class PriorityQueue {\n    #queue = [];\n    enqueue(run, options) {\n        options = {\n            priority: 0,\n            ...options,\n        };\n        const element = {\n            priority: options.priority,\n            id: options.id,\n            run,\n        };\n        if (this.size === 0 || this.#queue[this.size - 1].priority >= options.priority) {\n            this.#queue.push(element);\n            return;\n        }\n        const index = lowerBound(this.#queue, element, (a, b) => b.priority - a.priority);\n        this.#queue.splice(index, 0, element);\n    }\n    setPriority(id, priority) {\n        const index = this.#queue.findIndex((element) => element.id === id);\n        if (index === -1) {\n            throw new ReferenceError(`No promise function with the id \"${id}\" exists in the queue.`);\n        }\n        const [item] = this.#queue.splice(index, 1);\n        this.enqueue(item.run, { priority, id });\n    }\n    dequeue() {\n        const item = this.#queue.shift();\n        return item?.run;\n    }\n    filter(options) {\n        return this.#queue.filter((element) => element.priority === options.priority).map((element) => element.run);\n    }\n    get size() {\n        return this.#queue.length;\n    }\n}\n", "import { EventEmitter } from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nPromise queue with concurrency control.\n*/\nexport default class PQueue extends EventEmitter {\n    #carryoverConcurrencyCount;\n    #isIntervalIgnored;\n    #intervalCount = 0;\n    #intervalCap;\n    #interval;\n    #intervalEnd = 0;\n    #intervalId;\n    #timeoutId;\n    #queue;\n    #queueClass;\n    #pending = 0;\n    // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n    #concurrency;\n    #isPaused;\n    #throwOnTimeout;\n    // Use to assign a unique identifier to a promise function, if not explicitly specified\n    #idAssigner = 1n;\n    /**\n    Per-operation timeout in milliseconds. Operations fulfill once `timeout` elapses if they haven't already.\n\n    Applies to each future operation.\n    */\n    timeout;\n    // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n    constructor(options) {\n        super();\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        options = {\n            carryoverConcurrencyCount: false,\n            intervalCap: Number.POSITIVE_INFINITY,\n            interval: 0,\n            concurrency: Number.POSITIVE_INFINITY,\n            autoStart: true,\n            queueClass: PriorityQueue,\n            ...options,\n        };\n        if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n            throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${options.intervalCap?.toString() ?? ''}\\` (${typeof options.intervalCap})`);\n        }\n        if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n            throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${options.interval?.toString() ?? ''}\\` (${typeof options.interval})`);\n        }\n        this.#carryoverConcurrencyCount = options.carryoverConcurrencyCount;\n        this.#isIntervalIgnored = options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0;\n        this.#intervalCap = options.intervalCap;\n        this.#interval = options.interval;\n        this.#queue = new options.queueClass();\n        this.#queueClass = options.queueClass;\n        this.concurrency = options.concurrency;\n        this.timeout = options.timeout;\n        this.#throwOnTimeout = options.throwOnTimeout === true;\n        this.#isPaused = options.autoStart === false;\n    }\n    get #doesIntervalAllowAnother() {\n        return this.#isIntervalIgnored || this.#intervalCount < this.#intervalCap;\n    }\n    get #doesConcurrentAllowAnother() {\n        return this.#pending < this.#concurrency;\n    }\n    #next() {\n        this.#pending--;\n        this.#tryToStartAnother();\n        this.emit('next');\n    }\n    #onResumeInterval() {\n        this.#onInterval();\n        this.#initializeIntervalIfNeeded();\n        this.#timeoutId = undefined;\n    }\n    get #isIntervalPaused() {\n        const now = Date.now();\n        if (this.#intervalId === undefined) {\n            const delay = this.#intervalEnd - now;\n            if (delay < 0) {\n                // Act as the interval was done\n                // We don't need to resume it here because it will be resumed on line 160\n                this.#intervalCount = (this.#carryoverConcurrencyCount) ? this.#pending : 0;\n            }\n            else {\n                // Act as the interval is pending\n                if (this.#timeoutId === undefined) {\n                    this.#timeoutId = setTimeout(() => {\n                        this.#onResumeInterval();\n                    }, delay);\n                }\n                return true;\n            }\n        }\n        return false;\n    }\n    #tryToStartAnother() {\n        if (this.#queue.size === 0) {\n            // We can clear the interval (\"pause\")\n            // Because we can redo it later (\"resume\")\n            if (this.#intervalId) {\n                clearInterval(this.#intervalId);\n            }\n            this.#intervalId = undefined;\n            this.emit('empty');\n            if (this.#pending === 0) {\n                this.emit('idle');\n            }\n            return false;\n        }\n        if (!this.#isPaused) {\n            const canInitializeInterval = !this.#isIntervalPaused;\n            if (this.#doesIntervalAllowAnother && this.#doesConcurrentAllowAnother) {\n                const job = this.#queue.dequeue();\n                if (!job) {\n                    return false;\n                }\n                this.emit('active');\n                job();\n                if (canInitializeInterval) {\n                    this.#initializeIntervalIfNeeded();\n                }\n                return true;\n            }\n        }\n        return false;\n    }\n    #initializeIntervalIfNeeded() {\n        if (this.#isIntervalIgnored || this.#intervalId !== undefined) {\n            return;\n        }\n        this.#intervalId = setInterval(() => {\n            this.#onInterval();\n        }, this.#interval);\n        this.#intervalEnd = Date.now() + this.#interval;\n    }\n    #onInterval() {\n        if (this.#intervalCount === 0 && this.#pending === 0 && this.#intervalId) {\n            clearInterval(this.#intervalId);\n            this.#intervalId = undefined;\n        }\n        this.#intervalCount = this.#carryoverConcurrencyCount ? this.#pending : 0;\n        this.#processQueue();\n    }\n    /**\n    Executes all queued functions until it reaches the limit.\n    */\n    #processQueue() {\n        // eslint-disable-next-line no-empty\n        while (this.#tryToStartAnother()) { }\n    }\n    get concurrency() {\n        return this.#concurrency;\n    }\n    set concurrency(newConcurrency) {\n        if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n            throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n        }\n        this.#concurrency = newConcurrency;\n        this.#processQueue();\n    }\n    async #throwOnAbort(signal) {\n        return new Promise((_resolve, reject) => {\n            signal.addEventListener('abort', () => {\n                reject(signal.reason);\n            }, { once: true });\n        });\n    }\n    /**\n    Updates the priority of a promise function by its id, affecting its execution order. Requires a defined concurrency limit to take effect.\n\n    For example, this can be used to prioritize a promise function to run earlier.\n\n    ```js\n    import PQueue from 'p-queue';\n\n    const queue = new PQueue({concurrency: 1});\n\n    queue.add(async () => '\uD83E\uDD84', {priority: 1});\n    queue.add(async () => '\uD83E\uDD80', {priority: 0, id: '\uD83E\uDD80'});\n    queue.add(async () => '\uD83E\uDD84', {priority: 1});\n    queue.add(async () => '\uD83E\uDD84', {priority: 1});\n\n    queue.setPriority('\uD83E\uDD80', 2);\n    ```\n\n    In this case, the promise function with `id: '\uD83E\uDD80'` runs second.\n\n    You can also deprioritize a promise function to delay its execution:\n\n    ```js\n    import PQueue from 'p-queue';\n\n    const queue = new PQueue({concurrency: 1});\n\n    queue.add(async () => '\uD83E\uDD84', {priority: 1});\n    queue.add(async () => '\uD83E\uDD80', {priority: 1, id: '\uD83E\uDD80'});\n    queue.add(async () => '\uD83E\uDD84');\n    queue.add(async () => '\uD83E\uDD84', {priority: 0});\n\n    queue.setPriority('\uD83E\uDD80', -1);\n    ```\n    Here, the promise function with `id: '\uD83E\uDD80'` executes last.\n    */\n    setPriority(id, priority) {\n        this.#queue.setPriority(id, priority);\n    }\n    async add(function_, options = {}) {\n        // In case `id` is not defined.\n        options.id ??= (this.#idAssigner++).toString();\n        options = {\n            timeout: this.timeout,\n            throwOnTimeout: this.#throwOnTimeout,\n            ...options,\n        };\n        return new Promise((resolve, reject) => {\n            this.#queue.enqueue(async () => {\n                this.#pending++;\n                this.#intervalCount++;\n                try {\n                    options.signal?.throwIfAborted();\n                    let operation = function_({ signal: options.signal });\n                    if (options.timeout) {\n                        operation = pTimeout(Promise.resolve(operation), { milliseconds: options.timeout });\n                    }\n                    if (options.signal) {\n                        operation = Promise.race([operation, this.#throwOnAbort(options.signal)]);\n                    }\n                    const result = await operation;\n                    resolve(result);\n                    this.emit('completed', result);\n                }\n                catch (error) {\n                    if (error instanceof TimeoutError && !options.throwOnTimeout) {\n                        resolve();\n                        return;\n                    }\n                    reject(error);\n                    this.emit('error', error);\n                }\n                finally {\n                    this.#next();\n                }\n            }, options);\n            this.emit('add');\n            this.#tryToStartAnother();\n        });\n    }\n    async addAll(functions, options) {\n        return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n    }\n    /**\n    Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n    */\n    start() {\n        if (!this.#isPaused) {\n            return this;\n        }\n        this.#isPaused = false;\n        this.#processQueue();\n        return this;\n    }\n    /**\n    Put queue execution on hold.\n    */\n    pause() {\n        this.#isPaused = true;\n    }\n    /**\n    Clear the queue.\n    */\n    clear() {\n        this.#queue = new this.#queueClass();\n    }\n    /**\n    Can be called multiple times. Useful if you for example add additional items at a later time.\n\n    @returns A promise that settles when the queue becomes empty.\n    */\n    async onEmpty() {\n        // Instantly resolve if the queue is empty\n        if (this.#queue.size === 0) {\n            return;\n        }\n        await this.#onEvent('empty');\n    }\n    /**\n    @returns A promise that settles when the queue size is less than the given limit: `queue.size < limit`.\n\n    If you want to avoid having the queue grow beyond a certain size you can `await queue.onSizeLessThan()` before adding a new item.\n\n    Note that this only limits the number of items waiting to start. There could still be up to `concurrency` jobs already running that this call does not include in its calculation.\n    */\n    async onSizeLessThan(limit) {\n        // Instantly resolve if the queue is empty.\n        if (this.#queue.size < limit) {\n            return;\n        }\n        await this.#onEvent('next', () => this.#queue.size < limit);\n    }\n    /**\n    The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n    @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n    */\n    async onIdle() {\n        // Instantly resolve if none pending and if nothing else is queued\n        if (this.#pending === 0 && this.#queue.size === 0) {\n            return;\n        }\n        await this.#onEvent('idle');\n    }\n    async #onEvent(event, filter) {\n        return new Promise(resolve => {\n            const listener = () => {\n                if (filter && !filter()) {\n                    return;\n                }\n                this.off(event, listener);\n                resolve();\n            };\n            this.on(event, listener);\n        });\n    }\n    /**\n    Size of the queue, the number of queued items waiting to run.\n    */\n    get size() {\n        return this.#queue.size;\n    }\n    /**\n    Size of the queue, filtered by the given options.\n\n    For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n    */\n    sizeBy(options) {\n        // eslint-disable-next-line unicorn/no-array-callback-reference\n        return this.#queue.filter(options).length;\n    }\n    /**\n    Number of running items (no longer in the queue).\n    */\n    get pending() {\n        return this.#pending;\n    }\n    /**\n    Whether the queue is currently paused.\n    */\n    get isPaused() {\n        return this.#isPaused;\n    }\n}\n", "/**\n * One-level copying is sufficient as mutations within our `partialTree` are limited to properties\n * such as `.status`, `.cached`, `.nextPagePath`, and not `.data = { THIS }`.\n */\nconst shallowClone = (partialTree) => {\n    return partialTree.map((item) => ({ ...item }));\n};\nexport default shallowClone;\n", "// p-queue does not have a `\"main\"` field in its `package.json`, and that makes `import/no-unresolved` freak out.\n// We can safely ignore it because bundlers will happily use the `\"exports\"` field instead.\nimport PQueue from 'p-queue';\nimport shallowClone from './shallowClone.js';\nconst recursivelyFetch = async (queue, poorTree, poorFolder, apiList, validateSingleFile) => {\n    let items = [];\n    let currentPath = poorFolder.cached\n        ? poorFolder.nextPagePath\n        : poorFolder.id;\n    while (currentPath) {\n        const response = await apiList(currentPath);\n        items = items.concat(response.items);\n        currentPath = response.nextPagePath;\n    }\n    const newFolders = items.filter((i) => i.isFolder === true);\n    const newFiles = items.filter((i) => i.isFolder === false);\n    const folders = newFolders.map((folder) => ({\n        type: 'folder',\n        id: folder.requestPath,\n        cached: false,\n        nextPagePath: null,\n        status: 'checked',\n        parentId: poorFolder.id,\n        data: folder,\n    }));\n    const files = newFiles.map((file) => {\n        const restrictionError = validateSingleFile(file);\n        return {\n            type: 'file',\n            id: file.requestPath,\n            restrictionError,\n            status: restrictionError ? 'unchecked' : 'checked',\n            parentId: poorFolder.id,\n            data: file,\n        };\n    });\n    poorFolder.cached = true;\n    poorFolder.nextPagePath = null;\n    poorTree.push(...files, ...folders);\n    folders.forEach(async (folder) => {\n        queue.add(() => recursivelyFetch(queue, poorTree, folder, apiList, validateSingleFile));\n    });\n};\nconst afterFill = async (partialTree, apiList, validateSingleFile, reportProgress) => {\n    const queue = new PQueue({ concurrency: 6 });\n    // fill up the missing parts of a partialTree!\n    const poorTree = shallowClone(partialTree);\n    const poorFolders = poorTree.filter((item) => item.type === 'folder' &&\n        item.status === 'checked' &&\n        // either \"not yet cached at all\" or \"some pages are left to fetch\"\n        (item.cached === false || item.nextPagePath));\n    // per each poor folder, recursively fetch all files and make them .checked!\n    poorFolders.forEach((poorFolder) => {\n        queue.add(() => recursivelyFetch(queue, poorTree, poorFolder, apiList, validateSingleFile));\n    });\n    queue.on('completed', () => {\n        const nOfFilesChecked = poorTree.filter((i) => i.type === 'file' && i.status === 'checked').length;\n        reportProgress(nOfFilesChecked);\n    });\n    await queue.onIdle();\n    return poorTree;\n};\nexport default afterFill;\n", "const afterOpenFolder = (oldPartialTree, discoveredItems, clickedFolder, currentPagePath, validateSingleFile) => {\n    // Filter out existing items in the partial tree (we don't want duplicates)\n    // If we don't, we would get a duplicate when the item is already added to the partial tree in the search view\n    // and the user then enters its parent from the normal view e.g either through breadcrumbs or manually navigating to it.\n    const discoveredUniqueItems = discoveredItems.filter((i) => !oldPartialTree.find((f) => f.id === i.requestPath));\n    const discoveredFolders = discoveredUniqueItems.filter((i) => i.isFolder === true);\n    const discoveredFiles = discoveredUniqueItems.filter((i) => i.isFolder === false);\n    const isParentFolderChecked = clickedFolder.type === 'folder' && clickedFolder.status === 'checked';\n    const folders = discoveredFolders.map((folder) => ({\n        type: 'folder',\n        id: folder.requestPath,\n        cached: false,\n        nextPagePath: null,\n        status: isParentFolderChecked ? 'checked' : 'unchecked',\n        parentId: clickedFolder.id,\n        data: folder,\n    }));\n    const files = discoveredFiles.map((file) => {\n        const restrictionError = validateSingleFile(file);\n        return {\n            type: 'file',\n            id: file.requestPath,\n            restrictionError,\n            status: isParentFolderChecked && !restrictionError ? 'checked' : 'unchecked',\n            parentId: clickedFolder.id,\n            data: file,\n        };\n    });\n    // just doing `clickedFolder.cached = true` in a non-mutating way\n    const updatedClickedFolder = {\n        ...clickedFolder,\n        cached: true,\n        nextPagePath: currentPagePath,\n    };\n    const partialTreeWithUpdatedClickedFolder = oldPartialTree.map((folder) => folder.id === updatedClickedFolder.id ? updatedClickedFolder : folder);\n    const newPartialTree = [\n        ...partialTreeWithUpdatedClickedFolder,\n        ...folders,\n        ...files,\n    ];\n    return newPartialTree;\n};\nexport default afterOpenFolder;\n", "const afterScrollFolder = (oldPartialTree, currentFolderId, items, nextPagePath, validateSingleFile) => {\n    const currentFolder = oldPartialTree.find((i) => i.id === currentFolderId);\n    const newFolders = items.filter((i) => i.isFolder === true);\n    const newFiles = items.filter((i) => i.isFolder === false);\n    // just doing `scrolledFolder.nextPagePath = ...` in a non-mutating way\n    const scrolledFolder = { ...currentFolder, nextPagePath };\n    const partialTreeWithUpdatedScrolledFolder = oldPartialTree.map((folder) => folder.id === scrolledFolder.id ? scrolledFolder : folder);\n    const isParentFolderChecked = scrolledFolder.type === 'folder' && scrolledFolder.status === 'checked';\n    const folders = newFolders.map((folder) => ({\n        type: 'folder',\n        id: folder.requestPath,\n        cached: false,\n        nextPagePath: null,\n        status: isParentFolderChecked ? 'checked' : 'unchecked',\n        parentId: scrolledFolder.id,\n        data: folder,\n    }));\n    const files = newFiles.map((file) => {\n        const restrictionError = validateSingleFile(file);\n        return {\n            type: 'file',\n            id: file.requestPath,\n            restrictionError,\n            status: isParentFolderChecked && !restrictionError ? 'checked' : 'unchecked',\n            parentId: scrolledFolder.id,\n            data: file,\n        };\n    });\n    const newPartialTree = [\n        ...partialTreeWithUpdatedScrolledFolder,\n        ...folders,\n        ...files,\n    ];\n    return newPartialTree;\n};\nexport default afterScrollFolder;\n", "import shallowClone from './shallowClone.js';\n/*\n  FROM        | TO\n\n  root        |  root\n    folder    |    folder\n    folder \u2705\uFE0E  |    folder \u2705\uFE0E\n      file    |      file \u2705\uFE0E\n      file    |      file \u2705\uFE0E\n      folder  |      folder \u2705\uFE0E\n        file  |        file \u2705\uFE0E\n    file      |    file\n    file      |    file\n*/\nconst percolateDown = (tree, id, shouldMarkAsChecked) => {\n    const children = tree.filter((item) => item.type !== 'root' && item.parentId === id);\n    children.forEach((item) => {\n        item.status =\n            shouldMarkAsChecked && !(item.type === 'file' && item.restrictionError)\n                ? 'checked'\n                : 'unchecked';\n        percolateDown(tree, item.id, shouldMarkAsChecked);\n    });\n};\n/*\n  FROM         | TO\n\n  root         |  root\n    folder     |    folder\n    folder     |    folder [\u25AC] ('partial' status)\n      file     |      file\n      folder   |      folder \u2705\uFE0E\n        file \u2705\uFE0E |       file \u2705\uFE0E\n    file       |    file\n    file       |    file\n*/\nconst percolateUp = (tree, id) => {\n    const folder = tree.find((item) => item.id === id);\n    if (folder.type === 'root')\n        return;\n    const validChildren = tree.filter((item) => \n    // is a child\n    item.type !== 'root' &&\n        item.parentId === folder.id &&\n        // does pass validations\n        !(item.type === 'file' && item.restrictionError));\n    const areAllChildrenChecked = validChildren.every((item) => item.status === 'checked');\n    const areAllChildrenUnchecked = validChildren.every((item) => item.status === 'unchecked');\n    /**\n     * We should *only* set parent folder to checked/unchecked if it has been fully read (`cached`).\n     * Otherwise, checking a nested folder from the search view also marks its parent as checked,\n     * which could be incorrect because there might be more unselected (unloaded) files.\n     *\n     * Example: /foo/bar/new/myfolder\n     * If we search for \"myfolder\", we only build the minimal path (using ProviderView.#buildSearchResultPath)\n     * up to that folder adding nodes for \"bar\", \"new\", and \"myfolder\" (assuming \"foo\" is already\n     * present in the partialTree as part of the root folder).\n     * Since \"foo\", \"bar\", and \"new\" aren\u2019t fully fetched yet, we don\u2019t know if they have other children.\n     * If the user checks \"myfolder\" from the search results and we propagate the checked state\n     * upward without verifying parent.cached, it would incorrectly mark all its parents as checked.\n     * Later, when the user navigates to any of \"foo\", \"bar\", \"new\" through the Normal View (via breadcrumbs or manually),\n     * PartialTreeUtils.afterOpenFolder would then incorrectly mark and display all its children as checked.\n     */\n    if (areAllChildrenChecked && folder.cached) {\n        folder.status = 'checked';\n    }\n    else if (areAllChildrenUnchecked) {\n        folder.status = 'unchecked';\n    }\n    else {\n        folder.status = 'partial';\n    }\n    percolateUp(tree, folder.parentId);\n};\nconst afterToggleCheckbox = (oldTree, checkedIds) => {\n    const tree = shallowClone(oldTree);\n    const newlyCheckedItems = tree.filter((item) => item.type !== 'root' && checkedIds.includes(item.id));\n    newlyCheckedItems.forEach((item) => {\n        // allow toggling:\n        const newStatus = item.status === 'checked' ? 'unchecked' : 'checked';\n        // and if it's a file, we need to respect restrictions\n        if (item.type === 'file') {\n            item.status = item.restrictionError ? 'unchecked' : newStatus;\n        }\n        else {\n            item.status = newStatus;\n        }\n        percolateDown(tree, item.id, item.status === 'checked');\n    });\n    // all checked items have the same parent so we only need to perlocate the first item\n    percolateUp(tree, newlyCheckedItems[0].parentId);\n    return tree;\n};\nexport default afterToggleCheckbox;\n", "import afterFill from './afterFill.js';\nimport afterOpenFolder from './afterOpenFolder.js';\nimport afterScrollFolder from './afterScrollFolder.js';\nimport afterToggleCheckbox from './afterToggleCheckbox.js';\nexport default {\n    afterOpenFolder,\n    afterScrollFolder,\n    afterToggleCheckbox,\n    afterFill,\n};\n", "const shouldHandleScroll = (event) => {\n    const { scrollHeight, scrollTop, offsetHeight } = event.target;\n    const scrollPosition = scrollHeight - (scrollTop + offsetHeight);\n    return scrollPosition < 50;\n};\nexport default shouldHandleScroll;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\nimport ItemIcon from './ItemIcon.js';\nconst SearchResultItem = ({ i18n, item, toggleCheckbox, openFolder, }) => {\n    const isDisabled = 'restrictionError' in item &&\n        item.restrictionError != null &&\n        item.status !== 'checked';\n    return (_jsxs(\"li\", { className: classNames('uppy-ProviderBrowserItem', { 'uppy-ProviderBrowserItem--disabled': isDisabled }, { 'uppy-ProviderBrowserItem--noPreview': item.data.icon === 'video' }, { 'uppy-ProviderBrowserItem--is-checked': item.status === 'checked' }, { 'uppy-ProviderBrowserItem--is-partial': item.status === 'partial' }), title: ('restrictionError' in item ? item.restrictionError : undefined) ??\n            undefined, children: [_jsx(\"input\", { type: \"checkbox\", className: \"uppy-u-reset uppy-ProviderBrowserItem-checkbox\", onChange: () => toggleCheckbox(item, false), checked: item.status === 'checked', \"aria-label\": item.data.name ?? i18n('unnamed'), disabled: isDisabled, \"data-uppy-super-focusable\": true }), _jsxs(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-ProviderBrowserItem-inner\", disabled: isDisabled, \"aria-label\": item.data.name, onClick: () => {\n                    if (item.data.isFolder) {\n                        openFolder(item.id);\n                    }\n                }, children: [_jsx(\"div\", { className: \"uppy-ProviderBrowserItem-iconWrap\", children: _jsx(ItemIcon, { itemIconString: item.data.icon }) }), item.data.name ?? i18n('unnamed')] })] }));\n};\nexport default SearchResultItem;\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport SearchResultItem from '../Item/components/SearchResultItem.js';\nconst GlobalSearchView = ({ searchResults, toggleCheckbox, openFolder, i18n, }) => {\n    if (searchResults.length === 0) {\n        return _jsx(\"div\", { className: \"uppy-Provider-empty\", children: i18n('noFilesFound') });\n    }\n    return (_jsx(\"div\", { className: \"uppy-ProviderBrowser-body\", children: _jsx(\"ul\", { className: \"uppy-ProviderBrowser-list\", children: searchResults.map((item) => (_jsx(SearchResultItem, { i18n: i18n, item: item, toggleCheckbox: toggleCheckbox, openFolder: openFolder }, item.id))) }) }));\n};\nexport default GlobalSearchView;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\nimport Breadcrumbs from '../Breadcrumbs.js';\nimport User from './User.js';\nexport default function Header(props) {\n    return (_jsx(\"div\", { className: \"uppy-ProviderBrowser-header\", children: _jsxs(\"div\", { className: classNames('uppy-ProviderBrowser-headerBar', !props.showBreadcrumbs && 'uppy-ProviderBrowser-headerBar--simple'), children: [props.showBreadcrumbs && (_jsx(Breadcrumbs, { openFolder: props.openFolder, breadcrumbs: props.breadcrumbs, breadcrumbsIcon: props.pluginIcon?.(), title: props.title, i18n: props.i18n })), _jsx(User, { logout: props.logout, username: props.username, i18n: props.i18n })] }) }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { Fragment } from 'preact';\nexport default function Breadcrumbs(props) {\n    const { openFolder, title, breadcrumbsIcon, breadcrumbs, i18n } = props;\n    return (_jsxs(\"div\", { className: \"uppy-Provider-breadcrumbs\", children: [_jsx(\"div\", { className: \"uppy-Provider-breadcrumbsIcon\", children: breadcrumbsIcon }), breadcrumbs.map((folder, index) => (_jsxs(Fragment, { children: [_jsx(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn\", onClick: () => openFolder(folder.id), children: folder.type === 'root'\n                            ? title\n                            : (folder.data.name ?? i18n('unnamed')) }, folder.id), breadcrumbs.length === index + 1 ? '' : ' / '] })))] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { Fragment } from 'preact';\nexport default function User({ i18n, logout, username }) {\n    return (_jsxs(Fragment, { children: [username && (_jsx(\"span\", { className: \"uppy-ProviderBrowser-user\", children: username }, \"username\")), _jsx(\"button\", { type: \"button\", onClick: logout, className: \"uppy-u-reset uppy-c-btn uppy-ProviderBrowser-userLogout\", children: i18n('logOut') }, \"logout\")] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { remoteFileObjToLocal } from '@uppy/utils';\nimport classNames from 'classnames';\nimport packageJson from '../../package.json' with { type: 'json' };\nimport Browser from '../Browser.js';\nimport FilterInput from '../FilterInput.js';\nimport FooterActions from '../FooterActions.js';\nimport SearchView from '../SearchView.js';\nimport addFiles from '../utils/addFiles.js';\nimport getClickedRange from '../utils/getClickedRange.js';\nimport handleError from '../utils/handleError.js';\nimport getCheckedFilesWithPaths from '../utils/PartialTreeUtils/getCheckedFilesWithPaths.js';\nimport PartialTreeUtils from '../utils/PartialTreeUtils/index.js';\nimport shouldHandleScroll from '../utils/shouldHandleScroll.js';\nconst defaultState = {\n    loading: false,\n    searchString: '',\n    partialTree: [\n        {\n            type: 'root',\n            id: null,\n            cached: false,\n            nextPagePath: null,\n        },\n    ],\n    currentFolderId: null,\n    isInputMode: true,\n};\nconst defaultOptions = {\n    viewType: 'grid',\n    showTitles: true,\n    showFilter: true,\n    utmSource: 'Companion',\n};\n/**\n * SearchProviderView, used for Unsplash and future image search providers.\n * Extends generic View, shared with regular providers like Google Drive and Instagram.\n */\nexport default class SearchProviderView {\n    static VERSION = packageJson.version;\n    plugin;\n    provider;\n    opts;\n    isHandlingScroll = false;\n    lastCheckbox = null;\n    constructor(plugin, opts) {\n        this.plugin = plugin;\n        this.provider = opts.provider;\n        this.opts = { ...defaultOptions, ...opts };\n        this.setSearchString = this.setSearchString.bind(this);\n        this.search = this.search.bind(this);\n        this.resetPluginState = this.resetPluginState.bind(this);\n        this.handleScroll = this.handleScroll.bind(this);\n        this.donePicking = this.donePicking.bind(this);\n        this.cancelSelection = this.cancelSelection.bind(this);\n        this.toggleCheckbox = this.toggleCheckbox.bind(this);\n        this.render = this.render.bind(this);\n        // Set default state for the plugin\n        this.resetPluginState();\n        // @ts-expect-error this should be typed in @uppy/dashboard.\n        this.plugin.uppy.on('dashboard:close-panel', this.resetPluginState);\n        this.plugin.uppy.registerRequestClient(this.provider.provider, this.provider);\n    }\n    tearDown() {\n        // Nothing.\n    }\n    setLoading(loading) {\n        this.plugin.setPluginState({ loading });\n    }\n    resetPluginState() {\n        this.plugin.setPluginState(defaultState);\n    }\n    cancelSelection() {\n        const { partialTree } = this.plugin.getPluginState();\n        const newPartialTree = partialTree.map((item) => item.type === 'root' ? item : { ...item, status: 'unchecked' });\n        this.plugin.setPluginState({ partialTree: newPartialTree });\n    }\n    async search() {\n        const { searchString } = this.plugin.getPluginState();\n        if (searchString === '')\n            return;\n        this.setLoading(true);\n        try {\n            const response = await this.provider.search(searchString);\n            const newPartialTree = [\n                {\n                    type: 'root',\n                    id: null,\n                    cached: false,\n                    nextPagePath: response.nextPageQuery,\n                },\n                ...response.items.map((item) => ({\n                    type: 'file',\n                    id: item.requestPath,\n                    status: 'unchecked',\n                    parentId: null,\n                    data: item,\n                })),\n            ];\n            this.plugin.setPluginState({\n                partialTree: newPartialTree,\n                isInputMode: false,\n            });\n        }\n        catch (error) {\n            handleError(this.plugin.uppy)(error);\n        }\n        this.setLoading(false);\n    }\n    async handleScroll(event) {\n        const { partialTree, searchString } = this.plugin.getPluginState();\n        const root = partialTree.find((i) => i.type === 'root');\n        if (shouldHandleScroll(event) &&\n            !this.isHandlingScroll &&\n            root.nextPagePath) {\n            this.isHandlingScroll = true;\n            try {\n                const response = await this.provider.search(searchString, root.nextPagePath);\n                const newRoot = {\n                    ...root,\n                    nextPagePath: response.nextPageQuery,\n                };\n                const oldItems = partialTree.filter((i) => i.type !== 'root');\n                const newPartialTree = [\n                    newRoot,\n                    ...oldItems,\n                    ...response.items.map((item) => ({\n                        type: 'file',\n                        id: item.requestPath,\n                        status: 'unchecked',\n                        parentId: null,\n                        data: item,\n                    })),\n                ];\n                this.plugin.setPluginState({ partialTree: newPartialTree });\n            }\n            catch (error) {\n                handleError(this.plugin.uppy)(error);\n            }\n            this.isHandlingScroll = false;\n        }\n    }\n    async donePicking() {\n        const { partialTree } = this.plugin.getPluginState();\n        // 1. Add files\n        const companionFiles = getCheckedFilesWithPaths(partialTree);\n        addFiles(companionFiles, this.plugin, this.provider);\n        // 2. Reset state\n        this.resetPluginState();\n    }\n    toggleCheckbox(ourItem, isShiftKeyPressed) {\n        const { partialTree } = this.plugin.getPluginState();\n        const clickedRange = getClickedRange(ourItem.id, this.getDisplayedPartialTree(), isShiftKeyPressed, this.lastCheckbox);\n        const newPartialTree = PartialTreeUtils.afterToggleCheckbox(partialTree, clickedRange);\n        this.plugin.setPluginState({ partialTree: newPartialTree });\n        this.lastCheckbox = ourItem.id;\n    }\n    validateSingleFile = (file) => {\n        const companionFile = remoteFileObjToLocal(file);\n        const result = this.plugin.uppy.validateSingleFile(companionFile);\n        return result;\n    };\n    getDisplayedPartialTree = () => {\n        const { partialTree } = this.plugin.getPluginState();\n        return partialTree.filter((item) => item.type !== 'root');\n    };\n    setSearchString = (searchString) => {\n        this.plugin.setPluginState({ searchString });\n        if (searchString === '') {\n            this.plugin.setPluginState({ partialTree: [] });\n        }\n    };\n    validateAggregateRestrictions = (partialTree) => {\n        const checkedFiles = partialTree.filter((item) => item.type === 'file' && item.status === 'checked');\n        const uppyFiles = checkedFiles.map((file) => file.data);\n        return this.plugin.uppy.validateAggregateRestrictions(uppyFiles);\n    };\n    render(state, viewOptions = {}) {\n        const { isInputMode, searchString, loading, partialTree } = this.plugin.getPluginState();\n        const { i18n } = this.plugin.uppy;\n        const opts = { ...this.opts, ...viewOptions };\n        if (isInputMode) {\n            return (_jsx(SearchView, { value: searchString, onChange: this.setSearchString, onSubmit: this.search, inputLabel: i18n('enterTextToSearch'), children: i18n('searchImages') }));\n        }\n        return (_jsxs(\"div\", { className: classNames('uppy-ProviderBrowser', `uppy-ProviderBrowser-viewType--${opts.viewType}`), children: [opts.showFilter && (_jsx(FilterInput, { value: searchString, onChange: this.setSearchString, onSubmit: this.search, inputLabel: i18n('search'), i18n: i18n })), _jsx(Browser, { toggleCheckbox: this.toggleCheckbox, displayedPartialTree: this.getDisplayedPartialTree(), handleScroll: this.handleScroll, openFolder: async () => { }, noResultsLabel: i18n('noSearchResults'), viewType: opts.viewType, showTitles: opts.showTitles, isLoading: loading, i18n: i18n, virtualList: false, utmSource: this.opts.utmSource }), _jsx(FooterActions, { partialTree: partialTree, donePicking: this.donePicking, cancelSelection: this.cancelSelection, i18n: i18n, validateAggregateRestrictions: this.validateAggregateRestrictions })] }));\n    }\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { useSearchForm } from './useSearchForm.js';\n/**\n * SearchView component for search with a submit button.\n * Typically used for initial search views or forms that require explicit submission.\n * The children prop is rendered as the button content, allowing full control over button text and loading states.\n */\nfunction SearchView({ value, onChange, onSubmit, inputLabel, loading = false, children, }) {\n    const { formId } = useSearchForm(onSubmit);\n    return (_jsxs(\"section\", { className: \"uppy-SearchProvider\", children: [_jsx(\"input\", { className: \"uppy-u-reset uppy-c-textInput uppy-SearchProvider-input\", type: \"search\", \"aria-label\": inputLabel, placeholder: inputLabel, value: value, onInput: (e) => onChange(e.target.value), form: formId, disabled: loading, \"data-uppy-super-focusable\": true }), _jsx(\"button\", { disabled: loading, className: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-SearchProvider-searchButton\", type: \"submit\", form: formId, children: children })] }));\n}\nexport default SearchView;\n", "{\n  \"name\": \"@uppy/audio\",\n  \"description\": \"Uppy plugin that records audio using the device\u2019s microphone.\",\n  \"version\": \"3.1.0\",\n  \"license\": \"MIT\",\n  \"style\": \"dist/style.min.css\",\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"audio\",\n    \"microphone\",\n    \"sound\",\n    \"record\",\n    \"mediarecorder\"\n  ],\n  \"type\": \"module\",\n  \"sideEffects\": [\n    \"*.css\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"devDependencies\": {\n    \"cssnano\": \"^7.0.7\",\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  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\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}\n", "export default {\n    strings: {\n        pluginNameAudio: 'Audio',\n        // Used as the label for the button that starts an audio recording.\n        // This is not visibly rendered but is picked up by screen readers.\n        startAudioRecording: 'Begin audio recording',\n        // Used as the label for the button that stops an audio recording.\n        // This is not visibly rendered but is picked up by screen readers.\n        stopAudioRecording: 'Stop audio recording',\n        // Title on the \u201Callow access\u201D screen\n        allowAudioAccessTitle: 'Please allow access to your microphone',\n        // Description on the \u201Callow access\u201D screen\n        allowAudioAccessDescription: 'In order to record audio, please allow microphone access for this site.',\n        // Title on the \u201Cdevice not available\u201D screen\n        noAudioTitle: 'Microphone Not Available',\n        // Description on the \u201Cdevice not available\u201D screen\n        noAudioDescription: 'In order to record audio, please connect a microphone or another audio input device',\n        // Message about file size will be shown in an Informer bubble\n        recordingStoppedMaxSize: 'Recording stopped because the file size is about to exceed the limit',\n        // Used as the label for the counter that shows recording length (`1:25`).\n        // This is not visibly rendered but is picked up by screen readers.\n        recordingLength: 'Recording length %{recording_length}',\n        // Used as the label for the submit checkmark button.\n        // This is not visibly rendered but is picked up by screen readers.\n        submitRecordedFile: 'Submit recorded file',\n        // Used as the label for the discard cross button.\n        // This is not visibly rendered but is picked up by screen readers.\n        discardRecordedFile: 'Discard recorded file',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nexport default (props) => {\n    const { icon, hasAudio, i18n } = props;\n    return (_jsxs(\"div\", { className: \"uppy-Audio-permissons\", children: [_jsx(\"div\", { className: \"uppy-Audio-permissonsIcon\", children: icon() }), _jsx(\"div\", { className: \"uppy-Audio-title\", children: hasAudio ? i18n('allowAudioAccessTitle') : i18n('noAudioTitle') }), _jsx(\"p\", { children: hasAudio\n                    ? i18n('allowAudioAccessDescription')\n                    : i18n('noAudioDescription') })] }));\n};\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nexport default ({ currentDeviceId, audioSources, onChangeSource, }) => {\n    return (_jsx(\"div\", { className: \"uppy-Audio-videoSource\", children: _jsx(\"select\", { className: \"uppy-u-reset uppy-Audio-audioSource-select\", onChange: (event) => {\n                onChangeSource(event.target.value);\n            }, children: audioSources.map((audioSource) => (_jsx(\"option\", { value: audioSource.deviceId, selected: audioSource.deviceId === currentDeviceId, children: audioSource.label }, audioSource.deviceId))) }) }));\n};\n", "// biome-ignore lint/complexity/noBannedTypes: ...\nfunction isFunction(v) {\n    return typeof v === 'function';\n}\nfunction result(v) {\n    return isFunction(v) ? v() : v;\n}\n/* Audio Oscilloscope\n  https://github.com/miguelmota/audio-oscilloscope\n*/\nexport default class AudioOscilloscope {\n    canvas;\n    canvasContext;\n    width;\n    height;\n    analyser;\n    bufferLength;\n    dataArray;\n    onDrawFrame;\n    streamSource;\n    audioContext;\n    source;\n    constructor(canvas, options = {}) {\n        const canvasOptions = options.canvas || {};\n        const canvasContextOptions = options.canvasContext ||\n            {};\n        this.analyser = null;\n        this.bufferLength = 0;\n        this.canvas = canvas;\n        this.width = result(canvasOptions.width) || this.canvas.width;\n        this.height = result(canvasOptions.height) || this.canvas.height;\n        this.canvas.width = this.width;\n        this.canvas.height = this.height;\n        this.canvasContext = this.canvas.getContext('2d');\n        this.canvasContext.fillStyle =\n            result(canvasContextOptions.fillStyle) || 'rgb(255, 255, 255)';\n        this.canvasContext.strokeStyle =\n            result(canvasContextOptions.strokeStyle) || 'rgb(0, 0, 0)';\n        this.canvasContext.lineWidth = result(canvasContextOptions.lineWidth) || 1;\n        this.onDrawFrame = isFunction(options.onDrawFrame)\n            ? options.onDrawFrame\n            : () => { };\n    }\n    addSource(streamSource) {\n        this.streamSource = streamSource;\n        this.audioContext = this.streamSource.context;\n        this.analyser = this.audioContext.createAnalyser();\n        this.analyser.fftSize = 2048;\n        this.bufferLength = this.analyser.frequencyBinCount;\n        this.source = this.audioContext.createBufferSource();\n        this.dataArray = new Uint8Array(this.bufferLength);\n        this.analyser.getByteTimeDomainData(this.dataArray);\n        this.streamSource.connect(this.analyser);\n    }\n    draw() {\n        const { analyser, dataArray, bufferLength } = this;\n        const ctx = this.canvasContext;\n        const w = this.width;\n        const h = this.height;\n        if (analyser) {\n            analyser.getByteTimeDomainData(dataArray);\n        }\n        ctx.fillRect(0, 0, w, h);\n        ctx.beginPath();\n        const sliceWidth = (w * 1.0) / bufferLength;\n        let x = 0;\n        if (!bufferLength) {\n            ctx.moveTo(0, this.height / 2);\n        }\n        for (let i = 0; i < bufferLength; i++) {\n            const v = dataArray[i] / 128.0;\n            const y = v * (h / 2);\n            if (i === 0) {\n                ctx.moveTo(x, y);\n            }\n            else {\n                ctx.lineTo(x, y);\n            }\n            x += sliceWidth;\n        }\n        ctx.lineTo(w, h / 2);\n        ctx.stroke();\n        this.onDrawFrame(this);\n        requestAnimationFrame(this.#draw);\n    }\n    #draw = () => this.draw();\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nfunction DiscardButton({ onDiscard, i18n }) {\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Audio-button\", type: \"button\", title: i18n('discardRecordedFile'), \"aria-label\": i18n('discardRecordedFile'), onClick: onDiscard, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { width: \"13\", height: \"13\", viewBox: \"0 0 13 13\", xmlns: \"http://www.w3.org/2000/svg\", \"aria-hidden\": \"true\", className: \"uppy-c-icon\", children: _jsxs(\"g\", { fill: \"#FFF\", fillRule: \"evenodd\", children: [_jsx(\"path\", { d: \"M.496 11.367L11.103.76l1.414 1.414L1.911 12.781z\" }), _jsx(\"path\", { d: \"M11.104 12.782L.497 2.175 1.911.76l10.607 10.606z\" })] }) }) }));\n}\nexport default DiscardButton;\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nexport default function RecordButton({ recording, onStartRecording, onStopRecording, i18n, }) {\n    if (recording) {\n        return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Audio-button\", type: \"button\", title: i18n('stopAudioRecording'), \"aria-label\": i18n('stopAudioRecording'), onClick: onStopRecording, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"100\", height: \"100\", viewBox: \"0 0 100 100\", children: _jsx(\"rect\", { x: \"15\", y: \"15\", width: \"70\", height: \"70\" }) }) }));\n    }\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Audio-button\", type: \"button\", title: i18n('startAudioRecording'), \"aria-label\": i18n('startAudioRecording'), onClick: onStartRecording, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"14px\", height: \"20px\", viewBox: \"0 0 14 20\", children: _jsx(\"path\", { d: \"M7 14c2.21 0 4-1.71 4-3.818V3.818C11 1.71 9.21 0 7 0S3 1.71 3 3.818v6.364C3 12.29 4.79 14 7 14zm6.364-7h-.637a.643.643 0 0 0-.636.65V9.6c0 3.039-2.565 5.477-5.6 5.175-2.645-.264-4.582-2.692-4.582-5.407V7.65c0-.36-.285-.65-.636-.65H.636A.643.643 0 0 0 0 7.65v1.631c0 3.642 2.544 6.888 6.045 7.382v1.387H3.818a.643.643 0 0 0-.636.65v.65c0 .36.285.65.636.65h6.364c.351 0 .636-.29.636-.65v-.65c0-.36-.285-.65-.636-.65H7.955v-1.372C11.363 16.2 14 13.212 14 9.6V7.65c0-.36-.285-.65-.636-.65z\", fill: \"#FFF\", \"fill-rule\": \"nonzero\" }) }) }));\n}\n", "/**\n * Takes an Integer value of seconds (e.g. 83) and converts it into a\n * human-readable formatted string (e.g. '1:23').\n */\nexport default function formatSeconds(seconds) {\n    return `${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, '0')}`;\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport formatSeconds from './formatSeconds.js';\nexport default function RecordingLength({ recordingLengthSeconds, }) {\n    const formattedRecordingLengthSeconds = formatSeconds(recordingLengthSeconds);\n    return _jsx(\"span\", { children: formattedRecordingLengthSeconds });\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nfunction SubmitButton({ onSubmit, i18n }) {\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Audio-button uppy-Audio-button--submit\", type: \"button\", title: i18n('submitRecordedFile'), \"aria-label\": i18n('submitRecordedFile'), onClick: onSubmit, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { width: \"12\", height: \"9\", viewBox: \"0 0 12 9\", xmlns: \"http://www.w3.org/2000/svg\", \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", children: _jsx(\"path\", { fill: \"#fff\", fillRule: \"nonzero\", d: \"M10.66 0L12 1.31 4.136 9 0 4.956l1.34-1.31L4.136 6.38z\" }) }) }));\n}\nexport default SubmitButton;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { useEffect, useRef } from 'preact/hooks';\nimport AudioSourceSelect, {} from './AudioSourceSelect.js';\nimport AudioOscilloscope from './audio-oscilloscope/index.js';\nimport DiscardButton from './DiscardButton.js';\nimport RecordButton from './RecordButton.js';\nimport RecordingLength from './RecordingLength.js';\nimport SubmitButton from './SubmitButton.js';\nexport default function RecordingScreen(props) {\n    const { stream, recordedAudio, onStop, recording, supportsRecording, audioSources, showAudioSourceDropdown, onSubmit, i18n, onStartRecording, onStopRecording, onDiscardRecordedAudio, recordingLengthSeconds, } = props;\n    const canvasEl = useRef(null);\n    const oscilloscope = useRef();\n    // componentDidMount / componentDidUnmount\n    useEffect(() => {\n        return () => {\n            oscilloscope.current = null;\n            onStop();\n        };\n    }, [onStop]);\n    // componentDidUpdate\n    useEffect(() => {\n        if (!recordedAudio) {\n            oscilloscope.current = new AudioOscilloscope(canvasEl.current, {\n                canvas: {\n                    width: 600,\n                    height: 600,\n                },\n                canvasContext: {\n                    lineWidth: 2,\n                    fillStyle: 'rgb(0,0,0)',\n                    strokeStyle: 'green',\n                },\n            });\n            oscilloscope.current.draw();\n            if (stream) {\n                const audioContext = new AudioContext();\n                const source = audioContext.createMediaStreamSource(stream);\n                oscilloscope.current.addSource(source);\n            }\n        }\n    }, [recordedAudio, stream]);\n    const hasRecordedAudio = recordedAudio != null;\n    const shouldShowRecordButton = !hasRecordedAudio && supportsRecording;\n    const shouldShowAudioSourceDropdown = showAudioSourceDropdown &&\n        !hasRecordedAudio &&\n        audioSources &&\n        audioSources.length > 1;\n    return (_jsxs(\"div\", { className: \"uppy-Audio-container\", children: [_jsx(\"div\", { className: \"uppy-Audio-audioContainer\", children: hasRecordedAudio ? (\n                // biome-ignore lint/a11y/useMediaCaption: ...\n                _jsx(\"audio\", { className: \"uppy-Audio-player\", controls: true, src: recordedAudio })) : (_jsx(\"canvas\", { ref: canvasEl, className: \"uppy-Audio-canvas\" })) }), _jsxs(\"div\", { className: \"uppy-Audio-footer\", children: [_jsx(\"div\", { className: \"uppy-Audio-audioSourceContainer\", children: shouldShowAudioSourceDropdown ? AudioSourceSelect(props) : null }), _jsxs(\"div\", { className: \"uppy-Audio-buttonContainer\", children: [shouldShowRecordButton && (_jsx(RecordButton, { recording: recording, onStartRecording: onStartRecording, onStopRecording: onStopRecording, i18n: i18n })), hasRecordedAudio && _jsx(SubmitButton, { onSubmit: onSubmit, i18n: i18n }), hasRecordedAudio && (_jsx(DiscardButton, { onDiscard: onDiscardRecordedAudio, i18n: i18n }))] }), _jsx(\"div\", { className: \"uppy-Audio-recordingLength\", children: !hasRecordedAudio && (_jsx(RecordingLength, { recordingLengthSeconds: recordingLengthSeconds })) })] })] }));\n}\n", "export default function supportsMediaRecorder() {\n    return (typeof MediaRecorder === 'function' &&\n        typeof MediaRecorder.prototype?.start === 'function');\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { UIPlugin } from '@uppy/core';\nimport { getFileTypeExtension } from '@uppy/utils';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nimport PermissionsScreen from './PermissionsScreen.js';\nimport RecordingScreen from './RecordingScreen.js';\nimport supportsMediaRecorder from './supportsMediaRecorder.js';\n/**\n * Audio recording plugin\n */\nexport default class Audio extends UIPlugin {\n    static VERSION = packageJson.version;\n    #recordingLengthTimer;\n    icon;\n    #stream = null;\n    #audioActive = false;\n    #recordingChunks = null;\n    #recorder = null;\n    #capturedMediaFile = null;\n    #mediaDevices;\n    #supportsUserMedia;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.#mediaDevices = navigator.mediaDevices;\n        this.#supportsUserMedia = this.#mediaDevices != null;\n        this.id = this.opts.id || 'Audio';\n        this.type = 'acquirer';\n        this.icon = () => (_jsx(\"svg\", { className: \"uppy-DashboardTab-iconAudio\", \"aria-hidden\": \"true\", focusable: \"false\", width: \"32px\", height: \"32px\", viewBox: \"0 0 32 32\", children: _jsx(\"path\", { d: \"M21.143 12.297c.473 0 .857.383.857.857v2.572c0 3.016-2.24 5.513-5.143 5.931v2.64h2.572a.857.857 0 110 1.714H12.57a.857.857 0 110-1.714h2.572v-2.64C12.24 21.24 10 18.742 10 15.726v-2.572a.857.857 0 111.714 0v2.572A4.29 4.29 0 0016 20.01a4.29 4.29 0 004.286-4.285v-2.572c0-.474.384-.857.857-.857zM16 6.5a3 3 0 013 3v6a3 3 0 01-6 0v-6a3 3 0 013-3z\", fill: \"currentcolor\", \"fill-rule\": \"nonzero\" }) }));\n        this.defaultLocale = locale;\n        this.opts = { ...opts };\n        this.i18nInit();\n        this.title = this.i18n('pluginNameAudio');\n        this.setPluginState({\n            hasAudio: false,\n            audioReady: false,\n            cameraError: null,\n            recordingLengthSeconds: 0,\n            audioSources: [],\n            currentDeviceId: null,\n        });\n    }\n    #hasAudioCheck() {\n        if (!this.#mediaDevices) {\n            return Promise.resolve(false);\n        }\n        return this.#mediaDevices.enumerateDevices().then((devices) => {\n            return devices.some((device) => device.kind === 'audioinput');\n        });\n    }\n    #start = (options) => {\n        if (!this.#supportsUserMedia) {\n            return Promise.reject(new Error('Microphone access not supported'));\n        }\n        this.#audioActive = true;\n        this.#hasAudioCheck().then((hasAudio) => {\n            this.setPluginState({\n                hasAudio,\n            });\n            // ask user for access to their camera\n            return this.#mediaDevices\n                .getUserMedia({ audio: true })\n                .then((stream) => {\n                this.#stream = stream;\n                let currentDeviceId = null;\n                const tracks = stream.getAudioTracks();\n                if (!options?.deviceId) {\n                    currentDeviceId = tracks[0].getSettings().deviceId;\n                }\n                else {\n                    currentDeviceId = tracks.findLast((track) => {\n                        return track.getSettings().deviceId === options.deviceId;\n                    });\n                }\n                // Update the sources now, so we can access the names.\n                this.#updateSources();\n                this.setPluginState({\n                    currentDeviceId,\n                    audioReady: true,\n                });\n            })\n                .catch((err) => {\n                this.setPluginState({\n                    audioReady: false,\n                    cameraError: err,\n                });\n                this.uppy.info(err.message, 'error');\n            });\n        });\n    };\n    #startRecording = () => {\n        // only used if supportsMediaRecorder() returned true\n        this.#recorder = new MediaRecorder(this.#stream);\n        this.#recordingChunks = [];\n        let stoppingBecauseOfMaxSize = false;\n        this.#recorder.addEventListener('dataavailable', (event) => {\n            this.#recordingChunks.push(event.data);\n            const { restrictions } = this.uppy.opts;\n            if (this.#recordingChunks.length > 1 &&\n                restrictions.maxFileSize != null &&\n                !stoppingBecauseOfMaxSize) {\n                const totalSize = this.#recordingChunks.reduce((acc, chunk) => acc + chunk.size, 0);\n                // Exclude the initial chunk from the average size calculation because it is likely to be a very small outlier\n                const averageChunkSize = (totalSize - this.#recordingChunks[0].size) /\n                    (this.#recordingChunks.length - 1);\n                const expectedEndChunkSize = averageChunkSize * 3;\n                const maxSize = Math.max(0, restrictions.maxFileSize - expectedEndChunkSize);\n                if (totalSize > maxSize) {\n                    stoppingBecauseOfMaxSize = true;\n                    this.uppy.info(this.i18n('recordingStoppedMaxSize'), 'warning', 4000);\n                    this.#stopRecording();\n                }\n            }\n        });\n        // use a \"time slice\" of 500ms: ondataavailable will be called each 500ms\n        // smaller time slices mean we can more accurately check the max file size restriction\n        this.#recorder.start(500);\n        // Start the recordingLengthTimer if we are showing the recording length.\n        this.#recordingLengthTimer = setInterval(() => {\n            const currentRecordingLength = this.getPluginState()\n                .recordingLengthSeconds;\n            this.setPluginState({\n                recordingLengthSeconds: currentRecordingLength + 1,\n            });\n        }, 1000);\n        this.setPluginState({\n            isRecording: true,\n        });\n    };\n    #stopRecording = () => {\n        const stopped = new Promise((resolve) => {\n            this.#recorder.addEventListener('stop', () => {\n                resolve();\n            });\n            this.#recorder.stop();\n            clearInterval(this.#recordingLengthTimer);\n            this.setPluginState({ recordingLengthSeconds: 0 });\n        });\n        return stopped\n            .then(() => {\n            this.setPluginState({\n                isRecording: false,\n            });\n            return this.#getAudio();\n        })\n            .then((file) => {\n            try {\n                this.#capturedMediaFile = file;\n                // create object url for capture result preview\n                this.setPluginState({\n                    recordedAudio: URL.createObjectURL(file.data),\n                });\n            }\n            catch (err) {\n                // Logging the error, exept restrictions, which is handled in Core\n                if (!err.isRestriction) {\n                    this.uppy.log(err);\n                }\n            }\n        })\n            .then(() => {\n            this.#recordingChunks = null;\n            this.#recorder = null;\n        }, (error) => {\n            this.#recordingChunks = null;\n            this.#recorder = null;\n            throw error;\n        });\n    };\n    #discardRecordedAudio = () => {\n        this.setPluginState({ recordedAudio: null });\n        this.#capturedMediaFile = null;\n    };\n    #submit = () => {\n        try {\n            if (this.#capturedMediaFile) {\n                this.uppy.addFile(this.#capturedMediaFile);\n            }\n        }\n        catch (err) {\n            // Logging the error, exept restrictions, which is handled in Core\n            if (!err.isRestriction) {\n                this.uppy.log(err, 'warning');\n            }\n        }\n    };\n    #stop = async () => {\n        if (this.#stream) {\n            const audioTracks = this.#stream.getAudioTracks();\n            audioTracks.forEach((track) => track.stop());\n        }\n        if (this.#recorder) {\n            await new Promise((resolve) => {\n                this.#recorder.addEventListener('stop', resolve, { once: true });\n                this.#recorder.stop();\n                clearInterval(this.#recordingLengthTimer);\n            });\n        }\n        this.#recordingChunks = null;\n        this.#recorder = null;\n        this.#audioActive = false;\n        this.#stream = null;\n        this.setPluginState({\n            recordedAudio: null,\n            isRecording: false,\n            recordingLengthSeconds: 0,\n        });\n    };\n    #getAudio() {\n        // Sometimes in iOS Safari, Blobs (especially the first Blob in the recordingChunks Array)\n        // have empty 'type' attributes (e.g. '') so we need to find a Blob that has a defined 'type'\n        // attribute in order to determine the correct MIME type.\n        const mimeType = this.#recordingChunks.find((blob) => blob.type?.length > 0).type;\n        const fileExtension = getFileTypeExtension(mimeType);\n        if (!fileExtension) {\n            return Promise.reject(new Error(`Could not retrieve recording: Unsupported media type \"${mimeType}\"`));\n        }\n        const name = `audio-${Date.now()}.${fileExtension}`;\n        const blob = new Blob(this.#recordingChunks, { type: mimeType });\n        const file = {\n            source: this.id,\n            name,\n            data: new Blob([blob], { type: mimeType }),\n            type: mimeType,\n        };\n        return Promise.resolve(file);\n    }\n    #changeSource = (deviceId) => {\n        this.#stop();\n        this.#start({ deviceId });\n    };\n    #updateSources = () => {\n        this.#mediaDevices.enumerateDevices().then((devices) => {\n            this.setPluginState({\n                audioSources: devices.filter((device) => device.kind === 'audioinput'),\n            });\n        });\n    };\n    render() {\n        if (!this.#audioActive) {\n            this.#start();\n        }\n        const audioState = this.getPluginState();\n        if (!audioState.audioReady || !audioState.hasAudio) {\n            return (_jsx(PermissionsScreen, { icon: this.icon, i18n: this.i18n, hasAudio: audioState.hasAudio }));\n        }\n        return (_jsx(RecordingScreen, { ...audioState, onChangeSource: this.#changeSource, onStartRecording: this.#startRecording, onStopRecording: this.#stopRecording, onDiscardRecordedAudio: this.#discardRecordedAudio, onSubmit: this.#submit, onStop: this.#stop, i18n: this.i18n, showAudioSourceDropdown: this.opts.showAudioSourceDropdown, supportsRecording: supportsMediaRecorder(), recording: audioState.isRecording, stream: this.#stream }));\n    }\n    install() {\n        this.setPluginState({\n            audioReady: false,\n            recordingLengthSeconds: 0,\n        });\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n        if (this.#mediaDevices) {\n            this.#updateSources();\n            this.#mediaDevices.ondevicechange = () => {\n                this.#updateSources();\n                if (this.#stream) {\n                    let restartStream = true;\n                    const { audioSources, currentDeviceId } = this.getPluginState();\n                    audioSources.forEach((audioSource) => {\n                        if (currentDeviceId === audioSource.deviceId) {\n                            restartStream = false;\n                        }\n                    });\n                    if (restartStream) {\n                        this.#stop();\n                        this.#start();\n                    }\n                }\n            };\n        }\n    }\n    uninstall() {\n        if (this.#stream) {\n            this.#stop();\n        }\n        this.unmount();\n    }\n}\n", "{\n  \"name\": \"@uppy/aws-s3\",\n  \"description\": \"Upload to Amazon S3 with Uppy\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\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    \"aws s3\",\n    \"amazon s3\",\n    \"s3\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"multipart\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@aws-sdk/client-s3\": \"^3.362.0\",\n    \"@aws-sdk/s3-request-presigner\": \"^3.362.0\",\n    \"@uppy/core\": \"workspace:^\",\n    \"jsdom\": \"^26.1.0\",\n    \"nock\": \"^13.1.0\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\",\n    \"whatwg-fetch\": \"3.6.2\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  }\n}\n", "/**\n * Create a canonical request by concatenating the following strings, separated\n * by newline characters. This helps ensure that the signature that you\n * calculate and the signature that AWS calculates can match.\n *\n * @see https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html#create-canonical-request\n *\n * @param param0\n * @param param0.method \u2013 The HTTP method.\n * @param param0.CanonicalUri \u2013 The URI-encoded version of the absolute\n * path component URL (everything between the host and the question mark\n * character (?) that starts the query string parameters). If the absolute path\n * is empty, use a forward slash character (/).\n * @param param0.CanonicalQueryString \u2013 The URL-encoded query string\n * parameters, separated by ampersands (&). Percent-encode reserved characters,\n * including the space character. Encode names and values separately. If there\n * are empty parameters, append the equals sign to the parameter name before\n * encoding. After encoding, sort the parameters alphabetically by key name. If\n * there is no query string, use an empty string (\"\").\n * @param param0.SignedHeaders \u2013 The request headers,\n * that will be signed, and their values, separated by newline characters.\n * For the values, trim any leading or trailing spaces, convert sequential\n * spaces to a single space, and separate the values for a multi-value header\n * using commas. You must include the host header (HTTP/1.1), and any x-amz-*\n * headers in the signature. You can optionally include other standard headers\n * in the signature, such as content-type.\n * @param param0.HashedPayload \u2013 A string created using the payload in\n * the body of the HTTP request as input to a hash function. This string uses\n * lowercase hexadecimal characters. If the payload is empty, use an empty\n * string as the input to the hash function.\n */\nfunction createCanonicalRequest({ method = 'PUT', CanonicalUri = '/', CanonicalQueryString = '', SignedHeaders, HashedPayload, }) {\n    const headerKeys = Object.keys(SignedHeaders)\n        .map((k) => k.toLowerCase())\n        .sort();\n    return [\n        method,\n        CanonicalUri,\n        CanonicalQueryString,\n        ...headerKeys.map((k) => `${k}:${SignedHeaders[k]}`),\n        '',\n        headerKeys.join(';'),\n        HashedPayload,\n    ].join('\\n');\n}\nconst ec = new TextEncoder();\nconst algorithm = { name: 'HMAC', hash: 'SHA-256' };\nasync function digest(data) {\n    const { subtle } = globalThis.crypto;\n    return subtle.digest(algorithm.hash, ec.encode(data));\n}\nasync function generateHmacKey(secret) {\n    const { subtle } = globalThis.crypto;\n    return subtle.importKey('raw', typeof secret === 'string' ? ec.encode(secret) : secret, algorithm, false, ['sign']);\n}\nfunction arrayBufferToHexString(arrayBuffer) {\n    const byteArray = new Uint8Array(arrayBuffer);\n    let hexString = '';\n    for (let i = 0; i < byteArray.length; i++) {\n        hexString += byteArray[i].toString(16).padStart(2, '0');\n    }\n    return hexString;\n}\nasync function hash(key, data) {\n    const { subtle } = globalThis.crypto;\n    return subtle.sign(algorithm, await generateHmacKey(key), ec.encode(data));\n}\n/**\n * @see https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html\n */\nexport default async function createSignedURL({ accountKey, accountSecret, sessionToken, bucketName, Key, Region, expires, uploadId, partNumber, }) {\n    const Service = 's3';\n    const host = `${Service}.${Region}.amazonaws.com`;\n    /**\n     * List of char out of `encodeURI()` is taken from ECMAScript spec.\n     * Note that the `/` character is purposefully not included in list below.\n     *\n     * @see https://tc39.es/ecma262/#sec-encodeuri-uri\n     */\n    const CanonicalUri = `/${bucketName}/${encodeURI(Key).replace(/[;?:@&=+$,#!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`)}`;\n    const payload = 'UNSIGNED-PAYLOAD';\n    const requestDateTime = new Date().toISOString().replace(/[-:]|\\.\\d+/g, ''); // YYYYMMDDTHHMMSSZ\n    const date = requestDateTime.slice(0, 8); // YYYYMMDD\n    const scope = `${date}/${Region}/${Service}/aws4_request`;\n    const url = new URL(`https://${host}${CanonicalUri}`);\n    // N.B.: URL search params needs to be added in the ASCII order\n    url.searchParams.set('X-Amz-Algorithm', 'AWS4-HMAC-SHA256');\n    url.searchParams.set('X-Amz-Content-Sha256', payload);\n    url.searchParams.set('X-Amz-Credential', `${accountKey}/${scope}`);\n    url.searchParams.set('X-Amz-Date', requestDateTime);\n    url.searchParams.set('X-Amz-Expires', expires);\n    // We are signing on the client, so we expect there's going to be a session token:\n    url.searchParams.set('X-Amz-Security-Token', sessionToken);\n    url.searchParams.set('X-Amz-SignedHeaders', 'host');\n    // Those two are present only for Multipart Uploads:\n    if (partNumber)\n        url.searchParams.set('partNumber', partNumber);\n    if (uploadId)\n        url.searchParams.set('uploadId', uploadId);\n    url.searchParams.set('x-id', partNumber && uploadId ? 'UploadPart' : 'PutObject');\n    // Step 1: Create a canonical request\n    const canonical = createCanonicalRequest({\n        CanonicalUri,\n        CanonicalQueryString: url.search.slice(1),\n        SignedHeaders: {\n            host,\n        },\n        HashedPayload: payload,\n    });\n    // Step 2: Create a hash of the canonical request\n    const hashedCanonical = arrayBufferToHexString(await digest(canonical));\n    // Step 3: Create a string to sign\n    const stringToSign = [\n        `AWS4-HMAC-SHA256`, // The algorithm used to create the hash of the canonical request.\n        requestDateTime, // The date and time used in the credential scope.\n        scope, // The credential scope. This restricts the resulting signature to the specified Region and service.\n        hashedCanonical, // The hash of the canonical request.\n    ].join('\\n');\n    // Step 4: Calculate the signature\n    const kDate = await hash(`AWS4${accountSecret}`, date);\n    const kRegion = await hash(kDate, Region);\n    const kService = await hash(kRegion, Service);\n    const kSigning = await hash(kService, 'aws4_request');\n    const signature = arrayBufferToHexString(await hash(kSigning, stringToSign));\n    // Step 5: Add the signature to the request\n    url.searchParams.set('X-Amz-Signature', signature);\n    return url;\n}\n", "import { AbortController } from '@uppy/utils';\nconst MB = 1024 * 1024;\nconst defaultOptions = {\n    getChunkSize(file) {\n        return Math.ceil(file.size / 10000);\n    },\n    onProgress() { },\n    onPartComplete() { },\n    onSuccess() { },\n    onError(err) {\n        throw err;\n    },\n};\nfunction ensureInt(value) {\n    if (typeof value === 'string') {\n        // @ts-expect-error TS is not able to recognize it's fine.\n        return parseInt(value, 10);\n    }\n    if (typeof value === 'number') {\n        // @ts-expect-error TS is not able to recognize it's fine.\n        return value;\n    }\n    throw new TypeError('Expected a number');\n}\nexport const pausingUploadReason = Symbol('pausing upload, not an actual error');\n/**\n * A MultipartUploader instance is used per file upload to determine whether a\n * upload should be done as multipart or as a regular S3 upload\n * (based on the user-provided `shouldUseMultipart` option value) and to manage\n * the chunk splitting.\n */\nclass MultipartUploader {\n    options;\n    #abortController = new AbortController();\n    #chunks = [];\n    #chunkState = [];\n    /**\n     * The (un-chunked) data to upload.\n     */\n    #data;\n    #file;\n    #uploadHasStarted = false;\n    #onError;\n    #onSuccess;\n    #shouldUseMultipart;\n    #isRestoring;\n    #onReject = (err) => err?.cause === pausingUploadReason ? null : this.#onError(err);\n    #maxMultipartParts = 10_000;\n    #minPartSize = 5 * MB;\n    constructor(data, options) {\n        this.options = {\n            ...defaultOptions,\n            ...options,\n        };\n        // Use default `getChunkSize` if it was null or something\n        this.options.getChunkSize ??= defaultOptions.getChunkSize;\n        this.#data = data;\n        this.#file = options.file;\n        this.#onSuccess = this.options.onSuccess;\n        this.#onError = this.options.onError;\n        this.#shouldUseMultipart = this.options.shouldUseMultipart;\n        // When we are restoring an upload, we already have an UploadId and a Key. Otherwise\n        // we need to call `createMultipartUpload` to get an `uploadId` and a `key`.\n        // Non-multipart uploads are not restorable.\n        this.#isRestoring = (options.uploadId && options.key);\n        this.#initChunks();\n    }\n    // initChunks checks the user preference for using multipart uploads (opts.shouldUseMultipart)\n    // and calculates the optimal part size. When using multipart part uploads every part except for the last has\n    // to be at least 5 MB and there can be no more than 10K parts.\n    // This means we sometimes need to change the preferred part size from the user in order to meet these requirements.\n    #initChunks() {\n        const fileSize = this.#data.size;\n        const shouldUseMultipart = typeof this.#shouldUseMultipart === 'function'\n            ? this.#shouldUseMultipart(this.#file)\n            : Boolean(this.#shouldUseMultipart);\n        if (shouldUseMultipart && fileSize > this.#minPartSize) {\n            // At least 5MB per request:\n            let chunkSize = Math.max(this.options.getChunkSize(this.#data), // Math.max can take undefined but TS does not think so\n            this.#minPartSize);\n            let arraySize = Math.floor(fileSize / chunkSize);\n            // At most 10k requests per file:\n            if (arraySize > this.#maxMultipartParts) {\n                arraySize = this.#maxMultipartParts;\n                chunkSize = fileSize / this.#maxMultipartParts;\n            }\n            this.#chunks = Array(arraySize);\n            for (let offset = 0, j = 0; offset < fileSize; offset += chunkSize, j++) {\n                const end = Math.min(fileSize, offset + chunkSize);\n                // Defer data fetching/slicing until we actually need the data, because it's slow if we have a lot of files\n                const getData = () => {\n                    const i2 = offset;\n                    return this.#data.slice(i2, end);\n                };\n                this.#chunks[j] = {\n                    getData,\n                    onProgress: this.#onPartProgress(j),\n                    onComplete: this.#onPartComplete(j),\n                    shouldUseMultipart,\n                };\n                if (this.#isRestoring) {\n                    const size = offset + chunkSize > fileSize ? fileSize - offset : chunkSize;\n                    // setAsUploaded is called by listPart, to keep up-to-date the\n                    // quantity of data that is left to actually upload.\n                    this.#chunks[j].setAsUploaded = () => {\n                        this.#chunks[j] = null;\n                        this.#chunkState[j].uploaded = size;\n                    };\n                }\n            }\n        }\n        else {\n            this.#chunks = [\n                {\n                    getData: () => this.#data,\n                    onProgress: this.#onPartProgress(0),\n                    onComplete: this.#onPartComplete(0),\n                    shouldUseMultipart,\n                },\n            ];\n        }\n        this.#chunkState = this.#chunks.map(() => ({ uploaded: 0 }));\n    }\n    #createUpload() {\n        this.options.companionComm\n            .uploadFile(this.#file, this.#chunks, this.#abortController.signal)\n            .then(this.#onSuccess, this.#onReject);\n        this.#uploadHasStarted = true;\n    }\n    #resumeUpload() {\n        this.options.companionComm\n            .resumeUploadFile(this.#file, this.#chunks, this.#abortController.signal)\n            .then(this.#onSuccess, this.#onReject);\n    }\n    #onPartProgress = (index) => (ev) => {\n        if (!ev.lengthComputable)\n            return;\n        this.#chunkState[index].uploaded = ensureInt(ev.loaded);\n        const totalUploaded = this.#chunkState.reduce((n, c) => n + c.uploaded, 0);\n        this.options.onProgress(totalUploaded, this.#data.size);\n    };\n    #onPartComplete = (index) => (etag) => {\n        // This avoids the net::ERR_OUT_OF_MEMORY in Chromium Browsers.\n        this.#chunks[index] = null;\n        this.#chunkState[index].etag = etag;\n        this.#chunkState[index].done = true;\n        const part = {\n            PartNumber: index + 1,\n            ETag: etag,\n        };\n        this.options.onPartComplete(part);\n    };\n    #abortUpload() {\n        this.#abortController.abort();\n        this.options.companionComm\n            .abortFileUpload(this.#file)\n            .catch((err) => this.options.log(err));\n    }\n    start() {\n        if (this.#uploadHasStarted) {\n            if (!this.#abortController.signal.aborted)\n                this.#abortController.abort(pausingUploadReason);\n            this.#abortController = new AbortController();\n            this.#resumeUpload();\n        }\n        else if (this.#isRestoring) {\n            this.options.companionComm.restoreUploadFile(this.#file, {\n                uploadId: this.options.uploadId,\n                key: this.options.key,\n            });\n            this.#resumeUpload();\n        }\n        else {\n            this.#createUpload();\n        }\n    }\n    pause() {\n        this.#abortController.abort(pausingUploadReason);\n        // Swap it out for a new controller, because this instance may be resumed later.\n        this.#abortController = new AbortController();\n    }\n    abort(opts) {\n        if (opts?.really)\n            this.#abortUpload();\n        else\n            this.pause();\n    }\n    [Symbol.for('uppy test: getChunkState')]() {\n        return this.#chunkState;\n    }\n}\nexport default MultipartUploader;\n", "import { createAbortError } from '@uppy/utils';\nexport function throwIfAborted(signal) {\n    if (signal?.aborted) {\n        throw createAbortError('The operation was aborted', {\n            cause: signal.reason,\n        });\n    }\n}\n", "import { pausingUploadReason } from './MultipartUploader.js';\nimport { throwIfAborted } from './utils.js';\nfunction removeMetadataFromURL(urlString) {\n    const urlObject = new URL(urlString);\n    urlObject.search = '';\n    urlObject.hash = '';\n    return urlObject.href;\n}\nexport class HTTPCommunicationQueue {\n    #abortMultipartUpload;\n    #cache = new WeakMap();\n    #createMultipartUpload;\n    #fetchSignature;\n    #getUploadParameters;\n    #listParts;\n    #previousRetryDelay;\n    #requests;\n    #retryDelays;\n    #sendCompletionRequest;\n    #setS3MultipartState;\n    #uploadPartBytes;\n    #getFile;\n    constructor(requests, options, setS3MultipartState, getFile) {\n        this.#requests = requests;\n        this.#setS3MultipartState = setS3MultipartState;\n        this.#getFile = getFile;\n        this.setOptions(options);\n    }\n    setOptions(options) {\n        const requests = this.#requests;\n        if ('abortMultipartUpload' in options) {\n            this.#abortMultipartUpload = requests.wrapPromiseFunction(options.abortMultipartUpload, { priority: 1 });\n        }\n        if ('createMultipartUpload' in options) {\n            this.#createMultipartUpload = requests.wrapPromiseFunction(options.createMultipartUpload, { priority: -1 });\n        }\n        if ('signPart' in options) {\n            this.#fetchSignature = requests.wrapPromiseFunction(options.signPart);\n        }\n        if ('listParts' in options) {\n            this.#listParts = requests.wrapPromiseFunction(options.listParts);\n        }\n        if ('completeMultipartUpload' in options) {\n            this.#sendCompletionRequest = requests.wrapPromiseFunction(options.completeMultipartUpload, { priority: 1 });\n        }\n        if ('retryDelays' in options) {\n            this.#retryDelays = options.retryDelays ?? [];\n        }\n        if ('uploadPartBytes' in options) {\n            this.#uploadPartBytes = requests.wrapPromiseFunction(options.uploadPartBytes, { priority: Infinity });\n        }\n        if ('getUploadParameters' in options) {\n            this.#getUploadParameters = requests.wrapPromiseFunction(options.getUploadParameters);\n        }\n    }\n    async #shouldRetry(err, retryDelayIterator) {\n        const requests = this.#requests;\n        const status = err?.source?.status;\n        // TODO: this retry logic is taken out of Tus. We should have a centralized place for retrying,\n        // perhaps the rate limited queue, and dedupe all plugins with that.\n        if (status == null) {\n            return false;\n        }\n        if (status === 403 && err.message === 'Request has expired') {\n            if (!requests.isPaused) {\n                // We don't want to exhaust the retryDelayIterator as long as there are\n                // more than one request in parallel, to give slower connection a chance\n                // to catch up with the expiry set in Companion.\n                if (requests.limit === 1 || this.#previousRetryDelay == null) {\n                    const next = retryDelayIterator.next();\n                    if (next == null || next.done) {\n                        return false;\n                    }\n                    // If there are more than 1 request done in parallel, the RLQ limit is\n                    // decreased and the failed request is requeued after waiting for a bit.\n                    // If there is only one request in parallel, the limit can't be\n                    // decreased, so we iterate over `retryDelayIterator` as we do for\n                    // other failures.\n                    // `#previousRetryDelay` caches the value so we can re-use it next time.\n                    this.#previousRetryDelay = next.value;\n                }\n                // No need to stop the other requests, we just want to lower the limit.\n                requests.rateLimit(0);\n                await new Promise((resolve) => setTimeout(resolve, this.#previousRetryDelay));\n            }\n        }\n        else if (status === 429) {\n            // HTTP 429 Too Many Requests => to avoid the whole download to fail, pause all requests.\n            if (!requests.isPaused) {\n                const next = retryDelayIterator.next();\n                if (next == null || next.done) {\n                    return false;\n                }\n                requests.rateLimit(next.value);\n            }\n        }\n        else if (status > 400 && status < 500 && status !== 409) {\n            // HTTP 4xx, the server won't send anything, it's doesn't make sense to retry\n            return false;\n        }\n        else if (typeof navigator !== 'undefined' && navigator.onLine === false) {\n            // The navigator is offline, let's wait for it to come back online.\n            if (!requests.isPaused) {\n                requests.pause();\n                window.addEventListener('online', () => {\n                    requests.resume();\n                }, { once: true });\n            }\n        }\n        else {\n            // Other error code means the request can be retried later.\n            const next = retryDelayIterator.next();\n            if (next == null || next.done) {\n                return false;\n            }\n            await new Promise((resolve) => setTimeout(resolve, next.value));\n        }\n        return true;\n    }\n    async getUploadId(file, signal) {\n        let cachedResult;\n        // As the cache is updated asynchronously, there could be a race condition\n        // where we just miss a new result so we loop here until we get nothing back,\n        // at which point it's out turn to create a new cache entry.\n        for (;;) {\n            if (file.data == null)\n                throw new Error('File data is empty');\n            cachedResult = this.#cache.get(file.data);\n            if (cachedResult == null)\n                break;\n            try {\n                return await cachedResult;\n            }\n            catch {\n                // In case of failure, we want to ignore the cached error.\n                // At this point, either there's a new cached value, or we'll exit the loop a create a new one.\n            }\n        }\n        const promise = this.#createMultipartUpload(this.#getFile(file), signal);\n        const abortPromise = () => {\n            if (file.data == null)\n                throw new Error('File data is empty');\n            promise.abort(signal.reason);\n            this.#cache.delete(file.data);\n        };\n        signal.addEventListener('abort', abortPromise, { once: true });\n        this.#cache.set(file.data, promise);\n        promise.then(async (result) => {\n            signal.removeEventListener('abort', abortPromise);\n            this.#setS3MultipartState(file, result);\n            if (file.data == null)\n                throw new Error('File data is empty');\n            this.#cache.set(file.data, result);\n        }, () => {\n            signal.removeEventListener('abort', abortPromise);\n            if (file.data == null)\n                throw new Error('File data is empty');\n            this.#cache.delete(file.data);\n        });\n        return promise;\n    }\n    async abortFileUpload(file) {\n        if (file.data == null)\n            throw new Error('File data is empty');\n        const result = this.#cache.get(file.data);\n        if (result == null) {\n            // If the createMultipartUpload request never was made, we don't\n            // need to send the abortMultipartUpload request.\n            return;\n        }\n        // Remove the cache entry right away for follow-up requests do not try to\n        // use the soon-to-be aborted cached values.\n        this.#cache.delete(file.data);\n        this.#setS3MultipartState(file, Object.create(null));\n        let awaitedResult;\n        try {\n            awaitedResult = await result;\n        }\n        catch {\n            // If the cached result rejects, there's nothing to abort.\n            return;\n        }\n        await this.#abortMultipartUpload(this.#getFile(file), awaitedResult);\n    }\n    async #nonMultipartUpload(file, chunk, signal) {\n        const { method = 'POST', url, fields, headers, } = await this.#getUploadParameters(this.#getFile(file), {\n            signal,\n        }).abortOn(signal);\n        let body;\n        const data = chunk.getData();\n        if (method.toUpperCase() === 'POST') {\n            const formData = new FormData();\n            Object.entries(fields).forEach(([key, value]) => formData.set(key, value));\n            formData.set('file', data);\n            body = formData;\n        }\n        else {\n            body = data;\n        }\n        const { onProgress, onComplete } = chunk;\n        const result = (await this.#uploadPartBytes({\n            signature: { url, headers, method },\n            body,\n            size: data.size,\n            onProgress,\n            onComplete,\n            signal,\n        }).abortOn(signal)); // todo this doesn't make sense\n        // Note: `fields.key` is not returned by old Companion versions.\n        // See https://github.com/transloadit/uppy/pull/5602\n        const key = fields?.key;\n        this.#setS3MultipartState(file, { key: key });\n        return {\n            ...result,\n            location: result.location ?? removeMetadataFromURL(url),\n            bucket: fields?.bucket,\n            key,\n        };\n    }\n    async uploadFile(file, chunks, signal) {\n        throwIfAborted(signal);\n        if (chunks.length === 1 && !chunks[0].shouldUseMultipart) {\n            return this.#nonMultipartUpload(file, chunks[0], signal);\n        }\n        const { uploadId, key } = await this.getUploadId(file, signal);\n        throwIfAborted(signal);\n        try {\n            const parts = await Promise.all(chunks.map((chunk, i) => this.uploadChunk(file, i + 1, chunk, signal)));\n            throwIfAborted(signal);\n            return await this.#sendCompletionRequest(this.#getFile(file), { key, uploadId, parts, signal }, signal).abortOn(signal);\n        }\n        catch (err) {\n            if (err?.cause !== pausingUploadReason && err?.name !== 'AbortError') {\n                // We purposefully don't wait for the promise and ignore its status,\n                // because we want the error `err` to bubble up ASAP to report it to the\n                // user. A failure to abort is not that big of a deal anyway.\n                this.abortFileUpload(file);\n            }\n            throw err;\n        }\n    }\n    restoreUploadFile(file, uploadIdAndKey) {\n        if (file.data == null)\n            throw new Error('File data is empty');\n        this.#cache.set(file.data, uploadIdAndKey);\n    }\n    async resumeUploadFile(file, chunks, signal) {\n        throwIfAborted(signal);\n        if (chunks.length === 1 &&\n            chunks[0] != null &&\n            !chunks[0].shouldUseMultipart) {\n            return this.#nonMultipartUpload(file, chunks[0], signal);\n        }\n        const { uploadId, key } = await this.getUploadId(file, signal);\n        throwIfAborted(signal);\n        const alreadyUploadedParts = await this.#listParts(this.#getFile(file), { uploadId, key, signal }, signal).abortOn(signal);\n        throwIfAborted(signal);\n        const parts = await Promise.all(chunks.map((chunk, i) => {\n            const partNumber = i + 1;\n            const alreadyUploadedInfo = alreadyUploadedParts.find(({ PartNumber }) => PartNumber === partNumber);\n            if (alreadyUploadedInfo == null) {\n                return this.uploadChunk(file, partNumber, chunk, signal);\n            }\n            // Already uploaded chunks are set to null. If we are restoring the upload, we need to mark it as already uploaded.\n            chunk?.setAsUploaded?.();\n            return { PartNumber: partNumber, ETag: alreadyUploadedInfo.ETag };\n        }));\n        throwIfAborted(signal);\n        return this.#sendCompletionRequest(this.#getFile(file), { key, uploadId, parts, signal }, signal).abortOn(signal);\n    }\n    async uploadChunk(file, partNumber, chunk, signal) {\n        throwIfAborted(signal);\n        const { uploadId, key } = await this.getUploadId(file, signal);\n        const signatureRetryIterator = this.#retryDelays.values();\n        const chunkRetryIterator = this.#retryDelays.values();\n        const shouldRetrySignature = () => {\n            const next = signatureRetryIterator.next();\n            if (next == null || next.done) {\n                return null;\n            }\n            return next.value;\n        };\n        for (;;) {\n            throwIfAborted(signal);\n            const chunkData = chunk.getData();\n            const { onProgress, onComplete } = chunk;\n            let signature;\n            try {\n                signature = await this.#fetchSignature(this.#getFile(file), {\n                    // Always defined for multipart uploads\n                    uploadId: uploadId,\n                    key,\n                    partNumber,\n                    body: chunkData,\n                    signal,\n                }).abortOn(signal);\n            }\n            catch (err) {\n                const timeout = shouldRetrySignature();\n                if (timeout == null || signal.aborted) {\n                    throw err;\n                }\n                await new Promise((resolve) => setTimeout(resolve, timeout));\n                continue;\n            }\n            throwIfAborted(signal);\n            try {\n                return {\n                    PartNumber: partNumber,\n                    ...(await this.#uploadPartBytes({\n                        signature,\n                        body: chunkData,\n                        size: chunkData.size,\n                        onProgress,\n                        onComplete,\n                        signal,\n                    }).abortOn(signal)),\n                };\n            }\n            catch (err) {\n                if (!(await this.#shouldRetry(err, chunkRetryIterator)))\n                    throw err;\n            }\n        }\n    }\n}\n", "import { RequestClient } from '@uppy/companion-client';\nimport { BasePlugin, EventManager, } from '@uppy/core';\nimport { createAbortError, filterFilesToEmitUploadStarted, filterFilesToUpload, getAllowedMetaFields, RateLimitedQueue, } from '@uppy/utils';\nimport packageJson from '../package.json' with { type: 'json' };\nimport createSignedURL from './createSignedURL.js';\nimport { HTTPCommunicationQueue } from './HTTPCommunicationQueue.js';\nimport MultipartUploader from './MultipartUploader.js';\nimport { throwIfAborted } from './utils.js';\nfunction assertServerError(res) {\n    if (res?.error) {\n        const error = new Error(res.message);\n        Object.assign(error, res.error);\n        throw error;\n    }\n    return res;\n}\n/**\n * Computes the expiry time for a request signed with temporary credentials. If\n * no expiration was provided, or an invalid value (e.g. in the past) is\n * provided, undefined is returned. This function assumes the client clock is in\n * sync with the remote server, which is a requirement for the signature to be\n * validated for AWS anyway.\n */\nfunction getExpiry(credentials) {\n    const expirationDate = credentials.Expiration;\n    if (expirationDate) {\n        const timeUntilExpiry = Math.floor((new Date(expirationDate) - Date.now()) / 1000);\n        if (timeUntilExpiry > 9) {\n            return timeUntilExpiry;\n        }\n    }\n    return undefined;\n}\nfunction getAllowedMetadata({ meta, allowedMetaFields, querify = false, }) {\n    const metaFields = allowedMetaFields ?? Object.keys(meta);\n    if (!meta)\n        return {};\n    return Object.fromEntries(metaFields\n        .filter((key) => meta[key] != null)\n        .map((key) => {\n        const realKey = querify ? `metadata[${key}]` : key;\n        const value = String(meta[key]);\n        return [realKey, value];\n    }));\n}\nconst defaultOptions = {\n    allowedMetaFields: true,\n    limit: 6,\n    getTemporarySecurityCredentials: false,\n    shouldUseMultipart: ((file) => (file.size || 0) > 100 * 1024 * 1024),\n    retryDelays: [0, 1000, 3000, 5000],\n};\nexport default class AwsS3Multipart extends BasePlugin {\n    static VERSION = packageJson.version;\n    #companionCommunicationQueue;\n    #client;\n    requests;\n    uploaderEvents;\n    uploaders;\n    constructor(uppy, opts) {\n        super(uppy, {\n            ...defaultOptions,\n            uploadPartBytes: AwsS3Multipart.uploadPartBytes,\n            createMultipartUpload: null,\n            listParts: null,\n            abortMultipartUpload: null,\n            completeMultipartUpload: null,\n            signPart: null,\n            getUploadParameters: null,\n            ...opts,\n        });\n        // We need the `as any` here because of the dynamic default options.\n        this.type = 'uploader';\n        this.id = this.opts.id || 'AwsS3Multipart';\n        this.#setClient(opts);\n        const dynamicDefaultOptions = {\n            createMultipartUpload: this.createMultipartUpload,\n            listParts: this.listParts,\n            abortMultipartUpload: this.abortMultipartUpload,\n            completeMultipartUpload: this.completeMultipartUpload,\n            signPart: opts?.getTemporarySecurityCredentials\n                ? this.createSignedURL\n                : this.signPart,\n            getUploadParameters: opts?.getTemporarySecurityCredentials\n                ? this.createSignedURL\n                : this.getUploadParameters,\n        };\n        for (const key of Object.keys(dynamicDefaultOptions)) {\n            if (this.opts[key] == null) {\n                this.opts[key] =\n                    dynamicDefaultOptions[key].bind(this);\n            }\n        }\n        /**\n         * Simultaneous upload limiting is shared across all uploads with this plugin.\n         *\n         * @type {RateLimitedQueue}\n         */\n        this.requests =\n            this.opts.rateLimitedQueue ??\n                new RateLimitedQueue(this.opts.limit);\n        this.#companionCommunicationQueue = new HTTPCommunicationQueue(this.requests, this.opts, this.#setS3MultipartState, this.#getFile);\n        this.uploaders = Object.create(null);\n        this.uploaderEvents = Object.create(null);\n    }\n    [Symbol.for('uppy test: getClient')]() {\n        return this.#client;\n    }\n    #setClient(opts) {\n        if (opts == null ||\n            !('endpoint' in opts ||\n                'companionUrl' in opts ||\n                'headers' in opts ||\n                'companionHeaders' in opts ||\n                'cookiesRule' in opts ||\n                'companionCookiesRule' in opts))\n            return;\n        if ('companionUrl' in opts && !('endpoint' in opts)) {\n            this.uppy.log('`companionUrl` option has been removed in @uppy/aws-s3, use `endpoint` instead.', 'warning');\n        }\n        if ('companionHeaders' in opts && !('headers' in opts)) {\n            this.uppy.log('`companionHeaders` option has been removed in @uppy/aws-s3, use `headers` instead.', 'warning');\n        }\n        if ('companionCookiesRule' in opts && !('cookiesRule' in opts)) {\n            this.uppy.log('`companionCookiesRule` option has been removed in @uppy/aws-s3, use `cookiesRule` instead.', 'warning');\n        }\n        if ('endpoint' in opts) {\n            this.#client = new RequestClient(this.uppy, {\n                pluginId: this.id,\n                provider: 'AWS',\n                companionUrl: this.opts.endpoint,\n                companionHeaders: this.opts.headers,\n                companionCookiesRule: this.opts.cookiesRule,\n            });\n        }\n        else {\n            if ('headers' in opts) {\n                this.#setCompanionHeaders();\n            }\n            if ('cookiesRule' in opts) {\n                this.#client.opts.companionCookiesRule = opts.cookiesRule;\n            }\n        }\n    }\n    setOptions(newOptions) {\n        this.#companionCommunicationQueue.setOptions(newOptions);\n        super.setOptions(newOptions);\n        this.#setClient(newOptions);\n    }\n    /**\n     * Clean up all references for a file's upload: the MultipartUploader instance,\n     * any events related to the file, and the Companion WebSocket connection.\n     *\n     * Set `opts.abort` to tell S3 that the multipart upload is cancelled and must be removed.\n     * This should be done when the user cancels the upload, not when the upload is completed or errored.\n     */\n    resetUploaderReferences(fileID, opts) {\n        if (this.uploaders[fileID]) {\n            this.uploaders[fileID].abort({ really: opts?.abort || false });\n            this.uploaders[fileID] = null;\n        }\n        if (this.uploaderEvents[fileID]) {\n            this.uploaderEvents[fileID].remove();\n            this.uploaderEvents[fileID] = null;\n        }\n    }\n    #assertHost(method) {\n        if (!this.#client) {\n            throw new Error(`Expected a \\`endpoint\\` option containing a URL, or if you are not using Companion, a custom \\`${method}\\` implementation.`);\n        }\n    }\n    createMultipartUpload(file, signal) {\n        this.#assertHost('createMultipartUpload');\n        throwIfAborted(signal);\n        const allowedMetaFields = getAllowedMetaFields(this.opts.allowedMetaFields, file.meta);\n        const metadata = getAllowedMetadata({ meta: file.meta, allowedMetaFields });\n        return this.#client\n            .post('s3/multipart', {\n            filename: file.name,\n            type: file.type,\n            metadata,\n        }, { signal })\n            .then(assertServerError);\n    }\n    listParts(file, { key, uploadId, signal }, oldSignal) {\n        signal ??= oldSignal;\n        this.#assertHost('listParts');\n        throwIfAborted(signal);\n        const filename = encodeURIComponent(key);\n        return this.#client\n            .get(`s3/multipart/${encodeURIComponent(uploadId)}?key=${filename}`, { signal })\n            .then(assertServerError);\n    }\n    completeMultipartUpload(file, { key, uploadId, parts, signal }, oldSignal) {\n        signal ??= oldSignal;\n        this.#assertHost('completeMultipartUpload');\n        throwIfAborted(signal);\n        const filename = encodeURIComponent(key);\n        const uploadIdEnc = encodeURIComponent(uploadId);\n        return this.#client\n            .post(`s3/multipart/${uploadIdEnc}/complete?key=${filename}`, { parts: parts.map(({ ETag, PartNumber }) => ({ ETag, PartNumber })) }, { signal })\n            .then(assertServerError);\n    }\n    #cachedTemporaryCredentials;\n    async #getTemporarySecurityCredentials(options) {\n        throwIfAborted(options?.signal);\n        if (this.#cachedTemporaryCredentials == null) {\n            const { getTemporarySecurityCredentials } = this.opts;\n            // We do not await it just yet, so concurrent calls do not try to override it:\n            if (getTemporarySecurityCredentials === true) {\n                this.#assertHost('getTemporarySecurityCredentials');\n                this.#cachedTemporaryCredentials = this.#client\n                    .get('s3/sts', options)\n                    .then(assertServerError);\n            }\n            else {\n                this.#cachedTemporaryCredentials =\n                    getTemporarySecurityCredentials(options);\n            }\n            this.#cachedTemporaryCredentials = await this.#cachedTemporaryCredentials;\n            setTimeout(() => {\n                // At half the time left before expiration, we clear the cache. That's\n                // an arbitrary tradeoff to limit the number of requests made to the\n                // remote while limiting the risk of using an expired token in case the\n                // clocks are not exactly synced.\n                // The HTTP cache should be configured to ensure a client doesn't request\n                // more tokens than it needs, but this timeout provides a second layer of\n                // security in case the HTTP cache is disabled or misconfigured.\n                this.#cachedTemporaryCredentials = null;\n            }, (getExpiry(this.#cachedTemporaryCredentials.credentials) || 0) * 500);\n        }\n        return this.#cachedTemporaryCredentials;\n    }\n    async createSignedURL(file, options) {\n        const data = await this.#getTemporarySecurityCredentials(options);\n        const expires = getExpiry(data.credentials) || 604_800; // 604 800 is the max value accepted by AWS.\n        const { uploadId, key, partNumber } = options;\n        // Return an object in the correct shape.\n        return {\n            method: 'PUT',\n            expires,\n            fields: {},\n            url: `${await createSignedURL({\n                accountKey: data.credentials.AccessKeyId,\n                accountSecret: data.credentials.SecretAccessKey,\n                sessionToken: data.credentials.SessionToken,\n                expires,\n                bucketName: data.bucket,\n                Region: data.region,\n                Key: key ?? `${crypto.randomUUID()}-${file.name}`,\n                uploadId,\n                partNumber,\n            })}`,\n            // Provide content type header required by S3\n            headers: {\n                'Content-Type': file.type,\n            },\n        };\n    }\n    signPart(file, { uploadId, key, partNumber, signal }) {\n        this.#assertHost('signPart');\n        throwIfAborted(signal);\n        if (uploadId == null || key == null || partNumber == null) {\n            throw new Error('Cannot sign without a key, an uploadId, and a partNumber');\n        }\n        const filename = encodeURIComponent(key);\n        return this.#client\n            .get(`s3/multipart/${encodeURIComponent(uploadId)}/${partNumber}?key=${filename}`, { signal })\n            .then(assertServerError);\n    }\n    abortMultipartUpload(file, { key, uploadId, signal }) {\n        this.#assertHost('abortMultipartUpload');\n        const filename = encodeURIComponent(key);\n        const uploadIdEnc = encodeURIComponent(uploadId);\n        return this.#client\n            .delete(`s3/multipart/${uploadIdEnc}?key=${filename}`, undefined, {\n            signal,\n        })\n            .then(assertServerError);\n    }\n    getUploadParameters(file, options) {\n        this.#assertHost('getUploadParameters');\n        const { meta } = file;\n        const { type, name: filename } = meta;\n        const allowedMetaFields = getAllowedMetaFields(this.opts.allowedMetaFields, file.meta);\n        const metadata = getAllowedMetadata({\n            meta,\n            allowedMetaFields,\n            querify: true,\n        });\n        const query = new URLSearchParams({ filename, type, ...metadata });\n        return this.#client.get(`s3/params?${query}`, options);\n    }\n    static async uploadPartBytes({ signature: { url, expires, headers, method = 'PUT' }, body, size = body.size, onProgress, onComplete, signal, }) {\n        throwIfAborted(signal);\n        if (url == null) {\n            throw new Error('Cannot upload to an undefined URL');\n        }\n        return new Promise((resolve, reject) => {\n            const xhr = new XMLHttpRequest();\n            xhr.open(method, url, true);\n            if (headers) {\n                Object.keys(headers).forEach((key) => {\n                    xhr.setRequestHeader(key, headers[key]);\n                });\n            }\n            xhr.responseType = 'text';\n            if (typeof expires === 'number') {\n                xhr.timeout = expires * 1000;\n            }\n            function onabort() {\n                xhr.abort();\n            }\n            function cleanup() {\n                signal?.removeEventListener('abort', onabort);\n            }\n            signal?.addEventListener('abort', onabort);\n            xhr.upload.addEventListener('progress', (ev) => {\n                onProgress(ev);\n            });\n            xhr.addEventListener('abort', () => {\n                cleanup();\n                reject(createAbortError());\n            });\n            xhr.addEventListener('timeout', () => {\n                cleanup();\n                const error = new Error('Request has expired');\n                error.source = { status: 403 };\n                reject(error);\n            });\n            xhr.addEventListener('load', () => {\n                cleanup();\n                if (xhr.status === 403 &&\n                    xhr.responseText.includes('<Message>Request has expired</Message>')) {\n                    const error = new Error('Request has expired');\n                    error.source = xhr;\n                    reject(error);\n                    return;\n                }\n                if (xhr.status < 200 || xhr.status >= 300) {\n                    const error = new Error('Non 2xx');\n                    error.source = xhr;\n                    reject(error);\n                    return;\n                }\n                onProgress?.({ loaded: size, lengthComputable: true });\n                // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders#examples\n                const arr = xhr\n                    .getAllResponseHeaders()\n                    .trim()\n                    .split(/[\\r\\n]+/);\n                // @ts-expect-error null is allowed to avoid inherited properties\n                const headersMap = { __proto__: null };\n                for (const line of arr) {\n                    const parts = line.split(': ');\n                    const header = parts.shift();\n                    const value = parts.join(': ');\n                    headersMap[header] = value;\n                }\n                const { etag, location } = headersMap;\n                // More info bucket settings when this is not present:\n                // https://github.com/transloadit/uppy/issues/5388#issuecomment-2464885562\n                if (method.toUpperCase() === 'POST' && location == null) {\n                    // Not being able to read the Location header is not a fatal error.\n                    console.error('@uppy/aws-s3: Could not read the Location header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3/#setting-up-your-s3-bucket');\n                }\n                if (etag == null) {\n                    console.error('@uppy/aws-s3: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3/#setting-up-your-s3-bucket');\n                    return;\n                }\n                onComplete?.(etag);\n                resolve({\n                    ...headersMap,\n                    ETag: etag, // keep capitalised ETag for backwards compatiblity\n                });\n            });\n            xhr.addEventListener('error', (ev) => {\n                cleanup();\n                const error = new Error('Unknown error');\n                error.source = ev.target;\n                reject(error);\n            });\n            xhr.send(body);\n        });\n    }\n    #setS3MultipartState = (file, { key, uploadId }) => {\n        const cFile = this.uppy.getFile(file.id);\n        if (cFile == null) {\n            // file was removed from store\n            return;\n        }\n        this.uppy.setFileState(file.id, {\n            s3Multipart: {\n                ...cFile.s3Multipart,\n                key,\n                uploadId,\n            },\n        });\n    };\n    #getFile = (file) => {\n        return this.uppy.getFile(file.id) || file;\n    };\n    #uploadLocalFile(file) {\n        return new Promise((resolve, reject) => {\n            const onProgress = (bytesUploaded, bytesTotal) => {\n                const latestFile = this.uppy.getFile(file.id);\n                this.uppy.emit('upload-progress', latestFile, {\n                    uploadStarted: latestFile.progress.uploadStarted ?? 0,\n                    bytesUploaded,\n                    bytesTotal,\n                });\n            };\n            const onError = (err) => {\n                this.uppy.log(err);\n                this.uppy.emit('upload-error', file, err);\n                this.resetUploaderReferences(file.id);\n                reject(err);\n            };\n            const onSuccess = (result) => {\n                const uploadResp = {\n                    body: {\n                        ...result,\n                    },\n                    status: 200,\n                    uploadURL: result.location,\n                };\n                this.resetUploaderReferences(file.id);\n                this.uppy.emit('upload-success', this.#getFile(file), uploadResp);\n                if (result.location) {\n                    this.uppy.log(`Download ${file.name} from ${result.location}`);\n                }\n                resolve(undefined);\n            };\n            if (file.data == null)\n                throw new Error('File data is empty');\n            const upload = new MultipartUploader(file.data, {\n                // .bind to pass the file object to each handler.\n                companionComm: this.#companionCommunicationQueue,\n                log: (...args) => this.uppy.log(...args),\n                getChunkSize: this.opts.getChunkSize\n                    ? this.opts.getChunkSize.bind(this)\n                    : undefined,\n                onProgress,\n                onError,\n                onSuccess,\n                onPartComplete: (part) => {\n                    this.uppy.emit('s3-multipart:part-uploaded', this.#getFile(file), part);\n                },\n                file,\n                shouldUseMultipart: this.opts.shouldUseMultipart,\n                ...file.s3Multipart,\n            });\n            this.uploaders[file.id] = upload;\n            const eventManager = new EventManager(this.uppy);\n            this.uploaderEvents[file.id] = eventManager;\n            eventManager.onFileRemove(file.id, (removed) => {\n                upload.abort();\n                this.resetUploaderReferences(file.id, { abort: true });\n                resolve(`upload ${removed} was removed`);\n            });\n            eventManager.onCancelAll(file.id, () => {\n                upload.abort();\n                this.resetUploaderReferences(file.id, { abort: true });\n                resolve(`upload ${file.id} was canceled`);\n            });\n            eventManager.onFilePause(file.id, (isPaused) => {\n                if (isPaused) {\n                    upload.pause();\n                }\n                else {\n                    upload.start();\n                }\n            });\n            eventManager.onPauseAll(file.id, () => {\n                upload.pause();\n            });\n            eventManager.onResumeAll(file.id, () => {\n                upload.start();\n            });\n            upload.start();\n        });\n    }\n    #getCompanionClientArgs(file) {\n        return {\n            ...('remote' in file && file.remote?.body),\n            protocol: 's3-multipart',\n            size: file.data.size,\n            metadata: file.meta,\n        };\n    }\n    #upload = async (fileIDs) => {\n        if (fileIDs.length === 0)\n            return undefined;\n        const files = this.uppy.getFilesByIds(fileIDs);\n        const filesFiltered = filterFilesToUpload(files);\n        const filesToEmit = filterFilesToEmitUploadStarted(filesFiltered);\n        this.uppy.emit('upload-start', filesToEmit);\n        const promises = filesFiltered.map((file) => {\n            if (file.isRemote) {\n                const getQueue = () => this.requests;\n                this.#setResumableUploadsCapability(false);\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        const upload = await Promise.allSettled(promises);\n        // After the upload is done, another upload may happen with only local files.\n        // We reset the capability so that the next upload can use resumable uploads.\n        this.#setResumableUploadsCapability(true);\n        return upload;\n    };\n    #setCompanionHeaders = () => {\n        this.#client?.setCompanionHeaders(this.opts.headers);\n    };\n    #setResumableUploadsCapability = (boolean) => {\n        const { capabilities } = this.uppy.getState();\n        this.uppy.setState({\n            capabilities: {\n                ...capabilities,\n                resumableUploads: boolean,\n            },\n        });\n    };\n    #resetResumableCapability = () => {\n        this.#setResumableUploadsCapability(true);\n    };\n    install() {\n        this.#setResumableUploadsCapability(true);\n        this.uppy.addPreProcessor(this.#setCompanionHeaders);\n        this.uppy.addUploader(this.#upload);\n        this.uppy.on('cancel-all', this.#resetResumableCapability);\n    }\n    uninstall() {\n        this.uppy.removePreProcessor(this.#setCompanionHeaders);\n        this.uppy.removeUploader(this.#upload);\n        this.uppy.off('cancel-all', this.#resetResumableCapability);\n    }\n}\n", "{\n  \"name\": \"@uppy/box\",\n  \"description\": \"Import files from Box, into Uppy.\",\n  \"version\": \"4.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"box\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "export default {\n    strings: {\n        pluginNameBox: 'Box',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { getAllowedHosts, Provider, tokenStorage, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\nimport { ProviderViews } from '@uppy/provider-views';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nexport default class Box extends UIPlugin {\n    static VERSION = packageJson.version;\n    icon;\n    provider;\n    view;\n    storage;\n    files;\n    rootFolderId = null;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.id = this.opts.id || 'Box';\n        this.type = 'acquirer';\n        this.storage = this.opts.storage || tokenStorage;\n        this.files = [];\n        this.icon = () => (_jsx(\"svg\", { className: \"uppy-DashboardTab-iconBox\", \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsxs(\"g\", { fill: \"currentcolor\", fillRule: \"nonzero\", children: [_jsx(\"path\", { d: \"m16.4 13.5c-1.6 0-3 0.9-3.7 2.2-0.7-1.3-2.1-2.2-3.7-2.2-1 0-1.8 0.3-2.5 0.8v-3.6c-0.1-0.3-0.5-0.7-1-0.7s-0.8 0.4-0.8 0.8v7c0 2.3 1.9 4.2 4.2 4.2 1.6 0 3-0.9 3.7-2.2 0.7 1.3 2.1 2.2 3.7 2.2 2.3 0 4.2-1.9 4.2-4.2 0.1-2.4-1.8-4.3-4.1-4.3m-7.5 6.8c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5-1.1 2.5-2.5 2.5m7.5 0c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5-1.1 2.5-2.5 2.5\" }), _jsx(\"path\", { d: \"m27.2 20.6l-2.3-2.8 2.3-2.8c0.3-0.4 0.2-0.9-0.2-1.2s-1-0.2-1.3 0.2l-2 2.4-2-2.4c-0.3-0.4-0.9-0.4-1.3-0.2-0.4 0.3-0.5 0.8-0.2 1.2l2.3 2.8-2.3 2.8c-0.3 0.4-0.2 0.9 0.2 1.2s1 0.2 1.3-0.2l2-2.4 2 2.4c0.3 0.4 0.9 0.4 1.3 0.2 0.4-0.3 0.4-0.8 0.2-1.2\" })] }) }));\n        this.opts.companionAllowedHosts = getAllowedHosts(this.opts.companionAllowedHosts, this.opts.companionUrl);\n        this.provider = new Provider(uppy, {\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionKeysParams: this.opts.companionKeysParams,\n            companionCookiesRule: this.opts.companionCookiesRule,\n            provider: 'box',\n            pluginId: this.id,\n            supportsRefreshToken: false,\n        });\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameBox');\n        this.render = this.render.bind(this);\n    }\n    install() {\n        this.view = new ProviderViews(this, {\n            provider: this.provider,\n            loadAllFiles: true,\n            virtualList: true,\n        });\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.view.tearDown();\n        this.unmount();\n    }\n    render(state) {\n        return this.view.render(state);\n    }\n}\n", "import prettierBytes from '@transloadit/prettier-bytes';\nimport { BasePlugin } from '@uppy/core';\n// @ts-ignore\nimport { getFileNameAndExtension, RateLimitedQueue } from '@uppy/utils';\nimport CompressorJS from 'compressorjs';\nimport locale from './locale.js';\nconst defaultOptions = {\n    quality: 0.6,\n    limit: 10,\n};\nexport default class Compressor extends BasePlugin {\n    #RateLimitedQueue;\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOptions, ...opts });\n        this.id = this.opts.id || 'Compressor';\n        this.type = 'modifier';\n        this.defaultLocale = locale;\n        this.#RateLimitedQueue = new RateLimitedQueue(this.opts.limit);\n        this.i18nInit();\n        this.prepareUpload = this.prepareUpload.bind(this);\n        this.compress = this.compress.bind(this);\n    }\n    compress(blob) {\n        return new Promise((resolve, reject) => {\n            new CompressorJS(blob, {\n                ...this.opts,\n                success: resolve,\n                error: reject,\n            });\n        });\n    }\n    async prepareUpload(fileIDs) {\n        let totalCompressedSize = 0;\n        const compressedFiles = [];\n        const compressAndApplyResult = this.#RateLimitedQueue.wrapPromiseFunction(async (file) => {\n            try {\n                if (file.data == null)\n                    throw new Error('File data is empty');\n                const compressedBlob = await this.compress(file.data);\n                const compressedSavingsSize = file.data.size - compressedBlob.size;\n                this.uppy.log(`[Image Compressor] Image ${file.id} compressed by ${prettierBytes(compressedSavingsSize)}`);\n                totalCompressedSize += compressedSavingsSize;\n                const { name, type, size } = compressedBlob;\n                const compressedFileName = getFileNameAndExtension(name);\n                const metaFileName = getFileNameAndExtension(file.meta.name);\n                // Name (file.meta.name) might have been changed by user, so we update only the extension\n                const newMetaName = `${metaFileName.name}.${compressedFileName.extension}`;\n                this.uppy.setFileState(file.id, {\n                    ...(name && { name }),\n                    ...(compressedFileName.extension && {\n                        extension: compressedFileName.extension,\n                    }),\n                    ...(type && { type }),\n                    ...(size && { size }),\n                    data: compressedBlob,\n                    meta: {\n                        ...file.meta,\n                        type,\n                        name: newMetaName,\n                    },\n                });\n                compressedFiles.push(file);\n            }\n            catch (err) {\n                this.uppy.log(`[Image Compressor] Failed to compress ${file.id}:`, 'warning');\n                this.uppy.log(err, 'warning');\n            }\n        });\n        const promises = fileIDs.map((fileID) => {\n            const file = this.uppy.getFile(fileID);\n            this.uppy.emit('preprocess-progress', file, {\n                mode: 'indeterminate',\n                message: this.i18n('compressingImages'),\n            });\n            if (file.isRemote) {\n                return Promise.resolve();\n            }\n            // Some browsers (Firefox) add blobs with empty file type, when files are\n            // added from a folder. Uppy auto-detects type from extension, but leaves the original blob intact.\n            // However, Compressor.js failes when file has no type, so we set it here\n            if (!file.data.type) {\n                file.data = file.data.slice(0, file.data.size, file.type);\n            }\n            if (!file.type?.startsWith('image/')) {\n                return Promise.resolve();\n            }\n            return compressAndApplyResult(file);\n        });\n        // Why emit `preprocess-complete` for all files at once, instead of\n        // above when each is processed?\n        // Because it leads to StatusBar showing a weird \u201Cupload 6 files\u201D button,\n        // while waiting for all the files to complete pre-processing.\n        await Promise.all(promises);\n        this.uppy.emit('compressor:complete', compressedFiles);\n        // Only show informer if Compressor mananged to save at least a kilobyte\n        if (totalCompressedSize > 1024) {\n            this.uppy.info(this.i18n('compressedX', {\n                size: prettierBytes(totalCompressedSize),\n            }), 'info');\n        }\n        for (const fileID of fileIDs) {\n            const file = this.uppy.getFile(fileID);\n            this.uppy.emit('preprocess-complete', file);\n        }\n    }\n    install() {\n        this.uppy.addPreProcessor(this.prepareUpload);\n    }\n    uninstall() {\n        this.uppy.removePreProcessor(this.prepareUpload);\n    }\n}\n", "export default {\n    strings: {\n        // Shown in the Status Bar\n        compressingImages: 'Compressing images...',\n        compressedX: 'Saved %{size} by compressing images',\n    },\n};\n", "function e(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}var t=\"undefined\"!=typeof self?self:global;const s=\"undefined\"!=typeof navigator,i=s&&\"undefined\"==typeof HTMLImageElement,n=!(\"undefined\"==typeof global||\"undefined\"==typeof process||!process.versions||!process.versions.node),r=t.Buffer,a=!!r,h=e=>void 0!==e;function f(e){return void 0===e||(e instanceof Map?0===e.size:0===Object.values(e).filter(h).length)}function l(e){let t=new Error(e);throw delete t.stack,t}function o(e){let t=function(e){let t=0;return e.ifd0.enabled&&(t+=1024),e.exif.enabled&&(t+=2048),e.makerNote&&(t+=2048),e.userComment&&(t+=1024),e.gps.enabled&&(t+=512),e.interop.enabled&&(t+=100),e.ifd1.enabled&&(t+=1024),t+2048}(e);return e.jfif.enabled&&(t+=50),e.xmp.enabled&&(t+=2e4),e.iptc.enabled&&(t+=14e3),e.icc.enabled&&(t+=6e3),t}const u=e=>String.fromCharCode.apply(null,e),d=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-8\"):void 0;class c{static from(e,t){return e instanceof this&&e.le===t?e:new c(e,void 0,void 0,t)}constructor(e,t=0,s,i){if(\"boolean\"==typeof i&&(this.le=i),Array.isArray(e)&&(e=new Uint8Array(e)),0===e)this.byteOffset=0,this.byteLength=0;else if(e instanceof ArrayBuffer){void 0===s&&(s=e.byteLength-t);let i=new DataView(e,t,s);this._swapDataView(i)}else if(e instanceof Uint8Array||e instanceof DataView||e instanceof c){void 0===s&&(s=e.byteLength-t),(t+=e.byteOffset)+s>e.byteOffset+e.byteLength&&l(\"Creating view outside of available memory in ArrayBuffer\");let i=new DataView(e.buffer,t,s);this._swapDataView(i)}else if(\"number\"==typeof e){let t=new DataView(new ArrayBuffer(e));this._swapDataView(t)}else l(\"Invalid input argument for BufferView: \"+e)}_swapArrayBuffer(e){this._swapDataView(new DataView(e))}_swapBuffer(e){this._swapDataView(new DataView(e.buffer,e.byteOffset,e.byteLength))}_swapDataView(e){this.dataView=e,this.buffer=e.buffer,this.byteOffset=e.byteOffset,this.byteLength=e.byteLength}_lengthToEnd(e){return this.byteLength-e}set(e,t,s=c){return e instanceof DataView||e instanceof c?e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e instanceof ArrayBuffer&&(e=new Uint8Array(e)),e instanceof Uint8Array||l(\"BufferView.set(): Invalid data argument.\"),this.toUint8().set(e,t),new s(this,t,e.byteLength)}subarray(e,t){return t=t||this._lengthToEnd(e),new c(this,e,t)}toUint8(){return new Uint8Array(this.buffer,this.byteOffset,this.byteLength)}getUint8Array(e,t){return new Uint8Array(this.buffer,this.byteOffset+e,t)}getString(e=0,t=this.byteLength){let s=this.getUint8Array(e,t);return i=s,d?d.decode(i):a?Buffer.from(i).toString(\"utf8\"):decodeURIComponent(escape(u(i)));var i}getLatin1String(e=0,t=this.byteLength){let s=this.getUint8Array(e,t);return u(s)}getUnicodeString(e=0,t=this.byteLength){const s=[];for(let i=0;i<t&&e+i<this.byteLength;i+=2)s.push(this.getUint16(e+i));return u(s)}getInt8(e){return this.dataView.getInt8(e)}getUint8(e){return this.dataView.getUint8(e)}getInt16(e,t=this.le){return this.dataView.getInt16(e,t)}getInt32(e,t=this.le){return this.dataView.getInt32(e,t)}getUint16(e,t=this.le){return this.dataView.getUint16(e,t)}getUint32(e,t=this.le){return this.dataView.getUint32(e,t)}getFloat32(e,t=this.le){return this.dataView.getFloat32(e,t)}getFloat64(e,t=this.le){return this.dataView.getFloat64(e,t)}getFloat(e,t=this.le){return this.dataView.getFloat32(e,t)}getDouble(e,t=this.le){return this.dataView.getFloat64(e,t)}getUintBytes(e,t,s){switch(t){case 1:return this.getUint8(e,s);case 2:return this.getUint16(e,s);case 4:return this.getUint32(e,s);case 8:return this.getUint64&&this.getUint64(e,s)}}getUint(e,t,s){switch(t){case 8:return this.getUint8(e,s);case 16:return this.getUint16(e,s);case 32:return this.getUint32(e,s);case 64:return this.getUint64&&this.getUint64(e,s)}}toString(e){return this.dataView.toString(e,this.constructor.name)}ensureChunk(){}}function p(e,t){l(`${e} '${t}' was not loaded, try using full build of exifr.`)}class g extends Map{constructor(e){super(),this.kind=e}get(e,t){return this.has(e)||p(this.kind,e),t&&(e in t||function(e,t){l(`Unknown ${e} '${t}'.`)}(this.kind,e),t[e].enabled||p(this.kind,e)),super.get(e)}keyList(){return Array.from(this.keys())}}var m=new g(\"file parser\"),y=new g(\"segment parser\"),b=new g(\"file reader\");let w=t.fetch;function k(e,t){return(i=e).startsWith(\"data:\")||i.length>1e4?v(e,t,\"base64\"):n&&e.includes(\"://\")?O(e,t,\"url\",S):n?v(e,t,\"fs\"):s?O(e,t,\"url\",S):void l(\"Invalid input argument\");var i}async function O(e,t,s,i){return b.has(s)?v(e,t,s):i?async function(e,t){let s=await t(e);return new c(s)}(e,i):void l(`Parser ${s} is not loaded`)}async function v(e,t,s){let i=new(b.get(s))(e,t);return await i.read(),i}const S=e=>w(e).then((e=>e.arrayBuffer())),A=e=>new Promise(((t,s)=>{let i=new FileReader;i.onloadend=()=>t(i.result||new ArrayBuffer),i.onerror=s,i.readAsArrayBuffer(e)}));class U extends Map{get tagKeys(){return this.allKeys||(this.allKeys=Array.from(this.keys())),this.allKeys}get tagValues(){return this.allValues||(this.allValues=Array.from(this.values())),this.allValues}}function x(e,t,s){let i=new U;for(let[e,t]of s)i.set(e,t);if(Array.isArray(t))for(let s of t)e.set(s,i);else e.set(t,i);return i}function C(e,t,s){let i,n=e.get(t);for(i of s)n.set(i[0],i[1])}const B=new Map,V=new Map,I=new Map,L=[\"chunked\",\"firstChunkSize\",\"firstChunkSizeNode\",\"firstChunkSizeBrowser\",\"chunkSize\",\"chunkLimit\"],T=[\"jfif\",\"xmp\",\"icc\",\"iptc\",\"ihdr\"],z=[\"tiff\",...T],P=[\"ifd0\",\"ifd1\",\"exif\",\"gps\",\"interop\"],F=[...z,...P],j=[\"makerNote\",\"userComment\"],E=[\"translateKeys\",\"translateValues\",\"reviveValues\",\"multiSegment\"],M=[...E,\"sanitize\",\"mergeOutput\",\"silentErrors\"];class _{get translate(){return this.translateKeys||this.translateValues||this.reviveValues}}class D extends _{get needed(){return this.enabled||this.deps.size>0}constructor(t,s,i,n){if(super(),e(this,\"enabled\",!1),e(this,\"skip\",new Set),e(this,\"pick\",new Set),e(this,\"deps\",new Set),e(this,\"translateKeys\",!1),e(this,\"translateValues\",!1),e(this,\"reviveValues\",!1),this.key=t,this.enabled=s,this.parse=this.enabled,this.applyInheritables(n),this.canBeFiltered=P.includes(t),this.canBeFiltered&&(this.dict=B.get(t)),void 0!==i)if(Array.isArray(i))this.parse=this.enabled=!0,this.canBeFiltered&&i.length>0&&this.translateTagSet(i,this.pick);else if(\"object\"==typeof i){if(this.enabled=!0,this.parse=!1!==i.parse,this.canBeFiltered){let{pick:e,skip:t}=i;e&&e.length>0&&this.translateTagSet(e,this.pick),t&&t.length>0&&this.translateTagSet(t,this.skip)}this.applyInheritables(i)}else!0===i||!1===i?this.parse=this.enabled=i:l(`Invalid options argument: ${i}`)}applyInheritables(e){let t,s;for(t of E)s=e[t],void 0!==s&&(this[t]=s)}translateTagSet(e,t){if(this.dict){let s,i,{tagKeys:n,tagValues:r}=this.dict;for(s of e)\"string\"==typeof s?(i=r.indexOf(s),-1===i&&(i=n.indexOf(Number(s))),-1!==i&&t.add(Number(n[i]))):t.add(s)}else for(let s of e)t.add(s)}finalizeFilters(){!this.enabled&&this.deps.size>0?(this.enabled=!0,X(this.pick,this.deps)):this.enabled&&this.pick.size>0&&X(this.pick,this.deps)}}var N={jfif:!1,tiff:!0,xmp:!1,icc:!1,iptc:!1,ifd0:!0,ifd1:!1,exif:!0,gps:!0,interop:!1,ihdr:void 0,makerNote:!1,userComment:!1,multiSegment:!1,skip:[],pick:[],translateKeys:!0,translateValues:!0,reviveValues:!0,sanitize:!0,mergeOutput:!0,silentErrors:!0,chunked:!0,firstChunkSize:void 0,firstChunkSizeNode:512,firstChunkSizeBrowser:65536,chunkSize:65536,chunkLimit:5},$=new Map;class R extends _{static useCached(e){let t=$.get(e);return void 0!==t||(t=new this(e),$.set(e,t)),t}constructor(e){super(),!0===e?this.setupFromTrue():void 0===e?this.setupFromUndefined():Array.isArray(e)?this.setupFromArray(e):\"object\"==typeof e?this.setupFromObject(e):l(`Invalid options argument ${e}`),void 0===this.firstChunkSize&&(this.firstChunkSize=s?this.firstChunkSizeBrowser:this.firstChunkSizeNode),this.mergeOutput&&(this.ifd1.enabled=!1),this.filterNestedSegmentTags(),this.traverseTiffDependencyTree(),this.checkLoadedPlugins()}setupFromUndefined(){let e;for(e of L)this[e]=N[e];for(e of M)this[e]=N[e];for(e of j)this[e]=N[e];for(e of F)this[e]=new D(e,N[e],void 0,this)}setupFromTrue(){let e;for(e of L)this[e]=N[e];for(e of M)this[e]=N[e];for(e of j)this[e]=!0;for(e of F)this[e]=new D(e,!0,void 0,this)}setupFromArray(e){let t;for(t of L)this[t]=N[t];for(t of M)this[t]=N[t];for(t of j)this[t]=N[t];for(t of F)this[t]=new D(t,!1,void 0,this);this.setupGlobalFilters(e,void 0,P)}setupFromObject(e){let t;for(t of(P.ifd0=P.ifd0||P.image,P.ifd1=P.ifd1||P.thumbnail,Object.assign(this,e),L))this[t]=W(e[t],N[t]);for(t of M)this[t]=W(e[t],N[t]);for(t of j)this[t]=W(e[t],N[t]);for(t of z)this[t]=new D(t,N[t],e[t],this);for(t of P)this[t]=new D(t,N[t],e[t],this.tiff);this.setupGlobalFilters(e.pick,e.skip,P,F),!0===e.tiff?this.batchEnableWithBool(P,!0):!1===e.tiff?this.batchEnableWithUserValue(P,e):Array.isArray(e.tiff)?this.setupGlobalFilters(e.tiff,void 0,P):\"object\"==typeof e.tiff&&this.setupGlobalFilters(e.tiff.pick,e.tiff.skip,P)}batchEnableWithBool(e,t){for(let s of e)this[s].enabled=t}batchEnableWithUserValue(e,t){for(let s of e){let e=t[s];this[s].enabled=!1!==e&&void 0!==e}}setupGlobalFilters(e,t,s,i=s){if(e&&e.length){for(let e of i)this[e].enabled=!1;let t=K(e,s);for(let[e,s]of t)X(this[e].pick,s),this[e].enabled=!0}else if(t&&t.length){let e=K(t,s);for(let[t,s]of e)X(this[t].skip,s)}}filterNestedSegmentTags(){let{ifd0:e,exif:t,xmp:s,iptc:i,icc:n}=this;this.makerNote?t.deps.add(37500):t.skip.add(37500),this.userComment?t.deps.add(37510):t.skip.add(37510),s.enabled||e.skip.add(700),i.enabled||e.skip.add(33723),n.enabled||e.skip.add(34675)}traverseTiffDependencyTree(){let{ifd0:e,exif:t,gps:s,interop:i}=this;i.needed&&(t.deps.add(40965),e.deps.add(40965)),t.needed&&e.deps.add(34665),s.needed&&e.deps.add(34853),this.tiff.enabled=P.some((e=>!0===this[e].enabled))||this.makerNote||this.userComment;for(let e of P)this[e].finalizeFilters()}get onlyTiff(){return!T.map((e=>this[e].enabled)).some((e=>!0===e))&&this.tiff.enabled}checkLoadedPlugins(){for(let e of z)this[e].enabled&&!y.has(e)&&p(\"segment parser\",e)}}function K(e,t){let s,i,n,r,a=[];for(n of t){for(r of(s=B.get(n),i=[],s))(e.includes(r[0])||e.includes(r[1]))&&i.push(r[0]);i.length&&a.push([n,i])}return a}function W(e,t){return void 0!==e?e:void 0!==t?t:void 0}function X(e,t){for(let s of t)e.add(s)}e(R,\"default\",N);class H{constructor(t){e(this,\"parsers\",{}),e(this,\"output\",{}),e(this,\"errors\",[]),e(this,\"pushToErrors\",(e=>this.errors.push(e))),this.options=R.useCached(t)}async read(e){this.file=await function(e,t){return\"string\"==typeof e?k(e,t):s&&!i&&e instanceof HTMLImageElement?k(e.src,t):e instanceof Uint8Array||e instanceof ArrayBuffer||e instanceof DataView?new c(e):s&&e instanceof Blob?O(e,t,\"blob\",A):void l(\"Invalid input argument\")}(e,this.options)}setup(){if(this.fileParser)return;let{file:e}=this,t=e.getUint16(0);for(let[s,i]of m)if(i.canHandle(e,t))return this.fileParser=new i(this.options,this.file,this.parsers),e[s]=!0;this.file.close&&this.file.close(),l(\"Unknown file format\")}async parse(){let{output:e,errors:t}=this;return this.setup(),this.options.silentErrors?(await this.executeParsers().catch(this.pushToErrors),t.push(...this.fileParser.errors)):await this.executeParsers(),this.file.close&&this.file.close(),this.options.silentErrors&&t.length>0&&(e.errors=t),f(s=e)?void 0:s;var s}async executeParsers(){let{output:e}=this;await this.fileParser.parse();let t=Object.values(this.parsers).map((async t=>{let s=await t.parse();t.assignToOutput(e,s)}));this.options.silentErrors&&(t=t.map((e=>e.catch(this.pushToErrors)))),await Promise.all(t)}async extractThumbnail(){this.setup();let{options:e,file:t}=this,s=y.get(\"tiff\",e);var i;if(t.tiff?i={start:0,type:\"tiff\"}:t.jpeg&&(i=await this.fileParser.getOrFindSegment(\"tiff\")),void 0===i)return;let n=await this.fileParser.ensureSegmentChunk(i),r=this.parsers.tiff=new s(n,e,t),a=await r.extractThumbnail();return t.close&&t.close(),a}}async function Y(e,t){let s=new H(t);return await s.read(e),s.parse()}var G=Object.freeze({__proto__:null,parse:Y,Exifr:H,fileParsers:m,segmentParsers:y,fileReaders:b,tagKeys:B,tagValues:V,tagRevivers:I,createDictionary:x,extendDictionary:C,fetchUrlAsArrayBuffer:S,readBlobAsArrayBuffer:A,chunkedProps:L,otherSegments:T,segments:z,tiffBlocks:P,segmentsAndBlocks:F,tiffExtractables:j,inheritables:E,allFormatters:M,Options:R});class J{static findPosition(e,t){let s=e.getUint16(t+2)+2,i=\"function\"==typeof this.headerLength?this.headerLength(e,t,s):this.headerLength,n=t+i,r=s-i;return{offset:t,length:s,headerLength:i,start:n,size:r,end:n+r}}static parse(e,t={}){return new this(e,new R({[this.type]:t}),e).parse()}normalizeInput(e){return e instanceof c?e:new c(e)}constructor(t,s={},i){e(this,\"errors\",[]),e(this,\"raw\",new Map),e(this,\"handleError\",(e=>{if(!this.options.silentErrors)throw e;this.errors.push(e.message)})),this.chunk=this.normalizeInput(t),this.file=i,this.type=this.constructor.type,this.globalOptions=this.options=s,this.localOptions=s[this.type],this.canTranslate=this.localOptions&&this.localOptions.translate}translate(){this.canTranslate&&(this.translated=this.translateBlock(this.raw,this.type))}get output(){return this.translated?this.translated:this.raw?Object.fromEntries(this.raw):void 0}translateBlock(e,t){let s=I.get(t),i=V.get(t),n=B.get(t),r=this.options[t],a=r.reviveValues&&!!s,h=r.translateValues&&!!i,f=r.translateKeys&&!!n,l={};for(let[t,r]of e)a&&s.has(t)?r=s.get(t)(r):h&&i.has(t)&&(r=this.translateValue(r,i.get(t))),f&&n.has(t)&&(t=n.get(t)||t),l[t]=r;return l}translateValue(e,t){return t[e]||t.DEFAULT||e}assignToOutput(e,t){this.assignObjectToOutput(e,this.constructor.type,t)}assignObjectToOutput(e,t,s){if(this.globalOptions.mergeOutput)return Object.assign(e,s);e[t]?Object.assign(e[t],s):e[t]=s}}e(J,\"headerLength\",4),e(J,\"type\",void 0),e(J,\"multiSegment\",!1),e(J,\"canHandle\",(()=>!1));function q(e){return 192===e||194===e||196===e||219===e||221===e||218===e||254===e}function Q(e){return e>=224&&e<=239}function Z(e,t,s){for(let[i,n]of y)if(n.canHandle(e,t,s))return i}class ee extends class{constructor(t,s,i){e(this,\"errors\",[]),e(this,\"ensureSegmentChunk\",(async e=>{let t=e.start,s=e.size||65536;if(this.file.chunked)if(this.file.available(t,s))e.chunk=this.file.subarray(t,s);else try{e.chunk=await this.file.readChunk(t,s)}catch(t){l(`Couldn't read segment: ${JSON.stringify(e)}. ${t.message}`)}else this.file.byteLength>t+s?e.chunk=this.file.subarray(t,s):void 0===e.size?e.chunk=this.file.subarray(t):l(\"Segment unreachable: \"+JSON.stringify(e));return e.chunk})),this.extendOptions&&this.extendOptions(t),this.options=t,this.file=s,this.parsers=i}injectSegment(e,t){this.options[e].enabled&&this.createParser(e,t)}createParser(e,t){let s=new(y.get(e))(t,this.options,this.file);return this.parsers[e]=s}createParsers(e){for(let t of e){let{type:e,chunk:s}=t,i=this.options[e];if(i&&i.enabled){let t=this.parsers[e];t&&t.append||t||this.createParser(e,s)}}}async readSegments(e){let t=e.map(this.ensureSegmentChunk);await Promise.all(t)}}{constructor(...t){super(...t),e(this,\"appSegments\",[]),e(this,\"jpegSegments\",[]),e(this,\"unknownSegments\",[])}static canHandle(e,t){return 65496===t}async parse(){await this.findAppSegments(),await this.readSegments(this.appSegments),this.mergeMultiSegments(),this.createParsers(this.mergedAppSegments||this.appSegments)}setupSegmentFinderArgs(e){!0===e?(this.findAll=!0,this.wanted=new Set(y.keyList())):(e=void 0===e?y.keyList().filter((e=>this.options[e].enabled)):e.filter((e=>this.options[e].enabled&&y.has(e))),this.findAll=!1,this.remaining=new Set(e),this.wanted=new Set(e)),this.unfinishedMultiSegment=!1}async findAppSegments(e=0,t){this.setupSegmentFinderArgs(t);let{file:s,findAll:i,wanted:n,remaining:r}=this;if(!i&&this.file.chunked&&(i=Array.from(n).some((e=>{let t=y.get(e),s=this.options[e];return t.multiSegment&&s.multiSegment})),i&&await this.file.readWhole()),e=this.findAppSegmentsInRange(e,s.byteLength),!this.options.onlyTiff&&s.chunked){let t=!1;for(;r.size>0&&!t&&(s.canReadNextChunk||this.unfinishedMultiSegment);){let{nextChunkOffset:i}=s,n=this.appSegments.some((e=>!this.file.available(e.offset||e.start,e.length||e.size)));if(t=e>i&&!n?!await s.readNextChunk(e):!await s.readNextChunk(i),void 0===(e=this.findAppSegmentsInRange(e,s.byteLength)))return}}}findAppSegmentsInRange(e,t){t-=2;let s,i,n,r,a,h,{file:f,findAll:l,wanted:o,remaining:u,options:d}=this;for(;e<t;e++)if(255===f.getUint8(e))if(s=f.getUint8(e+1),Q(s)){if(i=f.getUint16(e+2),n=Z(f,e,i),n&&o.has(n)&&(r=y.get(n),a=r.findPosition(f,e),h=d[n],a.type=n,this.appSegments.push(a),!l&&(r.multiSegment&&h.multiSegment?(this.unfinishedMultiSegment=a.chunkNumber<a.chunkCount,this.unfinishedMultiSegment||u.delete(n)):u.delete(n),0===u.size)))break;d.recordUnknownSegments&&(a=J.findPosition(f,e),a.marker=s,this.unknownSegments.push(a)),e+=i+1}else if(q(s)){if(i=f.getUint16(e+2),218===s&&!1!==d.stopAfterSos)return;d.recordJpegSegments&&this.jpegSegments.push({offset:e,length:i,marker:s}),e+=i+1}return e}mergeMultiSegments(){if(!this.appSegments.some((e=>e.multiSegment)))return;let e=function(e,t){let s,i,n,r=new Map;for(let a=0;a<e.length;a++)s=e[a],i=s[t],r.has(i)?n=r.get(i):r.set(i,n=[]),n.push(s);return Array.from(r)}(this.appSegments,\"type\");this.mergedAppSegments=e.map((([e,t])=>{let s=y.get(e,this.options);if(s.handleMultiSegments){return{type:e,chunk:s.handleMultiSegments(t)}}return t[0]}))}getSegment(e){return this.appSegments.find((t=>t.type===e))}async getOrFindSegment(e){let t=this.getSegment(e);return void 0===t&&(await this.findAppSegments(0,[e]),t=this.getSegment(e)),t}}e(ee,\"type\",\"jpeg\"),m.set(\"jpeg\",ee);const te=[void 0,1,1,2,4,8,1,1,2,4,8,4,8,4];class se extends J{parseHeader(){var e=this.chunk.getUint16();18761===e?this.le=!0:19789===e&&(this.le=!1),this.chunk.le=this.le,this.headerParsed=!0}parseTags(e,t,s=new Map){let{pick:i,skip:n}=this.options[t];i=new Set(i);let r=i.size>0,a=0===n.size,h=this.chunk.getUint16(e);e+=2;for(let f=0;f<h;f++){let h=this.chunk.getUint16(e);if(r){if(i.has(h)&&(s.set(h,this.parseTag(e,h,t)),i.delete(h),0===i.size))break}else!a&&n.has(h)||s.set(h,this.parseTag(e,h,t));e+=12}return s}parseTag(e,t,s){let{chunk:i}=this,n=i.getUint16(e+2),r=i.getUint32(e+4),a=te[n];if(a*r<=4?e+=8:e=i.getUint32(e+8),(n<1||n>13)&&l(`Invalid TIFF value type. block: ${s.toUpperCase()}, tag: ${t.toString(16)}, type: ${n}, offset ${e}`),e>i.byteLength&&l(`Invalid TIFF value offset. block: ${s.toUpperCase()}, tag: ${t.toString(16)}, type: ${n}, offset ${e} is outside of chunk size ${i.byteLength}`),1===n)return i.getUint8Array(e,r);if(2===n)return\"\"===(h=function(e){for(;e.endsWith(\"\\0\");)e=e.slice(0,-1);return e}(h=i.getString(e,r)).trim())?void 0:h;var h;if(7===n)return i.getUint8Array(e,r);if(1===r)return this.parseTagValue(n,e);{let t=new(function(e){switch(e){case 1:return Uint8Array;case 3:return Uint16Array;case 4:return Uint32Array;case 5:return Array;case 6:return Int8Array;case 8:return Int16Array;case 9:return Int32Array;case 10:return Array;case 11:return Float32Array;case 12:return Float64Array;default:return Array}}(n))(r),s=a;for(let i=0;i<r;i++)t[i]=this.parseTagValue(n,e),e+=s;return t}}parseTagValue(e,t){let{chunk:s}=this;switch(e){case 1:return s.getUint8(t);case 3:return s.getUint16(t);case 4:return s.getUint32(t);case 5:return s.getUint32(t)/s.getUint32(t+4);case 6:return s.getInt8(t);case 8:return s.getInt16(t);case 9:return s.getInt32(t);case 10:return s.getInt32(t)/s.getInt32(t+4);case 11:return s.getFloat(t);case 12:return s.getDouble(t);case 13:return s.getUint32(t);default:l(`Invalid tiff type ${e}`)}}}class ie extends se{static canHandle(e,t){return 225===e.getUint8(t+1)&&1165519206===e.getUint32(t+4)&&0===e.getUint16(t+8)}async parse(){this.parseHeader();let{options:e}=this;return e.ifd0.enabled&&await this.parseIfd0Block(),e.exif.enabled&&await this.safeParse(\"parseExifBlock\"),e.gps.enabled&&await this.safeParse(\"parseGpsBlock\"),e.interop.enabled&&await this.safeParse(\"parseInteropBlock\"),e.ifd1.enabled&&await this.safeParse(\"parseThumbnailBlock\"),this.createOutput()}safeParse(e){let t=this[e]();return void 0!==t.catch&&(t=t.catch(this.handleError)),t}findIfd0Offset(){void 0===this.ifd0Offset&&(this.ifd0Offset=this.chunk.getUint32(4))}findIfd1Offset(){if(void 0===this.ifd1Offset){this.findIfd0Offset();let e=this.chunk.getUint16(this.ifd0Offset),t=this.ifd0Offset+2+12*e;this.ifd1Offset=this.chunk.getUint32(t)}}parseBlock(e,t){let s=new Map;return this[t]=s,this.parseTags(e,t,s),s}async parseIfd0Block(){if(this.ifd0)return;let{file:e}=this;this.findIfd0Offset(),this.ifd0Offset<8&&l(\"Malformed EXIF data\"),!e.chunked&&this.ifd0Offset>e.byteLength&&l(`IFD0 offset points to outside of file.\\nthis.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e.byteLength}`),e.tiff&&await e.ensureChunk(this.ifd0Offset,o(this.options));let t=this.parseBlock(this.ifd0Offset,\"ifd0\");return 0!==t.size?(this.exifOffset=t.get(34665),this.interopOffset=t.get(40965),this.gpsOffset=t.get(34853),this.xmp=t.get(700),this.iptc=t.get(33723),this.icc=t.get(34675),this.options.sanitize&&(t.delete(34665),t.delete(40965),t.delete(34853),t.delete(700),t.delete(33723),t.delete(34675)),t):void 0}async parseExifBlock(){if(this.exif)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.exifOffset)return;this.file.tiff&&await this.file.ensureChunk(this.exifOffset,o(this.options));let e=this.parseBlock(this.exifOffset,\"exif\");return this.interopOffset||(this.interopOffset=e.get(40965)),this.makerNote=e.get(37500),this.userComment=e.get(37510),this.options.sanitize&&(e.delete(40965),e.delete(37500),e.delete(37510)),this.unpack(e,41728),this.unpack(e,41729),e}unpack(e,t){let s=e.get(t);s&&1===s.length&&e.set(t,s[0])}async parseGpsBlock(){if(this.gps)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.gpsOffset)return;let e=this.parseBlock(this.gpsOffset,\"gps\");return e&&e.has(2)&&e.has(4)&&(e.set(\"latitude\",ne(...e.get(2),e.get(1))),e.set(\"longitude\",ne(...e.get(4),e.get(3)))),e}async parseInteropBlock(){if(!this.interop&&(this.ifd0||await this.parseIfd0Block(),void 0!==this.interopOffset||this.exif||await this.parseExifBlock(),void 0!==this.interopOffset))return this.parseBlock(this.interopOffset,\"interop\")}async parseThumbnailBlock(e=!1){if(!this.ifd1&&!this.ifd1Parsed&&(!this.options.mergeOutput||e))return this.findIfd1Offset(),this.ifd1Offset>0&&(this.parseBlock(this.ifd1Offset,\"ifd1\"),this.ifd1Parsed=!0),this.ifd1}async extractThumbnail(){if(this.headerParsed||this.parseHeader(),this.ifd1Parsed||await this.parseThumbnailBlock(!0),void 0===this.ifd1)return;let e=this.ifd1.get(513),t=this.ifd1.get(514);return this.chunk.getUint8Array(e,t)}get image(){return this.ifd0}get thumbnail(){return this.ifd1}createOutput(){let e,t,s,i={};for(t of P)if(e=this[t],!f(e))if(s=this.canTranslate?this.translateBlock(e,t):Object.fromEntries(e),this.options.mergeOutput){if(\"ifd1\"===t)continue;Object.assign(i,s)}else i[t]=s;return this.makerNote&&(i.makerNote=this.makerNote),this.userComment&&(i.userComment=this.userComment),i}assignToOutput(e,t){if(this.globalOptions.mergeOutput)Object.assign(e,t);else for(let[s,i]of Object.entries(t))this.assignObjectToOutput(e,s,i)}}function ne(e,t,s,i){var n=e+t/60+s/3600;return\"S\"!==i&&\"W\"!==i||(n*=-1),n}e(ie,\"type\",\"tiff\"),e(ie,\"headerLength\",10),y.set(\"tiff\",ie);var re=Object.freeze({__proto__:null,default:G,Exifr:H,fileParsers:m,segmentParsers:y,fileReaders:b,tagKeys:B,tagValues:V,tagRevivers:I,createDictionary:x,extendDictionary:C,fetchUrlAsArrayBuffer:S,readBlobAsArrayBuffer:A,chunkedProps:L,otherSegments:T,segments:z,tiffBlocks:P,segmentsAndBlocks:F,tiffExtractables:j,inheritables:E,allFormatters:M,Options:R,parse:Y});const ae={ifd0:!1,ifd1:!1,exif:!1,gps:!1,interop:!1,sanitize:!1,reviveValues:!0,translateKeys:!1,translateValues:!1,mergeOutput:!1},he=Object.assign({},ae,{firstChunkSize:4e4,gps:[1,2,3,4]});async function fe(e){let t=new H(he);await t.read(e);let s=await t.parse();if(s&&s.gps){let{latitude:e,longitude:t}=s.gps;return{latitude:e,longitude:t}}}const le=Object.assign({},ae,{tiff:!1,ifd1:!0,mergeOutput:!1});async function oe(e){let t=new H(le);await t.read(e);let s=await t.extractThumbnail();return s&&a?r.from(s):s}async function ue(e){let t=await this.thumbnail(e);if(void 0!==t){let e=new Blob([t]);return URL.createObjectURL(e)}}const de=Object.assign({},ae,{firstChunkSize:4e4,ifd0:[274]});async function ce(e){let t=new H(de);await t.read(e);let s=await t.parse();if(s&&s.ifd0)return s.ifd0[274]}const pe=Object.freeze({1:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:0,rad:0},2:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:0,rad:0},3:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:180,rad:180*Math.PI/180},4:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:180,rad:180*Math.PI/180},5:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:90,rad:90*Math.PI/180},6:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:90,rad:90*Math.PI/180},7:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:270,rad:270*Math.PI/180},8:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:270,rad:270*Math.PI/180}});let ge=!0,me=!0;if(\"object\"==typeof navigator){let e=navigator.userAgent;if(e.includes(\"iPad\")||e.includes(\"iPhone\")){let t=e.match(/OS (\\d+)_(\\d+)/);if(t){let[,e,s]=t,i=Number(e)+.1*Number(s);ge=i<13.4,me=!1}}else if(e.includes(\"OS X 10\")){let[,t]=e.match(/OS X 10[_.](\\d+)/);ge=me=Number(t)<15}if(e.includes(\"Chrome/\")){let[,t]=e.match(/Chrome\\/(\\d+)/);ge=me=Number(t)<81}else if(e.includes(\"Firefox/\")){let[,t]=e.match(/Firefox\\/(\\d+)/);ge=me=Number(t)<77}}async function ye(e){let t=await ce(e);return Object.assign({canvas:ge,css:me},pe[t])}class be extends c{constructor(...t){super(...t),e(this,\"ranges\",new we),0!==this.byteLength&&this.ranges.add(0,this.byteLength)}_tryExtend(e,t,s){if(0===e&&0===this.byteLength&&s){let e=new DataView(s.buffer||s,s.byteOffset,s.byteLength);this._swapDataView(e)}else{let s=e+t;if(s>this.byteLength){let{dataView:e}=this._extend(s);this._swapDataView(e)}}}_extend(e){let t;t=a?r.allocUnsafe(e):new Uint8Array(e);let s=new DataView(t.buffer,t.byteOffset,t.byteLength);return t.set(new Uint8Array(this.buffer,this.byteOffset,this.byteLength),0),{uintView:t,dataView:s}}subarray(e,t,s=!1){return t=t||this._lengthToEnd(e),s&&this._tryExtend(e,t),this.ranges.add(e,t),super.subarray(e,t)}set(e,t,s=!1){s&&this._tryExtend(t,e.byteLength,e);let i=super.set(e,t);return this.ranges.add(t,i.byteLength),i}async ensureChunk(e,t){this.chunked&&(this.ranges.available(e,t)||await this.readChunk(e,t))}available(e,t){return this.ranges.available(e,t)}}class we{constructor(){e(this,\"list\",[])}get length(){return this.list.length}add(e,t,s=0){let i=e+t,n=this.list.filter((t=>ke(e,t.offset,i)||ke(e,t.end,i)));if(n.length>0){e=Math.min(e,...n.map((e=>e.offset))),i=Math.max(i,...n.map((e=>e.end))),t=i-e;let s=n.shift();s.offset=e,s.length=t,s.end=i,this.list=this.list.filter((e=>!n.includes(e)))}else this.list.push({offset:e,length:t,end:i})}available(e,t){let s=e+t;return this.list.some((t=>t.offset<=e&&s<=t.end))}}function ke(e,t,s){return e<=t&&t<=s}class Oe extends be{constructor(t,s){super(0),e(this,\"chunksRead\",0),this.input=t,this.options=s}async readWhole(){this.chunked=!1,await this.readChunk(this.nextChunkOffset)}async readChunked(){this.chunked=!0,await this.readChunk(0,this.options.firstChunkSize)}async readNextChunk(e=this.nextChunkOffset){if(this.fullyRead)return this.chunksRead++,!1;let t=this.options.chunkSize,s=await this.readChunk(e,t);return!!s&&s.byteLength===t}async readChunk(e,t){if(this.chunksRead++,0!==(t=this.safeWrapAddress(e,t)))return this._readChunk(e,t)}safeWrapAddress(e,t){return void 0!==this.size&&e+t>this.size?Math.max(0,this.size-e):t}get nextChunkOffset(){if(0!==this.ranges.list.length)return this.ranges.list[0].length}get canReadNextChunk(){return this.chunksRead<this.options.chunkLimit}get fullyRead(){return void 0!==this.size&&this.nextChunkOffset===this.size}read(){return this.options.chunked?this.readChunked():this.readWhole()}close(){}}b.set(\"blob\",class extends Oe{async readWhole(){this.chunked=!1;let e=await A(this.input);this._swapArrayBuffer(e)}readChunked(){return this.chunked=!0,this.size=this.input.size,super.readChunked()}async _readChunk(e,t){let s=t?e+t:void 0,i=this.input.slice(e,s),n=await A(i);return this.set(n,e,!0)}});export default re;export{H as Exifr,R as Options,M as allFormatters,L as chunkedProps,x as createDictionary,C as extendDictionary,S as fetchUrlAsArrayBuffer,m as fileParsers,b as fileReaders,fe as gps,he as gpsOnlyOptions,E as inheritables,ce as orientation,de as orientationOnlyOptions,T as otherSegments,Y as parse,A as readBlobAsArrayBuffer,ge as rotateCanvas,me as rotateCss,ye as rotation,pe as rotations,y as segmentParsers,z as segments,F as segmentsAndBlocks,B as tagKeys,I as tagRevivers,V as tagValues,oe as thumbnail,le as thumbnailOnlyOptions,ue as thumbnailUrl,P as tiffBlocks,j as tiffExtractables};\n", "{\n  \"name\": \"@uppy/thumbnail-generator\",\n  \"description\": \"Uppy plugin that generates small previews of images to show on your upload UI.\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\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-plugin\",\n    \"thumbnail\",\n    \"preview\",\n    \"resize\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\",\n    \"exifr\": \"^7.0.0\"\n  },\n  \"devDependencies\": {\n    \"jsdom\": \"^26.1.0\",\n    \"namespace-emitter\": \"2.0.1\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  }\n}\n", "export default {\n    strings: {\n        generatingThumbnails: 'Generating thumbnails...',\n    },\n};\n", "import { UIPlugin } from '@uppy/core';\nimport { dataURItoBlob, isObjectURL, isPreviewSupported } from '@uppy/utils';\n// @ts-ignore untyped\nimport { rotation } from 'exifr/dist/mini.esm.mjs';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\n/**\n * Save a <canvas> element's content to a Blob object.\n *\n */\nfunction canvasToBlob(canvas, type, quality) {\n    try {\n        canvas.getContext('2d').getImageData(0, 0, 1, 1);\n    }\n    catch (err) {\n        if (err.code === 18) {\n            return Promise.reject(new Error('cannot read image, probably an svg with external resources'));\n        }\n    }\n    if (canvas.toBlob) {\n        return new Promise((resolve) => {\n            canvas.toBlob(resolve, type, quality);\n        }).then((blob) => {\n            if (blob === null) {\n                throw new Error('cannot read image, probably an svg with external resources');\n            }\n            return blob;\n        });\n    }\n    return Promise.resolve()\n        .then(() => {\n        return dataURItoBlob(canvas.toDataURL(type, quality), {});\n    })\n        .then((blob) => {\n        if (blob === null) {\n            throw new Error('could not extract blob, probably an old browser');\n        }\n        return blob;\n    });\n}\nfunction rotateImage(image, translate) {\n    let w = image.width;\n    let h = image.height;\n    if (translate.deg === 90 || translate.deg === 270) {\n        w = image.height;\n        h = image.width;\n    }\n    const canvas = document.createElement('canvas');\n    canvas.width = w;\n    canvas.height = h;\n    const context = canvas.getContext('2d');\n    context.translate(w / 2, h / 2);\n    if (translate.canvas) {\n        context.rotate(translate.rad);\n        context.scale(translate.scaleX, translate.scaleY);\n    }\n    context.drawImage(image, -image.width / 2, -image.height / 2, image.width, image.height);\n    return canvas;\n}\n/**\n * Make sure the image doesn\u2019t exceed browser/device canvas limits.\n * For ios with 256 RAM and ie\n */\nfunction protect(image) {\n    // https://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element\n    const ratio = image.width / image.height;\n    const maxSquare = 5000000; // ios max canvas square\n    const maxSize = 4096; // ie max canvas dimensions\n    let maxW = Math.floor(Math.sqrt(maxSquare * ratio));\n    let maxH = Math.floor(maxSquare / Math.sqrt(maxSquare * ratio));\n    if (maxW > maxSize) {\n        maxW = maxSize;\n        maxH = Math.round(maxW / ratio);\n    }\n    if (maxH > maxSize) {\n        maxH = maxSize;\n        maxW = Math.round(ratio * maxH);\n    }\n    if (image.width > maxW) {\n        const canvas = document.createElement('canvas');\n        canvas.width = maxW;\n        canvas.height = maxH;\n        canvas.getContext('2d').drawImage(image, 0, 0, maxW, maxH);\n        return canvas;\n    }\n    return image;\n}\nconst defaultOptions = {\n    thumbnailWidth: null,\n    thumbnailHeight: null,\n    thumbnailType: 'image/jpeg',\n    waitForThumbnailsBeforeUpload: false,\n    lazy: false,\n};\n/**\n * The Thumbnail Generator plugin\n */\nexport default class ThumbnailGenerator extends UIPlugin {\n    static VERSION = packageJson.version;\n    queue;\n    queueProcessing;\n    defaultThumbnailDimension;\n    thumbnailType;\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOptions, ...opts });\n        this.type = 'modifier';\n        this.id = this.opts.id || 'ThumbnailGenerator';\n        this.title = 'Thumbnail Generator';\n        this.queue = [];\n        this.queueProcessing = false;\n        this.defaultThumbnailDimension = 200;\n        this.thumbnailType = this.opts.thumbnailType;\n        this.defaultLocale = locale;\n        this.i18nInit();\n        if (this.opts.lazy && this.opts.waitForThumbnailsBeforeUpload) {\n            throw new Error('ThumbnailGenerator: The `lazy` and `waitForThumbnailsBeforeUpload` options are mutually exclusive. Please ensure at most one of them is set to `true`.');\n        }\n    }\n    createThumbnail(file, targetWidth, targetHeight) {\n        if (file.data == null)\n            throw new Error('File data is empty');\n        const originalUrl = URL.createObjectURL(file.data);\n        const onload = new Promise((resolve, reject) => {\n            const image = new Image();\n            image.src = originalUrl;\n            image.addEventListener('load', () => {\n                URL.revokeObjectURL(originalUrl);\n                resolve(image);\n            });\n            image.addEventListener('error', (event) => {\n                URL.revokeObjectURL(originalUrl);\n                reject(event.error || new Error('Could not create thumbnail'));\n            });\n        });\n        const orientationPromise = rotation(file.data).catch(() => 1);\n        return Promise.all([onload, orientationPromise])\n            .then(([image, orientation]) => {\n            const dimensions = this.getProportionalDimensions(image, targetWidth, targetHeight, orientation.deg);\n            const rotatedImage = rotateImage(image, orientation);\n            const resizedImage = this.resizeImage(rotatedImage, dimensions.width, dimensions.height);\n            return canvasToBlob(resizedImage, this.thumbnailType, 80);\n        })\n            .then((blob) => {\n            return URL.createObjectURL(blob);\n        });\n    }\n    /**\n     * Get the new calculated dimensions for the given image and a target width\n     * or height. If both width and height are given, only width is taken into\n     * account. If neither width nor height are given, the default dimension\n     * is used.\n     */\n    getProportionalDimensions(img, width, height, deg) {\n        let aspect = img.width / img.height;\n        if (deg === 90 || deg === 270) {\n            aspect = img.height / img.width;\n        }\n        if (width != null) {\n            let targetWidth = width;\n            // Thumbnail shouldn\u2019t be enlarged / upscaled, only reduced.\n            // If img is already smaller than width/height, leave it as is.\n            if (img.width < width)\n                targetWidth = img.width;\n            return {\n                width: targetWidth,\n                height: Math.round(targetWidth / aspect),\n            };\n        }\n        if (height != null) {\n            let targetHeight = height;\n            if (img.height < height)\n                targetHeight = img.height;\n            return {\n                width: Math.round(targetHeight * aspect),\n                height: targetHeight,\n            };\n        }\n        return {\n            width: this.defaultThumbnailDimension,\n            height: Math.round(this.defaultThumbnailDimension / aspect),\n        };\n    }\n    /**\n     * Resize an image to the target `width` and `height`.\n     *\n     * Returns a Canvas with the resized image on it.\n     */\n    resizeImage(image, targetWidth, targetHeight) {\n        // Resizing in steps refactored to use a solution from\n        // https://blog.uploadcare.com/image-resize-in-browsers-is-broken-e38eed08df01\n        let img = protect(image);\n        let steps = Math.ceil(Math.log2(img.width / targetWidth));\n        if (steps < 1) {\n            steps = 1;\n        }\n        let sW = targetWidth * 2 ** (steps - 1);\n        let sH = targetHeight * 2 ** (steps - 1);\n        const x = 2;\n        while (steps--) {\n            const canvas = document.createElement('canvas');\n            canvas.width = sW;\n            canvas.height = sH;\n            canvas.getContext('2d').drawImage(img, 0, 0, sW, sH);\n            img = canvas;\n            sW = Math.round(sW / x);\n            sH = Math.round(sH / x);\n        }\n        return img;\n    }\n    /**\n     * Set the preview URL for a file.\n     */\n    setPreviewURL(fileID, preview) {\n        this.uppy.setFileState(fileID, { preview });\n    }\n    addToQueue(fileID) {\n        this.queue.push(fileID);\n        if (this.queueProcessing === false) {\n            this.processQueue();\n        }\n    }\n    processQueue() {\n        this.queueProcessing = true;\n        if (this.queue.length > 0) {\n            const current = this.uppy.getFile(this.queue.shift());\n            if (!current) {\n                this.uppy.log('[ThumbnailGenerator] file was removed before a thumbnail could be generated, but not removed from the queue. This is probably a bug', 'error');\n                return Promise.resolve();\n            }\n            return this.requestThumbnail(current)\n                .catch(() => { })\n                .then(() => this.processQueue());\n        }\n        this.queueProcessing = false;\n        this.uppy.log('[ThumbnailGenerator] Emptied thumbnail queue');\n        this.uppy.emit('thumbnail:all-generated');\n        return Promise.resolve();\n    }\n    requestThumbnail(file) {\n        if (isPreviewSupported(file.type) && !file.isRemote) {\n            return this.createThumbnail(file, this.opts.thumbnailWidth, this.opts.thumbnailHeight)\n                .then((preview) => {\n                this.setPreviewURL(file.id, preview);\n                this.uppy.log(`[ThumbnailGenerator] Generated thumbnail for ${file.id}`);\n                this.uppy.emit('thumbnail:generated', this.uppy.getFile(file.id), preview);\n            })\n                .catch((err) => {\n                this.uppy.log(`[ThumbnailGenerator] Failed thumbnail for ${file.id}:`, 'warning');\n                this.uppy.log(err, 'warning');\n                this.uppy.emit('thumbnail:error', this.uppy.getFile(file.id), err);\n            });\n        }\n        return Promise.resolve();\n    }\n    onFileAdded = (file) => {\n        if (!file.preview &&\n            file.data &&\n            isPreviewSupported(file.type) &&\n            !file.isRemote) {\n            this.addToQueue(file.id);\n        }\n    };\n    /**\n     * Cancel a lazy request for a thumbnail if the thumbnail has not yet been generated.\n     */\n    onCancelRequest = (file) => {\n        const index = this.queue.indexOf(file.id);\n        if (index !== -1) {\n            this.queue.splice(index, 1);\n        }\n    };\n    /**\n     * Clean up the thumbnail for a file. Cancel lazy requests and free the thumbnail URL.\n     */\n    onFileRemoved = (file) => {\n        const index = this.queue.indexOf(file.id);\n        if (index !== -1) {\n            this.queue.splice(index, 1);\n        }\n        // Clean up object URLs.\n        if (file.preview && isObjectURL(file.preview)) {\n            URL.revokeObjectURL(file.preview);\n        }\n    };\n    onRestored = () => {\n        const restoredFiles = this.uppy.getFiles().filter((file) => file.isRestored);\n        restoredFiles.forEach((file) => {\n            // Only add blob URLs; they are likely invalid after being restored.\n            if (!file.preview || isObjectURL(file.preview)) {\n                this.addToQueue(file.id);\n            }\n        });\n    };\n    onAllFilesRemoved = () => {\n        this.queue = [];\n    };\n    waitUntilAllProcessed = (fileIDs) => {\n        fileIDs.forEach((fileID) => {\n            const file = this.uppy.getFile(fileID);\n            this.uppy.emit('preprocess-progress', file, {\n                mode: 'indeterminate',\n                message: this.i18n('generatingThumbnails'),\n            });\n        });\n        const emitPreprocessCompleteForAll = () => {\n            fileIDs.forEach((fileID) => {\n                const file = this.uppy.getFile(fileID);\n                this.uppy.emit('preprocess-complete', file);\n            });\n        };\n        return new Promise((resolve) => {\n            if (this.queueProcessing) {\n                this.uppy.once('thumbnail:all-generated', () => {\n                    emitPreprocessCompleteForAll();\n                    resolve();\n                });\n            }\n            else {\n                emitPreprocessCompleteForAll();\n                resolve();\n            }\n        });\n    };\n    install() {\n        this.uppy.on('file-removed', this.onFileRemoved);\n        this.uppy.on('cancel-all', this.onAllFilesRemoved);\n        if (this.opts.lazy) {\n            this.uppy.on('thumbnail:request', this.onFileAdded);\n            this.uppy.on('thumbnail:cancel', this.onCancelRequest);\n        }\n        else {\n            this.uppy.on('thumbnail:request', this.onFileAdded);\n            this.uppy.on('file-added', this.onFileAdded);\n            this.uppy.on('restored', this.onRestored);\n        }\n        if (this.opts.waitForThumbnailsBeforeUpload) {\n            this.uppy.addPreProcessor(this.waitUntilAllProcessed);\n        }\n    }\n    uninstall() {\n        this.uppy.off('file-removed', this.onFileRemoved);\n        this.uppy.off('cancel-all', this.onAllFilesRemoved);\n        if (this.opts.lazy) {\n            this.uppy.off('thumbnail:request', this.onFileAdded);\n            this.uppy.off('thumbnail:cancel', this.onCancelRequest);\n        }\n        else {\n            this.uppy.off('thumbnail:request', this.onFileAdded);\n            this.uppy.off('file-added', this.onFileAdded);\n            this.uppy.off('restored', this.onRestored);\n        }\n        if (this.opts.waitForThumbnailsBeforeUpload) {\n            this.uppy.removePreProcessor(this.waitUntilAllProcessed);\n        }\n    }\n}\n", "{\n  \"name\": \"@uppy/dashboard\",\n  \"description\": \"Universal UI plugin for Uppy.\",\n  \"version\": \"5.1.1\",\n  \"license\": \"MIT\",\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 --silent='passed-only'\",\n    \"test:e2e\": \"vitest run --project browser\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"dashboard\",\n    \"ui\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@transloadit/prettier-bytes\": \"^0.3.4\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/thumbnail-generator\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"classnames\": \"^2.2.6\",\n    \"lodash\": \"^4.17.23\",\n    \"nanoid\": \"^5.0.9\",\n    \"preact\": \"^10.26.10\",\n    \"shallow-equal\": \"^3.0.0\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"@uppy/dropbox\": \"workspace:^\",\n    \"@uppy/google-drive\": \"workspace:^\",\n    \"@uppy/url\": \"workspace:^\",\n    \"@uppy/webcam\": \"workspace:^\",\n    \"@vitest/browser\": \"^3.2.4\",\n    \"cssnano\": \"^7.0.7\",\n    \"jsdom\": \"^26.1.0\",\n    \"playwright\": \"1.57.0\",\n    \"postcss\": \"^8.5.6\",\n    \"postcss-cli\": \"^11.0.1\",\n    \"resize-observer-polyfill\": \"^1.5.0\",\n    \"sass\": \"^1.89.2\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  }\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { isDragDropSupported } from '@uppy/utils';\nimport classNames from 'classnames';\nimport AddFiles from './AddFiles.js';\nimport AddFilesPanel from './AddFilesPanel.js';\nimport EditorPanel from './EditorPanel.js';\nimport FileCard from './FileCard/index.js';\nimport FileList from './FileList.js';\nimport Informer from './Informer/Informer.js';\nimport PickerPanelContent from './PickerPanelContent.js';\nimport PanelTopBar from './PickerPanelTopBar.js';\nimport Slide from './Slide.js';\nimport StatusBar from './StatusBar/StatusBar.js';\n// http://dev.edenspiekermann.com/2016/02/11/introducing-accessible-modal-dialog\n// https://github.com/ghosh/micromodal\nconst WIDTH_XL = 900;\nconst WIDTH_LG = 700;\nconst WIDTH_MD = 576;\nconst HEIGHT_MD = 330;\nexport default function Dashboard(props) {\n    const isNoFiles = props.totalFileCount === 0;\n    const isSingleFile = props.totalFileCount === 1;\n    const isSizeMD = props.containerWidth > WIDTH_MD;\n    const isSizeHeightMD = props.containerHeight > HEIGHT_MD;\n    const dashboardClassName = classNames({\n        'uppy-Dashboard': true,\n        'uppy-Dashboard--isDisabled': props.disabled,\n        'uppy-Dashboard--animateOpenClose': props.animateOpenClose,\n        'uppy-Dashboard--isClosing': props.isClosing,\n        'uppy-Dashboard--isDraggingOver': props.isDraggingOver,\n        'uppy-Dashboard--modal': !props.inline,\n        'uppy-size--md': props.containerWidth > WIDTH_MD,\n        'uppy-size--lg': props.containerWidth > WIDTH_LG,\n        'uppy-size--xl': props.containerWidth > WIDTH_XL,\n        'uppy-size--height-md': props.containerHeight > HEIGHT_MD,\n        // We might want to enable this in the future\n        // 'uppy-size--height-lg': props.containerHeight > HEIGHT_LG,\n        // 'uppy-size--height-xl': props.containerHeight > HEIGHT_XL,\n        'uppy-Dashboard--isAddFilesPanelVisible': props.showAddFilesPanel,\n        'uppy-Dashboard--isInnerWrapVisible': props.areInsidesReadyToBeVisible,\n        // Only enable \u201Ccentered single file\u201D mode when Dashboard is tall enough\n        'uppy-Dashboard--singleFile': props.singleFileFullScreen && isSingleFile && isSizeHeightMD,\n    });\n    // Important: keep these in sync with the percent width values in `src/components/FileItem/index.scss`.\n    let itemsPerRow = 1; // mobile\n    if (props.containerWidth > WIDTH_XL) {\n        itemsPerRow = 5;\n    }\n    else if (props.containerWidth > WIDTH_LG) {\n        itemsPerRow = 4;\n    }\n    else if (props.containerWidth > WIDTH_MD) {\n        itemsPerRow = 3;\n    }\n    const showFileList = props.showSelectedFiles && !isNoFiles;\n    const numberOfFilesForRecovery = props.recoveredState\n        ? Object.keys(props.recoveredState.files).length\n        : null;\n    const numberOfGhosts = props.files\n        ? Object.keys(props.files).filter((fileID) => props.files[fileID].isGhost)\n            .length\n        : 0;\n    const renderRestoredText = () => {\n        if (numberOfGhosts > 0) {\n            return props.i18n('recoveredXFiles', {\n                smart_count: numberOfGhosts,\n            });\n        }\n        return props.i18n('recoveredAllFiles');\n    };\n    const dashboard = (\n    // biome-ignore lint/a11y/useAriaPropsSupportedByRole: ...\n    _jsxs(\"div\", { className: dashboardClassName, \"data-uppy-theme\": props.theme, \"data-uppy-num-acquirers\": props.acquirers.length, \"data-uppy-drag-drop-supported\": !props.disableLocalFiles && isDragDropSupported(), \"aria-hidden\": props.inline ? 'false' : props.isHidden, \"aria-disabled\": props.disabled, \"aria-label\": !props.inline\n            ? props.i18n('dashboardWindowTitle')\n            : props.i18n('dashboardTitle'), onPaste: props.handlePaste, onDragOver: props.handleDragOver, onDragLeave: props.handleDragLeave, onDrop: props.handleDrop, children: [_jsx(\"div\", { \"aria-hidden\": \"true\", className: \"uppy-Dashboard-overlay\", tabIndex: -1, onClick: props.handleClickOutside }), _jsxs(\"div\", { className: \"uppy-Dashboard-inner\", role: props.inline ? undefined : 'dialog', style: {\n                    width: props.inline && props.width ? props.width : '',\n                    height: props.inline && props.height ? props.height : '',\n                }, children: [!props.inline ? (_jsx(\"button\", { className: \"uppy-u-reset uppy-Dashboard-close\", type: \"button\", \"aria-label\": props.i18n('closeModal'), title: props.i18n('closeModal'), onClick: props.closeModal, children: _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u00D7\" }) })) : null, _jsxs(\"div\", { className: \"uppy-Dashboard-innerWrap\", children: [_jsx(\"div\", { className: \"uppy-Dashboard-dropFilesHereHint\", children: props.i18n('dropHint') }), showFileList && _jsx(PanelTopBar, { ...props }), numberOfFilesForRecovery != null && numberOfFilesForRecovery > 0 && (_jsxs(\"div\", { className: \"uppy-Dashboard-serviceMsg\", children: [_jsx(\"svg\", { className: \"uppy-Dashboard-serviceMsg-icon\", \"aria-hidden\": \"true\", focusable: \"false\", width: \"21\", height: \"16\", viewBox: \"0 0 24 19\", children: _jsxs(\"g\", { transform: \"translate(0 -1)\", fill: \"none\", fillRule: \"evenodd\", children: [_jsx(\"path\", { d: \"M12.857 1.43l10.234 17.056A1 1 0 0122.234 20H1.766a1 1 0 01-.857-1.514L11.143 1.429a1 1 0 011.714 0z\", fill: \"#FFD300\" }), _jsx(\"path\", { fill: \"#000\", d: \"M11 6h2l-.3 8h-1.4z\" }), _jsx(\"circle\", { fill: \"#000\", cx: \"12\", cy: \"17\", r: \"1\" })] }) }), _jsx(\"strong\", { className: \"uppy-Dashboard-serviceMsg-title\", children: props.i18n('sessionRestored') }), _jsx(\"div\", { className: \"uppy-Dashboard-serviceMsg-text\", children: renderRestoredText() })] })), showFileList ? (_jsx(FileList, { id: props.id, i18n: props.i18n, uppy: props.uppy, files: props.files, resumableUploads: props.resumableUploads, hideRetryButton: props.hideRetryButton, hidePauseResumeButton: props.hidePauseResumeButton, hideCancelButton: props.hideCancelButton, showLinkToFileUploadResult: props.showLinkToFileUploadResult, showRemoveButtonAfterComplete: props.showRemoveButtonAfterComplete, metaFields: props.metaFields, toggleFileCard: props.toggleFileCard, handleRequestThumbnail: props.handleRequestThumbnail, handleCancelThumbnail: props.handleCancelThumbnail, recoveredState: props.recoveredState, individualCancellation: props.individualCancellation, openFileEditor: props.openFileEditor, canEditFile: props.canEditFile, toggleAddFilesPanel: props.toggleAddFilesPanel, isSingleFile: isSingleFile, itemsPerRow: itemsPerRow, containerWidth: props.containerWidth, containerHeight: props.containerHeight })) : (_jsx(AddFiles, { i18n: props.i18n, i18nArray: props.i18nArray, acquirers: props.acquirers, handleInputChange: props.handleInputChange, maxNumberOfFiles: props.maxNumberOfFiles, allowedFileTypes: props.allowedFileTypes, showNativePhotoCameraButton: props.showNativePhotoCameraButton, showNativeVideoCameraButton: props.showNativeVideoCameraButton, nativeCameraFacingMode: props.nativeCameraFacingMode, showPanel: props.showPanel, activePickerPanel: props.activePickerPanel, disableLocalFiles: props.disableLocalFiles, fileManagerSelectionType: props.fileManagerSelectionType, note: props.note, proudlyDisplayPoweredByUppy: props.proudlyDisplayPoweredByUppy })), _jsx(Slide, { children: props.showAddFilesPanel ? (_jsx(AddFilesPanel, { ...props, isSizeMD: isSizeMD }, \"AddFiles\")) : null }), _jsx(Slide, { children: props.fileCardFor ? _jsx(FileCard, { ...props }, \"FileCard\") : null }), _jsx(Slide, { children: props.activePickerPanel ? (_jsx(PickerPanelContent, { ...props }, \"Picker\")) : null }), _jsx(Slide, { children: props.showFileEditor ? (_jsx(EditorPanel, { ...props }, \"Editor\")) : null }), _jsxs(\"div\", { className: \"uppy-Dashboard-progressindicators\", children: [!props.disableInformer && _jsx(Informer, { uppy: props.uppy }), !props.disableStatusBar && (_jsx(StatusBar, { uppy: props.uppy, i18n: props.i18n, hideProgressDetails: props.hideProgressDetails, hideUploadButton: props.hideUploadButton, hideRetryButton: props.hideRetryButton, hidePauseResumeButton: props.hidePauseResumeButton, hideCancelButton: props.hideCancelButton, hideAfterFinish: props.hideProgressAfterFinish, doneButtonHandler: props.doneButtonHandler })), !props.disableInformer && _jsx(Informer, { uppy: props.uppy }), props.progressindicators.map((target) => {\n                                        // TODO\n                                        // Here we're telling typescript all `this.type = 'progressindicator'` plugins inherit from `UIPlugin`\n                                        // This is factually true in Uppy right now, but maybe it doesn't have to be\n                                        return props.uppy.getPlugin(target.id).render(props.state);\n                                    })] })] })] })] }));\n    return dashboard;\n}\n", "import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"preact/jsx-runtime\";\nimport { Component, Fragment } from 'preact';\nclass AddFiles extends Component {\n    fileInput = null;\n    folderInput = null;\n    mobilePhotoFileInput = null;\n    mobileVideoFileInput = null;\n    triggerFileInputClick = () => {\n        this.fileInput?.click();\n    };\n    triggerFolderInputClick = () => {\n        this.folderInput?.click();\n    };\n    triggerVideoCameraInputClick = () => {\n        this.mobileVideoFileInput?.click();\n    };\n    triggerPhotoCameraInputClick = () => {\n        this.mobilePhotoFileInput?.click();\n    };\n    onFileInputChange = (event) => {\n        this.props.handleInputChange(event);\n        // Clear the input so that Chrome/Safari/etc. can detect file section when the same file is repeatedly selected\n        // (see https://github.com/transloadit/uppy/issues/768#issuecomment-2264902758)\n        event.currentTarget.value = '';\n    };\n    renderHiddenInput = (isFolder, refCallback) => {\n        return (_jsx(\"input\", { className: \"uppy-Dashboard-input\", hidden: true, \"aria-hidden\": \"true\", tabIndex: -1, \n            // @ts-expect-error default types don't yet know about the `webkitdirectory` property\n            webkitdirectory: isFolder, type: \"file\", name: \"files[]\", multiple: this.props.maxNumberOfFiles !== 1, onChange: this.onFileInputChange, accept: this.props.allowedFileTypes?.join(', '), ref: refCallback }));\n    };\n    renderHiddenCameraInput = (type, nativeCameraFacingMode, refCallback) => {\n        const typeToAccept = { photo: 'image/*', video: 'video/*' };\n        const accept = typeToAccept[type];\n        return (_jsx(\"input\", { className: \"uppy-Dashboard-input\", hidden: true, \"aria-hidden\": \"true\", tabIndex: -1, type: \"file\", name: `camera-${type}`, onChange: this.onFileInputChange, capture: nativeCameraFacingMode === '' ? 'environment' : nativeCameraFacingMode, accept: accept, ref: refCallback }));\n    };\n    renderMyDeviceAcquirer = () => {\n        return (_jsx(\"div\", { className: \"uppy-DashboardTab\", role: \"presentation\", \"data-uppy-acquirer-id\": \"MyDevice\", children: _jsxs(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-DashboardTab-btn\", role: \"tab\", tabIndex: 0, \"data-uppy-super-focusable\": true, onClick: this.triggerFileInputClick, children: [_jsx(\"div\", { className: \"uppy-DashboardTab-inner\", children: _jsx(\"svg\", { className: \"uppy-DashboardTab-iconMyDevice\", \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsx(\"path\", { d: \"M8.45 22.087l-1.305-6.674h17.678l-1.572 6.674H8.45zm4.975-12.412l1.083 1.765a.823.823 0 00.715.386h7.951V13.5H8.587V9.675h4.838zM26.043 13.5h-1.195v-2.598c0-.463-.336-.75-.798-.75h-8.356l-1.082-1.766A.823.823 0 0013.897 8H7.728c-.462 0-.815.256-.815.718V13.5h-.956a.97.97 0 00-.746.37.972.972 0 00-.19.81l1.724 8.565c.095.44.484.755.933.755H24c.44 0 .824-.3.929-.727l2.043-8.568a.972.972 0 00-.176-.825.967.967 0 00-.753-.38z\", fill: \"currentcolor\", \"fill-rule\": \"evenodd\" }) }) }), _jsx(\"div\", { className: \"uppy-DashboardTab-name\", children: this.props.i18n('myDevice') })] }) }));\n    };\n    renderPhotoCamera = () => {\n        return (_jsx(\"div\", { className: \"uppy-DashboardTab\", role: \"presentation\", \"data-uppy-acquirer-id\": \"MobilePhotoCamera\", children: _jsxs(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-DashboardTab-btn\", role: \"tab\", tabIndex: 0, \"data-uppy-super-focusable\": true, onClick: this.triggerPhotoCameraInputClick, children: [_jsx(\"div\", { className: \"uppy-DashboardTab-inner\", children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsx(\"path\", { d: \"M23.5 9.5c1.417 0 2.5 1.083 2.5 2.5v9.167c0 1.416-1.083 2.5-2.5 2.5h-15c-1.417 0-2.5-1.084-2.5-2.5V12c0-1.417 1.083-2.5 2.5-2.5h2.917l1.416-2.167C13 7.167 13.25 7 13.5 7h5c.25 0 .5.167.667.333L20.583 9.5H23.5zM16 11.417a4.706 4.706 0 00-4.75 4.75 4.704 4.704 0 004.75 4.75 4.703 4.703 0 004.75-4.75c0-2.663-2.09-4.75-4.75-4.75zm0 7.825c-1.744 0-3.076-1.332-3.076-3.074 0-1.745 1.333-3.077 3.076-3.077 1.744 0 3.074 1.333 3.074 3.076s-1.33 3.075-3.074 3.075z\", fill: \"#02B383\", \"fill-rule\": \"nonzero\" }) }) }), _jsx(\"div\", { className: \"uppy-DashboardTab-name\", children: this.props.i18n('takePictureBtn') })] }) }));\n    };\n    renderVideoCamera = () => {\n        return (_jsx(\"div\", { className: \"uppy-DashboardTab\", role: \"presentation\", \"data-uppy-acquirer-id\": \"MobileVideoCamera\", children: _jsxs(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-DashboardTab-btn\", role: \"tab\", tabIndex: 0, \"data-uppy-super-focusable\": true, onClick: this.triggerVideoCameraInputClick, children: [_jsx(\"div\", { className: \"uppy-DashboardTab-inner\", children: _jsx(\"svg\", { \"aria-hidden\": \"true\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsx(\"path\", { fill: \"#FF675E\", fillRule: \"nonzero\", d: \"m21.254 14.277 2.941-2.588c.797-.313 1.243.818 1.09 1.554-.01 2.094.02 4.189-.017 6.282-.126.915-1.145 1.08-1.58.34l-2.434-2.142c-.192.287-.504 1.305-.738.468-.104-1.293-.028-2.596-.05-3.894.047-.312.381.823.426 1.069.063-.384.206-.744.362-1.09zm-12.939-3.73c3.858.013 7.717-.025 11.574.02.912.129 1.492 1.237 1.351 2.217-.019 2.412.04 4.83-.03 7.239-.17 1.025-1.166 1.59-2.029 1.429-3.705-.012-7.41.025-11.114-.019-.913-.129-1.492-1.237-1.352-2.217.018-2.404-.036-4.813.029-7.214.136-.82.83-1.473 1.571-1.454z \" }) }) }), _jsx(\"div\", { className: \"uppy-DashboardTab-name\", children: this.props.i18n('recordVideoBtn') })] }) }));\n    };\n    renderBrowseButton = (text, onClickFn) => {\n        const numberOfAcquirers = this.props.acquirers.length;\n        return (_jsx(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-browse\", onClick: onClickFn, \"data-uppy-super-focusable\": numberOfAcquirers === 0, children: text }));\n    };\n    renderDropPasteBrowseTagline = (numberOfAcquirers) => {\n        const browseFiles = this.renderBrowseButton(this.props.i18n('browseFiles'), this.triggerFileInputClick);\n        const browseFolders = this.renderBrowseButton(this.props.i18n('browseFolders'), this.triggerFolderInputClick);\n        // in order to keep the i18n CamelCase and options lower (as are defaults) we will want to transform a lower\n        // to Camel\n        const lowerFMSelectionType = this.props.fileManagerSelectionType;\n        const camelFMSelectionType = lowerFMSelectionType.charAt(0).toUpperCase() +\n            lowerFMSelectionType.slice(1);\n        return (_jsx(\"div\", { class: \"uppy-Dashboard-AddFiles-title\", children: this.props.disableLocalFiles\n                ? this.props.i18n('importFiles')\n                : numberOfAcquirers > 0\n                    ? this.props.i18nArray(`dropPasteImport${camelFMSelectionType}`, {\n                        browseFiles,\n                        browseFolders,\n                        browse: browseFiles,\n                    })\n                    : this.props.i18nArray(`dropPaste${camelFMSelectionType}`, {\n                        browseFiles,\n                        browseFolders,\n                        browse: browseFiles,\n                    }) }));\n    };\n    [Symbol.for('uppy test: disable unused locale key warning')]() {\n        // Those are actually used in `renderDropPasteBrowseTagline` method.\n        this.props.i18nArray('dropPasteBoth');\n        this.props.i18nArray('dropPasteFiles');\n        this.props.i18nArray('dropPasteFolders');\n        this.props.i18nArray('dropPasteImportBoth');\n        this.props.i18nArray('dropPasteImportFiles');\n        this.props.i18nArray('dropPasteImportFolders');\n    }\n    renderAcquirer = (acquirer) => {\n        return (_jsx(\"div\", { className: \"uppy-DashboardTab\", role: \"presentation\", \"data-uppy-acquirer-id\": acquirer.id, children: _jsxs(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-DashboardTab-btn\", role: \"tab\", tabIndex: 0, \"data-cy\": acquirer.id, \"aria-controls\": `uppy-DashboardContent-panel--${acquirer.id}`, \"aria-selected\": this.props.activePickerPanel?.id === acquirer.id, \"data-uppy-super-focusable\": true, onClick: () => this.props.showPanel(acquirer.id), children: [_jsx(\"div\", { className: \"uppy-DashboardTab-inner\", children: acquirer.icon() }), _jsx(\"div\", { className: \"uppy-DashboardTab-name\", children: acquirer.name })] }) }));\n    };\n    renderAcquirers = (acquirers) => {\n        // Group last two buttons, so we don\u2019t end up with\n        // just one button on a new line\n        const acquirersWithoutLastTwo = [...acquirers];\n        const lastTwoAcquirers = acquirersWithoutLastTwo.splice(acquirers.length - 2, acquirers.length);\n        return (_jsxs(_Fragment, { children: [acquirersWithoutLastTwo.map((acquirer) => this.renderAcquirer(acquirer)), _jsx(\"span\", { role: \"presentation\", style: { 'white-space': 'nowrap' }, children: lastTwoAcquirers.map((acquirer) => this.renderAcquirer(acquirer)) })] }));\n    };\n    renderSourcesList = (acquirers, disableLocalFiles) => {\n        const { showNativePhotoCameraButton, showNativeVideoCameraButton } = this.props;\n        let list = [];\n        const myDeviceKey = 'myDevice';\n        if (!disableLocalFiles)\n            list.push({\n                key: myDeviceKey,\n                elements: this.renderMyDeviceAcquirer(),\n            });\n        if (showNativePhotoCameraButton)\n            list.push({\n                key: 'nativePhotoCameraButton',\n                elements: this.renderPhotoCamera(),\n            });\n        if (showNativeVideoCameraButton)\n            list.push({\n                key: 'nativePhotoCameraButton',\n                elements: this.renderVideoCamera(),\n            });\n        list.push(...acquirers.map((acquirer) => ({\n            key: acquirer.id,\n            elements: this.renderAcquirer(acquirer),\n        })));\n        // doesn't make sense to show only a lonely \"My Device\"\n        const hasOnlyMyDevice = list.length === 1 && list[0].key === myDeviceKey;\n        if (hasOnlyMyDevice)\n            list = [];\n        // Group last two buttons, so we don\u2019t end up with\n        // just one button on a new line\n        const listWithoutLastTwo = [...list];\n        const lastTwo = listWithoutLastTwo.splice(list.length - 2, list.length);\n        return (_jsxs(_Fragment, { children: [this.renderDropPasteBrowseTagline(list.length), _jsxs(\"div\", { className: \"uppy-Dashboard-AddFiles-list\", role: \"tablist\", children: [listWithoutLastTwo.map(({ key, elements }) => (_jsx(Fragment, { children: elements }, key))), _jsx(\"span\", { role: \"presentation\", style: { 'white-space': 'nowrap' }, children: lastTwo.map(({ key, elements }) => (_jsx(Fragment, { children: elements }, key))) })] })] }));\n    };\n    renderPoweredByUppy() {\n        const { i18nArray } = this.props;\n        const uppyBranding = (_jsxs(\"span\", { children: [_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon uppy-Dashboard-poweredByIcon\", width: \"11\", height: \"11\", viewBox: \"0 0 11 11\", children: _jsx(\"path\", { d: \"M7.365 10.5l-.01-4.045h2.612L5.5.806l-4.467 5.65h2.604l.01 4.044h3.718z\", fillRule: \"evenodd\" }) }), _jsx(\"span\", { className: \"uppy-Dashboard-poweredByUppy\", children: \"Uppy\" })] }));\n        const linkText = i18nArray('poweredBy', { uppy: uppyBranding });\n        return (_jsx(\"a\", { tabIndex: -1, href: \"https://uppy.io\", rel: \"noreferrer noopener\", target: \"_blank\", className: \"uppy-Dashboard-poweredBy\", children: linkText }));\n    }\n    render() {\n        const { showNativePhotoCameraButton, showNativeVideoCameraButton, nativeCameraFacingMode, } = this.props;\n        return (_jsxs(\"div\", { className: \"uppy-Dashboard-AddFiles\", children: [this.renderHiddenInput(false, (ref) => {\n                    this.fileInput = ref;\n                }), this.renderHiddenInput(true, (ref) => {\n                    this.folderInput = ref;\n                }), showNativePhotoCameraButton &&\n                    this.renderHiddenCameraInput('photo', nativeCameraFacingMode, (ref) => {\n                        this.mobilePhotoFileInput = ref;\n                    }), showNativeVideoCameraButton &&\n                    this.renderHiddenCameraInput('video', nativeCameraFacingMode, (ref) => {\n                        this.mobileVideoFileInput = ref;\n                    }), this.renderSourcesList(this.props.acquirers, this.props.disableLocalFiles), _jsxs(\"div\", { className: \"uppy-Dashboard-AddFiles-info\", children: [this.props.note && (_jsx(\"div\", { className: \"uppy-Dashboard-note\", children: this.props.note })), this.props.proudlyDisplayPoweredByUppy && this.renderPoweredByUppy()] })] }));\n    }\n}\nexport default AddFiles;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\nimport AddFiles from './AddFiles.js';\nconst AddFilesPanel = (props) => {\n    return (_jsxs(\"div\", { className: classNames('uppy-Dashboard-AddFilesPanel', props.className), \"data-uppy-panelType\": \"AddFiles\", \"aria-hidden\": !props.showAddFilesPanel, children: [_jsxs(\"div\", { className: \"uppy-DashboardContent-bar\", children: [_jsx(\"div\", { className: \"uppy-DashboardContent-title\", \n                        // biome-ignore lint/a11y/useSemanticElements: ...\n                        role: \"heading\", \"aria-level\": 1, children: props.i18n('addingMoreFiles') }), _jsx(\"button\", { className: \"uppy-DashboardContent-back\", type: \"button\", onClick: () => props.toggleAddFilesPanel(false), children: props.i18n('back') })] }), _jsx(AddFiles, { ...props })] }));\n};\nexport default AddFilesPanel;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\nfunction EditorPanel(props) {\n    const file = props.files[props.fileCardFor];\n    const handleCancel = () => {\n        props.uppy.emit('file-editor:cancel', file);\n        props.closeFileEditor();\n    };\n    return (_jsxs(\"div\", { className: classNames('uppy-DashboardContent-panel', props.className), role: \"tabpanel\", \"data-uppy-panelType\": \"FileEditor\", id: \"uppy-DashboardContent-panel--editor\", children: [_jsxs(\"div\", { className: \"uppy-DashboardContent-bar\", children: [_jsx(\"div\", { className: \"uppy-DashboardContent-title\", \n                        // biome-ignore lint/a11y/useSemanticElements: ...\n                        role: \"heading\", \"aria-level\": 1, children: props.i18nArray('editing', {\n                            file: (_jsx(\"span\", { className: \"uppy-DashboardContent-titleFile\", children: file.meta ? file.meta.name : file.name })),\n                        }) }), _jsx(\"button\", { className: \"uppy-DashboardContent-back\", type: \"button\", onClick: handleCancel, children: props.i18n('cancel') }), _jsx(\"button\", { className: \"uppy-DashboardContent-save\", type: \"button\", onClick: props.saveFileEditor, children: props.i18n('save') })] }), _jsx(\"div\", { className: \"uppy-DashboardContent-panelBody\", children: props.editors.map((target) => {\n                    return props.uppy.getPlugin(target.id).render(props.state);\n                }) })] }));\n}\nexport default EditorPanel;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\nimport { nanoid } from 'nanoid/non-secure';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\nimport getFileTypeIcon from '../../utils/getFileTypeIcon.js';\nimport ignoreEvent from '../../utils/ignoreEvent.js';\nimport FilePreview from '../FilePreview.js';\nimport RenderMetaFields from './RenderMetaFields.js';\nexport default function FileCard(props) {\n    const { files, fileCardFor, toggleFileCard, saveFileCard, metaFields, requiredMetaFields, openFileEditor, i18n, i18nArray, className, canEditFile, } = props;\n    const getMetaFields = () => {\n        return typeof metaFields === 'function'\n            ? metaFields(files[fileCardFor])\n            : metaFields;\n    };\n    const file = files[fileCardFor];\n    const computedMetaFields = getMetaFields() ?? [];\n    const showEditButton = canEditFile(file);\n    const storedMetaData = {};\n    computedMetaFields.forEach((field) => {\n        storedMetaData[field.id] = file.meta[field.id] ?? '';\n    });\n    const [formState, setFormState] = useState(storedMetaData);\n    const handleSave = useCallback((ev) => {\n        ev.preventDefault();\n        saveFileCard(formState, fileCardFor);\n    }, [saveFileCard, formState, fileCardFor]);\n    const updateMeta = (newVal, name) => {\n        setFormState({\n            ...formState,\n            [name]: newVal,\n        });\n    };\n    const handleCancel = () => {\n        toggleFileCard(false);\n    };\n    const [form] = useState(() => {\n        const formEl = document.createElement('form');\n        formEl.setAttribute('tabindex', '-1');\n        formEl.id = nanoid();\n        return formEl;\n    });\n    // We need to know where Uppy is being rendered\n    const domRef = useRef(null);\n    useEffect(() => {\n        /**\n         * Use the \"rootNode\" of whereever Uppy is rendered, falling back\n         * to `window.document` if domRef isn't initialized for some reason\n         */\n        const rootNode = domRef.current?.getRootNode() ?? document;\n        /**\n         * This is the case for the Light DOM and <iframes>.\n         * In these scenarios, we don't want to append a child to an\n         * <html> element, but to the <body>\n         */\n        if (rootNode instanceof Document) {\n            rootNode.body.appendChild(form);\n        }\n        // This is the case for the Shadow DOM\n        else if (rootNode instanceof ShadowRoot) {\n            rootNode.appendChild(form);\n        }\n        // Everything else (realistically there isn't)\n        else {\n            rootNode.appendChild(form);\n        }\n        form.addEventListener('submit', handleSave);\n        return () => {\n            form.removeEventListener('submit', handleSave);\n            // check if form is still in the DOM before removing\n            if (form.parentNode) {\n                form.parentNode.removeChild(form);\n            }\n        };\n    }, [form, handleSave]);\n    return (\n    // biome-ignore lint/a11y/noStaticElementInteractions: ...\n    _jsxs(\"div\", { className: classNames('uppy-Dashboard-FileCard', className), \"data-uppy-panelType\": \"FileCard\", onDragOver: ignoreEvent, onDragLeave: ignoreEvent, onDrop: ignoreEvent, onPaste: ignoreEvent, ref: domRef, children: [_jsxs(\"div\", { className: \"uppy-DashboardContent-bar\", children: [_jsx(\"div\", { className: \"uppy-DashboardContent-title\", \n                        // biome-ignore lint/a11y/useSemanticElements: ...\n                        role: \"heading\", \"aria-level\": 1, children: i18nArray('editing', {\n                            file: (_jsx(\"span\", { className: \"uppy-DashboardContent-titleFile\", children: file.meta ? file.meta.name : file.name })),\n                        }) }), _jsx(\"button\", { className: \"uppy-DashboardContent-back\", type: \"button\", form: form.id, title: i18n('finishEditingFile'), onClick: handleCancel, children: i18n('cancel') })] }), _jsxs(\"div\", { className: \"uppy-Dashboard-FileCard-inner\", children: [_jsxs(\"div\", { className: \"uppy-Dashboard-FileCard-preview\", style: { backgroundColor: getFileTypeIcon(file.type).color }, children: [_jsx(FilePreview, { file: file }), showEditButton && (_jsx(\"button\", { type: \"button\", className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-FileCard-edit\", onClick: (event) => {\n                                    // When opening the image editor we want to save any meta fields changes.\n                                    // Otherwise it's confusing for the user to click save in the editor,\n                                    // but the changes here are discarded. This bypasses validation,\n                                    // but we are okay with that.\n                                    handleSave(event);\n                                    openFileEditor(file);\n                                }, children: i18n('editImage') }))] }), _jsx(\"div\", { className: \"uppy-Dashboard-FileCard-info\", children: _jsx(RenderMetaFields, { computedMetaFields: computedMetaFields, requiredMetaFields: requiredMetaFields, updateMeta: updateMeta, form: form, formState: formState }) }), _jsxs(\"div\", { className: \"uppy-Dashboard-FileCard-actions\", children: [_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-Dashboard-FileCard-actionsBtn\", \n                                // If `form` attribute is supported, we want a submit button to trigger the form validation.\n                                // Otherwise, fallback to a classic button with a onClick event handler.\n                                type: \"submit\", form: form.id, children: i18n('saveChanges') }), _jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-c-btn-link uppy-Dashboard-FileCard-actionsBtn\", type: \"button\", onClick: handleCancel, form: form.id, children: i18n('cancel') })] })] })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nfunction iconImage() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"25\", height: \"25\", viewBox: \"0 0 25 25\", children: _jsxs(\"g\", { fill: \"#686DE0\", fillRule: \"evenodd\", children: [_jsx(\"path\", { d: \"M5 7v10h15V7H5zm0-1h15a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1z\", fillRule: \"nonzero\" }), _jsx(\"path\", { d: \"M6.35 17.172l4.994-5.026a.5.5 0 0 1 .707 0l2.16 2.16 3.505-3.505a.5.5 0 0 1 .707 0l2.336 2.31-.707.72-1.983-1.97-3.505 3.505a.5.5 0 0 1-.707 0l-2.16-2.159-3.938 3.939-1.409.026z\", fillRule: \"nonzero\" }), _jsx(\"circle\", { cx: \"7.5\", cy: \"9.5\", r: \"1.5\" })] }) }));\n}\nfunction iconAudio() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"25\", height: \"25\", viewBox: \"0 0 25 25\", children: _jsx(\"path\", { d: \"M9.5 18.64c0 1.14-1.145 2-2.5 2s-2.5-.86-2.5-2c0-1.14 1.145-2 2.5-2 .557 0 1.079.145 1.5.396V7.25a.5.5 0 0 1 .379-.485l9-2.25A.5.5 0 0 1 18.5 5v11.64c0 1.14-1.145 2-2.5 2s-2.5-.86-2.5-2c0-1.14 1.145-2 2.5-2 .557 0 1.079.145 1.5.396V8.67l-8 2v7.97zm8-11v-2l-8 2v2l8-2zM7 19.64c.855 0 1.5-.484 1.5-1s-.645-1-1.5-1-1.5.484-1.5 1 .645 1 1.5 1zm9-2c.855 0 1.5-.484 1.5-1s-.645-1-1.5-1-1.5.484-1.5 1 .645 1 1.5 1z\", fill: \"#049BCF\", fillRule: \"nonzero\" }) }));\n}\nfunction iconVideo() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"25\", height: \"25\", viewBox: \"0 0 25 25\", children: _jsx(\"path\", { d: \"M16 11.834l4.486-2.691A1 1 0 0 1 22 10v6a1 1 0 0 1-1.514.857L16 14.167V17a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v2.834zM15 9H5v8h10V9zm1 4l5 3v-6l-5 3z\", fill: \"#19AF67\", fillRule: \"nonzero\" }) }));\n}\nfunction iconPDF() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"25\", height: \"25\", viewBox: \"0 0 25 25\", children: _jsx(\"path\", { d: \"M9.766 8.295c-.691-1.843-.539-3.401.747-3.726 1.643-.414 2.505.938 2.39 3.299-.039.79-.194 1.662-.537 3.148.324.49.66.967 1.055 1.51.17.231.382.488.629.757 1.866-.128 3.653.114 4.918.655 1.487.635 2.192 1.685 1.614 2.84-.566 1.133-1.839 1.084-3.416.249-1.141-.604-2.457-1.634-3.51-2.707a13.467 13.467 0 0 0-2.238.426c-1.392 4.051-4.534 6.453-5.707 4.572-.986-1.58 1.38-4.206 4.914-5.375.097-.322.185-.656.264-1.001.08-.353.306-1.31.407-1.737-.678-1.059-1.2-2.031-1.53-2.91zm2.098 4.87c-.033.144-.068.287-.104.427l.033-.01-.012.038a14.065 14.065 0 0 1 1.02-.197l-.032-.033.052-.004a7.902 7.902 0 0 1-.208-.271c-.197-.27-.38-.526-.555-.775l-.006.028-.002-.003c-.076.323-.148.632-.186.8zm5.77 2.978c1.143.605 1.832.632 2.054.187.26-.519-.087-1.034-1.113-1.473-.911-.39-2.175-.608-3.55-.608.845.766 1.787 1.459 2.609 1.894zM6.559 18.789c.14.223.693.16 1.425-.413.827-.648 1.61-1.747 2.208-3.206-2.563 1.064-4.102 2.867-3.633 3.62zm5.345-10.97c.088-1.793-.351-2.48-1.146-2.28-.473.119-.564 1.05-.056 2.405.213.566.52 1.188.908 1.859.18-.858.268-1.453.294-1.984z\", fill: \"#E2514A\", fillRule: \"nonzero\" }) }));\n}\nfunction iconArchive() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"25\", height: \"25\", viewBox: \"0 0 25 25\", children: _jsx(\"path\", { d: \"M10.45 2.05h1.05a.5.5 0 0 1 .5.5v.024a.5.5 0 0 1-.5.5h-1.05a.5.5 0 0 1-.5-.5V2.55a.5.5 0 0 1 .5-.5zm2.05 1.024h1.05a.5.5 0 0 1 .5.5V3.6a.5.5 0 0 1-.5.5H12.5a.5.5 0 0 1-.5-.5v-.025a.5.5 0 0 1 .5-.5v-.001zM10.45 0h1.05a.5.5 0 0 1 .5.5v.025a.5.5 0 0 1-.5.5h-1.05a.5.5 0 0 1-.5-.5V.5a.5.5 0 0 1 .5-.5zm2.05 1.025h1.05a.5.5 0 0 1 .5.5v.024a.5.5 0 0 1-.5.5H12.5a.5.5 0 0 1-.5-.5v-.024a.5.5 0 0 1 .5-.5zm-2.05 3.074h1.05a.5.5 0 0 1 .5.5v.025a.5.5 0 0 1-.5.5h-1.05a.5.5 0 0 1-.5-.5v-.025a.5.5 0 0 1 .5-.5zm2.05 1.025h1.05a.5.5 0 0 1 .5.5v.024a.5.5 0 0 1-.5.5H12.5a.5.5 0 0 1-.5-.5v-.024a.5.5 0 0 1 .5-.5zm-2.05 1.024h1.05a.5.5 0 0 1 .5.5v.025a.5.5 0 0 1-.5.5h-1.05a.5.5 0 0 1-.5-.5v-.025a.5.5 0 0 1 .5-.5zm2.05 1.025h1.05a.5.5 0 0 1 .5.5v.025a.5.5 0 0 1-.5.5H12.5a.5.5 0 0 1-.5-.5v-.025a.5.5 0 0 1 .5-.5zm-2.05 1.025h1.05a.5.5 0 0 1 .5.5v.025a.5.5 0 0 1-.5.5h-1.05a.5.5 0 0 1-.5-.5v-.025a.5.5 0 0 1 .5-.5zm2.05 1.025h1.05a.5.5 0 0 1 .5.5v.024a.5.5 0 0 1-.5.5H12.5a.5.5 0 0 1-.5-.5v-.024a.5.5 0 0 1 .5-.5zm-1.656 3.074l-.82 5.946c.52.302 1.174.458 1.976.458.803 0 1.455-.156 1.975-.458l-.82-5.946h-2.311zm0-1.025h2.312c.512 0 .946.378 1.015.885l.82 5.946c.056.412-.142.817-.501 1.026-.686.398-1.515.597-2.49.597-.974 0-1.804-.199-2.49-.597a1.025 1.025 0 0 1-.5-1.026l.819-5.946c.07-.507.503-.885 1.015-.885zm.545 6.6a.5.5 0 0 1-.397-.561l.143-.999a.5.5 0 0 1 .495-.429h.74a.5.5 0 0 1 .495.43l.143.998a.5.5 0 0 1-.397.561c-.404.08-.819.08-1.222 0z\", fill: \"#00C469\", fillRule: \"nonzero\" }) }));\n}\nfunction iconFile() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"25\", height: \"25\", viewBox: \"0 0 25 25\", children: _jsxs(\"g\", { fill: \"#A7AFB7\", fillRule: \"nonzero\", children: [_jsx(\"path\", { d: \"M5.5 22a.5.5 0 0 1-.5-.5v-18a.5.5 0 0 1 .5-.5h10.719a.5.5 0 0 1 .367.16l3.281 3.556a.5.5 0 0 1 .133.339V21.5a.5.5 0 0 1-.5.5h-14zm.5-1h13V7.25L16 4H6v17z\" }), _jsx(\"path\", { d: \"M15 4v3a1 1 0 0 0 1 1h3V7h-3V4h-1z\" })] }) }));\n}\nfunction iconText() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"25\", height: \"25\", viewBox: \"0 0 25 25\", children: _jsx(\"path\", { d: \"M4.5 7h13a.5.5 0 1 1 0 1h-13a.5.5 0 0 1 0-1zm0 3h15a.5.5 0 1 1 0 1h-15a.5.5 0 1 1 0-1zm0 3h15a.5.5 0 1 1 0 1h-15a.5.5 0 1 1 0-1zm0 3h10a.5.5 0 1 1 0 1h-10a.5.5 0 1 1 0-1z\", fill: \"#5A5E69\", fillRule: \"nonzero\" }) }));\n}\nexport default function getIconByMime(fileType) {\n    const defaultChoice = {\n        color: '#838999',\n        icon: iconFile(),\n    };\n    if (!fileType)\n        return defaultChoice;\n    const fileTypeGeneral = fileType.split('/')[0];\n    const fileTypeSpecific = fileType.split('/')[1];\n    // Text\n    if (fileTypeGeneral === 'text') {\n        return {\n            color: '#5a5e69',\n            icon: iconText(),\n        };\n    }\n    // Image\n    if (fileTypeGeneral === 'image') {\n        return {\n            color: '#686de0',\n            icon: iconImage(),\n        };\n    }\n    // Audio\n    if (fileTypeGeneral === 'audio') {\n        return {\n            color: '#068dbb',\n            icon: iconAudio(),\n        };\n    }\n    // Video\n    if (fileTypeGeneral === 'video') {\n        return {\n            color: '#19af67',\n            icon: iconVideo(),\n        };\n    }\n    // PDF\n    if (fileTypeGeneral === 'application' && fileTypeSpecific === 'pdf') {\n        return {\n            color: '#e25149',\n            icon: iconPDF(),\n        };\n    }\n    // Archive\n    const archiveTypes = [\n        'zip',\n        'x-7z-compressed',\n        'x-zip-compressed',\n        'x-rar-compressed',\n        'x-tar',\n        'x-gzip',\n        'x-apple-diskimage',\n    ];\n    if (fileTypeGeneral === 'application' &&\n        archiveTypes.indexOf(fileTypeSpecific) !== -1) {\n        return {\n            color: '#00C469',\n            icon: iconArchive(),\n        };\n    }\n    return defaultChoice;\n}\n", "// ignore drop/paste events if they are not in input or textarea \u2014\n// otherwise when Url plugin adds drop/paste listeners to this.el,\n// draging UI elements or pasting anything into any field triggers those events \u2014\n// Url treats them as URLs that need to be imported\nfunction ignoreEvent(ev) {\n    const { tagName } = ev.target;\n    if (tagName === 'INPUT' || tagName === 'TEXTAREA') {\n        ev.stopPropagation();\n        return;\n    }\n    ev.preventDefault();\n    ev.stopPropagation();\n}\nexport default ignoreEvent;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport getFileTypeIcon from '../utils/getFileTypeIcon.js';\nexport default function FilePreview(props) {\n    const { file } = props;\n    if (file.preview) {\n        return (_jsx(\"img\", { draggable: false, className: \"uppy-Dashboard-Item-previewImg\", alt: file.name, src: file.preview }));\n    }\n    const { color, icon } = getFileTypeIcon(file.type);\n    return (_jsxs(\"div\", { className: \"uppy-Dashboard-Item-previewIconWrap\", children: [_jsx(\"span\", { className: \"uppy-Dashboard-Item-previewIcon\", style: { color }, children: icon }), _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-Dashboard-Item-previewIconBg\", width: \"58\", height: \"76\", viewBox: \"0 0 58 76\", children: _jsx(\"rect\", { fill: \"#FFF\", width: \"58\", height: \"76\", rx: \"3\", fillRule: \"evenodd\" }) })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { h } from 'preact';\nexport default function RenderMetaFields(props) {\n    const { computedMetaFields, requiredMetaFields, updateMeta, form, formState, } = props;\n    const fieldCSSClasses = {\n        text: 'uppy-u-reset uppy-c-textInput uppy-Dashboard-FileCard-input',\n    };\n    return computedMetaFields.map((field) => {\n        const id = `uppy-Dashboard-FileCard-input-${field.id}`;\n        const required = requiredMetaFields.includes(field.id);\n        return (_jsxs(\"fieldset\", { className: \"uppy-Dashboard-FileCard-fieldset\", children: [_jsx(\"label\", { className: \"uppy-Dashboard-FileCard-label\", htmlFor: id, children: field.name }), field.render !== undefined ? (field.render({\n                    value: formState[field.id],\n                    onChange: (newVal) => updateMeta(newVal, field.id),\n                    fieldCSSClasses,\n                    required,\n                    form: form.id,\n                }, h)) : (_jsx(\"input\", { className: fieldCSSClasses.text, id: id, form: form.id, type: field.type || 'text', required: required, value: formState[field.id], placeholder: field.placeholder, onInput: (ev) => updateMeta(ev.target.value, field.id), \"data-uppy-super-focusable\": true }))] }, field.id));\n    });\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { Component, h } from 'preact';\nimport { shallowEqualObjects } from 'shallow-equal';\nimport Buttons from './Buttons/index.js';\nimport FileInfo from './FileInfo/index.js';\nimport FilePreviewAndLink from './FilePreviewAndLink/index.js';\nimport FileProgress from './FileProgress/index.js';\nexport default class FileItem extends Component {\n    componentDidMount() {\n        const { file } = this.props;\n        if (!file.preview) {\n            this.props.handleRequestThumbnail(file);\n        }\n    }\n    shouldComponentUpdate(nextProps) {\n        return !shallowEqualObjects(this.props, nextProps);\n    }\n    // VirtualList mounts FileItems again and they emit `thumbnail:request`\n    // Otherwise thumbnails are broken or missing after Golden Retriever restores files\n    componentDidUpdate() {\n        const { file } = this.props;\n        if (!file.preview) {\n            this.props.handleRequestThumbnail(file);\n        }\n    }\n    componentWillUnmount() {\n        const { file } = this.props;\n        if (!file.preview) {\n            this.props.handleCancelThumbnail(file);\n        }\n    }\n    render() {\n        const { file } = this.props;\n        const isProcessing = file.progress.preprocess || file.progress.postprocess;\n        const isUploaded = !!file.progress.uploadComplete && !isProcessing && !file.error;\n        const uploadInProgressOrComplete = !!file.progress.uploadStarted || !!isProcessing;\n        const uploadInProgress = (file.progress.uploadStarted && !file.progress.uploadComplete) ||\n            isProcessing;\n        const error = file.error || false;\n        // File that Golden Retriever was able to partly restore (only meta, not blob),\n        // users still need to re-add it, so it\u2019s a ghost\n        const { isGhost } = file;\n        let showRemoveButton = this.props.individualCancellation\n            ? !isUploaded\n            : !uploadInProgress && !isUploaded;\n        if (isUploaded && this.props.showRemoveButtonAfterComplete) {\n            showRemoveButton = true;\n        }\n        const dashboardItemClass = classNames({\n            'uppy-Dashboard-Item': true,\n            'is-inprogress': uploadInProgress && !this.props.recoveredState,\n            'is-processing': isProcessing,\n            'is-complete': isUploaded,\n            'is-error': !!error,\n            'is-resumable': this.props.resumableUploads,\n            'is-noIndividualCancellation': !this.props.individualCancellation,\n            'is-ghost': isGhost,\n        });\n        return (_jsxs(\"div\", { className: dashboardItemClass, id: `uppy_${file.id}`, role: this.props.role, children: [_jsxs(\"div\", { className: \"uppy-Dashboard-Item-preview\", children: [_jsx(FilePreviewAndLink, { file: file, showLinkToFileUploadResult: this.props.showLinkToFileUploadResult, i18n: this.props.i18n, toggleFileCard: this.props.toggleFileCard, metaFields: this.props.metaFields }), _jsx(FileProgress, { uppy: this.props.uppy, file: file, error: error, isUploaded: isUploaded, hideRetryButton: this.props.hideRetryButton, hideCancelButton: this.props.hideCancelButton, hidePauseResumeButton: this.props.hidePauseResumeButton, recoveredState: this.props.recoveredState, resumableUploads: this.props.resumableUploads, individualCancellation: this.props.individualCancellation, i18n: this.props.i18n })] }), _jsxs(\"div\", { className: \"uppy-Dashboard-Item-fileInfoAndButtons\", children: [_jsx(FileInfo, { file: file, containerWidth: this.props.containerWidth, containerHeight: this.props.containerHeight, i18n: this.props.i18n, toggleAddFilesPanel: this.props.toggleAddFilesPanel, toggleFileCard: this.props.toggleFileCard, metaFields: this.props.metaFields, isSingleFile: this.props.isSingleFile }), _jsx(Buttons, { file: file, metaFields: this.props.metaFields, showLinkToFileUploadResult: this.props.showLinkToFileUploadResult, showRemoveButton: showRemoveButton, canEditFile: this.props.canEditFile, uploadInProgressOrComplete: uploadInProgressOrComplete, toggleFileCard: this.props.toggleFileCard, openFileEditor: this.props.openFileEditor, uppy: this.props.uppy, i18n: this.props.i18n })] })] }));\n    }\n}\n", "export type validArrayValue = any[] | null | undefined;\n\nexport default function shallowEqualArrays(\n  arrA: validArrayValue,\n  arrB: validArrayValue\n): boolean {\n  if (arrA === arrB) {\n    return true;\n  }\n\n  if (!arrA || !arrB) {\n    return false;\n  }\n\n  const len = arrA.length;\n\n  if (arrB.length !== len) {\n    return false;\n  }\n\n  for (let i = 0; i < len; i++) {\n    if (arrA[i] !== arrB[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n", "export type validObjectValue = Record<string, any> | null | undefined;\n\nexport default function shallowEqualObjects<T>(\n  objA: validObjectValue,\n  objB: validObjectValue\n): boolean {\n  if (objA === objB) {\n    return true;\n  }\n\n  if (!objA || !objB) {\n    return false;\n  }\n\n  const aKeys = Object.keys(objA);\n  const bKeys = Object.keys(objB);\n  const len = aKeys.length;\n\n  if (bKeys.length !== len) {\n    return false;\n  }\n\n  for (let i = 0; i < len; i++) {\n    const key = aKeys[i];\n\n    if (\n      objA[key] !== objB[key] ||\n      !Object.prototype.hasOwnProperty.call(objB, key)\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n", "import shallowEqualArrays from \"./arrays\";\nimport shallowEqualObjects from \"./objects\";\n\ntype Comparable = Record<string, any> | any[] | null | undefined;\n\nfunction shallowEqual<T extends Comparable>(a: T, b: T): boolean {\n  const aIsArr = Array.isArray(a);\n  const bIsArr = Array.isArray(b);\n\n  if (aIsArr !== bIsArr) {\n    return false;\n  }\n\n  if (aIsArr && bIsArr) {\n    return shallowEqualArrays(a, b);\n  }\n\n  return shallowEqualObjects(a, b);\n}\n\nexport { shallowEqual, shallowEqualObjects, shallowEqualArrays };\n", "/**\n * Copies text to clipboard by creating an almost invisible textarea,\n * adding text there, then running execCommand('copy').\n * Falls back to prompt() when the easy way fails (hello, Safari!)\n * From http://stackoverflow.com/a/30810322\n *\n * @param {string} textToCopy\n * @param {string} fallbackString\n * @returns {Promise}\n */\nexport default function copyToClipboard(textToCopy, fallbackString = 'Copy the URL below') {\n    return new Promise((resolve) => {\n        const textArea = document.createElement('textarea');\n        textArea.setAttribute('style', {\n            position: 'fixed',\n            top: 0,\n            left: 0,\n            width: '2em',\n            height: '2em',\n            padding: 0,\n            border: 'none',\n            outline: 'none',\n            boxShadow: 'none',\n            background: 'transparent',\n        });\n        textArea.value = textToCopy;\n        document.body.appendChild(textArea);\n        textArea.select();\n        const magicCopyFailed = () => {\n            document.body.removeChild(textArea);\n            window.prompt(fallbackString, textToCopy);\n            resolve();\n        };\n        try {\n            const successful = document.execCommand('copy');\n            if (!successful) {\n                return magicCopyFailed();\n            }\n            document.body.removeChild(textArea);\n            return resolve();\n        }\n        catch (_err) {\n            document.body.removeChild(textArea);\n            return magicCopyFailed();\n        }\n    });\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport copyToClipboard from '../../../utils/copyToClipboard.js';\nfunction EditButton({ file, uploadInProgressOrComplete, metaFields, canEditFile, i18n, onClick, }) {\n    if ((!uploadInProgressOrComplete && metaFields && metaFields.length > 0) ||\n        (!uploadInProgressOrComplete && canEditFile(file))) {\n        return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-Item-action uppy-Dashboard-Item-action--edit\", type: \"button\", \"aria-label\": i18n('editFileWithFilename', { file: file.meta.name }), title: i18n('editFileWithFilename', { file: file.meta.name }), onClick: () => onClick(), children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"14\", height: \"14\", viewBox: \"0 0 14 14\", children: _jsxs(\"g\", { fillRule: \"evenodd\", children: [_jsx(\"path\", { d: \"M1.5 10.793h2.793A1 1 0 0 0 5 10.5L11.5 4a1 1 0 0 0 0-1.414L9.707.793a1 1 0 0 0-1.414 0l-6.5 6.5A1 1 0 0 0 1.5 8v2.793zm1-1V8L9 1.5l1.793 1.793-6.5 6.5H2.5z\", fillRule: \"nonzero\" }), _jsx(\"rect\", { x: \"1\", y: \"12.293\", width: \"11\", height: \"1\", rx: \".5\" }), _jsx(\"path\", { fillRule: \"nonzero\", d: \"M6.793 2.5L9.5 5.207l.707-.707L7.5 1.793z\" })] }) }) }));\n    }\n    return null;\n}\nfunction RemoveButton({ i18n, onClick, file, }) {\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-Dashboard-Item-action uppy-Dashboard-Item-action--remove\", type: \"button\", \"aria-label\": i18n('removeFile', { file: file.meta.name }), title: i18n('removeFile', { file: file.meta.name }), onClick: () => onClick(), children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"18\", height: \"18\", viewBox: \"0 0 18 18\", children: [_jsx(\"path\", { d: \"M9 0C4.034 0 0 4.034 0 9s4.034 9 9 9 9-4.034 9-9-4.034-9-9-9z\" }), _jsx(\"path\", { fill: \"#FFF\", d: \"M13 12.222l-.778.778L9 9.778 5.778 13 5 12.222 8.222 9 5 5.778 5.778 5 9 8.222 12.222 5l.778.778L9.778 9z\" })] }) }));\n}\nfunction CopyLinkButton({ file, uppy, i18n, }) {\n    const copyLinkToClipboard = (event) => {\n        copyToClipboard(file.uploadURL, i18n('copyLinkToClipboardFallback'))\n            .then(() => {\n            uppy.log('Link copied to clipboard.');\n            uppy.info(i18n('copyLinkToClipboardSuccess'), 'info', 3000);\n        })\n            .catch(uppy.log)\n            // avoid losing focus\n            .then(() => event.target.focus({ preventScroll: true }));\n    };\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-Dashboard-Item-action uppy-Dashboard-Item-action--copyLink\", type: \"button\", \"aria-label\": i18n('copyLink'), title: i18n('copyLink'), onClick: (event) => copyLinkToClipboard(event), children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"14\", height: \"14\", viewBox: \"0 0 14 12\", children: _jsx(\"path\", { d: \"M7.94 7.703a2.613 2.613 0 0 1-.626 2.681l-.852.851a2.597 2.597 0 0 1-1.849.766A2.616 2.616 0 0 1 2.764 7.54l.852-.852a2.596 2.596 0 0 1 2.69-.625L5.267 7.099a1.44 1.44 0 0 0-.833.407l-.852.851a1.458 1.458 0 0 0 1.03 2.486c.39 0 .755-.152 1.03-.426l.852-.852c.231-.231.363-.522.406-.824l1.04-1.038zm4.295-5.937A2.596 2.596 0 0 0 10.387 1c-.698 0-1.355.272-1.849.766l-.852.851a2.614 2.614 0 0 0-.624 2.688l1.036-1.036c.041-.304.173-.6.407-.833l.852-.852c.275-.275.64-.426 1.03-.426a1.458 1.458 0 0 1 1.03 2.486l-.852.851a1.442 1.442 0 0 1-.824.406l-1.04 1.04a2.596 2.596 0 0 0 2.683-.628l.851-.85a2.616 2.616 0 0 0 0-3.697zm-6.88 6.883a.577.577 0 0 0 .82 0l3.474-3.474a.579.579 0 1 0-.819-.82L5.355 7.83a.579.579 0 0 0 0 .819z\" }) }) }));\n}\nexport default function Buttons(props) {\n    const { uppy, file, uploadInProgressOrComplete, canEditFile, metaFields, showLinkToFileUploadResult, showRemoveButton, i18n, toggleFileCard, openFileEditor, } = props;\n    const editAction = () => {\n        if (metaFields && metaFields.length > 0) {\n            toggleFileCard(true, file.id);\n        }\n        else {\n            openFileEditor(file);\n        }\n    };\n    return (_jsxs(\"div\", { className: \"uppy-Dashboard-Item-actionWrapper\", children: [_jsx(EditButton, { i18n: i18n, file: file, uploadInProgressOrComplete: uploadInProgressOrComplete, canEditFile: canEditFile, metaFields: metaFields, onClick: editAction }), showLinkToFileUploadResult && file.uploadURL ? (_jsx(CopyLinkButton, { file: file, uppy: uppy, i18n: i18n })) : null, showRemoveButton ? (_jsx(RemoveButton, { i18n: i18n, file: file, onClick: () => uppy.removeFile(file.id) })) : null] }));\n}\n", "import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport prettierBytes from '@transloadit/prettier-bytes';\nimport { truncateString } from '@uppy/utils';\nimport MetaErrorMessage from '../MetaErrorMessage.js';\nconst renderFileName = (props) => {\n    const { author, name } = props.file.meta;\n    function getMaxNameLength() {\n        if (props.isSingleFile && props.containerHeight >= 350) {\n            return 90;\n        }\n        if (props.containerWidth <= 352) {\n            return 35;\n        }\n        if (props.containerWidth <= 576) {\n            return 60;\n        }\n        // When `author` is present, we want to make sure\n        // the file name fits on one line so we can place\n        // the author on the second line.\n        return author ? 20 : 30;\n    }\n    return (_jsx(\"div\", { className: \"uppy-Dashboard-Item-name\", title: name, children: truncateString(name, getMaxNameLength()) }));\n};\nconst renderAuthor = (props) => {\n    const { author } = props.file.meta;\n    const providerName = 'remote' in props.file ? props.file.remote?.providerName : undefined;\n    const dot = `\\u00B7`;\n    if (!author) {\n        return null;\n    }\n    return (_jsxs(\"div\", { className: \"uppy-Dashboard-Item-author\", children: [_jsx(\"a\", { href: `${author.url}?utm_source=Companion&utm_medium=referral`, target: \"_blank\", rel: \"noopener noreferrer\", children: truncateString(author.name, 13) }), providerName ? (_jsxs(_Fragment, { children: [` ${dot} `, providerName, ` ${dot} `] })) : null] }));\n};\nconst renderFileSize = (props) => props.file.size && (_jsx(\"div\", { className: \"uppy-Dashboard-Item-statusSize\", children: prettierBytes(props.file.size) }));\nconst ReSelectButton = (props) => props.file.isGhost && (_jsxs(\"span\", { children: [' \\u2022 ', _jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-Item-reSelect\", type: \"button\", onClick: () => props.toggleAddFilesPanel(true), children: props.i18n('reSelect') })] }));\nconst ErrorButton = ({ file, onClick, }) => {\n    if (file.error) {\n        return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-Item-errorDetails\", \"aria-label\": file.error, \"data-microtip-position\": \"bottom\", \"data-microtip-size\": \"medium\", onClick: onClick, type: \"button\", children: \"?\" }));\n    }\n    return null;\n};\nexport default function FileInfo(props) {\n    const { file, i18n, toggleFileCard, metaFields, toggleAddFilesPanel, isSingleFile, containerHeight, containerWidth, } = props;\n    return (_jsxs(\"div\", { className: \"uppy-Dashboard-Item-fileInfo\", \"data-uppy-file-source\": file.source, children: [_jsxs(\"div\", { className: \"uppy-Dashboard-Item-fileName\", children: [renderFileName({\n                        file,\n                        isSingleFile,\n                        containerHeight,\n                        containerWidth,\n                    }), _jsx(ErrorButton, { file: file, onClick: () => alert(file.error) })] }), _jsxs(\"div\", { className: \"uppy-Dashboard-Item-status\", children: [renderAuthor({ file }), renderFileSize({ file }), ReSelectButton({ file, toggleAddFilesPanel, i18n })] }), _jsx(MetaErrorMessage, { file: file, i18n: i18n, toggleFileCard: toggleFileCard, metaFields: metaFields })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nconst metaFieldIdToName = (metaFieldId, metaFields) => {\n    const fields = typeof metaFields === 'function' ? metaFields() : metaFields;\n    const field = fields.filter((f) => f.id === metaFieldId);\n    return field[0].name;\n};\nexport default function MetaErrorMessage(props) {\n    const { file, toggleFileCard, i18n, metaFields } = props;\n    const { missingRequiredMetaFields } = file;\n    if (!missingRequiredMetaFields?.length) {\n        return null;\n    }\n    const metaFieldsString = missingRequiredMetaFields\n        .map((missingMetaField) => metaFieldIdToName(missingMetaField, metaFields))\n        .join(', ');\n    return (_jsxs(\"div\", { className: \"uppy-Dashboard-Item-errorMessage\", children: [i18n('missingRequiredMetaFields', {\n                smart_count: missingRequiredMetaFields.length,\n                fields: metaFieldsString,\n            }), ' ', _jsx(\"button\", { type: \"button\", class: \"uppy-u-reset uppy-Dashboard-Item-errorMessageBtn\", onClick: () => toggleFileCard(true, file.id), children: i18n('editFile') })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport getFileTypeIcon from '../../../utils/getFileTypeIcon.js';\nimport FilePreview from '../../FilePreview.js';\nimport MetaErrorMessage from '../MetaErrorMessage.js';\nexport default function FilePreviewAndLink(props) {\n    const { file, i18n, toggleFileCard, metaFields, showLinkToFileUploadResult } = props;\n    const white = 'rgba(255, 255, 255, 0.5)';\n    const previewBackgroundColor = file.preview\n        ? white\n        : getFileTypeIcon(file.type).color;\n    return (_jsxs(\"div\", { className: \"uppy-Dashboard-Item-previewInnerWrap\", style: { backgroundColor: previewBackgroundColor }, children: [showLinkToFileUploadResult && file.uploadURL && (_jsx(\"a\", { className: \"uppy-Dashboard-Item-previewLink\", href: file.uploadURL, rel: \"noreferrer noopener\", target: \"_blank\", \"aria-label\": file.meta.name, children: _jsx(\"span\", { hidden: true, children: file.meta.name }) })), _jsx(FilePreview, { file: file }), _jsx(MetaErrorMessage, { file: file, i18n: i18n, toggleFileCard: toggleFileCard, metaFields: metaFields })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nfunction onPauseResumeCancelRetry(props) {\n    if (props.isUploaded)\n        return;\n    if (props.error && !props.hideRetryButton) {\n        props.uppy.retryUpload(props.file.id);\n        return;\n    }\n    if (props.resumableUploads && !props.hidePauseResumeButton) {\n        props.uppy.pauseResume(props.file.id);\n    }\n    else if (props.individualCancellation && !props.hideCancelButton) {\n        props.uppy.removeFile(props.file.id);\n    }\n}\nfunction progressIndicatorTitle(props) {\n    if (props.isUploaded) {\n        return props.i18n('uploadComplete');\n    }\n    if (props.error) {\n        return props.i18n('retryUpload');\n    }\n    if (props.resumableUploads) {\n        if (props.file.isPaused) {\n            return props.i18n('resumeUpload');\n        }\n        return props.i18n('pauseUpload');\n    }\n    if (props.individualCancellation) {\n        return props.i18n('cancelUpload');\n    }\n    return '';\n}\nfunction ProgressIndicatorButton(props) {\n    return (_jsx(\"div\", { className: \"uppy-Dashboard-Item-progress\", children: _jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-Item-progressIndicator\", type: \"button\", \"aria-label\": progressIndicatorTitle(props), title: progressIndicatorTitle(props), onClick: () => onPauseResumeCancelRetry(props), children: props.children }) }));\n}\nfunction ProgressCircleContainer({ children }) {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"70\", height: \"70\", viewBox: \"0 0 36 36\", className: \"uppy-c-icon uppy-Dashboard-Item-progressIcon--circle\", children: children }));\n}\nfunction ProgressCircle({ progress }) {\n    // circle length equals 2 * PI * R\n    const circleLength = 2 * Math.PI * 15;\n    return (_jsxs(\"g\", { children: [_jsx(\"circle\", { className: \"uppy-Dashboard-Item-progressIcon--bg\", r: \"15\", cx: \"18\", cy: \"18\", \"stroke-width\": \"2\", fill: \"none\" }), _jsx(\"circle\", { className: \"uppy-Dashboard-Item-progressIcon--progress\", r: \"15\", cx: \"18\", cy: \"18\", transform: \"rotate(-90, 18, 18)\", fill: \"none\", \"stroke-width\": \"2\", \"stroke-dasharray\": circleLength, \"stroke-dashoffset\": circleLength - (circleLength / 100) * progress })] }));\n}\nexport default function FileProgress(props) {\n    // Nothing if upload has not started\n    if (!props.file.progress.uploadStarted) {\n        return null;\n    }\n    if (props.file.progress.percentage === undefined) {\n        return null;\n    }\n    // Green checkmark when complete\n    if (props.isUploaded) {\n        return (_jsx(\"div\", { className: \"uppy-Dashboard-Item-progress\", children: _jsx(\"div\", { className: \"uppy-Dashboard-Item-progressIndicator\", children: _jsxs(ProgressCircleContainer, { children: [_jsx(\"circle\", { r: \"15\", cx: \"18\", cy: \"18\", fill: \"#1bb240\" }), _jsx(\"polygon\", { className: \"uppy-Dashboard-Item-progressIcon--check\", transform: \"translate(2, 3)\", points: \"14 22.5 7 15.2457065 8.99985857 13.1732815 14 18.3547104 22.9729883 9 25 11.1005634\" })] }) }) }));\n    }\n    if (props.recoveredState) {\n        return null;\n    }\n    // Retry button for error\n    if (props.error && !props.hideRetryButton) {\n        return (_jsx(ProgressIndicatorButton, { ...props, children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon uppy-Dashboard-Item-progressIcon--retry\", width: \"28\", height: \"31\", viewBox: \"0 0 16 19\", children: [_jsx(\"path\", { d: \"M16 11a8 8 0 1 1-8-8v2a6 6 0 1 0 6 6h2z\" }), _jsx(\"path\", { d: \"M7.9 3H10v2H7.9z\" }), _jsx(\"path\", { d: \"M8.536.5l3.535 3.536-1.414 1.414L7.12 1.914z\" }), _jsx(\"path\", { d: \"M10.657 2.621l1.414 1.415L8.536 7.57 7.12 6.157z\" })] }) }));\n    }\n    // Pause/resume button for resumable uploads\n    if (props.resumableUploads && !props.hidePauseResumeButton) {\n        return (_jsx(ProgressIndicatorButton, { ...props, children: _jsxs(ProgressCircleContainer, { children: [_jsx(ProgressCircle, { progress: props.file.progress.percentage }), props.file.isPaused ? (_jsx(\"polygon\", { className: \"uppy-Dashboard-Item-progressIcon--play\", transform: \"translate(3, 3)\", points: \"12 20 12 10 20 15\" })) : (_jsxs(\"g\", { className: \"uppy-Dashboard-Item-progressIcon--pause\", transform: \"translate(14.5, 13)\", children: [_jsx(\"rect\", { x: \"0\", y: \"0\", width: \"2\", height: \"10\", rx: \"0\" }), _jsx(\"rect\", { x: \"5\", y: \"0\", width: \"2\", height: \"10\", rx: \"0\" })] }))] }) }));\n    }\n    // Cancel button for non-resumable uploads if individualCancellation is supported (not bundled)\n    if (!props.resumableUploads &&\n        props.individualCancellation &&\n        !props.hideCancelButton) {\n        return (_jsx(ProgressIndicatorButton, { ...props, children: _jsxs(ProgressCircleContainer, { children: [_jsx(ProgressCircle, { progress: props.file.progress.percentage }), _jsx(\"polygon\", { className: \"cancel\", transform: \"translate(2, 2)\", points: \"19.8856516 11.0625 16 14.9481516 12.1019737 11.0625 11.0625 12.1143484 14.9481516 16 11.0625 19.8980263 12.1019737 20.9375 16 17.0518484 19.8856516 20.9375 20.9375 19.8980263 17.0518484 16 20.9375 12\" })] }) }));\n    }\n    // Just progress when buttons are disabled\n    return (_jsx(\"div\", { className: \"uppy-Dashboard-Item-progress\", children: _jsx(\"div\", { className: \"uppy-Dashboard-Item-progressIndicator\", children: _jsx(ProgressCircleContainer, { children: _jsx(ProgressCircle, { progress: props.file.progress.percentage }) }) }) }));\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\n// @ts-ignore untyped\nimport { VirtualList } from '@uppy/utils';\nimport { useMemo } from 'preact/hooks';\nimport FileItem from './FileItem/index.js';\nfunction chunks(list, size) {\n    const chunked = [];\n    let currentChunk = [];\n    list.forEach((item) => {\n        if (currentChunk.length < size) {\n            currentChunk.push(item);\n        }\n        else {\n            chunked.push(currentChunk);\n            currentChunk = [item];\n        }\n    });\n    if (currentChunk.length)\n        chunked.push(currentChunk);\n    return chunked;\n}\nexport default function FileList({ id, i18n, uppy, files, resumableUploads, hideRetryButton, hidePauseResumeButton, hideCancelButton, showLinkToFileUploadResult, showRemoveButtonAfterComplete, metaFields, isSingleFile, toggleFileCard, handleRequestThumbnail, handleCancelThumbnail, recoveredState, individualCancellation, itemsPerRow, openFileEditor, canEditFile, toggleAddFilesPanel, containerWidth, containerHeight, }) {\n    // It's not great that this is hardcoded!\n    // It's ESPECIALLY not great that this is checking against `itemsPerRow`!\n    const rowHeight = itemsPerRow === 1\n        ? // Mobile\n            71\n        : // 190px height + 2 * 5px margin\n            200;\n    // Sort files by file.isGhost, ghost files first, only if recoveredState is present\n    const rows = useMemo(() => {\n        const sortByGhostComesFirst = (file1, file2) => Number(files[file2].isGhost) - Number(files[file1].isGhost);\n        const fileIds = Object.keys(files);\n        if (recoveredState)\n            fileIds.sort(sortByGhostComesFirst);\n        return chunks(fileIds, itemsPerRow);\n    }, [files, itemsPerRow, recoveredState]);\n    const renderRow = (row) => (_jsx(\"div\", { class: \"uppy-Dashboard-filesInner\", \n        // The `role=\"presentation` attribute ensures that the list items are properly\n        // associated with the `VirtualList` element.\n        role: \"presentation\", children: row.map((fileID) => (_jsx(FileItem, { uppy: uppy, \n            // FIXME This is confusing, it's actually the Dashboard's plugin ID\n            id: id, \n            // TODO move this to context\n            i18n: i18n, \n            // features\n            resumableUploads: resumableUploads, individualCancellation: individualCancellation, \n            // visual options\n            hideRetryButton: hideRetryButton, hidePauseResumeButton: hidePauseResumeButton, hideCancelButton: hideCancelButton, showLinkToFileUploadResult: showLinkToFileUploadResult, showRemoveButtonAfterComplete: showRemoveButtonAfterComplete, metaFields: metaFields, recoveredState: recoveredState, isSingleFile: isSingleFile, containerWidth: containerWidth, containerHeight: containerHeight, \n            // callbacks\n            toggleFileCard: toggleFileCard, handleRequestThumbnail: handleRequestThumbnail, handleCancelThumbnail: handleCancelThumbnail, role: \"listitem\", openFileEditor: openFileEditor, canEditFile: canEditFile, toggleAddFilesPanel: toggleAddFilesPanel, file: files[fileID] }, fileID))) }, row[0]));\n    if (isSingleFile) {\n        return _jsx(\"div\", { class: \"uppy-Dashboard-files\", children: renderRow(rows[0]) });\n    }\n    return (_jsx(VirtualList, { class: \"uppy-Dashboard-files\", role: \"list\", data: rows, renderRow: renderRow, rowHeight: rowHeight }));\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { Component, createRef } from 'preact';\nconst TRANSITION_MS = 300;\nexport default class FadeIn extends Component {\n    ref = createRef();\n    componentWillEnter(callback) {\n        this.ref.current.style.opacity = '1';\n        this.ref.current.style.transform = 'none';\n        setTimeout(callback, TRANSITION_MS);\n    }\n    componentWillLeave(callback) {\n        this.ref.current.style.opacity = '0';\n        this.ref.current.style.transform = 'translateY(350%)';\n        setTimeout(callback, TRANSITION_MS);\n    }\n    render() {\n        const { children } = this.props;\n        return (_jsx(\"div\", { className: \"uppy-Informer-animated\", ref: this.ref, children: children }));\n    }\n}\n", "// INFO: not typing copy pasted libarary code\n// @ts-nocheck\n/**\n * @source https://github.com/developit/preact-transition-group\n */\nimport { Component, cloneElement, h, toChildArray } from 'preact';\nfunction assign(obj, props) {\n    return Object.assign(obj, props);\n}\nfunction getKey(vnode, fallback) {\n    return vnode?.key ?? fallback;\n}\nfunction linkRef(component, name) {\n    // biome-ignore lint/suspicious/noAssignInExpressions: ...\n    const cache = component._ptgLinkedRefs || (component._ptgLinkedRefs = {});\n    return (cache[name] ||\n        // biome-ignore lint/suspicious/noAssignInExpressions: ...\n        (cache[name] = (c) => {\n            component.refs[name] = c;\n        }));\n}\nfunction getChildMapping(children) {\n    const out = {};\n    for (let i = 0; i < children.length; i++) {\n        if (children[i] != null) {\n            const key = getKey(children[i], i.toString(36));\n            out[key] = children[i];\n        }\n    }\n    return out;\n}\nfunction mergeChildMappings(prev, next) {\n    prev = prev || {};\n    next = next || {};\n    const getValueForKey = (key) => Object.hasOwn(next, key) ? next[key] : prev[key];\n    // For each key of `next`, the list of keys to insert before that key in\n    // the combined list\n    const nextKeysPending = {};\n    let pendingKeys = [];\n    for (const prevKey in prev) {\n        if (Object.hasOwn(next, prevKey)) {\n            if (pendingKeys.length) {\n                nextKeysPending[prevKey] = pendingKeys;\n                pendingKeys = [];\n            }\n        }\n        else {\n            pendingKeys.push(prevKey);\n        }\n    }\n    const childMapping = {};\n    for (const nextKey in next) {\n        if (Object.hasOwn(nextKeysPending, nextKey)) {\n            for (let i = 0; i < nextKeysPending[nextKey].length; i++) {\n                const pendingNextKey = nextKeysPending[nextKey][i];\n                childMapping[nextKeysPending[nextKey][i]] =\n                    getValueForKey(pendingNextKey);\n            }\n        }\n        childMapping[nextKey] = getValueForKey(nextKey);\n    }\n    // Finally, add the keys which didn't appear before any key in `next`\n    for (let i = 0; i < pendingKeys.length; i++) {\n        childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n    }\n    return childMapping;\n}\nconst identity = (i) => i;\nclass TransitionGroup extends Component {\n    constructor(props, context) {\n        super(props, context);\n        this.refs = {};\n        this.state = {\n            children: getChildMapping(toChildArray(toChildArray(this.props.children)) || []),\n        };\n        this.performAppear = this.performAppear.bind(this);\n        this.performEnter = this.performEnter.bind(this);\n        this.performLeave = this.performLeave.bind(this);\n    }\n    componentWillMount() {\n        this.currentlyTransitioningKeys = {};\n        this.keysToAbortLeave = [];\n        this.keysToEnter = [];\n        this.keysToLeave = [];\n    }\n    componentDidMount() {\n        const initialChildMapping = this.state.children;\n        for (const key in initialChildMapping) {\n            if (initialChildMapping[key]) {\n                // this.performAppear(getKey(initialChildMapping[key], key));\n                this.performAppear(key);\n            }\n        }\n    }\n    componentWillReceiveProps(nextProps) {\n        const nextChildMapping = getChildMapping(toChildArray(nextProps.children) || []);\n        const prevChildMapping = this.state.children;\n        this.setState((prevState) => ({\n            children: mergeChildMappings(prevState.children, nextChildMapping),\n        }));\n        let key;\n        for (key in nextChildMapping) {\n            if (Object.hasOwn(nextChildMapping, key)) {\n                const hasPrev = prevChildMapping && Object.hasOwn(prevChildMapping, key);\n                // We should re-enter the component and abort its leave function\n                if (nextChildMapping[key] &&\n                    hasPrev &&\n                    this.currentlyTransitioningKeys[key]) {\n                    this.keysToEnter.push(key);\n                    this.keysToAbortLeave.push(key);\n                }\n                else if (nextChildMapping[key] &&\n                    !hasPrev &&\n                    !this.currentlyTransitioningKeys[key]) {\n                    this.keysToEnter.push(key);\n                }\n            }\n        }\n        for (key in prevChildMapping) {\n            if (Object.hasOwn(prevChildMapping, key)) {\n                const hasNext = nextChildMapping && Object.hasOwn(nextChildMapping, key);\n                if (prevChildMapping[key] &&\n                    !hasNext &&\n                    !this.currentlyTransitioningKeys[key]) {\n                    this.keysToLeave.push(key);\n                }\n            }\n        }\n    }\n    componentDidUpdate() {\n        const { keysToEnter } = this;\n        this.keysToEnter = [];\n        keysToEnter.forEach(this.performEnter);\n        const { keysToLeave } = this;\n        this.keysToLeave = [];\n        keysToLeave.forEach(this.performLeave);\n    }\n    _finishAbort(key) {\n        const idx = this.keysToAbortLeave.indexOf(key);\n        if (idx !== -1) {\n            this.keysToAbortLeave.splice(idx, 1);\n        }\n    }\n    performAppear(key) {\n        this.currentlyTransitioningKeys[key] = true;\n        const component = this.refs[key];\n        if (component?.componentWillAppear) {\n            component.componentWillAppear(this._handleDoneAppearing.bind(this, key));\n        }\n        else {\n            this._handleDoneAppearing(key);\n        }\n    }\n    _handleDoneAppearing(key) {\n        const component = this.refs[key];\n        if (component?.componentDidAppear) {\n            component.componentDidAppear();\n        }\n        delete this.currentlyTransitioningKeys[key];\n        this._finishAbort(key);\n        const currentChildMapping = getChildMapping(toChildArray(this.props.children) || []);\n        if (!currentChildMapping || !Object.hasOwn(currentChildMapping, key)) {\n            // This was removed before it had fully appeared. Remove it.\n            this.performLeave(key);\n        }\n    }\n    performEnter(key) {\n        this.currentlyTransitioningKeys[key] = true;\n        const component = this.refs[key];\n        if (component?.componentWillEnter) {\n            component.componentWillEnter(this._handleDoneEntering.bind(this, key));\n        }\n        else {\n            this._handleDoneEntering(key);\n        }\n    }\n    _handleDoneEntering(key) {\n        const component = this.refs[key];\n        if (component?.componentDidEnter) {\n            component.componentDidEnter();\n        }\n        delete this.currentlyTransitioningKeys[key];\n        this._finishAbort(key);\n        const currentChildMapping = getChildMapping(toChildArray(this.props.children) || []);\n        if (!currentChildMapping || !Object.hasOwn(currentChildMapping, key)) {\n            // This was removed before it had fully entered. Remove it.\n            this.performLeave(key);\n        }\n    }\n    performLeave(key) {\n        // If we should immediately abort this leave function,\n        // don't run the leave transition at all.\n        const idx = this.keysToAbortLeave.indexOf(key);\n        if (idx !== -1) {\n            return;\n        }\n        this.currentlyTransitioningKeys[key] = true;\n        const component = this.refs[key];\n        if (component?.componentWillLeave) {\n            component.componentWillLeave(this._handleDoneLeaving.bind(this, key));\n        }\n        else {\n            // Note that this is somewhat dangerous b/c it calls setState()\n            // again, effectively mutating the component before all the work\n            // is done.\n            this._handleDoneLeaving(key);\n        }\n    }\n    _handleDoneLeaving(key) {\n        // If we should immediately abort the leave,\n        // then skip this altogether\n        const idx = this.keysToAbortLeave.indexOf(key);\n        if (idx !== -1) {\n            return;\n        }\n        const component = this.refs[key];\n        if (component?.componentDidLeave) {\n            component.componentDidLeave();\n        }\n        delete this.currentlyTransitioningKeys[key];\n        const currentChildMapping = getChildMapping(toChildArray(this.props.children) || []);\n        if (currentChildMapping && Object.hasOwn(currentChildMapping, key)) {\n            // This entered again before it fully left. Add it again.\n            this.performEnter(key);\n        }\n        else {\n            const children = assign({}, this.state.children);\n            delete children[key];\n            this.setState({ children });\n        }\n    }\n    render({ childFactory, transitionLeave, transitionName, transitionAppear, transitionEnter, transitionLeaveTimeout, transitionEnterTimeout, transitionAppearTimeout, component, ...props }, { children }) {\n        // TODO: we could get rid of the need for the wrapper node\n        // by cloning a single child\n        const childrenToRender = Object.entries(children)\n            .map(([key, child]) => {\n            if (!child)\n                return undefined;\n            const ref = linkRef(this, key);\n            return cloneElement(childFactory(child), { ref, key });\n        })\n            .filter(Boolean);\n        return h(component, props, childrenToRender);\n    }\n}\nTransitionGroup.defaultProps = {\n    component: 'span',\n    childFactory: identity,\n};\nexport default TransitionGroup;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { Component } from 'preact';\nimport FadeIn from './FadeIn.js';\nimport TransitionGroup from './TransitionGroup.js';\nexport default class Informer extends Component {\n    render() {\n        // Get info from the uppy instance passed in props\n        const { info } = this.props.uppy.getState();\n        return (_jsx(\"div\", { className: \"uppy uppy-Informer\", children: _jsx(TransitionGroup, { children: info.map((info) => (_jsx(FadeIn, { children: _jsxs(\"p\", { role: \"alert\", children: [info.message, ' ', info.details && (\n                            // biome-ignore lint/a11y/useKeyWithClickEvents: don't think it's needed\n                            _jsx(\"span\", { \"aria-label\": info.details, \"data-microtip-position\": \"top-left\", \"data-microtip-size\": \"medium\", role: \"tooltip\", onClick: () => alert(`${info.message} \\n\\n ${info.details}`), children: \"?\" }))] }) }, info.message))) }) }));\n    }\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\nimport { useRef } from 'preact/hooks';\nimport ignoreEvent from '../utils/ignoreEvent.js';\nfunction PickerPanelContent({ activePickerPanel, className, hideAllPanels, i18n, state, uppy, }) {\n    const ref = useRef(null);\n    return (_jsxs(\"div\", { className: classNames('uppy-DashboardContent-panel', className), role: \"tabpanel\", \"data-uppy-panelType\": \"PickerPanel\", id: `uppy-DashboardContent-panel--${activePickerPanel.id}`, onDragOver: ignoreEvent, onDragLeave: ignoreEvent, onDrop: ignoreEvent, onPaste: ignoreEvent, children: [_jsxs(\"div\", { className: \"uppy-DashboardContent-bar\", children: [_jsx(\"div\", { className: \"uppy-DashboardContent-title\", \n                        // biome-ignore lint/a11y/useSemanticElements: ...\n                        role: \"heading\", \"aria-level\": 1, children: i18n('importFrom', { name: activePickerPanel.name }) }), _jsx(\"button\", { className: \"uppy-DashboardContent-back\", type: \"button\", onClick: hideAllPanels, children: i18n('cancel') })] }), _jsx(\"div\", { ref: ref, className: \"uppy-DashboardContent-panelBody\", children: uppy.getPlugin(activePickerPanel.id).render(state, ref.current) })] }));\n}\nexport default PickerPanelContent;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nconst uploadStates = {\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    STATE_PAUSED: 'paused',\n};\nfunction getUploadingState(isAllErrored, isAllComplete, isAllPaused, files = {}) {\n    if (isAllErrored) {\n        return uploadStates.STATE_ERROR;\n    }\n    if (isAllComplete) {\n        return uploadStates.STATE_COMPLETE;\n    }\n    if (isAllPaused) {\n        return uploadStates.STATE_PAUSED;\n    }\n    let state = uploadStates.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 uploadStates.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 && state !== uploadStates.STATE_UPLOADING) {\n            state = uploadStates.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 &&\n            state !== uploadStates.STATE_UPLOADING &&\n            state !== uploadStates.STATE_PREPROCESSING) {\n            state = uploadStates.STATE_POSTPROCESSING;\n        }\n    }\n    return state;\n}\nfunction UploadStatus({ files, i18n, isAllComplete, isAllErrored, isAllPaused, inProgressNotPausedFiles, newFiles, processingFiles, }) {\n    const uploadingState = getUploadingState(isAllErrored, isAllComplete, isAllPaused, files);\n    switch (uploadingState) {\n        case 'uploading':\n            return i18n('uploadingXFiles', {\n                smart_count: inProgressNotPausedFiles.length,\n            });\n        case 'preprocessing':\n        case 'postprocessing':\n            return i18n('processingXFiles', { smart_count: processingFiles.length });\n        case 'paused':\n            return i18n('uploadPaused');\n        case 'waiting':\n            return i18n('xFilesSelected', { smart_count: newFiles.length });\n        case 'complete':\n            return i18n('uploadComplete');\n        case 'error':\n            return i18n('error');\n        default:\n    }\n}\nfunction PanelTopBar(props) {\n    const { i18n, isAllComplete, hideCancelButton, maxNumberOfFiles, toggleAddFilesPanel, uppy, } = props;\n    let { allowNewUpload } = props;\n    // TODO maybe this should be done in ../Dashboard.js, then just pass that down as `allowNewUpload`\n    if (allowNewUpload && maxNumberOfFiles) {\n        allowNewUpload = props.totalFileCount < props.maxNumberOfFiles;\n    }\n    return (_jsxs(\"div\", { className: \"uppy-DashboardContent-bar\", children: [!isAllComplete && !hideCancelButton ? (_jsx(\"button\", { className: \"uppy-DashboardContent-back\", type: \"button\", onClick: () => uppy.cancelAll(), children: i18n('cancel') })) : (_jsx(\"div\", {})), _jsx(\"div\", { className: \"uppy-DashboardContent-title\", children: _jsx(UploadStatus, { ...props }) }), allowNewUpload ? (_jsxs(\"button\", { className: \"uppy-DashboardContent-addMore\", type: \"button\", \"aria-label\": i18n('addMoreFiles'), title: i18n('addMoreFiles'), onClick: () => toggleAddFilesPanel(true), children: [_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"15\", height: \"15\", viewBox: \"0 0 15 15\", children: _jsx(\"path\", { d: \"M8 6.5h6a.5.5 0 0 1 .5.5v.5a.5.5 0 0 1-.5.5H8v6a.5.5 0 0 1-.5.5H7a.5.5 0 0 1-.5-.5V8h-6a.5.5 0 0 1-.5-.5V7a.5.5 0 0 1 .5-.5h6v-6A.5.5 0 0 1 7 0h.5a.5.5 0 0 1 .5.5v6z\" }) }), _jsx(\"span\", { className: \"uppy-DashboardContent-addMoreCaption\", children: i18n('addMore') })] })) : (_jsx(\"div\", {}))] }));\n}\nexport default PanelTopBar;\n", "import classNames from 'classnames';\nimport { cloneElement, toChildArray, } from 'preact';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\nconst transitionName = 'uppy-transition-slideDownUp';\nconst duration = 250;\n/**\n * Vertical slide transition.\n *\n * This can take a _single_ child component, which _must_ accept a `className` prop.\n *\n * Currently this is specific to the `uppy-transition-slideDownUp` transition,\n * but it should be simple to extend this for any type of single-element\n * transition by setting the CSS name and duration as props.\n */\nfunction Slide({ children }) {\n    const [cachedChildren, setCachedChildren] = useState(null);\n    const [className, setClassName] = useState('');\n    const enterTimeoutRef = useRef();\n    const leaveTimeoutRef = useRef();\n    const animationFrameRef = useRef();\n    const handleEnterTransition = useCallback(() => {\n        setClassName(`${transitionName}-enter`);\n        cancelAnimationFrame(animationFrameRef.current);\n        clearTimeout(leaveTimeoutRef.current);\n        leaveTimeoutRef.current = undefined;\n        animationFrameRef.current = requestAnimationFrame(() => {\n            setClassName(`${transitionName}-enter ${transitionName}-enter-active`);\n            enterTimeoutRef.current = setTimeout(() => {\n                setClassName('');\n            }, duration);\n        });\n    }, []);\n    const handleLeaveTransition = useCallback(() => {\n        setClassName(`${transitionName}-leave`);\n        cancelAnimationFrame(animationFrameRef.current);\n        clearTimeout(enterTimeoutRef.current);\n        enterTimeoutRef.current = undefined;\n        animationFrameRef.current = requestAnimationFrame(() => {\n            setClassName(`${transitionName}-leave ${transitionName}-leave-active`);\n            leaveTimeoutRef.current = setTimeout(() => {\n                setCachedChildren(null);\n                setClassName('');\n            }, duration);\n        });\n    }, []);\n    useEffect(() => {\n        const child = toChildArray(children)[0];\n        if (cachedChildren === child)\n            return;\n        if (child && !cachedChildren) {\n            handleEnterTransition();\n        }\n        else if (cachedChildren && !child && !leaveTimeoutRef.current) {\n            handleLeaveTransition();\n        }\n        setCachedChildren(child);\n    }, [children, cachedChildren, handleEnterTransition, handleLeaveTransition]); // Dependency array to trigger effect on children change\n    useEffect(() => {\n        return () => {\n            clearTimeout(enterTimeoutRef.current);\n            clearTimeout(leaveTimeoutRef.current);\n            cancelAnimationFrame(animationFrameRef.current);\n        };\n    }, []); // Cleanup useEffect\n    if (!cachedChildren)\n        return null;\n    return cloneElement(cachedChildren, {\n        className: classNames(className, cachedChildren.props.className),\n    });\n}\nexport default Slide;\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", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\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, hideProgressDetails = 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, hideProgressDetails: hideProgressDetails, 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';\nimport classNames from 'classnames';\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, hideProgressDetails, 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 && !hideProgressDetails) {\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 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", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { emaFilter } from '@uppy/utils';\nimport { Component } from 'preact';\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}\nexport default class StatusBar extends Component {\n    #lastUpdateTime;\n    #previousUploadedBytes;\n    #previousSpeed;\n    #previousETA;\n    componentDidMount() {\n        // Initialize ETA calculation variables\n        this.#lastUpdateTime = performance.now();\n        this.#previousUploadedBytes = this.props.uppy\n            .getFiles()\n            .reduce((pv, file) => pv + (file.progress.bytesUploaded || 0), 0);\n        // Listen for upload start to reset ETA calculation\n        this.props.uppy.on('upload', this.#onUploadStart);\n    }\n    componentWillUnmount() {\n        this.props.uppy.off('upload', this.#onUploadStart);\n    }\n    #onUploadStart = () => {\n        const { recoveredState } = this.props.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), 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            return;\n        }\n        this.#lastUpdateTime = performance.now();\n        this.#previousUploadedBytes = 0;\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        // Initialize previousUploadedBytes if it's null\n        if (this.#previousUploadedBytes == null) {\n            this.#previousUploadedBytes = totalBytes.uploaded;\n            return null; // Can't calculate speed on first call\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        // Guard against invalid speed values\n        if (!Number.isFinite(currentSpeed) || currentSpeed <= 0) {\n            return null;\n        }\n        const filteredSpeed = this.#previousSpeed == null\n            ? currentSpeed\n            : emaFilter(currentSpeed, this.#previousSpeed, speedFilterHalfLife, dt);\n        // Guard against invalid filtered speed\n        if (!Number.isFinite(filteredSpeed) || filteredSpeed <= 0) {\n            return null;\n        }\n        this.#previousSpeed = filteredSpeed;\n        const instantETA = remaining / filteredSpeed;\n        // Guard against invalid instantETA\n        if (!Number.isFinite(instantETA) || instantETA < 0) {\n            return null;\n        }\n        const updatedPreviousETA = Math.max((this.#previousETA ?? 0) - dt, 0);\n        const filteredETA = this.#previousETA == null\n            ? instantETA\n            : emaFilter(instantETA, updatedPreviousETA, ETAFilterHalfLife, dt);\n        // Guard against invalid filteredETA\n        if (!Number.isFinite(filteredETA) || filteredETA < 0) {\n            return null;\n        }\n        this.#previousETA = filteredETA;\n        this.#lastUpdateTime = performance.now();\n        return Math.round(filteredETA / 100) / 10;\n    }\n    startUpload = () => {\n        const { recoveredState } = this.props.uppy.getState();\n        if (recoveredState) {\n            this.props.uppy.emit('restore-confirmed');\n        }\n        else {\n            this.props.uppy.upload().catch((() => {\n                // Error logged in Core\n            }));\n        }\n    };\n    render() {\n        const { capabilities, files, allowNewUpload, totalProgress, error, recoveredState, } = this.props.uppy.getState();\n        const { newFiles, startedFiles, completeFiles, isUploadStarted, isAllComplete, isAllPaused, isUploadInProgress, isSomeGhost, } = this.props.uppy.getObjectOfFilesPerState();\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 (_jsx(StatusBarUI, { error: error, uploadState: getUploadingState(error, isAllComplete, recoveredState, files || {}), allowNewUpload: allowNewUpload, totalProgress: totalProgress, totalSize: totalSize, totalUploadedSize: totalUploadedSize, isAllComplete: isAllComplete, isAllPaused: isAllPaused, isUploadStarted: isUploadStarted, isUploadInProgress: isUploadInProgress, isSomeGhost: isSomeGhost, recoveredState: recoveredState, complete: completeFiles.length, newFiles: newFilesOrRecovered.length, numUploads: startedFiles.length, totalETA: totalETA, files: files, i18n: this.props.i18n, uppy: this.props.uppy, startUpload: this.startUpload, doneButtonHandler: this.props.doneButtonHandler, resumableUploads: resumableUploads, supportsUploadProgress: supportsUploadProgress, hideProgressDetails: this.props.hideProgressDetails, hideUploadButton: this.props.hideUploadButton, hideRetryButton: this.props.hideRetryButton, hidePauseResumeButton: this.props.hidePauseResumeButton, hideCancelButton: this.props.hideCancelButton, hideAfterFinish: this.props.hideAfterFinish }));\n    }\n}\n", "export default {\n    strings: {\n        // When `inline: false`, used as the screen reader label for the button that closes the modal.\n        closeModal: 'Close Modal',\n        // Used as the screen reader label for the plus (+) button that shows the \u201CAdd more files\u201D screen\n        addMoreFiles: 'Add more files',\n        addingMoreFiles: 'Adding more files',\n        // Used as the header for import panels, e.g., \u201CImport from Google Drive\u201D.\n        importFrom: 'Import from %{name}',\n        // When `inline: false`, used as the screen reader label for the dashboard modal.\n        dashboardWindowTitle: 'Uppy Dashboard Window (Press escape to close)',\n        // When `inline: true`, used as the screen reader label for the dashboard area.\n        dashboardTitle: 'Uppy Dashboard',\n        // Shown in the Informer when a link to a file was copied to the clipboard.\n        copyLinkToClipboardSuccess: 'Link copied to clipboard.',\n        // Used when a link cannot be copied automatically \u2014 the user has to select the text from the\n        // input element below this string.\n        copyLinkToClipboardFallback: 'Copy the URL below',\n        // Used as the hover title and screen reader label for buttons that copy a file link.\n        copyLink: 'Copy link',\n        back: 'Back',\n        // Used as the screen reader label for buttons that remove a file.\n        removeFile: 'Remove file',\n        // Used as the screen reader label for buttons that open the metadata editor panel for a file.\n        editFile: 'Edit file',\n        editImage: 'Edit image',\n        // Shown in the panel header for the metadata editor. Rendered as \u201CEditing image.png\u201D.\n        editing: 'Editing %{file}',\n        // Shown on the main upload screen when an upload error occurs\n        error: 'Error',\n        // Used as the screen reader label for the button that saves metadata edits and returns to the\n        // file list view.\n        finishEditingFile: 'Finish editing file',\n        saveChanges: 'Save changes',\n        // Used as the label for the tab button that opens the system file selection dialog.\n        myDevice: 'My Device',\n        dropHint: 'Drop your files here',\n        // Used as the hover text and screen reader label for file progress indicators when\n        // they have been fully uploaded.\n        uploadComplete: 'Upload complete',\n        uploadPaused: 'Upload paused',\n        // Used as the hover text and screen reader label for the buttons to resume paused uploads.\n        resumeUpload: 'Resume upload',\n        // Used as the hover text and screen reader label for the buttons to pause uploads.\n        pauseUpload: 'Pause upload',\n        // Used as the hover text and screen reader label for the buttons to retry failed uploads.\n        retryUpload: 'Retry upload',\n        // Used as the hover text and screen reader label for the buttons to cancel uploads.\n        cancelUpload: 'Cancel upload',\n        // Used in a title, how many files are currently selected\n        xFilesSelected: {\n            0: '%{smart_count} file selected',\n            1: '%{smart_count} files selected',\n        },\n        uploadingXFiles: {\n            0: 'Uploading %{smart_count} file',\n            1: 'Uploading %{smart_count} files',\n        },\n        processingXFiles: {\n            0: 'Processing %{smart_count} file',\n            1: 'Processing %{smart_count} files',\n        },\n        // The \"powered by Uppy\" link at the bottom of the Dashboard.\n        poweredBy: 'Powered by %{uppy}',\n        addMore: 'Add more',\n        editFileWithFilename: 'Edit file %{file}',\n        save: 'Save',\n        cancel: 'Cancel',\n        dropPasteFiles: 'Drop files here or %{browseFiles}',\n        dropPasteFolders: 'Drop files here or %{browseFolders}',\n        dropPasteBoth: 'Drop files here, %{browseFiles} or %{browseFolders}',\n        dropPasteImportFiles: 'Drop files here, %{browseFiles} or import from:',\n        dropPasteImportFolders: 'Drop files here, %{browseFolders} or import from:',\n        dropPasteImportBoth: 'Drop files here, %{browseFiles}, %{browseFolders} or import from:',\n        importFiles: 'Import files from:',\n        browseFiles: 'browse files',\n        browseFolders: 'browse folders',\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        recoveredAllFiles: 'We restored all files. You can now resume the upload.',\n        sessionRestored: 'Session restored',\n        reSelect: 'Re-select',\n        missingRequiredMetaFields: {\n            0: 'Missing required meta field: %{fields}.',\n            1: 'Missing required meta fields: %{fields}.',\n        },\n        // Used for native device camera buttons on mobile\n        takePictureBtn: 'Take Picture',\n        recordVideoBtn: 'Record Video',\n        // Strings for StatusBar\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 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 `hideProgressDetails` is set to false, 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 `hideProgressDetails` is set to false, shows the amount of bytes that have been uploaded so far.\n        dataUploadedOfTotal: '%{complete} of %{total}',\n        dataUploadedOfUnknown: '%{complete} of unknown',\n        // When `hideProgressDetails` is set to false, 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        xMoreFilesAdded: {\n            0: '%{smart_count} more file added',\n            1: '%{smart_count} more files added',\n        },\n        showErrorDetails: 'Show error details',\n    },\n};\n", "// @ts-ignore untyped\nimport { FOCUSABLE_ELEMENTS } from '@uppy/utils';\nimport debounce from 'lodash/debounce.js';\nimport getActiveOverlayEl from './getActiveOverlayEl.js';\n/*\n  Focuses on some element in the currently topmost overlay.\n\n  1. If there are some [data-uppy-super-focusable] elements rendered already - focuses\n     on the first superfocusable element, and leaves focus up to the control of\n     a user (until currently focused element disappears from the screen [which\n     can happen when overlay changes, or, e.g., when we click on a folder in googledrive]).\n  2. If there are no [data-uppy-super-focusable] elements yet (or ever) - focuses\n     on the first focusable element, but switches focus if superfocusable elements appear on next render.\n*/\nexport default function createSuperFocus() {\n    let lastFocusWasOnSuperFocusableEl = false;\n    const superFocus = (dashboardEl, activeOverlayType) => {\n        const overlayEl = getActiveOverlayEl(dashboardEl, activeOverlayType);\n        const isFocusInOverlay = overlayEl.contains(document.activeElement);\n        // If focus is already in the topmost overlay, AND on last update we focused on the superfocusable\n        // element - then leave focus up to the user.\n        // [Practical check] without this line, typing in the search input in googledrive overlay won't work.\n        if (isFocusInOverlay && lastFocusWasOnSuperFocusableEl)\n            return;\n        const superFocusableEl = overlayEl.querySelector('[data-uppy-super-focusable]');\n        // If we are already in the topmost overlay, AND there are no super focusable elements yet, - leave focus up to the user.\n        // [Practical check] without this line, if you are in an empty folder in google drive, and something's uploading in the\n        // bg, - focus will be jumping to Done all the time.\n        if (isFocusInOverlay && !superFocusableEl)\n            return;\n        if (superFocusableEl) {\n            superFocusableEl.focus({ preventScroll: true });\n            lastFocusWasOnSuperFocusableEl = true;\n        }\n        else {\n            const firstEl = overlayEl.querySelector(FOCUSABLE_ELEMENTS);\n            firstEl?.focus({ preventScroll: true });\n            lastFocusWasOnSuperFocusableEl = false;\n        }\n    };\n    // ___Why do we need to debounce?\n    //    1. To deal with animations: overlay changes via animations, which results in the DOM updating AFTER plugin.update()\n    //       already executed.\n    //    [Practical check] without debounce, if we open the Url overlay, and click 'Done', Dashboard won't get focused again.\n    //    [Practical check] if we delay 250ms instead of 260ms - IE11 won't get focused in same situation.\n    //    2. Performance: there can be many state update()s in a second, and this function is called every time.\n    return debounce(superFocus, 260);\n}\n", "/**\n * @returns {HTMLElement} - either dashboard element, or the overlay that's most on top\n */\nexport default function getActiveOverlayEl(dashboardEl, activeOverlayType) {\n    if (activeOverlayType) {\n        const overlayEl = dashboardEl.querySelector(`[data-uppy-paneltype=\"${activeOverlayType}\"]`);\n        // if an overlay is already mounted\n        if (overlayEl)\n            return overlayEl;\n    }\n    return dashboardEl;\n}\n", "// @ts-ignore untyped\nimport { FOCUSABLE_ELEMENTS, toArray } from '@uppy/utils';\nimport getActiveOverlayEl from './getActiveOverlayEl.js';\nfunction focusOnFirstNode(event, nodes) {\n    const node = nodes[0];\n    if (node) {\n        node.focus();\n        event.preventDefault();\n    }\n}\nfunction focusOnLastNode(event, nodes) {\n    const node = nodes[nodes.length - 1];\n    if (node) {\n        node.focus();\n        event.preventDefault();\n    }\n}\n// ___Why not just use (focusedItemIndex === -1)?\n//    Firefox thinks <ul> is focusable, but we don't have <ul>s in our FOCUSABLE_ELEMENTS. Which means that if we tab into\n//    the <ul>, code will think that we are not in the active overlay, and we should focusOnFirstNode() of the currently\n//    active overlay!\n//    [Practical check] if we use (focusedItemIndex === -1), instagram provider in firefox will never get focus on its pics\n//    in the <ul>.\nfunction isFocusInOverlay(activeOverlayEl) {\n    return activeOverlayEl.contains(document.activeElement);\n}\nfunction trapFocus(event, activeOverlayType, dashboardEl) {\n    const activeOverlayEl = getActiveOverlayEl(dashboardEl, activeOverlayType);\n    const focusableNodes = toArray(activeOverlayEl.querySelectorAll(FOCUSABLE_ELEMENTS));\n    const focusedItemIndex = focusableNodes.indexOf(document.activeElement);\n    // If we pressed tab, and focus is not yet within the current overlay - focus on\n    // the first element within the current overlay.\n    // This is a safety measure (for when user returns from another tab e.g.), most\n    // plugins will try to focus on some important element as it loads.\n    if (!isFocusInOverlay(activeOverlayEl)) {\n        focusOnFirstNode(event, focusableNodes);\n        // If we pressed shift + tab, and we're on the first element of a modal\n    }\n    else if (event.shiftKey && focusedItemIndex === 0) {\n        focusOnLastNode(event, focusableNodes);\n        // If we pressed tab, and we're on the last element of the modal\n    }\n    else if (!event.shiftKey &&\n        focusedItemIndex === focusableNodes.length - 1) {\n        focusOnFirstNode(event, focusableNodes);\n    }\n}\n// Traps focus inside of the currently open overlay (e.g. Dashboard, or e.g. Instagram),\n// never lets focus disappear from the modal.\nexport { trapFocus as forModal };\n// Traps focus inside of the currently open overlay, unless overlay is null - then let the user tab away.\nexport function forInline(event, activeOverlayType, dashboardEl) {\n    // ___When we're in the bare 'Drop files here, paste, browse or import from' screen\n    if (activeOverlayType === null) {\n        // Do nothing and let the browser handle it, user can tab away from Uppy to other elements on the page\n        // ___When there is some overlay with 'Done' button\n    }\n    else {\n        // Trap the focus inside this overlay!\n        // User can close the overlay (click 'Done') if they want to travel away from Uppy.\n        trapFocus(event, activeOverlayType, dashboardEl);\n    }\n}\n", "import { UIPlugin } from '@uppy/core';\nimport { defaultPickerIcon } from '@uppy/provider-views';\nimport ThumbnailGenerator from '@uppy/thumbnail-generator';\nimport { findAllDOMElements, getDroppedFiles, toArray } from '@uppy/utils';\nimport { nanoid } from 'nanoid/non-secure';\nimport packageJson from '../package.json' with { type: 'json' };\nimport DashboardUI from './components/Dashboard.js';\nimport locale from './locale.js';\nimport createSuperFocus from './utils/createSuperFocus.js';\nimport * as trapFocus from './utils/trapFocus.js';\nconst TAB_KEY = 9;\nconst ESC_KEY = 27;\nfunction createPromise() {\n    const o = {};\n    o.promise = new Promise((resolve, reject) => {\n        o.resolve = resolve;\n        o.reject = reject;\n    });\n    return o;\n}\nconst defaultOptions = {\n    target: 'body',\n    metaFields: [],\n    thumbnailWidth: 280,\n    thumbnailType: 'image/jpeg',\n    waitForThumbnailsBeforeUpload: false,\n    defaultPickerIcon,\n    showLinkToFileUploadResult: false,\n    hideProgressDetails: false,\n    hideUploadButton: false,\n    hideCancelButton: false,\n    hideRetryButton: false,\n    hidePauseResumeButton: false,\n    hideProgressAfterFinish: false,\n    note: null,\n    singleFileFullScreen: true,\n    disableStatusBar: false,\n    disableInformer: false,\n    disableThumbnailGenerator: false,\n    fileManagerSelectionType: 'files',\n    proudlyDisplayPoweredByUppy: true,\n    showSelectedFiles: true,\n    showRemoveButtonAfterComplete: false,\n    showNativePhotoCameraButton: false,\n    showNativeVideoCameraButton: false,\n    theme: 'light',\n    autoOpen: null,\n    disabled: false,\n    disableLocalFiles: false,\n    nativeCameraFacingMode: '',\n    onDragLeave: () => { },\n    onDragOver: () => { },\n    onDrop: () => { },\n    plugins: [],\n    // Dynamic default options, they have to be defined in the constructor (because\n    // they require access to the `this` keyword), but we still want them to\n    // appear in the default options so TS knows they'll be defined.\n    doneButtonHandler: undefined,\n    onRequestCloseModal: null,\n    // defaultModalOptions\n    inline: false,\n    animateOpenClose: true,\n    browserBackButtonClose: false,\n    closeAfterFinish: false,\n    closeModalOnClickOutside: false,\n    disablePageScrollWhenModalOpen: true,\n    trigger: null,\n    // defaultInlineOptions\n    width: 750,\n    height: 550,\n};\n/**\n * Dashboard UI with previews, metadata editing, tabs for various services and more\n */\nexport default class Dashboard extends UIPlugin {\n    static VERSION = packageJson.version;\n    #disabledNodes;\n    modalName = `uppy-Dashboard-${nanoid()}`;\n    superFocus = createSuperFocus();\n    ifFocusedOnUppyRecently = false;\n    dashboardIsDisabled;\n    savedScrollPosition;\n    savedActiveElement;\n    resizeObserver;\n    darkModeMediaQuery;\n    // Timeouts\n    makeDashboardInsidesVisibleAnywayTimeout;\n    constructor(uppy, opts) {\n        const autoOpen = opts?.autoOpen ?? null;\n        super(uppy, { ...defaultOptions, ...opts, autoOpen });\n        this.id = this.opts.id || 'Dashboard';\n        this.title = 'Dashboard';\n        this.type = 'orchestrator';\n        this.defaultLocale = locale;\n        // Dynamic default options:\n        if (this.opts.doneButtonHandler === undefined) {\n            // `null` means \"do not display a Done button\", while `undefined` means\n            // \"I want the default behavior\". For this reason, we need to differentiate `null` and `undefined`.\n            this.opts.doneButtonHandler = () => {\n                this.uppy.clear();\n                this.requestCloseModal();\n            };\n        }\n        this.opts.onRequestCloseModal ??= () => this.closeModal();\n        this.i18nInit();\n    }\n    removeTarget = (plugin) => {\n        const pluginState = this.getPluginState();\n        // filter out the one we want to remove\n        const newTargets = pluginState.targets.filter((target) => target.id !== plugin.id);\n        this.setPluginState({\n            targets: newTargets,\n        });\n    };\n    addTarget = (plugin) => {\n        const callerPluginId = plugin.id || plugin.constructor.name;\n        const callerPluginName = plugin.title || callerPluginId;\n        const callerPluginType = plugin.type;\n        if (callerPluginType !== 'acquirer' &&\n            callerPluginType !== 'progressindicator' &&\n            callerPluginType !== 'editor') {\n            const msg = 'Dashboard: can only be targeted by plugins of types: acquirer, progressindicator, editor';\n            this.uppy.log(msg, 'error');\n            return null;\n        }\n        const target = {\n            id: callerPluginId,\n            name: callerPluginName,\n            type: callerPluginType,\n        };\n        const state = this.getPluginState();\n        const newTargets = state.targets.slice();\n        newTargets.push(target);\n        this.setPluginState({\n            targets: newTargets,\n        });\n        return this.el;\n    };\n    hideAllPanels = () => {\n        const state = this.getPluginState();\n        const update = {\n            activePickerPanel: undefined,\n            showAddFilesPanel: false,\n            activeOverlayType: null,\n            fileCardFor: null,\n            showFileEditor: false,\n        };\n        if (state.activePickerPanel === update.activePickerPanel &&\n            state.showAddFilesPanel === update.showAddFilesPanel &&\n            state.showFileEditor === update.showFileEditor &&\n            state.activeOverlayType === update.activeOverlayType) {\n            // avoid doing a state update if nothing changed\n            return;\n        }\n        this.setPluginState(update);\n        this.uppy.emit('dashboard:close-panel', state.activePickerPanel?.id);\n    };\n    showPanel = (id) => {\n        const { targets } = this.getPluginState();\n        const activePickerPanel = targets.find((target) => {\n            return target.type === 'acquirer' && target.id === id;\n        });\n        this.setPluginState({\n            activePickerPanel,\n            activeOverlayType: 'PickerPanel',\n        });\n        this.uppy.emit('dashboard:show-panel', id);\n    };\n    canEditFile = (file) => {\n        const { targets } = this.getPluginState();\n        const editors = this.#getEditors(targets);\n        return editors.some((target) => this.uppy.getPlugin(target.id).canEditFile(file));\n    };\n    openFileEditor = (file) => {\n        const { targets } = this.getPluginState();\n        const editors = this.#getEditors(targets);\n        this.setPluginState({\n            showFileEditor: true,\n            fileCardFor: file.id || null,\n            activeOverlayType: 'FileEditor',\n        });\n        editors.forEach((editor) => {\n            ;\n            this.uppy.getPlugin(editor.id).selectFile(file);\n        });\n    };\n    closeFileEditor = () => {\n        const { metaFields } = this.getPluginState();\n        const isMetaEditorEnabled = metaFields && metaFields.length > 0;\n        if (isMetaEditorEnabled) {\n            this.setPluginState({\n                showFileEditor: false,\n                activeOverlayType: 'FileCard',\n            });\n        }\n        else {\n            this.setPluginState({\n                showFileEditor: false,\n                fileCardFor: null,\n                activeOverlayType: 'AddFiles',\n            });\n        }\n    };\n    saveFileEditor = () => {\n        const { targets } = this.getPluginState();\n        const editors = this.#getEditors(targets);\n        editors.forEach((editor) => {\n            ;\n            this.uppy.getPlugin(editor.id).save();\n        });\n        this.closeFileEditor();\n    };\n    openModal = () => {\n        const { promise, resolve } = createPromise();\n        // save scroll position\n        this.savedScrollPosition = window.pageYOffset;\n        // save active element, so we can restore focus when modal is closed\n        this.savedActiveElement = document.activeElement;\n        if (this.opts.disablePageScrollWhenModalOpen) {\n            document.body.classList.add('uppy-Dashboard-isFixed');\n        }\n        if (this.opts.animateOpenClose && this.getPluginState().isClosing) {\n            const handler = () => {\n                this.setPluginState({\n                    isHidden: false,\n                });\n                this.el.removeEventListener('animationend', handler, false);\n                resolve();\n            };\n            this.el.addEventListener('animationend', handler, false);\n        }\n        else {\n            this.setPluginState({\n                isHidden: false,\n            });\n            resolve();\n        }\n        if (this.opts.browserBackButtonClose) {\n            this.updateBrowserHistory();\n        }\n        // handle ESC and TAB keys in modal dialog\n        document.addEventListener('keydown', this.handleKeyDownInModal);\n        this.uppy.emit('dashboard:modal-open');\n        return promise;\n    };\n    closeModal = (opts) => {\n        // Whether the modal is being closed by the user (`true`) or by other means (e.g. browser back button)\n        const manualClose = opts?.manualClose ?? true;\n        const { isHidden, isClosing } = this.getPluginState();\n        if (isHidden || isClosing) {\n            // short-circuit if animation is ongoing\n            return undefined;\n        }\n        const { promise, resolve } = createPromise();\n        if (this.opts.disablePageScrollWhenModalOpen) {\n            document.body.classList.remove('uppy-Dashboard-isFixed');\n        }\n        if (this.opts.animateOpenClose) {\n            this.setPluginState({\n                isClosing: true,\n            });\n            const handler = () => {\n                this.setPluginState({\n                    isHidden: true,\n                    isClosing: false,\n                });\n                this.superFocus.cancel();\n                this.savedActiveElement.focus();\n                this.el.removeEventListener('animationend', handler, false);\n                resolve();\n            };\n            this.el.addEventListener('animationend', handler, false);\n        }\n        else {\n            this.setPluginState({\n                isHidden: true,\n            });\n            this.superFocus.cancel();\n            this.savedActiveElement.focus();\n            resolve();\n        }\n        // handle ESC and TAB keys in modal dialog\n        document.removeEventListener('keydown', this.handleKeyDownInModal);\n        if (manualClose) {\n            if (this.opts.browserBackButtonClose) {\n                // Make sure that the latest entry in the history state is our modal name\n                if (history.state?.[this.modalName]) {\n                    // Go back in history to clear out the entry we created (ultimately closing the modal)\n                    history.back();\n                }\n            }\n        }\n        this.uppy.emit('dashboard:modal-closed');\n        return promise;\n    };\n    isModalOpen = () => {\n        return !this.getPluginState().isHidden || false;\n    };\n    requestCloseModal = () => {\n        if (this.opts.onRequestCloseModal) {\n            return this.opts.onRequestCloseModal();\n        }\n        return this.closeModal();\n    };\n    setDarkModeCapability = (isDarkModeOn) => {\n        const { capabilities } = this.uppy.getState();\n        this.uppy.setState({\n            capabilities: {\n                ...capabilities,\n                darkMode: isDarkModeOn,\n            },\n        });\n    };\n    handleSystemDarkModeChange = (event) => {\n        const isDarkModeOnNow = event.matches;\n        this.uppy.log(`[Dashboard] Dark mode is ${isDarkModeOnNow ? 'on' : 'off'}`);\n        this.setDarkModeCapability(isDarkModeOnNow);\n    };\n    toggleFileCard = (show, fileID) => {\n        const file = this.uppy.getFile(fileID);\n        if (show) {\n            this.uppy.emit('dashboard:file-edit-start', file);\n        }\n        else {\n            this.uppy.emit('dashboard:file-edit-complete', file);\n        }\n        this.setPluginState({\n            fileCardFor: show ? fileID : null,\n            activeOverlayType: show ? 'FileCard' : null,\n        });\n    };\n    toggleAddFilesPanel = (show) => {\n        this.setPluginState({\n            showAddFilesPanel: show,\n            activeOverlayType: show ? 'AddFiles' : null,\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 || file.webkitRelativePath || null,\n            },\n        }));\n        try {\n            this.uppy.addFiles(descriptors);\n        }\n        catch (err) {\n            this.uppy.log(err);\n        }\n    };\n    // ___Why make insides of Dashboard invisible until first ResizeObserver event is emitted?\n    //    ResizeOberserver doesn't emit the first resize event fast enough, users can see the jump from one .uppy-size-- to\n    //    another (e.g. in Safari)\n    // ___Why not apply visibility property to .uppy-Dashboard-inner?\n    //    Because ideally, acc to specs, ResizeObserver should see invisible elements as of width 0. So even though applying\n    //    invisibility to .uppy-Dashboard-inner works now, it may not work in the future.\n    startListeningToResize = () => {\n        // Watch for Dashboard container (`.uppy-Dashboard-inner`) resize\n        // and update containerWidth/containerHeight in plugin state accordingly.\n        // Emits first event on initialization.\n        this.resizeObserver = new ResizeObserver((entries) => {\n            const uppyDashboardInnerEl = entries[0];\n            const { width, height } = uppyDashboardInnerEl.contentRect;\n            this.setPluginState({\n                containerWidth: width,\n                containerHeight: height,\n                areInsidesReadyToBeVisible: true,\n            });\n        });\n        this.resizeObserver.observe(this.el.querySelector('.uppy-Dashboard-inner'));\n        // If ResizeObserver fails to emit an event telling us what size to use - default to the mobile view\n        this.makeDashboardInsidesVisibleAnywayTimeout = setTimeout(() => {\n            const pluginState = this.getPluginState();\n            const isModalAndClosed = !this.opts.inline && pluginState.isHidden;\n            if (\n            // We might want to enable this in the future\n            // if ResizeObserver hasn't yet fired,\n            !pluginState.areInsidesReadyToBeVisible &&\n                // and it's not due to the modal being closed\n                !isModalAndClosed) {\n                this.uppy.log('[Dashboard] resize event didn\u2019t fire on time: defaulted to mobile layout', 'warning');\n                this.setPluginState({\n                    areInsidesReadyToBeVisible: true,\n                });\n            }\n        }, 1000);\n    };\n    stopListeningToResize = () => {\n        this.resizeObserver.disconnect();\n        clearTimeout(this.makeDashboardInsidesVisibleAnywayTimeout);\n    };\n    // Records whether we have been interacting with uppy right now,\n    // which is then used to determine whether state updates should trigger a refocusing.\n    recordIfFocusedOnUppyRecently = (event) => {\n        if (this.el.contains(event.target)) {\n            this.ifFocusedOnUppyRecently = true;\n        }\n        else {\n            this.ifFocusedOnUppyRecently = false;\n            // ___Why run this.superFocus.cancel here when it already runs in superFocusOnEachUpdate?\n            //    Because superFocus is debounced, when we move from Uppy to some other element on the page,\n            //    previously run superFocus sometimes hits and moves focus back to Uppy.\n            this.superFocus.cancel();\n        }\n    };\n    disableInteractiveElements = (disable) => {\n        const NODES_TO_DISABLE = [\n            'a[href]',\n            'input:not([disabled])',\n            'select:not([disabled])',\n            'textarea:not([disabled])',\n            'button:not([disabled])',\n            '[role=\"button\"]:not([disabled])',\n        ];\n        const nodesToDisable = this.#disabledNodes ??\n            toArray(this.el.querySelectorAll(NODES_TO_DISABLE)).filter((node) => !node.classList.contains('uppy-Dashboard-close'));\n        for (const node of nodesToDisable) {\n            // Links can\u2019t have `disabled` attr, so we use `aria-disabled` for a11y\n            if (node.tagName === 'A') {\n                node.setAttribute('aria-disabled', disable);\n            }\n            else {\n                node.disabled = disable;\n            }\n        }\n        if (disable) {\n            this.#disabledNodes = nodesToDisable;\n        }\n        else {\n            this.#disabledNodes = null;\n        }\n        this.dashboardIsDisabled = disable;\n    };\n    updateBrowserHistory = () => {\n        // Ensure history state does not already contain our modal name to avoid double-pushing\n        if (!history.state?.[this.modalName]) {\n            // Push to history so that the page is not lost on browser back button press\n            history.pushState({\n                ...history.state,\n                [this.modalName]: true,\n            }, '');\n        }\n        // Listen for back button presses\n        window.addEventListener('popstate', this.handlePopState, false);\n    };\n    handlePopState = (event) => {\n        // Close the modal if the history state no longer contains our modal name\n        if (this.isModalOpen() && (!event.state || !event.state[this.modalName])) {\n            this.closeModal({ manualClose: false });\n        }\n        // When the browser back button is pressed and uppy is now the latest entry\n        // in the history but the modal is closed, fix the history by removing the\n        // uppy history entry.\n        // This occurs when another entry is added into the history state while the\n        // modal is open, and then the modal gets manually closed.\n        // Solves PR #575 (https://github.com/transloadit/uppy/pull/575)\n        if (!this.isModalOpen() && event.state?.[this.modalName]) {\n            history.back();\n        }\n    };\n    handleKeyDownInModal = (event) => {\n        // close modal on esc key press\n        if (event.keyCode === ESC_KEY)\n            this.requestCloseModal();\n        // trap focus on tab key press\n        if (event.keyCode === TAB_KEY)\n            trapFocus.forModal(event, this.getPluginState().activeOverlayType, this.el);\n    };\n    handleClickOutside = () => {\n        if (this.opts.closeModalOnClickOutside)\n            this.requestCloseModal();\n    };\n    handlePaste = (event) => {\n        // Let any acquirer plugin (Url/Webcam/etc.) handle pastes to the root\n        this.uppy.iteratePlugins((plugin) => {\n            if (plugin.type === 'acquirer') {\n                // Every Plugin with .type acquirer can define handleRootPaste(event)\n                ;\n                plugin.handleRootPaste?.(event);\n            }\n        });\n        // Add all dropped files\n        const files = toArray(event.clipboardData.files);\n        if (files.length > 0) {\n            this.uppy.log('[Dashboard] Files pasted');\n            this.addFiles(files);\n        }\n    };\n    handleInputChange = (event) => {\n        event.preventDefault();\n        const files = toArray(event.currentTarget.files || []);\n        if (files.length > 0) {\n            this.uppy.log('[Dashboard] Files selected through input');\n            this.addFiles(files);\n        }\n    };\n    handleDragOver = (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        // Check if some plugin can handle the datatransfer without files \u2014\n        // for instance, the Url plugin can import a url\n        const canSomePluginHandleRootDrop = () => {\n            let somePluginCanHandleRootDrop = true;\n            this.uppy.iteratePlugins((plugin) => {\n                if (plugin.canHandleRootDrop?.(event)) {\n                    somePluginCanHandleRootDrop = true;\n                }\n            });\n            return somePluginCanHandleRootDrop;\n        };\n        // Check if the \"type\" of the datatransfer object includes files\n        const doesEventHaveFiles = () => {\n            const { types } = event.dataTransfer;\n            return types.some((type) => type === 'Files');\n        };\n        // Deny drop, if no plugins can handle datatransfer, there are no files,\n        // or when opts.disabled is set, or new uploads are not allowed\n        const somePluginCanHandleRootDrop = canSomePluginHandleRootDrop();\n        const hasFiles = doesEventHaveFiles();\n        if ((!somePluginCanHandleRootDrop && !hasFiles) ||\n            this.opts.disabled ||\n            // opts.disableLocalFiles should only be taken into account if no plugins\n            // can handle the datatransfer\n            (this.opts.disableLocalFiles &&\n                (hasFiles || !somePluginCanHandleRootDrop)) ||\n            !this.uppy.getState().allowNewUpload) {\n            event.dataTransfer.dropEffect = 'none';\n            return;\n        }\n        // Add a small (+) icon on drop\n        // (and prevent browsers from interpreting this as files being _moved_ into the\n        // browser, https://github.com/transloadit/uppy/issues/1978).\n        event.dataTransfer.dropEffect = 'copy';\n        this.setPluginState({ isDraggingOver: true });\n        this.opts.onDragOver(event);\n    };\n    handleDragLeave = (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        this.setPluginState({ isDraggingOver: false });\n        this.opts.onDragLeave(event);\n    };\n    handleDrop = async (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        this.setPluginState({ isDraggingOver: false });\n        // Let any acquirer plugin (Url/Webcam/etc.) handle drops to the root\n        this.uppy.iteratePlugins((plugin) => {\n            if (plugin.type === 'acquirer') {\n                // Every Plugin with .type acquirer can define handleRootDrop(event)\n                ;\n                plugin.handleRootDrop?.(event);\n            }\n        });\n        // Add all dropped files\n        let executedDropErrorOnce = false;\n        const logDropError = (error) => {\n            this.uppy.log(error, 'error');\n            // In practice all drop errors are most likely the same,\n            // so let's just show one to avoid overwhelming the user\n            if (!executedDropErrorOnce) {\n                this.uppy.info(error.message, 'error');\n                executedDropErrorOnce = true;\n            }\n        };\n        this.uppy.log('[Dashboard] Processing dropped files');\n        // Add all dropped files\n        const files = await getDroppedFiles(event.dataTransfer, { logDropError });\n        if (files.length > 0) {\n            this.uppy.log('[Dashboard] Files dropped');\n            this.addFiles(files);\n        }\n        this.opts.onDrop(event);\n    };\n    handleRequestThumbnail = (file) => {\n        if (!this.opts.waitForThumbnailsBeforeUpload) {\n            this.uppy.emit('thumbnail:request', file);\n        }\n    };\n    /**\n     * We cancel thumbnail requests when a file item component unmounts to avoid\n     * clogging up the queue when the user scrolls past many elements.\n     */\n    handleCancelThumbnail = (file) => {\n        if (!this.opts.waitForThumbnailsBeforeUpload) {\n            this.uppy.emit('thumbnail:cancel', file);\n        }\n    };\n    handleKeyDownInInline = (event) => {\n        // Trap focus on tab key press.\n        if (event.keyCode === TAB_KEY)\n            trapFocus.forInline(event, this.getPluginState().activeOverlayType, this.el);\n    };\n    // ___Why do we listen to the 'paste' event on a document instead of onPaste={props.handlePaste} prop,\n    //    or this.el.addEventListener('paste')?\n    //    Because (at least) Chrome doesn't handle paste if focus is on some button, e.g. 'My Device'.\n    //    => Therefore, the best option is to listen to all 'paste' events, and only react to them when we are focused on our\n    //       particular Uppy instance.\n    // ___Why do we still need onPaste={props.handlePaste} for the DashboardUi?\n    //    Because if we click on the 'Drop files here' caption e.g., `document.activeElement` will be 'body'. Which means our\n    //    standard determination of whether we're pasting into our Uppy instance won't work.\n    //    => Therefore, we need a traditional onPaste={props.handlePaste} handler too.\n    handlePasteOnBody = (event) => {\n        const isFocusInOverlay = this.el.contains(document.activeElement);\n        if (isFocusInOverlay) {\n            this.handlePaste(event);\n        }\n    };\n    handleComplete = ({ failed }) => {\n        if (this.opts.closeAfterFinish && !failed?.length) {\n            // All uploads are done\n            this.requestCloseModal();\n        }\n    };\n    #generateLargeThumbnailIfSingleFile = () => {\n        if (this.opts.disableThumbnailGenerator) {\n            return;\n        }\n        const LARGE_THUMBNAIL = 600;\n        const files = this.uppy.getFiles();\n        if (files.length === 1) {\n            const thumbnailGenerator = this.uppy.getPlugin(`${this.id}:ThumbnailGenerator`);\n            thumbnailGenerator?.setOptions({ thumbnailWidth: LARGE_THUMBNAIL });\n            const fileForThumbnail = { ...files[0], preview: undefined };\n            thumbnailGenerator?.requestThumbnail(fileForThumbnail).then(() => {\n                thumbnailGenerator?.setOptions({\n                    thumbnailWidth: this.opts.thumbnailWidth,\n                });\n            });\n        }\n    };\n    #openFileEditorWhenFilesAdded = (files) => {\n        const firstFile = files[0];\n        const { metaFields } = this.getPluginState();\n        const isMetaEditorEnabled = metaFields && metaFields.length > 0;\n        const isImageEditorEnabled = this.canEditFile(firstFile);\n        if (isMetaEditorEnabled && this.opts.autoOpen === 'metaEditor') {\n            this.toggleFileCard(true, firstFile.id);\n        }\n        else if (isImageEditorEnabled && this.opts.autoOpen === 'imageEditor') {\n            this.openFileEditor(firstFile);\n        }\n    };\n    initEvents = () => {\n        // Modal open button\n        if (this.opts.trigger && !this.opts.inline) {\n            const showModalTrigger = findAllDOMElements(this.opts.trigger);\n            if (showModalTrigger) {\n                showModalTrigger.forEach((trigger) => trigger.addEventListener('click', this.openModal));\n            }\n            else {\n                this.uppy.log('Dashboard modal trigger not found. Make sure `trigger` is set in Dashboard options, unless you are planning to call `dashboard.openModal()` method yourself', 'warning');\n            }\n        }\n        this.startListeningToResize();\n        document.addEventListener('paste', this.handlePasteOnBody);\n        this.uppy.on('plugin-added', this.#addSupportedPluginIfNoTarget);\n        this.uppy.on('plugin-remove', this.removeTarget);\n        this.uppy.on('file-added', this.hideAllPanels);\n        this.uppy.on('dashboard:modal-closed', this.hideAllPanels);\n        this.uppy.on('complete', this.handleComplete);\n        this.uppy.on('files-added', this.#generateLargeThumbnailIfSingleFile);\n        this.uppy.on('file-removed', this.#generateLargeThumbnailIfSingleFile);\n        // ___Why fire on capture?\n        //    Because this.ifFocusedOnUppyRecently needs to change before onUpdate() fires.\n        document.addEventListener('focus', this.recordIfFocusedOnUppyRecently, true);\n        document.addEventListener('click', this.recordIfFocusedOnUppyRecently, true);\n        if (this.opts.inline) {\n            this.el.addEventListener('keydown', this.handleKeyDownInInline);\n        }\n        if (this.opts.autoOpen) {\n            this.uppy.on('files-added', this.#openFileEditorWhenFilesAdded);\n        }\n    };\n    removeEvents = () => {\n        const showModalTrigger = findAllDOMElements(this.opts.trigger);\n        if (!this.opts.inline && showModalTrigger) {\n            showModalTrigger.forEach((trigger) => trigger.removeEventListener('click', this.openModal));\n        }\n        this.stopListeningToResize();\n        document.removeEventListener('paste', this.handlePasteOnBody);\n        window.removeEventListener('popstate', this.handlePopState, false);\n        this.uppy.off('plugin-added', this.#addSupportedPluginIfNoTarget);\n        this.uppy.off('plugin-remove', this.removeTarget);\n        this.uppy.off('file-added', this.hideAllPanels);\n        this.uppy.off('dashboard:modal-closed', this.hideAllPanels);\n        this.uppy.off('complete', this.handleComplete);\n        this.uppy.off('files-added', this.#generateLargeThumbnailIfSingleFile);\n        this.uppy.off('file-removed', this.#generateLargeThumbnailIfSingleFile);\n        document.removeEventListener('focus', this.recordIfFocusedOnUppyRecently, true);\n        document.removeEventListener('click', this.recordIfFocusedOnUppyRecently, true);\n        if (this.opts.inline) {\n            this.el.removeEventListener('keydown', this.handleKeyDownInInline);\n        }\n        if (this.opts.autoOpen) {\n            this.uppy.off('files-added', this.#openFileEditorWhenFilesAdded);\n        }\n    };\n    superFocusOnEachUpdate = () => {\n        const isFocusInUppy = this.el.contains(document.activeElement);\n        // When focus is lost on the page (== focus is on body for most browsers, or focus is null for IE11)\n        const isFocusNowhere = document.activeElement === document.body ||\n            document.activeElement === null;\n        const isInformerHidden = this.uppy.getState().info.length === 0;\n        const isModal = !this.opts.inline;\n        if (\n        // If update is connected to showing the Informer - let the screen reader calmly read it.\n        isInformerHidden &&\n            // If we are in a modal - always superfocus without concern for other elements\n            // on the page (user is unlikely to want to interact with the rest of the page)\n            (isModal ||\n                // If we are already inside of Uppy, or\n                isFocusInUppy ||\n                // If we are not focused on anything BUT we have already, at least once, focused on uppy\n                //   1. We focus when isFocusNowhere, because when the element we were focused\n                //      on disappears (e.g. an overlay), - focus gets lost. If user is typing\n                //      something somewhere else on the page, - focus won't be 'nowhere'.\n                //   2. We only focus when focus is nowhere AND this.ifFocusedOnUppyRecently,\n                //      to avoid focus jumps if we do something else on the page.\n                //   [Practical check] Without '&& this.ifFocusedOnUppyRecently', in Safari, in inline mode,\n                //                     when file is uploading, - navigate via tab to the checkbox,\n                //                     try to press space multiple times. Focus will jump to Uppy.\n                (isFocusNowhere && this.ifFocusedOnUppyRecently))) {\n            this.superFocus(this.el, this.getPluginState().activeOverlayType);\n        }\n        else {\n            this.superFocus.cancel();\n        }\n    };\n    afterUpdate = () => {\n        if (this.opts.disabled && !this.dashboardIsDisabled) {\n            this.disableInteractiveElements(true);\n            return;\n        }\n        if (!this.opts.disabled && this.dashboardIsDisabled) {\n            this.disableInteractiveElements(false);\n        }\n        this.superFocusOnEachUpdate();\n    };\n    saveFileCard = (meta, fileID) => {\n        this.uppy.setFileMeta(fileID, meta);\n        this.toggleFileCard(false, fileID);\n    };\n    #attachRenderFunctionToTarget = (target) => {\n        const plugin = this.uppy.getPlugin(target.id);\n        return {\n            ...target,\n            icon: plugin.icon || this.opts.defaultPickerIcon,\n            render: plugin.render,\n        };\n    };\n    #isTargetSupported = (target) => {\n        const plugin = this.uppy.getPlugin(target.id);\n        // If the plugin does not provide a `supported` check, assume the plugin works everywhere.\n        if (typeof plugin.isSupported !== 'function') {\n            return true;\n        }\n        return plugin.isSupported();\n    };\n    #getAcquirers = (targets) => {\n        return targets\n            .filter((target) => target.type === 'acquirer' && this.#isTargetSupported(target))\n            .map(this.#attachRenderFunctionToTarget);\n    };\n    #getProgressIndicators = (targets) => {\n        return targets\n            .filter((target) => target.type === 'progressindicator')\n            .map(this.#attachRenderFunctionToTarget);\n    };\n    #getEditors = (targets) => {\n        return targets\n            .filter((target) => target.type === 'editor')\n            .map(this.#attachRenderFunctionToTarget);\n    };\n    render = (state) => {\n        const pluginState = this.getPluginState();\n        const { files, capabilities, allowNewUpload } = state;\n        const { newFiles, uploadStartedFiles, completeFiles, erroredFiles, inProgressFiles, inProgressNotPausedFiles, processingFiles, isUploadStarted, isAllComplete, isAllPaused, } = this.uppy.getObjectOfFilesPerState();\n        const acquirers = this.#getAcquirers(pluginState.targets);\n        const progressindicators = this.#getProgressIndicators(pluginState.targets);\n        const editors = this.#getEditors(pluginState.targets);\n        let theme;\n        if (this.opts.theme === 'auto') {\n            theme = capabilities.darkMode ? 'dark' : 'light';\n        }\n        else {\n            theme = this.opts.theme;\n        }\n        if (['files', 'folders', 'both'].indexOf(this.opts.fileManagerSelectionType) <\n            0) {\n            this.opts.fileManagerSelectionType = 'files';\n            console.warn(`Unsupported option for \"fileManagerSelectionType\". Using default of \"${this.opts.fileManagerSelectionType}\".`);\n        }\n        return DashboardUI({\n            state,\n            isHidden: pluginState.isHidden,\n            files,\n            newFiles,\n            uploadStartedFiles,\n            completeFiles,\n            erroredFiles,\n            inProgressFiles,\n            inProgressNotPausedFiles,\n            processingFiles,\n            isUploadStarted,\n            isAllComplete,\n            isAllPaused,\n            totalFileCount: Object.keys(files).length,\n            totalProgress: state.totalProgress,\n            allowNewUpload,\n            acquirers,\n            theme,\n            disabled: this.opts.disabled,\n            disableLocalFiles: this.opts.disableLocalFiles,\n            direction: this.opts.direction,\n            activePickerPanel: pluginState.activePickerPanel,\n            showFileEditor: pluginState.showFileEditor,\n            saveFileEditor: this.saveFileEditor,\n            closeFileEditor: this.closeFileEditor,\n            disableInteractiveElements: this.disableInteractiveElements,\n            animateOpenClose: this.opts.animateOpenClose,\n            isClosing: pluginState.isClosing,\n            progressindicators,\n            editors,\n            autoProceed: this.uppy.opts.autoProceed,\n            id: this.id,\n            closeModal: this.requestCloseModal,\n            handleClickOutside: this.handleClickOutside,\n            handleInputChange: this.handleInputChange,\n            handlePaste: this.handlePaste,\n            inline: this.opts.inline,\n            showPanel: this.showPanel,\n            hideAllPanels: this.hideAllPanels,\n            i18n: this.i18n,\n            i18nArray: this.i18nArray,\n            uppy: this.uppy,\n            note: this.opts.note,\n            recoveredState: state.recoveredState,\n            metaFields: pluginState.metaFields,\n            resumableUploads: capabilities.resumableUploads || false,\n            individualCancellation: capabilities.individualCancellation,\n            isMobileDevice: capabilities.isMobileDevice,\n            fileCardFor: pluginState.fileCardFor,\n            toggleFileCard: this.toggleFileCard,\n            toggleAddFilesPanel: this.toggleAddFilesPanel,\n            showAddFilesPanel: pluginState.showAddFilesPanel,\n            saveFileCard: this.saveFileCard,\n            openFileEditor: this.openFileEditor,\n            canEditFile: this.canEditFile,\n            width: this.opts.width,\n            height: this.opts.height,\n            showLinkToFileUploadResult: this.opts.showLinkToFileUploadResult,\n            fileManagerSelectionType: this.opts.fileManagerSelectionType,\n            proudlyDisplayPoweredByUppy: this.opts.proudlyDisplayPoweredByUppy,\n            showRemoveButtonAfterComplete: this.opts.showRemoveButtonAfterComplete,\n            containerWidth: pluginState.containerWidth,\n            containerHeight: pluginState.containerHeight,\n            areInsidesReadyToBeVisible: pluginState.areInsidesReadyToBeVisible,\n            parentElement: this.el,\n            allowedFileTypes: this.uppy.opts.restrictions.allowedFileTypes,\n            maxNumberOfFiles: this.uppy.opts.restrictions.maxNumberOfFiles,\n            requiredMetaFields: this.uppy.opts.restrictions.requiredMetaFields,\n            showSelectedFiles: this.opts.showSelectedFiles,\n            showNativePhotoCameraButton: this.opts.showNativePhotoCameraButton,\n            showNativeVideoCameraButton: this.opts.showNativeVideoCameraButton,\n            nativeCameraFacingMode: this.opts.nativeCameraFacingMode,\n            singleFileFullScreen: this.opts.singleFileFullScreen,\n            handleRequestThumbnail: this.handleRequestThumbnail,\n            handleCancelThumbnail: this.handleCancelThumbnail,\n            // drag props\n            isDraggingOver: pluginState.isDraggingOver,\n            handleDragOver: this.handleDragOver,\n            handleDragLeave: this.handleDragLeave,\n            handleDrop: this.handleDrop,\n            // informer props\n            disableInformer: this.opts.disableInformer,\n            // status-bar props\n            disableStatusBar: this.opts.disableStatusBar,\n            hideProgressDetails: this.opts.hideProgressDetails,\n            hideUploadButton: this.opts.hideUploadButton,\n            hideRetryButton: this.opts.hideRetryButton,\n            hidePauseResumeButton: this.opts.hidePauseResumeButton,\n            hideCancelButton: this.opts.hideCancelButton,\n            hideProgressAfterFinish: this.opts.hideProgressAfterFinish,\n            doneButtonHandler: this.opts.doneButtonHandler,\n        });\n    };\n    #addSpecifiedPluginsFromOptions = () => {\n        const { plugins } = this.opts;\n        plugins.forEach((pluginID) => {\n            const plugin = this.uppy.getPlugin(pluginID);\n            if (plugin) {\n                ;\n                plugin.mount(this, plugin);\n            }\n            else {\n                this.uppy.log(`[Uppy] Dashboard could not find plugin '${pluginID}', make sure to uppy.use() the plugins you are specifying`, 'warning');\n            }\n        });\n    };\n    #autoDiscoverPlugins = () => {\n        this.uppy.iteratePlugins(this.#addSupportedPluginIfNoTarget);\n    };\n    #addSupportedPluginIfNoTarget = (plugin) => {\n        // Only these types belong on the Dashboard,\n        // we wouldn\u2019t want to try and mount Compressor or Tus, for example.\n        const typesAllowed = ['acquirer', 'editor'];\n        if (plugin && !plugin.opts?.target && typesAllowed.includes(plugin.type)) {\n            const pluginAlreadyAdded = this.getPluginState().targets.some((installedPlugin) => plugin.id === installedPlugin.id);\n            if (!pluginAlreadyAdded) {\n                ;\n                plugin.mount(this, plugin);\n            }\n        }\n    };\n    #getThumbnailGeneratorOpts() {\n        const { thumbnailWidth, thumbnailHeight, thumbnailType, waitForThumbnailsBeforeUpload, } = this.opts;\n        return {\n            thumbnailWidth,\n            thumbnailHeight,\n            thumbnailType,\n            waitForThumbnailsBeforeUpload,\n            // If we don't block on thumbnails, we can lazily generate them\n            lazy: !waitForThumbnailsBeforeUpload,\n        };\n    }\n    setOptions(opts) {\n        super.setOptions(opts);\n        this.uppy\n            .getPlugin(this.#getThumbnailGeneratorId())\n            ?.setOptions(this.#getThumbnailGeneratorOpts());\n    }\n    #getThumbnailGeneratorId() {\n        return `${this.id}:ThumbnailGenerator`;\n    }\n    install = () => {\n        // Set default state for Dashboard\n        this.setPluginState({\n            isHidden: true,\n            fileCardFor: null,\n            activeOverlayType: null,\n            showAddFilesPanel: false,\n            activePickerPanel: undefined,\n            showFileEditor: false,\n            metaFields: this.opts.metaFields,\n            targets: [],\n            // We'll make them visible once .containerWidth is determined\n            areInsidesReadyToBeVisible: false,\n            isDraggingOver: false,\n        });\n        const { inline, closeAfterFinish } = this.opts;\n        if (inline && closeAfterFinish) {\n            throw new Error('[Dashboard] `closeAfterFinish: true` cannot be used on an inline Dashboard, because an inline Dashboard cannot be closed at all. Either set `inline: false`, or disable the `closeAfterFinish` option.');\n        }\n        const { allowMultipleUploads, allowMultipleUploadBatches } = this.uppy.opts;\n        if ((allowMultipleUploads || allowMultipleUploadBatches) &&\n            closeAfterFinish) {\n            this.uppy.log('[Dashboard] When using `closeAfterFinish`, we recommended setting the `allowMultipleUploadBatches` option to `false` in the Uppy constructor. See https://uppy.io/docs/uppy/#allowMultipleUploads-true', 'warning');\n        }\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n        if (!this.opts.disableThumbnailGenerator) {\n            this.uppy.use(ThumbnailGenerator, {\n                id: this.#getThumbnailGeneratorId(),\n                ...this.#getThumbnailGeneratorOpts(),\n            });\n        }\n        // Dark Mode / theme\n        this.darkModeMediaQuery =\n            typeof window !== 'undefined' && window.matchMedia\n                ? window.matchMedia('(prefers-color-scheme: dark)')\n                : null;\n        const isDarkModeOnFromTheStart = this.darkModeMediaQuery\n            ? this.darkModeMediaQuery.matches\n            : false;\n        this.uppy.log(`[Dashboard] Dark mode is ${isDarkModeOnFromTheStart ? 'on' : 'off'}`);\n        this.setDarkModeCapability(isDarkModeOnFromTheStart);\n        if (this.opts.theme === 'auto') {\n            this.darkModeMediaQuery?.addListener(this.handleSystemDarkModeChange);\n        }\n        this.#addSpecifiedPluginsFromOptions();\n        this.#autoDiscoverPlugins();\n        this.initEvents();\n    };\n    uninstall = () => {\n        if (!this.opts.disableThumbnailGenerator) {\n            const thumbnail = this.uppy.getPlugin(`${this.id}:ThumbnailGenerator`);\n            if (thumbnail)\n                this.uppy.removePlugin(thumbnail);\n        }\n        const { plugins } = this.opts;\n        plugins.forEach((pluginID) => {\n            const plugin = this.uppy.getPlugin(pluginID);\n            if (plugin)\n                plugin.unmount();\n        });\n        if (this.opts.theme === 'auto') {\n            this.darkModeMediaQuery?.removeListener(this.handleSystemDarkModeChange);\n        }\n        if (this.opts.disablePageScrollWhenModalOpen) {\n            document.body.classList.remove('uppy-Dashboard-isFixed');\n        }\n        this.unmount();\n        this.removeEvents();\n    };\n}\n", "{\n  \"name\": \"@uppy/drag-drop\",\n  \"description\": \"Droppable zone UI for Uppy. Drag and drop files into it to upload.\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\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  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"drag-drop\",\n    \"drag\",\n    \"drop\",\n    \"dropzone\",\n    \"upload\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\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}\n", "export default {\n    strings: {\n        // Text to show on the droppable area.\n        // `%{browse}` is replaced with a link that opens the system file selection dialog.\n        dropHereOr: 'Drop here or %{browse}',\n        // Used as the label for the link that opens the system file selection dialog.\n        browse: 'browse',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { UIPlugin } from '@uppy/core';\nimport { getDroppedFiles, isDragDropSupported, toArray } from '@uppy/utils';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nconst defaultOptions = {\n    inputName: 'files[]',\n    width: '100%',\n    height: '100%',\n};\n/**\n * Drag & Drop plugin\n *\n */\nexport default class DragDrop extends UIPlugin {\n    static VERSION = packageJson.version;\n    // Check for browser dragDrop support\n    isDragDropSupported = isDragDropSupported();\n    fileInputRef;\n    constructor(uppy, opts) {\n        super(uppy, {\n            ...defaultOptions,\n            ...opts,\n        });\n        this.type = 'acquirer';\n        this.id = this.opts.id || 'DragDrop';\n        this.title = 'Drag & Drop';\n        this.defaultLocale = locale;\n        this.i18nInit();\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        try {\n            this.uppy.addFiles(descriptors);\n        }\n        catch (err) {\n            this.uppy.log(err);\n        }\n    };\n    onInputChange = (event) => {\n        const files = toArray(event.currentTarget.files || []);\n        if (files.length > 0) {\n            this.uppy.log('[DragDrop] Files selected through input');\n            this.addFiles(files);\n        }\n        // Clear the input so that Chrome can detect file section when the same file is repeatedly selected\n        // (see https://github.com/transloadit/uppy/issues/768#issuecomment-2264902758)\n        event.currentTarget.value = '';\n    };\n    handleDragOver = (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        // Check if the \"type\" of the datatransfer object includes files. If not, deny drop.\n        const { types } = event.dataTransfer;\n        const hasFiles = types.some((type) => type === 'Files');\n        const { allowNewUpload } = this.uppy.getState();\n        if (!hasFiles || !allowNewUpload) {\n            event.dataTransfer.dropEffect = 'none';\n            return;\n        }\n        // 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        //\n        event.dataTransfer.dropEffect = 'copy';\n        this.setPluginState({ isDraggingOver: true });\n        this.opts.onDragOver?.(event);\n    };\n    handleDragLeave = (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        this.setPluginState({ isDraggingOver: false });\n        this.opts.onDragLeave?.(event);\n    };\n    handleDrop = async (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        this.setPluginState({ isDraggingOver: false });\n        const logDropError = (error) => {\n            this.uppy.log(error, 'error');\n        };\n        // Add all dropped files\n        const files = await getDroppedFiles(event.dataTransfer, { logDropError });\n        if (files.length > 0) {\n            this.uppy.log('[DragDrop] Files dropped');\n            this.addFiles(files);\n        }\n        this.opts.onDrop?.(event);\n    };\n    renderHiddenFileInput() {\n        const { restrictions } = this.uppy.opts;\n        return (_jsx(\"input\", { className: \"uppy-DragDrop-input\", type: \"file\", hidden: true, ref: (ref) => {\n                this.fileInputRef = ref;\n            }, name: this.opts.inputName, multiple: restrictions.maxNumberOfFiles !== 1, accept: restrictions.allowedFileTypes?.join(', '), onChange: this.onInputChange }));\n    }\n    static renderArrowSvg() {\n        return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon uppy-DragDrop-arrow\", width: \"16\", height: \"16\", viewBox: \"0 0 16 16\", children: _jsx(\"path\", { d: \"M11 10V0H5v10H2l6 6 6-6h-3zm0 0\", fillRule: \"evenodd\" }) }));\n    }\n    renderLabel() {\n        return (_jsx(\"div\", { className: \"uppy-DragDrop-label\", children: this.i18nArray('dropHereOr', {\n                browse: (_jsx(\"span\", { className: \"uppy-DragDrop-browse\", children: this.i18n('browse') })),\n            }) }));\n    }\n    renderNote() {\n        return _jsx(\"span\", { className: \"uppy-DragDrop-note\", children: this.opts.note });\n    }\n    render() {\n        const dragDropClass = `uppy-u-reset\n      uppy-DragDrop-container\n      ${this.isDragDropSupported ? 'uppy-DragDrop--isDragDropSupported' : ''}\n      ${this.getPluginState().isDraggingOver ? 'uppy-DragDrop--isDraggingOver' : ''}\n    `;\n        const dragDropStyle = {\n            width: this.opts.width,\n            height: this.opts.height,\n        };\n        return (_jsxs(\"button\", { type: \"button\", className: dragDropClass, style: dragDropStyle, onClick: () => this.fileInputRef.click(), onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave, onDrop: this.handleDrop, children: [this.renderHiddenFileInput(), _jsxs(\"div\", { className: \"uppy-DragDrop-inner\", children: [DragDrop.renderArrowSvg(), this.renderLabel(), this.renderNote()] })] }));\n    }\n    install() {\n        const { target } = this.opts;\n        this.setPluginState({\n            isDraggingOver: false,\n        });\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.unmount();\n    }\n}\n", "{\n  \"name\": \"@uppy/drop-target\",\n  \"description\": \"Lets your users drag and drop files on a DOM element\",\n  \"version\": \"4.1.0\",\n  \"license\": \"MIT\",\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  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"drag-drop\",\n    \"drag\",\n    \"drop\",\n    \"dropzone\",\n    \"upload\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\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}\n", "import { BasePlugin } from '@uppy/core';\nimport { getDroppedFiles, toArray } from '@uppy/utils';\nimport packageJson from '../package.json' with { type: 'json' };\n// Default options\nconst defaultOpts = {\n    target: null,\n};\nfunction isFileTransfer(event) {\n    return event.dataTransfer?.types?.some((type) => type === 'Files') ?? false;\n}\n/**\n * Drop Target plugin\n *\n */\nexport default class DropTarget extends BasePlugin {\n    static VERSION = packageJson.version;\n    nodes;\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOpts, ...opts });\n        this.type = 'acquirer';\n        this.id = this.opts.id || 'DropTarget';\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        try {\n            this.uppy.addFiles(descriptors);\n        }\n        catch (err) {\n            this.uppy.log(err);\n        }\n    };\n    handleDrop = async (event) => {\n        if (!isFileTransfer(event)) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        event.currentTarget?.classList.remove('uppy-is-drag-over');\n        this.setPluginState({ isDraggingOver: false });\n        // Let any acquirer plugin (Url/Webcam/etc.) handle drops to the root\n        this.uppy.iteratePlugins((plugin) => {\n            if (plugin.type === 'acquirer') {\n                // @ts-expect-error Every Plugin with .type acquirer can define handleRootDrop(event)\n                plugin.handleRootDrop?.(event);\n            }\n        });\n        // Add all dropped files, handle errors\n        let executedDropErrorOnce = false;\n        const logDropError = (error) => {\n            this.uppy.log(error, 'error');\n            // In practice all drop errors are most likely the same,\n            // so let's just show one to avoid overwhelming the user\n            if (!executedDropErrorOnce) {\n                this.uppy.info(error.message, 'error');\n                executedDropErrorOnce = true;\n            }\n        };\n        const files = await getDroppedFiles(event.dataTransfer, { logDropError });\n        if (files.length > 0) {\n            this.uppy.log('[DropTarget] Files were dropped');\n            this.addFiles(files);\n        }\n        this.opts.onDrop?.(event);\n    };\n    handleDragOver = (event) => {\n        if (!isFileTransfer(event)) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        // 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        event.currentTarget.classList.add('uppy-is-drag-over');\n        this.setPluginState({ isDraggingOver: true });\n        this.opts.onDragOver?.(event);\n    };\n    handleDragLeave = (event) => {\n        if (!isFileTransfer(event)) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        this.setPluginState({ isDraggingOver: false });\n        event.currentTarget?.classList.remove('uppy-is-drag-over');\n        this.opts.onDragLeave?.(event);\n    };\n    addListeners = () => {\n        const { target } = this.opts;\n        if (target instanceof Element) {\n            this.nodes = [target];\n        }\n        else if (typeof target === 'string') {\n            this.nodes = toArray(document.querySelectorAll(target));\n        }\n        if (!this.nodes || this.nodes.length === 0) {\n            throw new Error(`\"${target}\" does not match any HTML elements`);\n        }\n        this.nodes.forEach((node) => {\n            node.addEventListener('dragover', this.handleDragOver, false);\n            node.addEventListener('dragleave', this.handleDragLeave, false);\n            node.addEventListener('drop', this.handleDrop, false);\n        });\n    };\n    removeListeners = () => {\n        if (this.nodes) {\n            this.nodes.forEach((node) => {\n                node.removeEventListener('dragover', this.handleDragOver, false);\n                node.removeEventListener('dragleave', this.handleDragLeave, false);\n                node.removeEventListener('drop', this.handleDrop, false);\n            });\n        }\n    };\n    install() {\n        this.setPluginState({ isDraggingOver: false });\n        this.addListeners();\n    }\n    uninstall() {\n        this.removeListeners();\n    }\n}\n", "{\n  \"name\": \"@uppy/dropbox\",\n  \"description\": \"Import files from Dropbox, into Uppy.\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"dropbox\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "export default {\n    strings: {\n        pluginNameDropbox: 'Dropbox',\n    },\n};\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { getAllowedHosts, Provider, tokenStorage, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\nimport { ProviderViews } from '@uppy/provider-views';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nexport default class Dropbox extends UIPlugin {\n    static VERSION = packageJson.version;\n    icon;\n    provider;\n    view;\n    storage;\n    files;\n    rootFolderId = null;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.id = this.opts.id || 'Dropbox';\n        this.type = 'acquirer';\n        this.storage = this.opts.storage || tokenStorage;\n        this.files = [];\n        this.icon = () => (_jsx(\"svg\", { className: \"uppy-DashboardTab-iconDropbox\", \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsx(\"path\", { d: \"M10.5 7.5L5 10.955l5.5 3.454 5.5-3.454 5.5 3.454 5.5-3.454L21.5 7.5 16 10.955zM10.5 21.319L5 17.864l5.5-3.455 5.5 3.455zM16 17.864l5.5-3.455 5.5 3.455-5.5 3.455zM16 25.925l-5.5-3.455 5.5-3.454 5.5 3.454z\", fill: \"currentcolor\", fillRule: \"nonzero\" }) }));\n        this.opts.companionAllowedHosts = getAllowedHosts(this.opts.companionAllowedHosts, this.opts.companionUrl);\n        this.provider = new Provider(uppy, {\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionKeysParams: this.opts.companionKeysParams,\n            companionCookiesRule: this.opts.companionCookiesRule,\n            provider: 'dropbox',\n            pluginId: this.id,\n            supportsRefreshToken: true,\n        });\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameDropbox');\n        this.render = this.render.bind(this);\n    }\n    install() {\n        this.view = new ProviderViews(this, {\n            provider: this.provider,\n            loadAllFiles: true,\n            virtualList: true,\n            supportsSearch: true,\n        });\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.view.tearDown();\n        this.unmount();\n    }\n    render(state) {\n        return this.view.render(state);\n    }\n}\n", "{\n  \"name\": \"@uppy/facebook\",\n  \"description\": \"Import files from Facebook, into Uppy.\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"facebook\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "export default {\n    strings: {\n        pluginNameFacebook: 'Facebook',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { getAllowedHosts, Provider, tokenStorage, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\nimport { ProviderViews } from '@uppy/provider-views';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nexport default class Facebook extends UIPlugin {\n    static VERSION = packageJson.version;\n    icon;\n    provider;\n    view;\n    storage;\n    files;\n    rootFolderId = null;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.id = this.opts.id || 'Facebook';\n        this.type = 'acquirer';\n        this.storage = this.opts.storage || tokenStorage;\n        this.files = [];\n        this.icon = () => (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsxs(\"g\", { fill: \"none\", fillRule: \"evenodd\", children: [_jsx(\"path\", { d: \"M27 16c0-6.075-4.925-11-11-11S5 9.925 5 16c0 5.49 4.023 10.041 9.281 10.866V19.18h-2.793V16h2.793v-2.423c0-2.757 1.642-4.28 4.155-4.28 1.204 0 2.462.215 2.462.215v2.707h-1.387c-1.366 0-1.792.848-1.792 1.718V16h3.05l-.487 3.18h-2.563v7.686C22.977 26.041 27 21.49 27 16\", fill: \"#1777F2\" }), _jsx(\"path\", { d: \"M20.282 19.18L20.77 16h-3.051v-2.063c0-.87.426-1.718 1.792-1.718h1.387V9.512s-1.258-.215-2.462-.215c-2.513 0-4.155 1.523-4.155 4.28V16h-2.793v3.18h2.793v7.686a11.082 11.082 0 003.438 0V19.18h2.563\", fill: \"#FFFFFE\" })] }) }));\n        this.opts.companionAllowedHosts = getAllowedHosts(this.opts.companionAllowedHosts, this.opts.companionUrl);\n        this.provider = new Provider(uppy, {\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionKeysParams: this.opts.companionKeysParams,\n            companionCookiesRule: this.opts.companionCookiesRule,\n            provider: 'facebook',\n            pluginId: this.id,\n            supportsRefreshToken: false,\n        });\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameFacebook');\n        this.render = this.render.bind(this);\n    }\n    install() {\n        this.view = new ProviderViews(this, {\n            provider: this.provider,\n        });\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.view.tearDown();\n        this.unmount();\n    }\n    render(state) {\n        const { partialTree, currentFolderId } = this.getPluginState();\n        const foldersInThisFolder = partialTree.filter((i) => i.type === 'folder' && i.parentId === currentFolderId);\n        if (foldersInThisFolder.length === 0) {\n            return this.view.render(state, {\n                viewType: 'grid',\n                showFilter: false,\n                showTitles: false,\n            });\n        }\n        return this.view.render(state);\n    }\n}\n", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar NODE_LIST_CLASSES = {\n  '[object HTMLCollection]': true,\n  '[object NodeList]': true,\n  '[object RadioNodeList]': true\n}; // .type values for elements which can appear in .elements and should be ignored\n\nvar IGNORED_ELEMENT_TYPES = {\n  'button': true,\n  'fieldset': true,\n  'reset': true,\n  'submit': true\n};\nvar CHECKED_INPUT_TYPES = {\n  'checkbox': true,\n  'radio': true\n};\nvar TRIM_RE = /^\\s+|\\s+$/g;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n/**\n * @param {HTMLFormElement} form\n * @param {Object} [options]\n * @return {Object.<string,boolean|string|string[]>} an object containing\n *   submittable value(s) held in the form's .elements collection, with\n *   properties named as per element names or ids.\n */\n\nexport default function getFormData(form, options) {\n  if (!form) {\n    throw new Error(\"A form is required by getFormData, was given form=\" + form);\n  }\n\n  options = _extends({\n    includeDisabled: false,\n    trim: false\n  }, options);\n  var data = {};\n  var elementName;\n  var elementNames = [];\n  var elementNameLookup = {}; // Get unique submittable element names for the form\n\n  for (var i = 0, l = form.elements.length; i < l; i++) {\n    var element = form.elements[i];\n\n    if (IGNORED_ELEMENT_TYPES[element.type] || element.disabled && !options.includeDisabled) {\n      continue;\n    }\n\n    elementName = element.name || element.id;\n\n    if (elementName && !elementNameLookup[elementName]) {\n      elementNames.push(elementName);\n      elementNameLookup[elementName] = true;\n    }\n  } // Extract element data name-by-name for consistent handling of special cases\n  // around elements which contain multiple inputs.\n\n\n  for (var _i = 0, _l = elementNames.length; _i < _l; _i++) {\n    elementName = elementNames[_i];\n    var value = getFieldData(form, elementName, options);\n\n    if (value != null) {\n      data[elementName] = value;\n    }\n  }\n\n  return data;\n}\n/**\n * @param {HTMLFormElement} form\n * @param {string} fieldName\n * @param {Object} [options]\n * @return {?(boolean|string|string[]|File|File[])} submittable value(s) in the\n *   form for a  named element from its .elements collection, or null if there\n *   was no element with that name, or the element had no submittable value(s).\n */\n\nexport function getFieldData(form, fieldName, options) {\n  if (!form) {\n    throw new Error(\"A form is required by getFieldData, was given form=\" + form);\n  }\n\n  if (!fieldName && toString.call(fieldName) !== '[object String]') {\n    throw new Error(\"A field name is required by getFieldData, was given fieldName=\" + fieldName);\n  }\n\n  options = _extends({\n    includeDisabled: false,\n    trim: false\n  }, options);\n  var element = form.elements[fieldName];\n\n  if (!element || element.disabled && !options.includeDisabled) {\n    return null;\n  }\n\n  if (!NODE_LIST_CLASSES[toString.call(element)]) {\n    return getFormElementValue(element, options.trim);\n  } // Deal with multiple form controls which have the same name\n\n\n  var data = [];\n  var allRadios = true;\n\n  for (var i = 0, l = element.length; i < l; i++) {\n    if (element[i].disabled && !options.includeDisabled) {\n      continue;\n    }\n\n    if (allRadios && element[i].type !== 'radio') {\n      allRadios = false;\n    }\n\n    var value = getFormElementValue(element[i], options.trim);\n\n    if (value != null) {\n      data = data.concat(value);\n    }\n  } // Special case for an element with multiple same-named inputs which were all\n  // radio buttons: if there was a selected value, only return the value.\n\n\n  if (allRadios && data.length === 1) {\n    return data[0];\n  }\n\n  return data.length > 0 ? data : null;\n}\n/**\n * @param {HTMLElement} element a form element.\n * @param {boolean} [trim] should values for text entry inputs be trimmed?\n * @return {?(boolean|string|string[]|File|File[])} the element's submittable\n *   value(s), or null if it had none.\n */\n\nfunction getFormElementValue(element, trim) {\n  var value = null;\n  var type = element.type;\n\n  if (type === 'select-one') {\n    if (element.options.length) {\n      value = element.options[element.selectedIndex].value;\n    }\n\n    return value;\n  }\n\n  if (type === 'select-multiple') {\n    value = [];\n\n    for (var i = 0, l = element.options.length; i < l; i++) {\n      if (element.options[i].selected) {\n        value.push(element.options[i].value);\n      }\n    }\n\n    if (value.length === 0) {\n      value = null;\n    }\n\n    return value;\n  } // If a file input doesn't have a files attribute, fall through to using its\n  // value attribute.\n\n\n  if (type === 'file' && 'files' in element) {\n    if (element.multiple) {\n      value = slice.call(element.files);\n\n      if (value.length === 0) {\n        value = null;\n      }\n    } else {\n      // Should be null if not present, according to the spec\n      value = element.files[0];\n    }\n\n    return value;\n  }\n\n  if (!CHECKED_INPUT_TYPES[type]) {\n    value = trim ? element.value.replace(TRIM_RE, '') : element.value;\n  } else if (element.checked) {\n    if (type === 'checkbox' && !element.hasAttribute('value')) {\n      value = true;\n    } else {\n      value = element.value;\n    }\n  }\n\n  return value;\n} // For UMD build access to getFieldData\n\n\ngetFormData.getFieldData = getFieldData;", "{\n  \"name\": \"@uppy/form\",\n  \"description\": \"Connect Uppy to an existing HTML <form>.\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"form\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\",\n    \"get-form-data\": \"^3.0.0\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "import { BasePlugin } from '@uppy/core';\nimport { findDOMElement, toArray } from '@uppy/utils';\n// @ts-ignore untyped\nimport getFormData from 'get-form-data';\nimport packageJson from '../package.json' with { type: 'json' };\nconst defaultOptions = {\n    resultName: 'uppyResult',\n    getMetaFromForm: true,\n    addResultToForm: true,\n    submitOnSuccess: false,\n    triggerUploadOnSubmit: false,\n};\nfunction assertHTMLFormElement(input) {\n    if (input == null || input.nodeName !== 'FORM') {\n        throw new Error('ASSERTION FAILED: the target is not a <form> element', {\n            cause: input,\n        });\n    }\n    return input;\n}\nexport default class Form extends BasePlugin {\n    static VERSION = packageJson.version;\n    #form;\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOptions, ...opts });\n        this.type = 'acquirer';\n        this.id = this.opts.id || 'Form';\n        this.handleFormSubmit = this.handleFormSubmit.bind(this);\n        this.handleUploadStart = this.handleUploadStart.bind(this);\n        this.handleSuccess = this.handleSuccess.bind(this);\n        this.addResultToForm = this.addResultToForm.bind(this);\n        this.getMetaFromForm = this.getMetaFromForm.bind(this);\n    }\n    handleUploadStart() {\n        if (this.opts.getMetaFromForm) {\n            this.getMetaFromForm();\n        }\n    }\n    handleSuccess(result) {\n        if (this.opts.addResultToForm) {\n            this.addResultToForm(result);\n        }\n        if (this.opts.submitOnSuccess) {\n            // Returns true if the element's child controls satisfy their validation constraints.\n            // When false is returned, cancelable invalid events are fired for each invalid child\n            // and validation problems are reported to the user.\n            if (this.#form.reportValidity()) {\n                this.#form.submit();\n            }\n        }\n    }\n    handleFormSubmit(ev) {\n        if (this.opts.triggerUploadOnSubmit) {\n            ev.preventDefault();\n            const elements = toArray(ev.target.elements);\n            const disabledByUppy = [];\n            elements.forEach((el) => {\n                const isButton = el.tagName === 'BUTTON' ||\n                    (el.tagName === 'INPUT' &&\n                        el.type === 'submit');\n                if (isButton && !el.disabled) {\n                    ;\n                    el.disabled = true;\n                    disabledByUppy.push(el);\n                }\n            });\n            this.uppy\n                .upload()\n                .then(() => {\n                disabledByUppy.forEach((button) => {\n                    button.disabled = false;\n                });\n            }, (err) => {\n                disabledByUppy.forEach((button) => {\n                    button.disabled = false;\n                });\n                return Promise.reject(err);\n            })\n                .catch((err) => {\n                this.uppy.log(err.stack || err.message || err);\n            });\n        }\n    }\n    addResultToForm(result) {\n        this.uppy.log('[Form] Adding result to the original form:');\n        this.uppy.log(result);\n        let resultInput = this.#form.querySelector(`[name=\"${this.opts.resultName}\"]`);\n        if (resultInput) {\n            // Append new result to the previous result array.\n            // If the previous result is empty, or not an array,\n            // set it to an empty array.\n            let updatedResult;\n            try {\n                updatedResult = JSON.parse(resultInput.value);\n            }\n            catch (_err) {\n                // Nothing, since we check for array below anyway\n            }\n            if (!Array.isArray(updatedResult)) {\n                updatedResult = [];\n            }\n            updatedResult.push(result);\n            resultInput.value = JSON.stringify(updatedResult);\n            return;\n        }\n        resultInput = document.createElement('input');\n        resultInput.name = this.opts.resultName;\n        resultInput.type = 'hidden';\n        resultInput.value = JSON.stringify([result]);\n        this.#form.appendChild(resultInput);\n    }\n    getMetaFromForm() {\n        const formMeta = getFormData(this.#form);\n        // We want to exclude meta the the Form plugin itself has added\n        // See https://github.com/transloadit/uppy/issues/1637\n        delete formMeta[this.opts.resultName];\n        this.uppy.setMeta(formMeta);\n    }\n    install() {\n        this.#form = assertHTMLFormElement(findDOMElement(this.opts.target));\n        this.#form.addEventListener('submit', this.handleFormSubmit);\n        this.uppy.on('upload', this.handleUploadStart);\n        this.uppy.on('complete', this.handleSuccess);\n    }\n    uninstall() {\n        this.#form.removeEventListener('submit', this.handleFormSubmit);\n        this.uppy.off('upload', this.handleUploadStart);\n        this.uppy.off('complete', this.handleSuccess);\n    }\n}\n", "{\n  \"name\": \"@uppy/golden-retriever\",\n  \"description\": \"The GoldenRetriever Uppy plugin saves selected files in browser cache to seamlessly resume uploding after browser crash or accidentally closed tab\",\n  \"version\": \"5.2.1\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": [\n    \"lib/ServiceWorker.js\"\n  ],\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\",\n    \"test\": \"vitest run --silent='passed-only'\",\n    \"test:e2e\": \"vitest run --project browser\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"restore files\",\n    \"crash recovery\",\n    \"golden retriever\",\n    \"resumable uploads\",\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./lib/ServiceWorker.js\": \"./lib/ServiceWorker.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\",\n    \"lodash\": \"^4.17.23\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"@uppy/dashboard\": \"workspace:^\",\n    \"@uppy/xhr-upload\": \"workspace:^\",\n    \"@vitest/browser\": \"^3.2.4\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\"\n  }\n}\n", "const indexedDB = typeof window !== 'undefined' &&\n    (window.indexedDB ||\n        // @ts-expect-error unknown\n        window.webkitIndexedDB ||\n        // @ts-expect-error unknown\n        window.mozIndexedDB ||\n        // @ts-expect-error unknown\n        window.OIndexedDB ||\n        // @ts-expect-error unknown\n        window.msIndexedDB);\nconst isSupported = !!indexedDB;\nconst DB_NAME = 'uppy-blobs';\nconst STORE_NAME = 'files'; // maybe have a thumbnail store in the future\nconst DEFAULT_EXPIRY = 24 * 60 * 60 * 1000; // 24 hours\nconst DB_VERSION = 3;\nconst MiB = 0x10_00_00;\n/**\n * Set default `expires` dates on existing stored blobs.\n */\nfunction migrateExpiration(store) {\n    const request = store.openCursor();\n    request.onsuccess = (event) => {\n        const cursor = event.target.result;\n        if (!cursor) {\n            return;\n        }\n        const entry = cursor.value;\n        entry.expires = Date.now() + DEFAULT_EXPIRY;\n        cursor.update(entry);\n    };\n}\nfunction connect(dbName) {\n    const request = indexedDB.open(dbName, DB_VERSION);\n    return new Promise((resolve, reject) => {\n        request.onupgradeneeded = (event) => {\n            const db = event.target.result;\n            const transaction = event.currentTarget\n                .transaction;\n            if (event.oldVersion < 2) {\n                // Added in v2: DB structure changed to a single shared object store\n                const store = db.createObjectStore(STORE_NAME, { keyPath: 'id' });\n                store.createIndex('store', 'store', { unique: false });\n            }\n            if (event.oldVersion < 3) {\n                // Added in v3\n                const store = transaction.objectStore(STORE_NAME);\n                store.createIndex('expires', 'expires', { unique: false });\n                migrateExpiration(store);\n            }\n            transaction.oncomplete = () => {\n                resolve(db);\n            };\n        };\n        request.onsuccess = (event) => {\n            resolve(event.target.result);\n        };\n        request.onerror = reject;\n    });\n}\nfunction waitForRequest(request) {\n    return new Promise((resolve, reject) => {\n        request.onsuccess = (event) => {\n            resolve(event.target.result);\n        };\n        request.onerror = reject;\n    });\n}\nlet cleanedUp = false;\nclass IndexedDBStore {\n    #ready;\n    opts;\n    name;\n    static isSupported;\n    constructor(opts) {\n        this.opts = {\n            dbName: DB_NAME,\n            storeName: 'default',\n            expires: DEFAULT_EXPIRY, // 24 hours\n            maxFileSize: 10 * MiB,\n            maxTotalSize: 300 * MiB,\n            ...opts,\n        };\n        this.name = this.opts.storeName;\n        const createConnection = async () => {\n            const db = await connect(this.opts.dbName);\n            this.#ready = db;\n            return db;\n        };\n        if (!cleanedUp) {\n            cleanedUp = true;\n            this.#ready = IndexedDBStore.cleanup().then(createConnection, createConnection);\n        }\n        else {\n            this.#ready = createConnection();\n        }\n    }\n    get ready() {\n        return Promise.resolve(this.#ready);\n    }\n    key(fileID) {\n        return `${this.name}!${fileID}`;\n    }\n    /**\n     * List all file blobs currently in the store.\n     */\n    async list() {\n        const db = await this.#ready;\n        const transaction = db.transaction([STORE_NAME], 'readonly');\n        const store = transaction.objectStore(STORE_NAME);\n        const request = store.index('store').getAll(IDBKeyRange.only(this.name));\n        const files = await waitForRequest(request);\n        return Object.fromEntries(files.map((file) => [file.fileID, file.data]));\n    }\n    /**\n     * Get one file blob from the store.\n     */\n    async get(fileID) {\n        const db = await this.#ready;\n        const transaction = db.transaction([STORE_NAME], 'readonly');\n        const request = transaction.objectStore(STORE_NAME).get(this.key(fileID));\n        const { data } = await waitForRequest(request);\n        return {\n            id: data.fileID,\n            data: data.data,\n        };\n    }\n    /**\n     * Get the total size of all stored files.\n     */\n    async getSize() {\n        const db = await this.#ready;\n        const transaction = db.transaction([STORE_NAME], 'readonly');\n        const store = transaction.objectStore(STORE_NAME);\n        const request = store.index('store').openCursor(IDBKeyRange.only(this.name));\n        return new Promise((resolve, reject) => {\n            let size = 0;\n            request.onsuccess = (event) => {\n                const cursor = event.target.result;\n                if (cursor) {\n                    size += cursor.value.data.size;\n                    cursor.continue();\n                }\n                else {\n                    resolve(size);\n                }\n            };\n            request.onerror = () => {\n                reject(new Error('Could not retrieve stored blobs size'));\n            };\n        });\n    }\n    /**\n     * Save a file in the store.\n     */\n    async put(file) {\n        if (file.data.size != null && file.data.size > this.opts.maxFileSize) {\n            throw new Error('File is too big to store.');\n        }\n        const size = await this.getSize();\n        if (size > this.opts.maxTotalSize) {\n            throw new Error('No space left');\n        }\n        const db = await this.#ready;\n        const transaction = db.transaction([STORE_NAME], 'readwrite');\n        const request = transaction.objectStore(STORE_NAME).add({\n            id: this.key(file.id),\n            fileID: file.id,\n            store: this.name,\n            expires: Date.now() + this.opts.expires,\n            data: file.data,\n        });\n        return waitForRequest(request);\n    }\n    /**\n     * Delete a file blob from the store.\n     */\n    async delete(fileID) {\n        const db = await this.#ready;\n        const transaction = db.transaction([STORE_NAME], 'readwrite');\n        const request = transaction.objectStore(STORE_NAME).delete(this.key(fileID));\n        return waitForRequest(request);\n    }\n    /**\n     * Delete all stored blobs that have an expiry date that is before Date.now().\n     * This is a static method because it deletes expired blobs from _all_ Uppy instances.\n     */\n    static async cleanup() {\n        const db = await connect(DB_NAME);\n        const transaction = db.transaction([STORE_NAME], 'readwrite');\n        const store = transaction.objectStore(STORE_NAME);\n        const request = store\n            .index('expires')\n            .openCursor(IDBKeyRange.upperBound(Date.now()));\n        await new Promise((resolve, reject) => {\n            request.onsuccess = (event) => {\n                const cursor = event.target.result;\n                if (cursor) {\n                    cursor.delete(); // Ignoring return value \u2026 it's not terrible if this goes wrong.\n                    cursor.continue();\n                }\n                else {\n                    resolve();\n                }\n            };\n            request.onerror = reject;\n        });\n        db.close();\n    }\n}\nIndexedDBStore.isSupported = isSupported;\nexport default IndexedDBStore;\n", "import throttle from 'lodash/throttle.js';\n/**\n * Try to JSON-parse a string, return null on failure.\n */\nfunction maybeParse(str) {\n    try {\n        return JSON.parse(str);\n    }\n    catch {\n        return null;\n    }\n}\nconst prefix = 'uppyState:';\nconst getItemKey = (name) => `${prefix}${name}`;\nfunction expireOldState() {\n    const existingKeys = [];\n    for (let i = 0; i < localStorage.length; i++) {\n        const key = localStorage.key(i);\n        if (key?.startsWith(prefix)) {\n            existingKeys.push(key);\n        }\n    }\n    const now = Date.now();\n    existingKeys.forEach((key) => {\n        const data = localStorage.getItem(key);\n        if (!data)\n            return;\n        const obj = maybeParse(data);\n        if (obj?.expires && obj.expires < now) {\n            localStorage.removeItem(key);\n        }\n    });\n}\nexport default class MetaDataStore {\n    opts;\n    name;\n    // biome doesn't seem to support #fields\n    #saveThrottled;\n    constructor(opts) {\n        this.opts = {\n            expires: 24 * 60 * 60 * 1000, // 24 hours\n            throttleTime: 500,\n            ...opts,\n        };\n        this.name = getItemKey(opts.storeName);\n        this.#saveThrottled =\n            this.opts.throttleTime === 0\n                ? this.save\n                : throttle(this.save, this.opts.throttleTime, {\n                    leading: true,\n                    trailing: true,\n                });\n    }\n    #state;\n    /**\n     *\n     */\n    load = () => {\n        expireOldState();\n        const savedState = localStorage.getItem(this.name);\n        if (!savedState)\n            return undefined;\n        const data = maybeParse(savedState);\n        if (!data)\n            return undefined;\n        this.#state = data;\n        return data.metadata;\n    };\n    get = () => {\n        return this.#state?.metadata;\n    };\n    save = () => {\n        if (this.#state === null) {\n            localStorage.removeItem(this.name);\n            return;\n        }\n        const state = JSON.stringify(this.#state);\n        localStorage.setItem(this.name, state);\n    };\n    /**\n     * Save the given metadata to localStorage, along with an expiry timestamp.\n     * If metadata is null, remove any existing stored state.\n     *\n     * @param metadata - The metadata to store, or null to clear the stored state.\n     */\n    set = (metadata) => {\n        this.#state =\n            metadata === null\n                ? null\n                : {\n                    metadata,\n                    expires: Date.now() + this.opts.expires,\n                };\n        this.#saveThrottled();\n    };\n}\n", "const isSupported = typeof navigator !== 'undefined' && 'serviceWorker' in navigator;\nfunction waitForServiceWorker() {\n    return new Promise((resolve, reject) => {\n        if (!isSupported) {\n            reject(new Error('Unsupported'));\n        }\n        else if (navigator.serviceWorker.controller) {\n            // A serviceWorker is already registered and active.\n            resolve();\n        }\n        else {\n            navigator.serviceWorker.addEventListener('controllerchange', () => {\n                resolve();\n            });\n        }\n    });\n}\nclass ServiceWorkerStore {\n    #ready;\n    name;\n    static isSupported;\n    constructor(opts) {\n        this.#ready = waitForServiceWorker().then((val) => {\n            this.#ready = val;\n        });\n        this.name = opts.storeName;\n    }\n    get ready() {\n        return Promise.resolve(this.#ready);\n    }\n    async list() {\n        await this.#ready;\n        return new Promise((resolve, reject) => {\n            const onMessage = (event) => {\n                if (event.data.store !== this.name) {\n                    return;\n                }\n                switch (event.data.type) {\n                    case 'uppy/ALL_FILES':\n                        resolve(event.data.files);\n                        navigator.serviceWorker.removeEventListener('message', onMessage);\n                        break;\n                    default:\n                        reject();\n                }\n            };\n            navigator.serviceWorker.addEventListener('message', onMessage);\n            navigator.serviceWorker.controller.postMessage({\n                type: 'uppy/GET_FILES',\n                store: this.name,\n            });\n        });\n    }\n    async put(file) {\n        await this.#ready;\n        navigator.serviceWorker.controller.postMessage({\n            type: 'uppy/ADD_FILE',\n            store: this.name,\n            file,\n        });\n    }\n    async delete(fileID) {\n        await this.#ready;\n        navigator.serviceWorker.controller.postMessage({\n            type: 'uppy/REMOVE_FILE',\n            store: this.name,\n            fileID,\n        });\n    }\n}\nServiceWorkerStore.isSupported = isSupported;\nexport default ServiceWorkerStore;\n", "import { BasePlugin } from '@uppy/core';\nimport packageJson from '../package.json' with { type: 'json' };\nimport IndexedDBStore from './IndexedDBStore.js';\nimport MetaDataStore from './MetaDataStore.js';\nimport ServiceWorkerStore from './ServiceWorkerStore.js';\nconst defaultOptions = {\n    expires: 24 * 60 * 60 * 1000, // 24 hours\n    serviceWorker: false,\n};\n/**\n * The GoldenRetriever plugin \u2014 restores selected files and resumes uploads\n * after a closed tab or a browser crash!\n *\n * Uses localStorage, IndexedDB and ServiceWorker to do its magic, read more:\n * https://uppy.io/blog/2017/07/golden-retriever/\n */\nexport default class GoldenRetriever extends BasePlugin {\n    static VERSION = packageJson.version;\n    #metaDataStore;\n    #serviceWorkerStore;\n    #indexedDBStore;\n    // @ts-expect-error for tests\n    static [Symbol.for('uppy test: throttleTime')];\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOptions, ...opts });\n        this.type = 'debugger';\n        this.id = this.opts.id || 'GoldenRetriever';\n        this.#metaDataStore = new MetaDataStore({\n            expires: this.opts.expires,\n            storeName: uppy.getID(),\n            throttleTime: \n            // @ts-expect-error for tests\n            GoldenRetriever[Symbol.for('uppy test: throttleTime')] ?? undefined,\n        });\n        if (this.opts.serviceWorker) {\n            this.#serviceWorkerStore = new ServiceWorkerStore({\n                storeName: uppy.getID(),\n            });\n        }\n        this.#indexedDBStore = new IndexedDBStore({\n            expires: this.opts.expires,\n            ...(this.opts.indexedDB || {}),\n            storeName: uppy.getID(),\n        });\n    }\n    async #restore() {\n        const recoveredState = this.#metaDataStore.load();\n        if (!recoveredState) {\n            return;\n        }\n        const currentUploads = recoveredState.currentUploads || {};\n        const recoveredFiles = Object.entries(recoveredState.files || {});\n        // If *all* files have completed *successfully*, ignore the whole stored restoration state.\n        // This makes sure that if the upload was only partially successful, the user can still restore and upload the remaining files.\n        // Here are some scenarios we have to take into account:\n        // todo (make unit/e2e tests for these scenarios)\n        // - the user removes all uploads one by one (once all are removed, we should not restore anything after reloading page)\n        // - the user uploads files with Transloadit plugin enabled, uploads complete successfully, and the user refreshes the page while the assembly is still running. golden retriever should then restore the files, and the ongoing assembly should progress\n        // - once a file finishes uploading successfully, it should have it its blob removed (even if a post processing step remains). if not successful upload it should not be removed\n        const files = Object.fromEntries(recoveredFiles.every(([, f]) => f.progress.complete && !f.error)\n            ? []\n            : recoveredFiles);\n        const filesEntries = Object.entries(files);\n        this.uppy.log(`[GoldenRetriever] Recovered ${Object.keys(currentUploads).length} current uploads and ${filesEntries.length} files from Local Storage`);\n        const hasFiles = filesEntries.length > 0;\n        if (!hasFiles) {\n            this.uppy.log('[GoldenRetriever] No files need to be loaded, restored only processing state...');\n        }\n        const [serviceWorkerBlobs, indexedDbBlobs] = await Promise.all([\n            this.#loadFileBlobsFromServiceWorker(),\n            this.#loadFileBlobsFromIndexedDB(),\n        ]);\n        const blobs = {\n            ...serviceWorkerBlobs,\n            ...indexedDbBlobs,\n        };\n        // Loop through blobs that we can restore, add blobs to file objects\n        const filesWithBlobs = Object.fromEntries(filesEntries.map(([fileID, file]) => {\n            if (file.isRemote) {\n                return [\n                    fileID,\n                    {\n                        ...file,\n                        isRestored: true,\n                        data: { size: null }, // todo shouldn't we save/restore the size too?\n                    },\n                ];\n            }\n            const blob = blobs[fileID];\n            return [\n                fileID,\n                !file.progress.uploadComplete && blob == null\n                    ? // if we don\u2019t have the blob (and the file is not completed uploading), mark the file as a ghost\n                        {\n                            ...file,\n                            isRestored: true,\n                            isGhost: true,\n                            data: undefined,\n                        }\n                    : {\n                        ...file,\n                        isRestored: true,\n                        isGhost: false,\n                        data: blob,\n                    },\n            ];\n        }));\n        this.uppy.setState({\n            recoveredState: hasFiles ? recoveredState : null, // recoveredState is used to control the UI (to show the \"recovered\" state), only set it if we actually have files\n            currentUploads: hasFiles ? currentUploads : {}, // if there are no files, no need to restore currentUploads. if we do, and the upload completes (but without completing all files) and the user re-adds some of the *same* files as before, the upload would use a subset of the files the user selected\n            files: filesWithBlobs,\n        });\n        this.uppy.emit('restored', recoveredState.pluginData); // must adhere to PersistentState interface in Transloadit\n        const obsoleteBlobs = Object.keys(blobs).filter((fileID) => !files[fileID]);\n        if (obsoleteBlobs.length) {\n            try {\n                this.uppy.log(`[GoldenRetriever] Cleaning up ${obsoleteBlobs.length} old files`);\n                await this.#deleteBlobs(obsoleteBlobs);\n            }\n            catch (err) {\n                this.uppy.log(`[GoldenRetriever] Could not clean up ${obsoleteBlobs.length} old files`, 'warning');\n                this.uppy.log(err);\n            }\n        }\n    }\n    #patchMetadata = ({ pluginData, ...patch }) => {\n        const existing = this.#metaDataStore.get();\n        this.#metaDataStore.set({\n            ...(existing ?? {\n                currentUploads: {},\n                files: {},\n            }),\n            ...patch,\n            pluginData: {\n                // pluginData is keyed by plugin id, so we merge instead of replace\n                ...existing?.pluginData,\n                ...pluginData,\n            },\n        });\n    };\n    async #loadFileBlobsFromServiceWorker() {\n        if (!this.#serviceWorkerStore) {\n            return {};\n        }\n        try {\n            const blobs = await this.#serviceWorkerStore.list();\n            const numberOfFilesRecovered = Object.keys(blobs).length;\n            this.uppy.log(numberOfFilesRecovered > 0\n                ? `[GoldenRetriever] Successfully recovered ${numberOfFilesRecovered} blobs from Service Worker!`\n                : '[GoldenRetriever] No blobs found in Service Worker');\n            return blobs;\n        }\n        catch (err) {\n            this.uppy.log('[GoldenRetriever] Failed to recover blobs from Service Worker', 'warning');\n            this.uppy.log(err);\n            return {};\n        }\n    }\n    async #loadFileBlobsFromIndexedDB() {\n        try {\n            const blobs = await this.#indexedDBStore.list();\n            const numberOfFilesRecovered = Object.keys(blobs).length;\n            this.uppy.log(numberOfFilesRecovered > 0\n                ? `[GoldenRetriever] Successfully recovered ${numberOfFilesRecovered} blobs from IndexedDB!`\n                : '[GoldenRetriever] No blobs found in IndexedDB');\n            return blobs;\n        }\n        catch (err) {\n            this.uppy.log('[GoldenRetriever] Failed to recover blobs from IndexedDB', 'warning');\n            this.uppy.log(err);\n            return {};\n        }\n    }\n    async #deleteBlobs(fileIDs) {\n        await Promise.all(fileIDs.map(async (id) => {\n            try {\n                await Promise.all([\n                    this.#serviceWorkerStore?.delete(id),\n                    this.#indexedDBStore.delete(id),\n                ]);\n            }\n            catch (err) {\n                this.uppy.log(`[GoldenRetriever] Could not remove file ${id} from all stores`, 'warning');\n                this.uppy.log(err);\n            }\n        }));\n        if (fileIDs.length > 0) {\n            this.uppy.log(`[GoldenRetriever] Removed ${fileIDs.length} blobs`);\n        }\n    }\n    async [Symbol.for('uppy test: deleteBlobs')](fileIDs) {\n        return this.#deleteBlobs(fileIDs);\n    }\n    #addBlobToStores = async (file) => {\n        const { id, data, isRemote } = file;\n        if (isRemote || data == null)\n            return;\n        await Promise.all([\n            this.#serviceWorkerStore?.put({ id, data }).catch((err) => {\n                this.uppy.log('[GoldenRetriever] Could not store file in Service Worker', 'warning');\n                this.uppy.log(err);\n            }),\n            this.#indexedDBStore.put({ id, data }).catch((err) => {\n                // idempotent; assume \"Key already exists in the object store\"\n                if (err instanceof Event &&\n                    err.target instanceof IDBRequest &&\n                    err.target.error?.name === 'ConstraintError') {\n                    return;\n                }\n                this.uppy.log('[GoldenRetriever] Could not store file in IndexedDB', 'warning');\n                this.uppy.log(err);\n            }),\n        ]);\n    };\n    #handleStateUpdate = (prevState, nextState, patch) => {\n        if (nextState.currentUploads !== prevState.currentUploads) {\n            const { currentUploads } = this.uppy.getState();\n            this.#patchMetadata({ currentUploads });\n        }\n        if (nextState.files !== prevState.files) {\n            if (Object.values(prevState.files).some((f) => !f.progress.complete) &&\n                (Object.values(nextState.files).length === 0 ||\n                    Object.values(nextState.files).every((f) => f.progress.complete && !f.error))) {\n                this.uppy.log(`[GoldenRetriever] All files have been uploaded and processed successfully, clearing recovery state`);\n                this.uppy.setState({ recoveredState: null });\n            }\n            // We don\u2019t want to store file.data on local files, because the actual blob is too large and should therefore stored separately,\n            // and we want to avoid having weird properties in the serialized object (like file.preview).\n            const filesWithoutBlobs = Object.fromEntries(Object.entries(nextState.files).map(([fileID, { data, preview, ...fileInfo }]) => [fileID, fileInfo]));\n            this.#patchMetadata({ files: filesWithoutBlobs });\n            const addedFiles = Object.values(nextState.files).filter((nextFile) => prevState.files[nextFile.id] == null);\n            const editedFileBlobs = Object.values(nextState.files).flatMap((nextFile) => {\n                const prevFile = prevState.files[nextFile.id];\n                if (prevFile != null && nextFile.data !== prevFile.data)\n                    return [nextFile];\n                return [];\n            });\n            const deletedFiles = Object.values(prevState.files).filter((prevFile) => {\n                const nextFile = nextState.files[prevFile.id];\n                // also treat successfully uploaded files as deleted (when it comes to deleting their blob)\n                return (nextFile == null ||\n                    (nextFile.progress.uploadComplete &&\n                        !prevFile.progress.uploadComplete));\n            });\n            const blobsToDelete = [...deletedFiles, ...editedFileBlobs];\n            const blobsToAdd = [...addedFiles, ...editedFileBlobs];\n            (async () => {\n                // delete old blobs that have been removed, or edited\n                await this.#deleteBlobs(blobsToDelete.map((f) => f.id));\n                // add new blobs for new files and edited files\n                for (const blob of blobsToAdd) {\n                    await this.#addBlobToStores(blob);\n                }\n                if (blobsToAdd.length > 0) {\n                    this.uppy.log(`[GoldenRetriever] Added ${blobsToAdd.length} blobs`);\n                }\n            })();\n        }\n    };\n    #handleRestoreConfirmed = () => {\n        this.uppy.log('[GoldenRetriever] Restore confirmed, proceeding...');\n        // start all uploads again when file blobs are restored\n        const { currentUploads } = this.uppy.getState();\n        if (Object.keys(currentUploads).length > 0) {\n            this.uppy.resumeAll();\n            Object.keys(currentUploads).forEach((uploadId) => {\n                this.uppy.restore(uploadId);\n            });\n        }\n        else {\n            // if there are no current uploads, but there were files added just start a new upload with the current files\n            this.uppy.upload();\n        }\n        this.uppy.setState({ recoveredState: null });\n    };\n    #handlePluginDataChanged = (data) => {\n        this.#patchMetadata({ pluginData: data });\n    };\n    install() {\n        this.#restore();\n        this.uppy.on('state-update', this.#handleStateUpdate);\n        this.uppy.on('restore-confirmed', this.#handleRestoreConfirmed);\n        this.uppy.on('restore:plugin-data-changed', this.#handlePluginDataChanged);\n    }\n    uninstall() {\n        this.uppy.off('state-update', this.#handleStateUpdate);\n        this.uppy.off('restore-confirmed', this.#handleRestoreConfirmed);\n        this.uppy.off('restore:plugin-data-changed', this.#handlePluginDataChanged);\n    }\n}\nexport { default as MetaDataStore } from './MetaDataStore.js';\n", "{\n  \"name\": \"@uppy/google-drive\",\n  \"description\": \"The Google Drive plugin for Uppy lets users import files from their Google Drive account\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"google drive\",\n    \"cloud storage\",\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "import { ProviderViews } from '@uppy/provider-views';\nexport default class DriveProviderViews extends ProviderViews {\n    toggleCheckbox(item, isShiftKeyPressed) {\n        // We don't allow to check team drives; but we leave the checkboxes visible to show the 'partial' state\n        // (For a full explanation, see https://github.com/transloadit/uppy/issues/5232)\n        if (!item.data.custom?.isSharedDrive) {\n            super.toggleCheckbox(item, isShiftKeyPressed);\n        }\n    }\n}\n", "export default {\n    strings: {\n        pluginNameGoogleDrive: 'Google Drive',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { getAllowedHosts, Provider, tokenStorage, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport DriveProviderViews from './DriveProviderViews.js';\nimport locale from './locale.js';\nexport default class GoogleDrive extends UIPlugin {\n    static VERSION = packageJson.version;\n    icon;\n    provider;\n    view;\n    storage;\n    files;\n    rootFolderId = 'root';\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.type = 'acquirer';\n        this.storage = this.opts.storage || tokenStorage;\n        this.files = [];\n        this.id = this.opts.id || 'GoogleDrive';\n        this.icon = () => (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsxs(\"g\", { fillRule: \"nonzero\", fill: \"none\", children: [_jsx(\"path\", { d: \"M6.663 22.284l.97 1.62c.202.34.492.609.832.804l3.465-5.798H5c0 .378.1.755.302 1.096l1.361 2.278z\", fill: \"#0066DA\" }), _jsx(\"path\", { d: \"M16 12.09l-3.465-5.798c-.34.195-.63.463-.832.804l-6.4 10.718A2.15 2.15 0 005 18.91h6.93L16 12.09z\", fill: \"#00AC47\" }), _jsx(\"path\", { d: \"M23.535 24.708c.34-.195.63-.463.832-.804l.403-.67 1.928-3.228c.201-.34.302-.718.302-1.096h-6.93l1.474 2.802 1.991 2.996z\", fill: \"#EA4335\" }), _jsx(\"path\", { d: \"M16 12.09l3.465-5.798A2.274 2.274 0 0018.331 6h-4.662c-.403 0-.794.11-1.134.292L16 12.09z\", fill: \"#00832D\" }), _jsx(\"path\", { d: \"M20.07 18.91h-8.14l-3.465 5.798c.34.195.73.292 1.134.292h12.802c.403 0 .794-.11 1.134-.292L20.07 18.91z\", fill: \"#2684FC\" }), _jsx(\"path\", { d: \"M23.497 12.455l-3.2-5.359a2.252 2.252 0 00-.832-.804L16 12.09l4.07 6.82h6.917c0-.377-.1-.755-.302-1.096l-3.188-5.359z\", fill: \"#FFBA00\" })] }) }));\n        this.opts.companionAllowedHosts = getAllowedHosts(this.opts.companionAllowedHosts, this.opts.companionUrl);\n        this.provider = new Provider(uppy, {\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionKeysParams: this.opts.companionKeysParams,\n            companionCookiesRule: this.opts.companionCookiesRule,\n            provider: 'drive',\n            pluginId: this.id,\n            supportsRefreshToken: true,\n        });\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameGoogleDrive');\n        this.render = this.render.bind(this);\n    }\n    install() {\n        this.view = new DriveProviderViews(this, {\n            provider: this.provider,\n            loadAllFiles: true,\n            virtualList: true,\n        });\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.view.tearDown();\n        this.unmount();\n    }\n    render(state) {\n        return this.view.render(state);\n    }\n}\n", "{\n  \"name\": \"@uppy/google-drive-picker\",\n  \"description\": \"The Google Drive Picker plugin for Uppy lets users import files from their Google Drive account\",\n  \"version\": \"1.1.1\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"google drive\",\n    \"google picker\",\n    \"cloud storage\",\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "export default {\n    strings: {\n        pluginNameGoogleDrivePicker: 'Google Drive',\n    },\n};\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { RequestClient, tokenStorage, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\nimport { GoogleDriveIcon, GooglePickerView, } from '@uppy/provider-views';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nexport default class GoogleDrivePicker extends UIPlugin {\n    static VERSION = packageJson.version;\n    static requestClientId = GoogleDrivePicker.name;\n    type = 'acquirer';\n    icon = GoogleDriveIcon;\n    storage;\n    defaultLocale = locale;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.id = this.opts.id || 'GoogleDrivePicker';\n        this.storage = this.opts.storage || tokenStorage;\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameGoogleDrivePicker');\n        const client = new RequestClient(uppy, {\n            pluginId: this.id,\n            provider: 'url',\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionCookiesRule: this.opts.companionCookiesRule,\n        });\n        this.uppy.registerRequestClient(GoogleDrivePicker.requestClientId, client);\n    }\n    install() {\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.unmount();\n    }\n    handleFilesPicked = async (files, accessToken) => {\n        this.uppy.addFiles(files.map(({ id, mimeType, name, platform, ...rest }) => {\n            return {\n                source: this.id,\n                name,\n                type: mimeType,\n                data: {\n                    size: null, // defer to companion to determine size\n                },\n                isRemote: true,\n                remote: {\n                    companionUrl: this.opts.companionUrl,\n                    url: `${this.opts.companionUrl}/google-picker/get`,\n                    body: {\n                        fileId: id,\n                        accessToken,\n                        platform,\n                        ...('url' in rest && { url: rest.url }),\n                    },\n                    requestClientId: GoogleDrivePicker.requestClientId,\n                },\n                ...('metadata' in rest && {\n                    meta: rest.metadata,\n                }), // dunno how to type this\n            };\n        }));\n    };\n    render = () => (_jsx(GooglePickerView, { storage: this.storage, pickerType: \"drive\", uppy: this.uppy, i18n: this.i18n, clientId: this.opts.clientId, apiKey: this.opts.apiKey, appId: this.opts.appId, onFilesPicked: this.handleFilesPicked }));\n}\n", "{\n  \"name\": \"@uppy/google-photos-picker\",\n  \"description\": \"The Google Photos Picker plugin for Uppy lets users import files from their Google Photos account\",\n  \"version\": \"1.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"google photos\",\n    \"google picker\",\n    \"cloud storage\",\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "export default {\n    strings: {\n        pluginNameGooglePhotosPicker: 'Google Photos',\n    },\n};\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { RequestClient, tokenStorage, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\nimport { GooglePhotosIcon, GooglePickerView, } from '@uppy/provider-views';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nexport default class GooglePhotosPicker extends UIPlugin {\n    static VERSION = packageJson.version;\n    static requestClientId = GooglePhotosPicker.name;\n    type = 'acquirer';\n    icon = GooglePhotosIcon;\n    storage;\n    defaultLocale = locale;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.id = this.opts.id || 'GooglePhotosPicker';\n        this.storage = this.opts.storage || tokenStorage;\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameGooglePhotosPicker');\n        const client = new RequestClient(uppy, {\n            pluginId: this.id,\n            provider: 'url',\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionCookiesRule: this.opts.companionCookiesRule,\n        });\n        this.uppy.registerRequestClient(GooglePhotosPicker.requestClientId, client);\n    }\n    install() {\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.unmount();\n    }\n    handleFilesPicked = async (files, accessToken) => {\n        this.uppy.addFiles(files.map(({ id, mimeType, name, platform, ...rest }) => {\n            return {\n                source: this.id,\n                name,\n                type: mimeType,\n                data: {\n                    size: null, // defer to companion to determine size\n                },\n                isRemote: true,\n                remote: {\n                    companionUrl: this.opts.companionUrl,\n                    url: `${this.opts.companionUrl}/google-picker/get`,\n                    body: {\n                        fileId: id,\n                        accessToken,\n                        platform,\n                        ...('url' in rest && { url: rest.url }),\n                    },\n                    requestClientId: GooglePhotosPicker.requestClientId,\n                },\n                ...('metadata' in rest && {\n                    meta: rest.metadata,\n                }), // dunno how to type this\n            };\n        }));\n    };\n    render = () => (_jsx(GooglePickerView, { storage: this.storage, pickerType: \"photos\", uppy: this.uppy, i18n: this.i18n, clientId: this.opts.clientId, onFilesPicked: this.handleFilesPicked }));\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { UIPlugin } from '@uppy/core';\nimport Cropper from 'cropperjs';\nimport packageJson from '../package.json' with { type: 'json' };\nimport Editor from './Editor.js';\nimport locale from './locale.js';\nimport getCanvasDataThatFitsPerfectlyIntoContainer from './utils/getCanvasDataThatFitsPerfectlyIntoContainer.js';\nimport getScaleFactorThatRemovesDarkCorners from './utils/getScaleFactorThatRemovesDarkCorners.js';\nimport limitCropboxMovementOnMove from './utils/limitCropboxMovementOnMove.js';\nimport limitCropboxMovementOnResize from './utils/limitCropboxMovementOnResize.js';\nconst defaultEditorState = {\n    angle: 0,\n    angleGranular: 0,\n    isFlippedHorizontally: false,\n    aspectRatio: 'free',\n    cropperReady: false,\n};\nconst defaultCropperOptions = {\n    viewMode: 0,\n    background: false,\n    autoCropArea: 1,\n    responsive: true,\n    minCropBoxWidth: 70,\n    minCropBoxHeight: 70,\n    croppedCanvasOptions: {},\n    initialAspectRatio: 0,\n};\nconst defaultActions = {\n    revert: true,\n    rotate: true,\n    granularRotate: true,\n    flip: true,\n    zoomIn: true,\n    zoomOut: true,\n    cropSquare: true,\n    cropWidescreen: true,\n    cropWidescreenVertical: true,\n};\nconst defaultOptions = {\n    // `quality: 1` increases the image size by orders of magnitude - 0.8 seems to be the sweet spot.\n    // see https://github.com/fengyuanchen/cropperjs/issues/538#issuecomment-1776279427\n    quality: 0.8,\n    actions: defaultActions,\n    cropperOptions: defaultCropperOptions,\n};\nexport default class ImageEditor extends UIPlugin {\n    static VERSION = packageJson.version;\n    cropper = null;\n    objectUrl = null;\n    prevCropboxData = null;\n    imgElement = null;\n    cropstartHandler = null;\n    cropendHandler = null;\n    cropperReadyHandler = null;\n    constructor(uppy, opts) {\n        super(uppy, {\n            ...defaultOptions,\n            ...opts,\n            actions: {\n                ...defaultActions,\n                ...opts?.actions,\n            },\n            cropperOptions: {\n                ...defaultCropperOptions,\n                ...opts?.cropperOptions,\n            },\n        });\n        this.id = this.opts.id || 'ImageEditor';\n        this.title = 'Image Editor';\n        this.type = 'editor';\n        this.defaultLocale = locale;\n        this.i18nInit();\n    }\n    canEditFile(file) {\n        if (!file.type || file.isRemote) {\n            return false;\n        }\n        const fileTypeSpecific = file.type.split('/')[1];\n        if (/^(jpe?g|gif|png|bmp|webp)$/.test(fileTypeSpecific)) {\n            return true;\n        }\n        return false;\n    }\n    save = () => {\n        const { currentImage } = this.getPluginState();\n        if (!currentImage)\n            return;\n        if (!this.cropper)\n            return;\n        const saveBlobCallback = (blob) => {\n            if (!blob)\n                return;\n            const fileId = currentImage.id;\n            if (!this.uppy.getFile(fileId))\n                return;\n            this.uppy.setFileState(fileId, {\n                // Reinserting image's name and type, because .toBlob loses both.\n                data: new File([blob], currentImage.name ?? this.i18n('unnamed'), {\n                    type: blob.type,\n                }),\n                size: blob.size,\n                preview: undefined,\n            });\n            const updatedFile = this.uppy.getFile(fileId);\n            if (!updatedFile)\n                return;\n            this.uppy.emit('thumbnail:request', updatedFile);\n            this.setPluginState({\n                currentImage: updatedFile,\n            });\n            this.uppy.emit('file-editor:complete', updatedFile);\n        };\n        // Fixes black 1px lines on odd-width images.\n        // This should be removed when cropperjs fixes this issue.\n        // (See https://github.com/transloadit/uppy/issues/4305 and https://github.com/fengyuanchen/cropperjs/issues/551).\n        const croppedCanvas = this.cropper.getCroppedCanvas({});\n        if (croppedCanvas.width % 2 !== 0) {\n            this.cropper.setData({ width: croppedCanvas.width - 1 });\n        }\n        if (croppedCanvas.height % 2 !== 0) {\n            this.cropper.setData({ height: croppedCanvas.height - 1 });\n        }\n        this.cropper\n            .getCroppedCanvas(this.opts.cropperOptions.croppedCanvasOptions)\n            .toBlob(saveBlobCallback, currentImage.type, this.opts.quality);\n    };\n    storeCropperInstance = (cropper) => {\n        this.cropper = cropper;\n    };\n    selectFile = (file) => {\n        this.start(file);\n    };\n    resetEditorState = (currentImage = this.getPluginState().currentImage) => {\n        this.setPluginState({\n            currentImage,\n            ...defaultEditorState,\n            // Preserve cropperReady if cropper instance exists\n            cropperReady: !!this.cropper,\n        });\n    };\n    rotateBy = (degrees) => {\n        if (!this.cropper)\n            return;\n        const { angle, angleGranular, isFlippedHorizontally } = this.getPluginState();\n        const base90 = angle - angleGranular;\n        const newAngle = base90 + degrees;\n        this.cropper.scale(isFlippedHorizontally ? -1 : 1);\n        this.cropper.rotateTo(newAngle);\n        const canvasData = this.cropper.getCanvasData();\n        const containerData = this.cropper.getContainerData();\n        const newCanvasData = getCanvasDataThatFitsPerfectlyIntoContainer(containerData, canvasData);\n        this.cropper.setCanvasData(newCanvasData);\n        this.cropper.setCropBoxData(newCanvasData);\n        this.setPluginState({\n            angle: newAngle,\n            angleGranular: 0,\n        });\n    };\n    rotateGranular = (granularAngle) => {\n        if (!this.cropper)\n            return;\n        const { angle, angleGranular, isFlippedHorizontally } = this.getPluginState();\n        const base90 = angle - angleGranular;\n        const newAngle = base90 + granularAngle;\n        this.cropper.rotateTo(newAngle);\n        const image = this.cropper.getImageData();\n        const scaleFactor = getScaleFactorThatRemovesDarkCorners(image.naturalWidth, image.naturalHeight, granularAngle);\n        const scaleFactorX = isFlippedHorizontally ? -scaleFactor : scaleFactor;\n        this.cropper.scale(scaleFactorX, scaleFactor);\n        this.setPluginState({\n            angle: newAngle,\n            angleGranular: granularAngle,\n        });\n    };\n    flipHorizontal = () => {\n        if (!this.cropper)\n            return;\n        const { isFlippedHorizontally } = this.getPluginState();\n        this.cropper.scaleX(-this.cropper.getData().scaleX || -1);\n        this.setPluginState({\n            isFlippedHorizontally: !isFlippedHorizontally,\n        });\n    };\n    zoom = (ratio) => {\n        if (!this.cropper)\n            return;\n        this.cropper.zoom(ratio);\n    };\n    setAspectRatio = (newRatio) => {\n        if (!this.cropper)\n            return;\n        const ratioMap = {\n            free: 0,\n            '1:1': 1,\n            '16:9': 16 / 9,\n            '9:16': 9 / 16,\n        };\n        this.cropper.setAspectRatio(ratioMap[newRatio]);\n        this.setPluginState({\n            aspectRatio: newRatio,\n        });\n    };\n    reset = () => {\n        if (!this.cropper)\n            return;\n        this.cropper.reset();\n        this.cropper.setAspectRatio(this.opts.cropperOptions.initialAspectRatio || 0);\n        this.resetEditorState();\n    };\n    /**\n     * Start editing a file - creates object URL and prepares state.\n     * Called by hook's start() or when user opens editor.\n     */\n    start = (file) => {\n        // Clean up any previous editing session\n        if (this.objectUrl) {\n            URL.revokeObjectURL(this.objectUrl);\n            this.objectUrl = null;\n        }\n        // Get file data - first try the passed file, then try fetching from Uppy state\n        let fileData = file.data;\n        if (!(fileData instanceof Blob)) {\n            const uppyFile = this.uppy.getFile(file.id);\n            fileData = uppyFile?.data;\n        }\n        if (fileData instanceof Blob) {\n            this.objectUrl = URL.createObjectURL(fileData);\n        }\n        else {\n            // eslint-disable-next-line no-console\n            console.warn('[Uppy ImageEditor] Cannot edit file: file.data is not a Blob.', 'File:', file, 'file.data:', file.data, 'typeof file.data:', typeof file.data);\n        }\n        this.uppy.emit('file-editor:start', file);\n        this.resetEditorState(file);\n    };\n    /**\n     * Stop editing - destroys cropper, revokes object URL, cleans up listeners.\n     */\n    stop = () => {\n        this.destroyCropper();\n        if (this.objectUrl) {\n            URL.revokeObjectURL(this.objectUrl);\n            this.objectUrl = null;\n        }\n        this.resetEditorState(null);\n    };\n    /**\n     * Initialize cropper on the image element. Called lazily when first edit action is triggered.\n     * For headless use, the hook provides the image element.\n     */\n    initCropper = (imgElement) => {\n        if (this.cropper)\n            return; // Already initialized\n        this.imgElement = imgElement;\n        this.cropper = new Cropper(imgElement, this.opts.cropperOptions);\n        // Store handlers so we can remove them later\n        this.cropstartHandler = () => {\n            if (this.cropper) {\n                this.prevCropboxData = this.cropper.getCropBoxData();\n            }\n        };\n        this.cropendHandler = ((event) => {\n            if (!this.cropper || !this.prevCropboxData)\n                return;\n            const canvasData = this.cropper.getCanvasData();\n            const cropboxData = this.cropper.getCropBoxData();\n            if (event.detail.action === 'all') {\n                const newCropboxData = limitCropboxMovementOnMove(canvasData, cropboxData, this.prevCropboxData);\n                if (newCropboxData)\n                    this.cropper.setCropBoxData(newCropboxData);\n            }\n            else {\n                const newCropboxData = limitCropboxMovementOnResize(canvasData, cropboxData, this.prevCropboxData);\n                if (newCropboxData)\n                    this.cropper.setCropBoxData(newCropboxData);\n            }\n        });\n        this.cropperReadyHandler = () => {\n            this.setPluginState({ cropperReady: true });\n        };\n        imgElement.addEventListener('cropstart', this.cropstartHandler);\n        imgElement.addEventListener('cropend', this.cropendHandler);\n        imgElement.addEventListener('ready', this.cropperReadyHandler, {\n            once: true,\n        });\n    };\n    /**\n     * Destroy cropper and clean up event listeners.\n     */\n    destroyCropper = () => {\n        if (!this.cropper)\n            return;\n        this.setPluginState({ cropperReady: false });\n        if (this.cropstartHandler && this.imgElement) {\n            this.imgElement.removeEventListener('cropstart', this.cropstartHandler);\n        }\n        if (this.cropendHandler && this.imgElement) {\n            this.imgElement.removeEventListener('cropend', this.cropendHandler);\n        }\n        if (this.cropperReadyHandler && this.imgElement) {\n            this.imgElement.removeEventListener('ready', this.cropperReadyHandler);\n        }\n        this.cropper.destroy();\n        this.cropper = null;\n        this.imgElement = null;\n        this.cropstartHandler = null;\n        this.cropendHandler = null;\n        this.cropperReadyHandler = null;\n        this.prevCropboxData = null;\n    };\n    /**\n     * Get object URL for the current image (used by headless hook).\n     */\n    getObjectUrl = () => {\n        return this.objectUrl;\n    };\n    install() {\n        this.resetEditorState(null);\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        const { currentImage } = this.getPluginState();\n        if (currentImage) {\n            const file = this.uppy.getFile(currentImage.id);\n            this.uppy.emit('file-editor:cancel', file);\n        }\n        this.stop();\n        this.unmount();\n    }\n    render() {\n        const { currentImage, angleGranular } = this.getPluginState();\n        if (currentImage === null || currentImage.isRemote) {\n            return null;\n        }\n        return (_jsx(Editor, { currentImage: currentImage, objectUrl: this.objectUrl ?? '', initCropper: this.initCropper, save: this.save, opts: this.opts, i18n: this.i18n, angleGranular: angleGranular, rotateBy: this.rotateBy, rotateGranular: this.rotateGranular, flipHorizontal: this.flipHorizontal, zoom: this.zoom, setAspectRatio: this.setAspectRatio, reset: this.reset }));\n    }\n}\n", "{\n  \"name\": \"@uppy/image-editor\",\n  \"description\": \"Image editor and cropping UI\",\n  \"version\": \"4.2.0\",\n  \"license\": \"MIT\",\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  },\n  \"keywords\": [\n    \"file uploader\",\n    \"upload\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"image editor\",\n    \"cropper\",\n    \"crop\",\n    \"rotate\",\n    \"resize\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\",\n    \"cropperjs\": \"^1.6.2\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\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}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { Component } from 'preact';\nexport default class Editor extends Component {\n    imgElement;\n    componentDidMount() {\n        const { initCropper } = this.props;\n        if (this.imgElement) {\n            initCropper(this.imgElement);\n        }\n    }\n    onRotate90Deg = () => {\n        this.props.rotateBy(-90);\n    };\n    onRotateGranular = (ev) => {\n        const newGranularAngle = Number(ev.target.value);\n        this.props.rotateGranular(newGranularAngle);\n    };\n    renderGranularRotate() {\n        const { i18n } = this.props;\n        const { angleGranular } = this.props;\n        return (_jsx(\"label\", { role: \"tooltip\", \"aria-label\": `${angleGranular}\u00BA`, \"data-microtip-position\": \"top\", className: \"uppy-ImageCropper-rangeWrapper\", children: _jsx(\"input\", { className: \"uppy-ImageCropper-range uppy-u-reset\", type: \"range\", onInput: this.onRotateGranular, onChange: this.onRotateGranular, value: angleGranular, min: \"-45\", max: \"45\", \"aria-label\": i18n('rotate') }) }));\n    }\n    renderRevert() {\n        const { i18n } = this.props;\n        return (_jsx(\"button\", { \"data-microtip-position\": \"top\", type: \"button\", className: \"uppy-u-reset uppy-c-btn\", \"aria-label\": i18n('revert'), onClick: () => {\n                this.props.reset();\n            }, children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", className: \"uppy-c-icon\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", children: [_jsx(\"path\", { d: \"M0 0h24v24H0z\", fill: \"none\" }), _jsx(\"path\", { d: \"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z\" })] }) }));\n    }\n    renderRotate() {\n        const { i18n } = this.props;\n        return (_jsx(\"button\", { \"data-microtip-position\": \"top\", type: \"button\", className: \"uppy-u-reset uppy-c-btn\", \"aria-label\": i18n('rotate'), onClick: this.onRotate90Deg, children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", className: \"uppy-c-icon\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", children: [_jsx(\"path\", { d: \"M0 0h24v24H0V0zm0 0h24v24H0V0z\", fill: \"none\" }), _jsx(\"path\", { d: \"M14 10a2 2 0 012 2v7a2 2 0 01-2 2H6a2 2 0 01-2-2v-7a2 2 0 012-2h8zm0 1.75H6a.25.25 0 00-.243.193L5.75 12v7a.25.25 0 00.193.243L6 19.25h8a.25.25 0 00.243-.193L14.25 19v-7a.25.25 0 00-.193-.243L14 11.75zM12 .76V4c2.3 0 4.61.88 6.36 2.64a8.95 8.95 0 012.634 6.025L21 13a1 1 0 01-1.993.117L19 13h-.003a6.979 6.979 0 00-2.047-4.95 6.97 6.97 0 00-4.652-2.044L12 6v3.24L7.76 5 12 .76z\" })] }) }));\n    }\n    renderFlip() {\n        const { i18n } = this.props;\n        return (_jsx(\"button\", { \"data-microtip-position\": \"top\", type: \"button\", className: \"uppy-u-reset uppy-c-btn\", \"aria-label\": i18n('flipHorizontal'), onClick: () => this.props.flipHorizontal(), children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", className: \"uppy-c-icon\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", children: [_jsx(\"path\", { d: \"M0 0h24v24H0z\", fill: \"none\" }), _jsx(\"path\", { d: \"M15 21h2v-2h-2v2zm4-12h2V7h-2v2zM3 5v14c0 1.1.9 2 2 2h4v-2H5V5h4V3H5c-1.1 0-2 .9-2 2zm16-2v2h2c0-1.1-.9-2-2-2zm-8 20h2V1h-2v22zm8-6h2v-2h-2v2zM15 5h2V3h-2v2zm4 8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2z\" })] }) }));\n    }\n    renderZoomIn() {\n        const { i18n } = this.props;\n        return (_jsx(\"button\", { \"data-microtip-position\": \"top\", type: \"button\", className: \"uppy-u-reset uppy-c-btn\", \"aria-label\": i18n('zoomIn'), onClick: () => this.props.zoom(0.1), children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", className: \"uppy-c-icon\", height: \"24\", viewBox: \"0 0 24 24\", width: \"24\", children: [_jsx(\"path\", { d: \"M0 0h24v24H0V0z\", fill: \"none\" }), _jsx(\"path\", { d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" }), _jsx(\"path\", { d: \"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\" })] }) }));\n    }\n    renderZoomOut() {\n        const { i18n } = this.props;\n        return (_jsx(\"button\", { \"data-microtip-position\": \"top\", type: \"button\", className: \"uppy-u-reset uppy-c-btn\", \"aria-label\": i18n('zoomOut'), onClick: () => this.props.zoom(-0.1), children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", className: \"uppy-c-icon\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", children: [_jsx(\"path\", { d: \"M0 0h24v24H0V0z\", fill: \"none\" }), _jsx(\"path\", { d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7z\" })] }) }));\n    }\n    renderCropSquare() {\n        const { i18n } = this.props;\n        return (_jsx(\"button\", { \"data-microtip-position\": \"top\", type: \"button\", className: \"uppy-u-reset uppy-c-btn\", \"aria-label\": i18n('aspectRatioSquare'), onClick: () => this.props.setAspectRatio('1:1'), children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", className: \"uppy-c-icon\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", children: [_jsx(\"path\", { d: \"M0 0h24v24H0z\", fill: \"none\" }), _jsx(\"path\", { d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\" })] }) }));\n    }\n    renderCropWidescreen() {\n        const { i18n } = this.props;\n        return (_jsx(\"button\", { \"data-microtip-position\": \"top\", type: \"button\", className: \"uppy-u-reset uppy-c-btn\", \"aria-label\": i18n('aspectRatioLandscape'), onClick: () => this.props.setAspectRatio('16:9'), children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", className: \"uppy-c-icon\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", children: [_jsx(\"path\", { d: \"M 19,4.9999992 V 17.000001 H 4.9999998 V 6.9999992 H 19 m 0,-2 H 4.9999998 c -1.0999999,0 -1.9999999,0.9000001 -1.9999999,2 V 17.000001 c 0,1.1 0.9,2 1.9999999,2 H 19 c 1.1,0 2,-0.9 2,-2 V 6.9999992 c 0,-1.0999999 -0.9,-2 -2,-2 z\" }), _jsx(\"path\", { fill: \"none\", d: \"M0 0h24v24H0z\" })] }) }));\n    }\n    renderCropWidescreenVertical() {\n        const { i18n } = this.props;\n        return (_jsx(\"button\", { \"data-microtip-position\": \"top\", type: \"button\", \"aria-label\": i18n('aspectRatioPortrait'), className: \"uppy-u-reset uppy-c-btn\", onClick: () => this.props.setAspectRatio('9:16'), children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", className: \"uppy-c-icon\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", children: [_jsx(\"path\", { d: \"M 19.000001,19 H 6.999999 V 5 h 10.000002 v 14 m 2,0 V 5 c 0,-1.0999999 -0.9,-1.9999999 -2,-1.9999999 H 6.999999 c -1.1,0 -2,0.9 -2,1.9999999 v 14 c 0,1.1 0.9,2 2,2 h 10.000002 c 1.1,0 2,-0.9 2,-2 z\" }), _jsx(\"path\", { d: \"M0 0h24v24H0z\", fill: \"none\" })] }) }));\n    }\n    render() {\n        const { currentImage, objectUrl, opts } = this.props;\n        const { actions } = opts;\n        return (_jsxs(\"div\", { className: \"uppy-ImageCropper\", children: [_jsx(\"div\", { className: \"uppy-ImageCropper-container\", children: _jsx(\"img\", { className: \"uppy-ImageCropper-image\", alt: currentImage.name, src: objectUrl, ref: (ref) => {\n                            this.imgElement = ref;\n                        } }) }), _jsxs(\"div\", { className: \"uppy-ImageCropper-controls\", children: [actions.revert && this.renderRevert(), actions.rotate && this.renderRotate(), actions.granularRotate && this.renderGranularRotate(), actions.flip && this.renderFlip(), actions.zoomIn && this.renderZoomIn(), actions.zoomOut && this.renderZoomOut(), actions.cropSquare && this.renderCropSquare(), actions.cropWidescreen && this.renderCropWidescreen(), actions.cropWidescreenVertical &&\n                            this.renderCropWidescreenVertical()] })] }));\n    }\n}\n", "export default {\n    strings: {\n        revert: 'Reset',\n        rotate: 'Rotate 90\u00B0',\n        zoomIn: 'Zoom in',\n        zoomOut: 'Zoom out',\n        flipHorizontal: 'Flip horizontally',\n        aspectRatioSquare: 'Crop square',\n        aspectRatioLandscape: 'Crop landscape (16:9)',\n        aspectRatioPortrait: 'Crop portrait (9:16)',\n    },\n};\n", "// See this cropperjs image to understand how container/image/canavas/cropbox relate to each other.\n// (https://github.com/fengyuanchen/cropperjs/blob/9b528a8baeaae876dc090085e37992a1683c6f34/docs/images/layers.jpg)\n//\nfunction getCanvasDataThatFitsPerfectlyIntoContainer(containerData, canvasData) {\n    // 1. Scale our canvas as much as possible\n    const widthRatio = containerData.width / canvasData.width;\n    const heightRatio = containerData.height / canvasData.height;\n    const scaleFactor = Math.min(widthRatio, heightRatio);\n    const newWidth = canvasData.width * scaleFactor;\n    const newHeight = canvasData.height * scaleFactor;\n    // 2. Center our canvas\n    const newLeft = (containerData.width - newWidth) / 2;\n    const newTop = (containerData.height - newHeight) / 2;\n    return {\n        width: newWidth,\n        height: newHeight,\n        left: newLeft,\n        top: newTop,\n    };\n}\nexport default getCanvasDataThatFitsPerfectlyIntoContainer;\n", "function toRadians(angle) {\n    return angle * (Math.PI / 180);\n}\nfunction getScaleFactorThatRemovesDarkCorners(w, h, granularAngle) {\n    const \u03B1 = Math.abs(toRadians(granularAngle));\n    const scaleFactor = Math.max((Math.sin(\u03B1) * w + Math.cos(\u03B1) * h) / h, (Math.sin(\u03B1) * h + Math.cos(\u03B1) * w) / w);\n    return scaleFactor;\n}\nexport default getScaleFactorThatRemovesDarkCorners;\n", "function limitCropboxMovementOnMove(canvas, cropbox, prevCropbox) {\n    // For the left boundary\n    if (cropbox.left < canvas.left) {\n        return {\n            left: canvas.left,\n            width: prevCropbox.width,\n        };\n    }\n    // For the top boundary\n    if (cropbox.top < canvas.top) {\n        return {\n            top: canvas.top,\n            height: prevCropbox.height,\n        };\n    }\n    // For the right boundary\n    if (cropbox.left + cropbox.width > canvas.left + canvas.width) {\n        return {\n            left: canvas.left + canvas.width - prevCropbox.width,\n            width: prevCropbox.width,\n        };\n    }\n    // For the bottom boundary\n    if (cropbox.top + cropbox.height > canvas.top + canvas.height) {\n        return {\n            top: canvas.top + canvas.height - prevCropbox.height,\n            height: prevCropbox.height,\n        };\n    }\n    return null;\n}\nexport default limitCropboxMovementOnMove;\n", "function limitCropboxMovementOnResize(canvas, cropboxData, prevCropbox) {\n    // For the left boundary\n    if (cropboxData.left < canvas.left) {\n        return {\n            left: canvas.left,\n            width: prevCropbox.left + prevCropbox.width - canvas.left,\n        };\n    }\n    // For the top boundary\n    if (cropboxData.top < canvas.top) {\n        return {\n            top: canvas.top,\n            height: prevCropbox.top + prevCropbox.height - canvas.top,\n        };\n    }\n    // For the right boundary\n    if (cropboxData.left + cropboxData.width > canvas.left + canvas.width) {\n        return {\n            left: prevCropbox.left,\n            width: canvas.left + canvas.width - prevCropbox.left,\n        };\n    }\n    // For the bottom boundary\n    if (cropboxData.top + cropboxData.height > canvas.top + canvas.height) {\n        return {\n            top: prevCropbox.top,\n            height: canvas.top + canvas.height - prevCropbox.top,\n        };\n    }\n    return null;\n}\nexport default limitCropboxMovementOnResize;\n", "{\n  \"name\": \"@uppy/instagram\",\n  \"description\": \"Import photos and videos from Instagram, into Uppy.\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"instagram\",\n    \"provider\",\n    \"photos\",\n    \"videos\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "export default {\n    strings: {\n        pluginNameInstagram: 'Instagram',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { getAllowedHosts, Provider, tokenStorage, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\nimport { ProviderViews } from '@uppy/provider-views';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nexport default class Instagram extends UIPlugin {\n    static VERSION = packageJson.version;\n    icon;\n    provider;\n    view;\n    storage;\n    files;\n    rootFolderId = 'recent';\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.type = 'acquirer';\n        this.files = [];\n        this.storage = this.opts.storage || tokenStorage;\n        this.id = this.opts.id || 'Instagram';\n        this.icon = () => (_jsxs(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: [_jsx(\"defs\", { children: _jsx(\"path\", { d: \"M16.825 5l.483-.001.799.002c1.168.005 1.598.021 2.407.057 1.17.05 1.97.235 2.67.506.725.28 1.34.655 1.951 1.265.613.61.99 1.223 1.273 1.946.273.7.46 1.498.516 2.67l.025.552.008.205c.029.748.037 1.51.042 3.777l.001.846v.703l-.001.398a50.82 50.82 0 01-.058 2.588c-.05 1.17-.235 1.97-.506 2.67a5.394 5.394 0 01-1.265 1.951c-.61.613-1.222.99-1.946 1.273-.699.273-1.498.46-2.668.516-.243.012-.451.022-.656.03l-.204.007c-.719.026-1.512.034-3.676.038l-.847.001h-1.1a50.279 50.279 0 01-2.587-.059c-1.171-.05-1.971-.235-2.671-.506a5.394 5.394 0 01-1.951-1.265 5.385 5.385 0 01-1.272-1.946c-.274-.699-.46-1.498-.517-2.668a88.15 88.15 0 01-.03-.656l-.007-.205c-.026-.718-.034-1.512-.038-3.674v-2.129c.006-1.168.022-1.597.058-2.406.051-1.171.235-1.971.506-2.672a5.39 5.39 0 011.265-1.95 5.381 5.381 0 011.946-1.272c.699-.274 1.498-.462 2.669-.517l.656-.03.204-.007c.718-.026 1.511-.034 3.674-.038zm.678 1.981h-1.226l-.295.001c-2.307.005-3.016.013-3.777.043l-.21.009-.457.02c-1.072.052-1.654.232-2.042.383-.513.2-.879.44-1.263.825a3.413 3.413 0 00-.82 1.267c-.15.388-.33.97-.375 2.043a48.89 48.89 0 00-.056 2.482v.398 1.565c.006 2.937.018 3.285.073 4.444.05 1.073.231 1.654.382 2.043.2.512.44.878.825 1.263.386.383.753.621 1.267.82.388.15.97.328 2.043.374.207.01.388.017.563.024l.208.007a63.28 63.28 0 002.109.026h1.564c2.938-.006 3.286-.019 4.446-.073 1.071-.051 1.654-.232 2.04-.383.514-.2.88-.44 1.264-.825.384-.386.622-.753.82-1.266.15-.389.328-.971.375-2.044.039-.88.054-1.292.057-2.723v-1.15-.572c-.006-2.936-.019-3.284-.074-4.445-.05-1.071-.23-1.654-.382-2.04-.2-.515-.44-.88-.825-1.264a3.405 3.405 0 00-1.267-.82c-.388-.15-.97-.328-2.042-.375a48.987 48.987 0 00-2.535-.056zm-1.515 3.37a5.65 5.65 0 11.021 11.299 5.65 5.65 0 01-.02-11.3zm.004 1.982a3.667 3.667 0 10.015 7.334 3.667 3.667 0 00-.015-7.334zm5.865-3.536a1.32 1.32 0 11.005 2.64 1.32 1.32 0 01-.005-2.64z\", id: \"a\" }) }), _jsxs(\"g\", { fill: \"none\", \"fill-rule\": \"evenodd\", children: [_jsx(\"mask\", { id: \"b\", fill: \"#fff\", children: _jsx(\"use\", { xlinkHref: \"#a\" }) }), _jsx(\"image\", { mask: \"url(#b)\", x: \"4\", y: \"4\", width: \"24\", height: \"24\", xlinkHref: \"data:image/png;base64,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\" })] })] }));\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameInstagram');\n        this.opts.companionAllowedHosts = getAllowedHosts(this.opts.companionAllowedHosts, this.opts.companionUrl);\n        this.provider = new Provider(uppy, {\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionKeysParams: this.opts.companionKeysParams,\n            companionCookiesRule: this.opts.companionCookiesRule,\n            provider: 'instagram',\n            pluginId: this.id,\n            supportsRefreshToken: false,\n        });\n        this.render = this.render.bind(this);\n    }\n    install() {\n        this.view = new ProviderViews(this, {\n            provider: this.provider,\n            viewType: 'grid',\n            showTitles: false,\n            showFilter: false,\n            showBreadcrumbs: false,\n        });\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.view.tearDown();\n        this.unmount();\n    }\n    render(state) {\n        return this.view.render(state);\n    }\n}\n", "{\n  \"name\": \"@uppy/onedrive\",\n  \"description\": \"Import files from OneDrive, into Uppy.\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"onedrive\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "export default {\n    strings: {\n        pluginNameOneDrive: 'OneDrive',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { getAllowedHosts, Provider, tokenStorage, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\nimport { ProviderViews } from '@uppy/provider-views';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nexport default class OneDrive extends UIPlugin {\n    static VERSION = packageJson.version;\n    icon;\n    provider;\n    view;\n    storage;\n    files;\n    rootFolderId = null;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.type = 'acquirer';\n        this.files = [];\n        this.storage = this.opts.storage || tokenStorage;\n        this.id = this.opts.id || 'OneDrive';\n        this.icon = () => (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsxs(\"g\", { fill: \"none\", fillRule: \"nonzero\", children: [_jsx(\"path\", { d: \"M13.39 12.888l4.618 2.747 2.752-1.15a4.478 4.478 0 012.073-.352 6.858 6.858 0 00-5.527-5.04 6.895 6.895 0 00-6.876 2.982l.07-.002a5.5 5.5 0 012.89.815z\", fill: \"#0364B8\" }), _jsx(\"path\", { d: \"M13.39 12.887v.001a5.5 5.5 0 00-2.89-.815l-.07.002a5.502 5.502 0 00-4.822 2.964 5.43 5.43 0 00.38 5.62l4.073-1.702 1.81-.757 4.032-1.685 2.105-.88-4.619-2.748z\", fill: \"#0078D4\" }), _jsx(\"path\", { d: \"M22.833 14.133a4.479 4.479 0 00-2.073.352l-2.752 1.15.798.475 2.616 1.556 1.141.68 3.902 2.321a4.413 4.413 0 00-.022-4.25 4.471 4.471 0 00-3.61-2.284z\", fill: \"#1490DF\" }), _jsx(\"path\", { d: \"M22.563 18.346l-1.141-.68-2.616-1.556-.798-.475-2.105.88L11.87 18.2l-1.81.757-4.073 1.702A5.503 5.503 0 0010.5 23h12.031a4.472 4.472 0 003.934-2.333l-3.902-2.321z\", fill: \"#28A8EA\" })] }) }));\n        this.opts.companionAllowedHosts = getAllowedHosts(this.opts.companionAllowedHosts, this.opts.companionUrl);\n        this.provider = new Provider(uppy, {\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionKeysParams: this.opts.companionKeysParams,\n            companionCookiesRule: this.opts.companionCookiesRule,\n            provider: 'onedrive',\n            pluginId: this.id,\n            supportsRefreshToken: true,\n        });\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameOneDrive');\n        this.render = this.render.bind(this);\n    }\n    install() {\n        this.view = new ProviderViews(this, {\n            provider: this.provider,\n            loadAllFiles: true,\n            virtualList: true,\n        });\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.view.tearDown();\n        this.unmount();\n    }\n    render(state) {\n        return this.view.render(state);\n    }\n}\n", "{\n  \"name\": \"@uppy/unsplash\",\n  \"description\": \"Import files from Unsplash, the free stock photography resource, into Uppy\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"unsplash\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "export default {\n    strings: {\n        pluginNameUnsplash: 'Unsplash',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { getAllowedHosts, SearchProvider, tokenStorage, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\nimport { SearchProviderViews } from '@uppy/provider-views';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nexport default class Unsplash extends UIPlugin {\n    static VERSION = packageJson.version;\n    icon;\n    provider;\n    view;\n    storage;\n    files;\n    hostname;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.type = 'acquirer';\n        this.files = [];\n        this.storage = this.opts.storage || tokenStorage;\n        this.id = this.opts.id || 'Unsplash';\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameUnsplash');\n        this.icon = () => (_jsx(\"svg\", { className: \"uppy-DashboardTab-iconUnsplash\", viewBox: \"0 0 32 32\", height: \"32\", width: \"32\", \"aria-hidden\": \"true\", children: _jsxs(\"g\", { fill: \"currentcolor\", children: [_jsx(\"path\", { d: \"M46.575 10.883v-9h12v9zm12 5h10v18h-32v-18h10v9h12z\" }), _jsx(\"path\", { d: \"M13 12.5V8h6v4.5zm6 2.5h5v9H8v-9h5v4.5h6z\" })] }) }));\n        if (!this.opts.companionUrl) {\n            throw new Error('Companion hostname is required, please consult https://uppy.io/docs/companion');\n        }\n        this.hostname = this.opts.companionUrl;\n        this.opts.companionAllowedHosts = getAllowedHosts(this.opts.companionAllowedHosts, this.opts.companionUrl);\n        this.provider = new SearchProvider(uppy, {\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionCookiesRule: this.opts.companionCookiesRule,\n            provider: 'unsplash',\n            pluginId: this.id,\n        });\n    }\n    install() {\n        this.view = new SearchProviderViews(this, {\n            provider: this.provider,\n            viewType: 'unsplash',\n            showFilter: true,\n            utmSource: this.opts.utmSource,\n        });\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    render(state) {\n        return this.view.render(state);\n    }\n    uninstall() {\n        this.unmount();\n    }\n}\n", "{\n  \"name\": \"@uppy/url\",\n  \"description\": \"The Url plugin lets users import files from the Internet. Paste any URL and it\u2019ll be added!\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\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 --silent='passed-only'\",\n    \"test:e2e\": \"vitest run --project browser\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"url\",\n    \"import from url\",\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"nanoid\": \"^5.0.9\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"@vitest/browser\": \"^3.2.4\",\n    \"cssnano\": \"^7.0.7\",\n    \"playwright\": \"1.57.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}\n", "export default {\n    strings: {\n        pluginNameUrl: 'Link',\n        // Label for the \"Import\" button.\n        import: 'Import',\n        // Placeholder text for the URL input.\n        enterUrlToImport: 'Enter URL to import a file',\n        // Error message shown if Companion could not load a URL.\n        failedToFetch: 'Companion failed to fetch this URL, please make sure it\u2019s correct',\n        // Error message shown if the input does not look like a URL.\n        enterCorrectUrl: 'Incorrect URL: Please make sure you are entering a direct link to a file',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { nanoid } from 'nanoid/non-secure';\nimport { Component } from 'preact';\nclass UrlUI extends Component {\n    form = document.createElement('form');\n    // Ref is always defined after render\n    input;\n    constructor(props) {\n        super(props);\n        this.form.id = nanoid();\n    }\n    componentDidMount() {\n        this.input.value = '';\n        this.form.addEventListener('submit', this.#handleSubmit);\n        document.body.appendChild(this.form);\n    }\n    componentWillUnmount() {\n        this.form.removeEventListener('submit', this.#handleSubmit);\n        document.body.removeChild(this.form);\n    }\n    #handleSubmit = (ev) => {\n        ev.preventDefault();\n        const { addFile } = this.props;\n        const preparedValue = this.input.value.trim();\n        addFile(preparedValue);\n    };\n    render() {\n        const { i18n } = this.props;\n        return (_jsxs(\"div\", { className: \"uppy-Url\", children: [_jsx(\"input\", { className: \"uppy-u-reset uppy-c-textInput uppy-Url-input\", type: \"text\", \"aria-label\": i18n('enterUrlToImport'), placeholder: i18n('enterUrlToImport'), ref: (input) => {\n                        this.input = input;\n                    }, \"data-uppy-super-focusable\": true, form: this.form.id }), _jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-Url-importButton\", type: \"submit\", form: this.form.id, children: i18n('import') })] }));\n    }\n}\nexport default UrlUI;\n", "import { toArray } from '@uppy/utils';\n/*\n  SITUATION\n\n    1. Cross-browser dataTransfer.items\n\n      paste in chrome [Copy Image]:\n      0: {kind: \"file\", type: \"image/png\"}\n      1: {kind: \"string\", type: \"text/html\"}\n      paste in safari [Copy Image]:\n      0: {kind: \"file\", type: \"image/png\"}\n      1: {kind: \"string\", type: \"text/html\"}\n      2: {kind: \"string\", type: \"text/plain\"}\n      3: {kind: \"string\", type: \"text/uri-list\"}\n      paste in firefox [Copy Image]:\n      0: {kind: \"file\", type: \"image/png\"}\n      1: {kind: \"string\", type: \"text/html\"}\n\n      paste in chrome [Copy Image Address]:\n      0: {kind: \"string\", type: \"text/plain\"}\n      paste in safari [Copy Image Address]:\n      0: {kind: \"string\", type: \"text/plain\"}\n      1: {kind: \"string\", type: \"text/uri-list\"}\n      paste in firefox [Copy Image Address]:\n      0: {kind: \"string\", type: \"text/plain\"}\n\n      drop in chrome [from browser]:\n      0: {kind: \"string\", type: \"text/uri-list\"}\n      1: {kind: \"string\", type: \"text/html\"}\n      drop in safari [from browser]:\n      0: {kind: \"string\", type: \"text/uri-list\"}\n      1: {kind: \"string\", type: \"text/html\"}\n      2: {kind: \"file\", type: \"image/png\"}\n      drop in firefox [from browser]:\n      0: {kind: \"string\", type: \"text/uri-list\"}\n      1: {kind: \"string\", type: \"text/x-moz-url\"}\n      2: {kind: \"string\", type: \"text/plain\"}\n\n    2. We can determine if it's a 'copypaste' or a 'drop', but we can't discern between [Copy Image] and [Copy Image Address]\n\n  CONCLUSION\n\n    1. 'paste' ([Copy Image] or [Copy Image Address], we can't discern between these two)\n      Don't do anything if there is 'file' item. .handlePaste in the DashboardPlugin will deal with all 'file' items.\n      If there are no 'file' items - handle 'text/plain' items.\n\n    2. 'drop'\n      Take 'text/uri-list' items. Safari has an additional item of .kind === 'file', and you may worry about the item being\n      duplicated (first by DashboardPlugin, and then by UrlPlugin, now), but don't. Directory handling code won't pay\n      attention to this particular item of kind 'file'.\n*/\n/**\n * Finds all links dropped/pasted from one browser window to another.\n */\nexport default function forEachDroppedOrPastedUrl(dataTransfer, isDropOrPaste, callback) {\n    const items = toArray(dataTransfer.items);\n    let urlItems;\n    switch (isDropOrPaste) {\n        case 'paste': {\n            const atLeastOneFileIsDragged = items.some((item) => item.kind === 'file');\n            if (atLeastOneFileIsDragged) {\n                return;\n            }\n            urlItems = items.filter((item) => item.kind === 'string' && item.type === 'text/plain');\n            break;\n        }\n        case 'drop': {\n            urlItems = items.filter((item) => item.kind === 'string' && item.type === 'text/uri-list');\n            break;\n        }\n        default: {\n            throw new Error(`isDropOrPaste must be either 'drop' or 'paste', but it's ${isDropOrPaste}`);\n        }\n    }\n    urlItems.forEach((item) => {\n        item.getAsString((urlString) => callback(urlString));\n    });\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { RequestClient, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\nimport { toArray } from '@uppy/utils';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nimport UrlUI from './UrlUI.js';\nimport forEachDroppedOrPastedUrl from './utils/forEachDroppedOrPastedUrl.js';\nfunction UrlIcon() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsx(\"path\", { d: \"M23.637 15.312l-2.474 2.464a3.582 3.582 0 01-.577.491c-.907.657-1.897.986-2.968.986a4.925 4.925 0 01-3.959-1.971c-.248-.329-.164-.902.165-1.149.33-.247.907-.164 1.155.164 1.072 1.478 3.133 1.724 4.618.656a.642.642 0 00.33-.328l2.473-2.463c1.238-1.313 1.238-3.366-.082-4.597a3.348 3.348 0 00-4.618 0l-1.402 1.395a.799.799 0 01-1.154 0 .79.79 0 010-1.15l1.402-1.394a4.843 4.843 0 016.843 0c2.062 1.805 2.144 5.007.248 6.896zm-8.081 5.664l-1.402 1.395a3.348 3.348 0 01-4.618 0c-1.319-1.23-1.319-3.365-.082-4.596l2.475-2.464.328-.328c.743-.492 1.567-.739 2.475-.657.906.165 1.648.574 2.143 1.314.248.329.825.411 1.155.165.33-.248.412-.822.165-1.15-.825-1.068-1.98-1.724-3.216-1.888-1.238-.247-2.556.082-3.628.902l-.495.493-2.474 2.464c-1.897 1.969-1.814 5.09.083 6.977.99.904 2.226 1.396 3.463 1.396s2.473-.492 3.463-1.395l1.402-1.396a.79.79 0 000-1.15c-.33-.328-.908-.41-1.237-.082z\", fill: \"#FF753E\", \"fill-rule\": \"nonzero\" }) }));\n}\nfunction addProtocolToURL(url) {\n    const protocolRegex = /^[a-z0-9]+:\\/\\//;\n    const defaultProtocol = 'http://';\n    if (protocolRegex.test(url)) {\n        return url;\n    }\n    return defaultProtocol + url;\n}\nfunction canHandleRootDrop(e) {\n    const items = toArray(e.dataTransfer.items);\n    const urls = items.filter((item) => item.kind === 'string' && item.type === 'text/uri-list');\n    return urls.length > 0;\n}\nfunction checkIfCorrectURL(url) {\n    return url?.startsWith('http://') || url?.startsWith('https://');\n}\nfunction getFileNameFromUrl(url) {\n    const { pathname } = new URL(url);\n    return pathname.substring(pathname.lastIndexOf('/') + 1);\n}\nexport default class Url extends UIPlugin {\n    static VERSION = packageJson.version;\n    static requestClientId = Url.name;\n    icon;\n    hostname;\n    client;\n    canHandleRootDrop;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.id = this.opts.id || 'Url';\n        this.type = 'acquirer';\n        this.icon = () => _jsx(UrlIcon, {});\n        // Set default options and locale\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameUrl');\n        this.hostname = this.opts.companionUrl;\n        if (!this.hostname) {\n            throw new Error('Companion hostname is required, please consult https://uppy.io/docs/companion');\n        }\n        this.client = new RequestClient(uppy, {\n            pluginId: this.id,\n            provider: 'url',\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionCookiesRule: this.opts.companionCookiesRule,\n        });\n        this.uppy.registerRequestClient(Url.requestClientId, this.client);\n    }\n    getMeta = (url) => {\n        return this.client.post('url/meta', { url });\n    };\n    addFile = async (protocollessUrl, optionalMeta) => {\n        // Do not process local files\n        if (protocollessUrl.startsWith('blob')) {\n            return undefined;\n        }\n        const url = addProtocolToURL(protocollessUrl);\n        if (!checkIfCorrectURL(url)) {\n            this.uppy.log(`[URL] Incorrect URL entered: ${url}`);\n            this.uppy.info(this.i18n('enterCorrectUrl'), 'error', 4000);\n            return undefined;\n        }\n        this.uppy.log(`[URL] Adding file from dropped/pasted url: ${url}`);\n        try {\n            const meta = await this.getMeta(url);\n            const file = {\n                meta: optionalMeta,\n                source: this.id,\n                name: meta.name || getFileNameFromUrl(url),\n                type: meta.type,\n                data: {\n                    size: meta.size,\n                },\n                isRemote: true,\n                // @ts-expect-error TODO: should this be removed? the types say it's not needed\n                body: {\n                    url,\n                },\n                remote: {\n                    companionUrl: this.opts.companionUrl,\n                    url: `${this.hostname}/url/get`,\n                    body: {\n                        fileId: url,\n                        url,\n                    },\n                    requestClientId: Url.requestClientId,\n                },\n            };\n            this.uppy.log('[Url] Adding remote file');\n            try {\n                return this.uppy.addFile(file);\n            }\n            catch (err) {\n                if (!err.isRestriction) {\n                    this.uppy.log(err);\n                }\n                return err;\n            }\n        }\n        catch (err) {\n            this.uppy.log(err);\n            this.uppy.info({\n                message: this.i18n('failedToFetch'),\n                details: err,\n            }, 'error', 4000);\n            return err;\n        }\n    };\n    handleRootDrop = (e) => {\n        forEachDroppedOrPastedUrl(e.dataTransfer, 'drop', (url) => {\n            this.addFile(url);\n        });\n    };\n    handleRootPaste = (e) => {\n        forEachDroppedOrPastedUrl(e.clipboardData, 'paste', (url) => {\n            this.addFile(url);\n        });\n    };\n    render() {\n        return _jsx(UrlUI, { i18n: this.i18n, addFile: this.addFile });\n    }\n    install() {\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.unmount();\n    }\n}\n// This is defined outside of the class body because it's not using `this`, but\n// we still want it available on the prototype so the Dashboard can access it.\nUrl.prototype.canHandleRootDrop = canHandleRootDrop;\n", "{\n  \"name\": \"@uppy/zoom\",\n  \"description\": \"Import files from zoom, into Uppy.\",\n  \"version\": \"4.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\"\n  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"zoom\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/provider-views\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n", "export default {\n    strings: {\n        pluginNameZoom: 'Zoom',\n    },\n};\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { getAllowedHosts, Provider, tokenStorage, } from '@uppy/companion-client';\nimport { UIPlugin } from '@uppy/core';\nimport { ProviderViews } from '@uppy/provider-views';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nexport default class Zoom extends UIPlugin {\n    static VERSION = packageJson.version;\n    icon;\n    provider;\n    view;\n    storage;\n    files;\n    rootFolderId = null;\n    constructor(uppy, opts) {\n        super(uppy, opts);\n        this.type = 'acquirer';\n        this.files = [];\n        this.storage = this.opts.storage || tokenStorage;\n        this.id = this.opts.id || 'Zoom';\n        this.icon = () => (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsx(\"path\", { d: \"M24.5 11.125l-2.75 2.063c-.473.353-.75.91-.75 1.5v3.124c0 .59.277 1.147.75 1.5l2.75 2.063a.938.938 0 001.5-.75v-8.75a.938.938 0 00-1.5-.75zm-4.75 9.5c0 1.035-.84 1.875-1.875 1.875H9.75A3.75 3.75 0 016 18.75v-6.875C6 10.84 6.84 10 7.875 10H16a3.75 3.75 0 013.75 3.75v6.875z\", fill: \"#2E8CFF\", \"fill-rule\": \"evenodd\" }) }));\n        this.opts.companionAllowedHosts = getAllowedHosts(this.opts.companionAllowedHosts, this.opts.companionUrl);\n        this.provider = new Provider(uppy, {\n            companionUrl: this.opts.companionUrl,\n            companionHeaders: this.opts.companionHeaders,\n            companionKeysParams: this.opts.companionKeysParams,\n            companionCookiesRule: this.opts.companionCookiesRule,\n            provider: 'zoom',\n            pluginId: this.id,\n            supportsRefreshToken: false,\n        });\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameZoom');\n        this.render = this.render.bind(this);\n    }\n    install() {\n        this.view = new ProviderViews(this, {\n            provider: this.provider,\n        });\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n    }\n    uninstall() {\n        this.view.tearDown();\n        this.unmount();\n    }\n    render(state) {\n        return this.view.render(state);\n    }\n}\n", "{\n  \"name\": \"@uppy/remote-sources\",\n  \"description\": \"Uppy plugin that includes all remote sources that Uppy+Companion offer, like Instagram, Google Drive, Dropox, Box, Unsplash, Url etc\",\n  \"version\": \"3.1.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\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    \"instagram\",\n    \"google-drive\",\n    \"facebook\",\n    \"dropbox\",\n    \"onedrive\",\n    \"zoom\",\n    \"unsplash\",\n    \"box\",\n    \"url\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/box\": \"workspace:^\",\n    \"@uppy/dashboard\": \"workspace:^\",\n    \"@uppy/dropbox\": \"workspace:^\",\n    \"@uppy/facebook\": \"workspace:^\",\n    \"@uppy/google-drive\": \"workspace:^\",\n    \"@uppy/instagram\": \"workspace:^\",\n    \"@uppy/onedrive\": \"workspace:^\",\n    \"@uppy/unsplash\": \"workspace:^\",\n    \"@uppy/url\": \"workspace:^\",\n    \"@uppy/zoom\": \"workspace:^\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"jsdom\": \"^26.1.0\",\n    \"resize-observer-polyfill\": \"^1.5.1\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\"\n  }\n}\n", "import Box from '@uppy/box';\nimport { BasePlugin } from '@uppy/core';\nimport Dropbox from '@uppy/dropbox';\nimport Facebook from '@uppy/facebook';\nimport GoogleDrive from '@uppy/google-drive';\nimport Instagram from '@uppy/instagram';\nimport OneDrive from '@uppy/onedrive';\nimport Unsplash from '@uppy/unsplash';\nimport Url from '@uppy/url';\nimport Zoom from '@uppy/zoom';\nimport packageJson from '../package.json' with { type: 'json' };\nexport const availablePlugins = {\n    // Using a null-prototype object to avoid prototype pollution.\n    __proto__: null,\n    Box,\n    Dropbox,\n    Facebook,\n    GoogleDrive,\n    Instagram,\n    OneDrive,\n    Unsplash,\n    Url,\n    Zoom,\n};\nconst defaultOptions = {\n    sources: Object.keys(availablePlugins),\n};\nexport default class RemoteSources extends BasePlugin {\n    static VERSION = packageJson.version;\n    #installedPlugins = new Set();\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOptions, ...opts });\n        this.id = this.opts.id || 'RemoteSources';\n        this.type = 'preset';\n        if (this.opts.companionUrl == null) {\n            throw new Error('Please specify companionUrl for RemoteSources to work, see https://uppy.io/docs/remote-sources#companionUrl');\n        }\n    }\n    setOptions(newOpts) {\n        this.uninstall();\n        super.setOptions(newOpts);\n        this.install();\n    }\n    install() {\n        this.opts.sources.forEach((pluginId) => {\n            const { sources, ...rest } = this.opts;\n            const optsForRemoteSourcePlugin = {\n                ...rest,\n                companionKeysParams: this.opts.companionKeysParams?.[pluginId],\n            };\n            const plugin = availablePlugins[pluginId];\n            if (plugin == null) {\n                const pluginNames = Object.keys(availablePlugins);\n                const formatter = new Intl.ListFormat('en', {\n                    style: 'long',\n                    type: 'disjunction',\n                });\n                throw new Error(`Invalid plugin: \"${pluginId}\" is not one of: ${formatter.format(pluginNames)}.`);\n            }\n            this.uppy.use(plugin, optsForRemoteSourcePlugin);\n            // `plugin` is a class, but we want to track the instance object\n            // so we have to do `getPlugin` here.\n            this.#installedPlugins.add(this.uppy.getPlugin(pluginId));\n        });\n    }\n    uninstall() {\n        for (const plugin of this.#installedPlugins) {\n            this.uppy.removePlugin(plugin);\n        }\n        this.#installedPlugins.clear();\n    }\n}\n", "{\n  \"name\": \"@uppy/screen-capture\",\n  \"description\": \"Uppy plugin that captures video from display or application.\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\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  },\n  \"keywords\": [\n    \"file uploader\",\n    \"uppy\",\n    \"uppy-plugin\",\n    \"screen capture\",\n    \"video\",\n    \"record\",\n    \"mediarecorder\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\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}\n", "export default {\n    strings: {\n        pluginNameScreenCapture: 'Screencast',\n        startCapturing: 'Begin screen capturing',\n        stopCapturing: 'Stop screen capturing',\n        submitRecordedFile: 'Submit recorded file',\n        streamActive: 'Stream active',\n        streamPassive: 'Stream passive',\n        micDisabled: 'Microphone access denied by user',\n        recording: 'Recording',\n        takeScreenshot: 'Take Screenshot',\n        discardMediaFile: 'Discard Media',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nexport default function DiscardButton({ onDiscard, i18n, }) {\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-ScreenCapture-button uppy-ScreenCapture-button--discard\", type: \"button\", title: i18n('discardMediaFile'), \"aria-label\": i18n('discardMediaFile'), onClick: onDiscard, \"data-uppy-super-focusable\": true, children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", \"stroke-width\": \"2\", \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\", children: [_jsx(\"line\", { x1: \"18\", y1: \"6\", x2: \"6\", y2: \"18\" }), _jsx(\"line\", { x1: \"6\", y1: \"6\", x2: \"18\", y2: \"18\" })] }) }));\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\n/**\n * Control screen capture recording. Will show record or stop button.\n */\nexport default function RecordButton({ recording, onStartRecording, onStopRecording, i18n, }) {\n    if (recording) {\n        return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-ScreenCapture-button uppy-ScreenCapture-button--video uppy-ScreenCapture-button--stop-rec\", type: \"button\", title: i18n('stopCapturing'), \"aria-label\": i18n('stopCapturing'), onClick: onStopRecording, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"100\", height: \"100\", viewBox: \"0 0 100 100\", children: _jsx(\"rect\", { x: \"15\", y: \"15\", width: \"70\", height: \"70\" }) }) }));\n    }\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-ScreenCapture-button uppy-ScreenCapture-button--video\", type: \"button\", title: i18n('startCapturing'), \"aria-label\": i18n('startCapturing'), onClick: onStartRecording, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", fill: \"currentColor\", children: _jsx(\"path\", { d: \"M4.5 4.5a3 3 0 0 0-3 3v9a3 3 0 0 0 3 3h8.25a3 3 0 0 0 3-3v-9a3 3 0 0 0-3-3H4.5ZM19.94 18.75l-2.69-2.69V7.94l2.69-2.69c.944-.945 2.56-.276 2.56 1.06v11.38c0 1.336-1.616 2.005-2.56 1.06Z\" }) }) }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nexport default function ScreenshotButton({ onScreenshot, i18n, }) {\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-ScreenCapture-button uppy-ScreenCapture-button--screenshot\", type: \"button\", title: i18n('takeScreenshot'), \"aria-label\": i18n('takeScreenshot'), onClick: onScreenshot, \"data-uppy-super-focusable\": true, children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", fill: \"currentColor\", children: [_jsx(\"path\", { d: \"M12 9a3.75 3.75 0 1 0 0 7.5A3.75 3.75 0 0 0 12 9Z\" }), _jsx(\"path\", { \"fill-rule\": \"evenodd\", d: \"M9.344 3.071a49.52 49.52 0 0 1 5.312 0c.967.052 1.83.585 2.332 1.39l.821 1.317c.24.383.645.643 1.11.71.386.054.77.113 1.152.177 1.432.239 2.429 1.493 2.429 2.909V18a3 3 0 0 1-3 3h-15a3 3 0 0 1-3-3V9.574c0-1.416.997-2.67 2.429-2.909.382-.064.766-.123 1.151-.178a1.56 1.56 0 0 0 1.11-.71l.822-1.315a2.942 2.942 0 0 1 2.332-1.39ZM6.75 12.75a5.25 5.25 0 1 1 10.5 0 5.25 5.25 0 0 1-10.5 0Zm12-1.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\", \"clip-rule\": \"evenodd\" })] }) }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { Component } from 'preact';\nfunction fmtMSS(s) {\n    // biome-ignore lint/suspicious/noAssignInExpressions: ...\n    return (s - (s %= 60)) / 60 + (s > 9 ? ':' : ':0') + s;\n}\nclass StopWatch extends Component {\n    wrapperStyle = {\n        width: '100%',\n        height: '100%',\n        display: 'flex',\n    };\n    overlayStyle = {\n        position: 'absolute',\n        width: '100%',\n        height: '100%',\n        background: 'black',\n        opacity: 0.7,\n    };\n    infoContainerStyle = {\n        marginLeft: 'auto',\n        marginRight: 'auto',\n        marginTop: 'auto',\n        marginBottom: 'auto',\n        zIndex: 1,\n        color: 'white',\n    };\n    infotextStyle = {\n        marginLeft: 'auto',\n        marginRight: 'auto',\n        marginBottom: '1rem',\n        fontSize: '1.5rem',\n    };\n    timeStyle = {\n        display: 'block',\n        fontWeight: 'bold',\n        marginLeft: 'auto',\n        marginRight: 'auto',\n        fontSize: '3rem',\n        fontFamily: 'Courier New',\n    };\n    timerRunning = false;\n    timer;\n    constructor(props) {\n        super(props);\n        this.state = { elapsedTime: 0 };\n    }\n    startTimer() {\n        this.timerTick();\n        this.timerRunning = true;\n    }\n    resetTimer() {\n        clearTimeout(this.timer);\n        this.setState({ elapsedTime: 0 });\n        this.timerRunning = false;\n    }\n    timerTick() {\n        this.timer = setTimeout(() => {\n            this.setState((state) => ({\n                elapsedTime: state.elapsedTime + 1,\n            }));\n            this.timerTick();\n        }, 1000);\n    }\n    render() {\n        const { recording, i18n } = { ...this.props };\n        const { elapsedTime } = this.state;\n        // second to minutes and seconds\n        const minAndSec = fmtMSS(elapsedTime);\n        if (recording && !this.timerRunning) {\n            this.startTimer();\n        }\n        if (!recording && this.timerRunning) {\n            this.resetTimer();\n        }\n        if (recording) {\n            return (_jsxs(\"div\", { style: this.wrapperStyle, children: [_jsx(\"div\", { style: this.overlayStyle }), _jsxs(\"div\", { style: this.infoContainerStyle, children: [_jsx(\"div\", { style: this.infotextStyle, children: i18n('recording') }), _jsx(\"div\", { style: this.timeStyle, children: minAndSec })] })] }));\n        }\n        return null;\n    }\n}\nexport default StopWatch;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nexport default function StreamStatus({ streamActive, i18n }) {\n    if (streamActive) {\n        return (_jsx(\"div\", { title: i18n('streamActive'), className: \"uppy-ScreenCapture-icon--stream uppy-ScreenCapture-icon--streamActive\", children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", children: [_jsx(\"path\", { d: \"M0 0h24v24H0z\", opacity: \".1\", fill: \"none\" }), _jsx(\"path\", { d: \"M0 0h24v24H0z\", fill: \"none\" }), _jsx(\"path\", { d: \"M1 18v3h3c0-1.66-1.34-3-3-3zm0-4v2c2.76 0 5 2.24 5 5h2c0-3.87-3.13-7-7-7zm18-7H5v1.63c3.96 1.28 7.09 4.41 8.37 8.37H19V7zM1 10v2c4.97 0 9 4.03 9 9h2c0-6.08-4.93-11-11-11zm20-7H3c-1.1 0-2 .9-2 2v3h2V5h18v14h-7v2h7c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\" })] }) }));\n    }\n    return (_jsx(\"div\", { title: i18n('streamPassive'), className: \"uppy-ScreenCapture-icon--stream\", children: _jsxs(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"24\", height: \"24\", viewBox: \"0 0 24 24\", children: [_jsx(\"path\", { d: \"M0 0h24v24H0z\", opacity: \".1\", fill: \"none\" }), _jsx(\"path\", { d: \"M0 0h24v24H0z\", fill: \"none\" }), _jsx(\"path\", { d: \"M21 3H3c-1.1 0-2 .9-2 2v3h2V5h18v14h-7v2h7c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM1 18v3h3c0-1.66-1.34-3-3-3zm0-4v2c2.76 0 5 2.24 5 5h2c0-3.87-3.13-7-7-7zm0-4v2c4.97 0 9 4.03 9 9h2c0-6.08-4.93-11-11-11z\" })] }) }));\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\n/**\n * Submit recorded video to uppy. Enabled when file is available\n */\nexport default function SubmitButton({ recording, recordedVideo, onSubmit, capturedScreenshotUrl, i18n, }) {\n    if ((recordedVideo || capturedScreenshotUrl) && !recording) {\n        return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-ScreenCapture-button uppy-ScreenCapture-button--submit\", type: \"button\", title: i18n('submitRecordedFile'), \"aria-label\": i18n('submitRecordedFile'), onClick: onSubmit, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { width: \"12\", height: \"9\", viewBox: \"0 0 12 9\", xmlns: \"http://www.w3.org/2000/svg\", \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", children: _jsx(\"path\", { fill: \"#fff\", fillRule: \"nonzero\", d: \"M10.66 0L12 1.31 4.136 9 0 4.956l1.34-1.31L4.136 6.38z\" }) }) }));\n    }\n    return null;\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { Component, Fragment } from 'preact';\nimport DiscardButton from './DiscardButton.js';\nimport RecordButton from './RecordButton.js';\nimport ScreenshotButton from './ScreenshotButton.js';\nimport StopWatch from './StopWatch.js';\nimport StreamStatus from './StreamStatus.js';\nimport SubmitButton from './SubmitButton.js';\nclass RecorderScreen extends Component {\n    videoElement = null;\n    componentWillUnmount() {\n        const { onStop } = this.props;\n        onStop();\n    }\n    render() {\n        const { recording, stream: videoStream, recordedVideo, enableScreenshots, capturedScreenshotUrl, } = this.props;\n        const videoProps = {\n            playsinline: true,\n        };\n        // show stream\n        if (recording || (!recordedVideo && !recording)) {\n            videoProps.muted = true;\n            videoProps.autoplay = true;\n            videoProps.srcObject = videoStream;\n        }\n        // show preview\n        if (recordedVideo && !recording) {\n            videoProps.muted = false;\n            videoProps.controls = true;\n            videoProps.src = recordedVideo;\n            // reset srcObject in dom. If not resetted, stream sticks in element\n            if (this.videoElement) {\n                this.videoElement.srcObject = null;\n            }\n        }\n        return (_jsxs(\"div\", { className: \"uppy uppy-ScreenCapture-container\", children: [_jsxs(\"div\", { className: \"uppy-ScreenCapture-mediaContainer\", children: [_jsx(StreamStatus, { ...this.props }), capturedScreenshotUrl && !recording && !recordedVideo ? (_jsx(\"div\", { className: \"uppy-ScreenCapture-imageContainer\", children: _jsx(\"img\", { src: capturedScreenshotUrl, className: \"uppy-ScreenCapture-media\", alt: \"screenshotPreview\" }) })) : (_jsx(\"video\", { ref: (videoElement) => {\n                                this.videoElement = videoElement;\n                            }, className: \"uppy-ScreenCapture-media\", ...videoProps })), _jsx(\"div\", { children: _jsx(StopWatch, { ...this.props }) })] }), _jsx(\"div\", { className: \"uppy-ScreenCapture-buttonContainer\", children: recordedVideo || capturedScreenshotUrl ? (_jsxs(Fragment, { children: [_jsx(SubmitButton, { ...this.props }), _jsx(DiscardButton, { ...this.props })] })) : (_jsxs(Fragment, { children: [enableScreenshots && !recording && (_jsx(ScreenshotButton, { ...this.props })), _jsx(RecordButton, { ...this.props })] })) })] }));\n    }\n}\nexport default RecorderScreen;\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nexport default function ScreenRecIcon() {\n    return (_jsx(\"svg\", { className: \"uppy-DashboardTab-iconScreenRec\", \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsxs(\"g\", { fill: \"currentcolor\", fillRule: \"evenodd\", children: [_jsx(\"path\", { d: \"M24.182 9H7.818C6.81 9 6 9.742 6 10.667v10c0 .916.81 1.666 1.818 1.666h4.546V24h7.272v-1.667h4.546c1 0 1.809-.75 1.809-1.666l.009-10C26 9.742 25.182 9 24.182 9zM24 21H8V11h16v10z\" }), _jsx(\"circle\", { cx: \"16\", cy: \"16\", r: \"2\" })] }) }));\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { UIPlugin } from '@uppy/core';\nimport { getFileTypeExtension } from '@uppy/utils';\nimport packageJson from '../package.json' with { type: 'json' };\nimport locale from './locale.js';\nimport RecorderScreen from './RecorderScreen.js';\nimport ScreenRecIcon from './ScreenRecIcon.js';\n// Check if screen capturing is supported.\n// mediaDevices is supprted on mobile Safari, getDisplayMedia is not\nfunction isScreenRecordingSupported() {\n    return window.MediaRecorder && navigator.mediaDevices?.getDisplayMedia;\n}\n// Adapted from: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\nfunction getMediaDevices() {\n    return window.MediaRecorder && navigator.mediaDevices;\n}\n// Add supported image types\nconst SUPPORTED_IMAGE_TYPES = ['image/png', 'image/jpeg', 'image/webp'];\n// https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamConstraints\nconst defaultOptions = {\n    // https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints#Properties_of_shared_screen_tracks\n    displayMediaConstraints: {\n        video: {\n            width: 1280,\n            height: 720,\n            frameRate: {\n                ideal: 3,\n                max: 5,\n            },\n            cursor: 'motion',\n            displaySurface: 'monitor',\n        },\n    },\n    // https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamConstraints/audio\n    userMediaConstraints: {\n        audio: true,\n    },\n    preferredVideoMimeType: 'video/webm',\n    preferredImageMimeType: 'image/png',\n    enableScreenshots: true,\n};\nexport default class ScreenCapture extends UIPlugin {\n    static VERSION = packageJson.version;\n    mediaDevices;\n    protocol;\n    icon;\n    streamInterrupted;\n    captureActive;\n    capturedMediaFile;\n    videoStream = null;\n    audioStream = null;\n    userDenied = false;\n    recorder = null;\n    outputStream = null;\n    recordingChunks = null;\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOptions, ...opts });\n        this.mediaDevices = getMediaDevices();\n        this.protocol = location.protocol === 'https:' ? 'https' : 'http';\n        this.id = this.opts.id || 'ScreenCapture';\n        this.type = 'acquirer';\n        this.icon = ScreenRecIcon;\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameScreenCapture');\n        // uppy plugin class related\n        this.install = this.install.bind(this);\n        this.setPluginState = this.setPluginState.bind(this);\n        this.render = this.render.bind(this);\n        // screen capturer related\n        this.start = this.start.bind(this);\n        this.stop = this.stop.bind(this);\n        this.startRecording = this.startRecording.bind(this);\n        this.stopRecording = this.stopRecording.bind(this);\n        this.submit = this.submit.bind(this);\n        this.streamInterrupted = this.streamInactivated.bind(this);\n        this.captureScreenshot = this.captureScreenshot.bind(this);\n        this.discardRecordedMedia = this.discardRecordedMedia.bind(this);\n        // initialize\n        this.captureActive = false;\n        this.capturedMediaFile = null;\n        this.setPluginState({\n            streamActive: false,\n            audioStreamActive: false,\n            recording: false,\n            recordedVideo: null,\n            screenRecError: null,\n            capturedScreenshotUrl: null,\n            status: 'init',\n        });\n    }\n    install() {\n        if (!isScreenRecordingSupported()) {\n            this.uppy.log('Screen recorder access is not supported', 'warning');\n            return null;\n        }\n        this.setPluginState({\n            streamActive: false,\n            audioStreamActive: false,\n            status: 'init',\n        });\n        const { target } = this.opts;\n        if (target) {\n            this.mount(target, this);\n        }\n        return undefined;\n    }\n    uninstall() {\n        if (this.videoStream) {\n            this.stop();\n        }\n        this.unmount();\n    }\n    start() {\n        if (!this.mediaDevices) {\n            return Promise.reject(new Error('Screen recorder access not supported'));\n        }\n        this.captureActive = true;\n        this.selectAudioStreamSource();\n        return this.selectVideoStreamSource().then((res) => {\n            // something happened in start -> return\n            if (res === false) {\n                // Close the Dashboard panel if plugin is installed\n                // into Dashboard (could be other parent UI plugin)\n                // @ts-expect-error we can't know Dashboard types here\n                if (this.parent?.hideAllPanels) {\n                    // @ts-expect-error we can't know Dashboard types here\n                    this.parent.hideAllPanels();\n                    this.captureActive = false;\n                }\n            }\n        });\n    }\n    selectVideoStreamSource() {\n        // if active stream available, return it\n        if (this.videoStream) {\n            return new Promise((resolve) => resolve(this.videoStream));\n        }\n        // ask user to select source to record and get mediastream from that\n        return this.mediaDevices\n            .getDisplayMedia(this.opts.displayMediaConstraints)\n            .then((videoStream) => {\n            this.videoStream = videoStream;\n            // add event listener to stop recording if stream is interrupted\n            this.videoStream.addEventListener('inactive', () => {\n                this.streamInactivated();\n            });\n            this.setPluginState({\n                streamActive: true,\n                status: 'ready',\n                screenRecError: null,\n            });\n            return videoStream;\n        })\n            .catch((err) => {\n            this.setPluginState({\n                screenRecError: err,\n                status: 'error',\n            });\n            this.userDenied = true;\n            setTimeout(() => {\n                this.userDenied = false;\n            }, 1000);\n            return false;\n        });\n    }\n    selectAudioStreamSource() {\n        // if active stream available, return it\n        if (this.audioStream) {\n            return new Promise((resolve) => resolve(this.audioStream));\n        }\n        // ask user to select source to record and get mediastream from that\n        return this.mediaDevices\n            .getUserMedia(this.opts.userMediaConstraints)\n            .then((audioStream) => {\n            this.audioStream = audioStream;\n            this.setPluginState({\n                audioStreamActive: true,\n            });\n            return audioStream;\n        })\n            .catch((err) => {\n            if (err.name === 'NotAllowedError') {\n                this.uppy.info(this.i18n('micDisabled'), 'error', 5000);\n                this.uppy.log(this.i18n('micDisabled'), 'warning');\n            }\n            return false;\n        });\n    }\n    startRecording() {\n        const options = {};\n        this.capturedMediaFile = null;\n        this.recordingChunks = [];\n        const { preferredVideoMimeType } = this.opts;\n        this.selectVideoStreamSource()\n            .then((videoStream) => {\n            if (videoStream === false) {\n                throw new Error('No video stream available');\n            }\n            // Attempt to use the passed preferredVideoMimeType (if any) during recording.\n            // If the browser doesn't support it, we'll fall back to the browser default instead\n            if (preferredVideoMimeType &&\n                MediaRecorder.isTypeSupported(preferredVideoMimeType) &&\n                getFileTypeExtension(preferredVideoMimeType)) {\n                options.mimeType = preferredVideoMimeType;\n            }\n            // prepare tracks\n            const tracks = [videoStream.getVideoTracks()[0]];\n            // merge audio if exits\n            if (this.audioStream) {\n                tracks.push(this.audioStream.getAudioTracks()[0]);\n            }\n            // create new stream from video and audio\n            this.outputStream = new MediaStream(tracks);\n            // initialize mediarecorder\n            this.recorder = new MediaRecorder(this.outputStream, options);\n            // push data to buffer when data available\n            this.recorder.addEventListener('dataavailable', (event) => {\n                this.recordingChunks.push(event.data);\n            });\n            // start recording\n            this.recorder.start();\n            // set plugin state to recording\n            this.setPluginState({\n                recording: true,\n                status: 'recording',\n            });\n        })\n            .catch((err) => {\n            this.uppy.log(err, 'error');\n            this.setPluginState({ screenRecError: err, status: 'error' });\n        });\n    }\n    streamInactivated() {\n        // get screen recorder state\n        const { recordedVideo, recording } = { ...this.getPluginState() };\n        if (!recordedVideo && !recording) {\n            // Close the Dashboard panel if plugin is installed\n            // into Dashboard (could be other parent UI plugin)\n            // @ts-expect-error we can't know Dashboard types here\n            if (this.parent?.hideAllPanels) {\n                // @ts-expect-error we can't know Dashboard types here\n                this.parent.hideAllPanels();\n            }\n            this.setPluginState({ status: 'init' });\n        }\n        else if (recording) {\n            // stop recorder if it is active\n            this.uppy.log('Capture stream inactive \u2014 stop recording');\n            this.stopRecording();\n        }\n        this.videoStream = null;\n        this.audioStream = null;\n        this.setPluginState({\n            streamActive: false,\n            audioStreamActive: false,\n        });\n    }\n    stopRecording() {\n        const stopped = new Promise((resolve) => {\n            this.recorder.addEventListener('stop', () => {\n                resolve();\n            });\n            this.recorder.stop();\n        });\n        return stopped\n            .then(() => {\n            // recording stopped\n            this.setPluginState({\n                recording: false,\n            });\n            // get video file after recorder stopped\n            return this.getVideo();\n        })\n            .then((file) => {\n            // store media file\n            this.capturedMediaFile = file;\n            // create object url for capture result preview\n            this.setPluginState({\n                recordedVideo: URL.createObjectURL(file.data),\n                status: 'captured',\n            });\n        })\n            .then(() => {\n            this.recordingChunks = null;\n            this.recorder = null;\n        }, (error) => {\n            this.recordingChunks = null;\n            this.recorder = null;\n            throw error;\n        });\n    }\n    discardRecordedMedia() {\n        const { capturedScreenshotUrl, recordedVideo } = this.getPluginState();\n        if (capturedScreenshotUrl) {\n            URL.revokeObjectURL(capturedScreenshotUrl);\n        }\n        if (recordedVideo) {\n            URL.revokeObjectURL(recordedVideo);\n        }\n        this.capturedMediaFile = null;\n        this.setPluginState({\n            recordedVideo: null,\n            capturedScreenshotUrl: null,\n            status: this.getPluginState().streamActive ? 'ready' : 'init',\n        });\n    }\n    submit() {\n        try {\n            // add recorded file to uppy\n            if (this.capturedMediaFile) {\n                this.uppy.addFile(this.capturedMediaFile);\n            }\n        }\n        catch (err) {\n            // Logging the error, exept restrictions, which is handled in Core\n            if (!err.isRestriction) {\n                this.uppy.log(err, 'warning');\n            }\n        }\n    }\n    stop() {\n        // flush video stream\n        if (this.videoStream) {\n            this.videoStream.getVideoTracks().forEach((track) => {\n                track.stop();\n            });\n            this.videoStream.getAudioTracks().forEach((track) => {\n                track.stop();\n            });\n            this.videoStream = null;\n        }\n        // flush audio stream\n        if (this.audioStream) {\n            this.audioStream.getAudioTracks().forEach((track) => {\n                track.stop();\n            });\n            this.audioStream.getVideoTracks().forEach((track) => {\n                track.stop();\n            });\n            this.audioStream = null;\n        }\n        // flush output stream\n        if (this.outputStream) {\n            this.outputStream.getAudioTracks().forEach((track) => {\n                track.stop();\n            });\n            this.outputStream.getVideoTracks().forEach((track) => {\n                track.stop();\n            });\n            this.outputStream = null;\n        }\n        // Clean up screenshot URL\n        const { capturedScreenshotUrl, recordedVideo } = this.getPluginState();\n        if (capturedScreenshotUrl) {\n            URL.revokeObjectURL(capturedScreenshotUrl);\n        }\n        if (recordedVideo) {\n            URL.revokeObjectURL(recordedVideo);\n        }\n        // remove preview video\n        this.setPluginState({\n            recording: false,\n            streamActive: false,\n            audioStreamActive: false,\n            recordedVideo: null,\n            capturedScreenshotUrl: null,\n            status: 'init',\n        });\n        this.captureActive = false;\n    }\n    getVideo() {\n        const mimeType = this.recordingChunks[0].type;\n        const fileExtension = getFileTypeExtension(mimeType);\n        if (!fileExtension) {\n            return Promise.reject(new Error(`Could not retrieve recording: Unsupported media type \"${mimeType}\"`));\n        }\n        const name = `screencap-${Date.now()}.${fileExtension}`;\n        const blob = new Blob(this.recordingChunks, { type: mimeType });\n        const file = {\n            source: this.id,\n            name,\n            data: new Blob([blob], { type: mimeType }),\n            type: mimeType,\n        };\n        return Promise.resolve(file);\n    }\n    async captureScreenshot() {\n        if (!this.mediaDevices?.getDisplayMedia) {\n            throw new Error('Screen capture is not supported');\n        }\n        try {\n            let stream = this.videoStream;\n            // Only request new stream if we don't have one\n            if (!stream) {\n                const newStream = await this.selectVideoStreamSource();\n                if (!newStream) {\n                    throw new Error('Failed to get screen capture stream');\n                }\n                stream = newStream;\n            }\n            const video = document.createElement('video');\n            video.srcObject = stream;\n            await new Promise((resolve) => {\n                video.onloadedmetadata = () => {\n                    video.play();\n                    resolve(null);\n                };\n            });\n            const canvas = document.createElement('canvas');\n            canvas.width = video.videoWidth;\n            canvas.height = video.videoHeight;\n            const ctx = canvas.getContext('2d');\n            if (!ctx) {\n                throw new Error('Failed to get canvas context');\n            }\n            ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n            // Validate and set fallback for preferred image mime type\n            let mimeType = this.opts.preferredImageMimeType;\n            if (!mimeType || !SUPPORTED_IMAGE_TYPES.includes(mimeType)) {\n                this.uppy.log(`Unsupported image type \"${mimeType}\", falling back to image/png`, 'warning');\n                mimeType = 'image/png';\n            }\n            const quality = 1;\n            return new Promise((resolve, reject) => {\n                canvas.toBlob((blob) => {\n                    if (!blob) {\n                        reject(new Error('Failed to create screenshot blob'));\n                        return;\n                    }\n                    const fileExtension = getFileTypeExtension(mimeType) || 'png';\n                    const file = {\n                        source: this.id,\n                        name: `Screenshot ${new Date().toISOString()}.${fileExtension}`,\n                        type: mimeType,\n                        data: blob,\n                    };\n                    try {\n                        this.capturedMediaFile = file;\n                        const screenshotUrl = URL.createObjectURL(blob);\n                        this.setPluginState({\n                            capturedScreenshotUrl: screenshotUrl,\n                            status: 'captured',\n                        });\n                        resolve();\n                    }\n                    catch (err) {\n                        if (this.getPluginState().capturedScreenshotUrl) {\n                            this.setPluginState({ capturedScreenshotUrl: null });\n                        }\n                        if (!err.isRestriction) {\n                            this.uppy.log(err, 'error');\n                        }\n                        reject(err);\n                    }\n                    finally {\n                        // Cleanup\n                        video.srcObject = null;\n                        canvas.remove();\n                        video.remove();\n                    }\n                }, mimeType, quality);\n            });\n        }\n        catch (err) {\n            this.uppy.log(err, 'error');\n            throw err;\n        }\n    }\n    render() {\n        // get screen recorder state\n        const recorderState = this.getPluginState();\n        if (!recorderState.streamActive &&\n            !this.captureActive &&\n            !this.userDenied) {\n            this.start();\n        }\n        return (_jsx(RecorderScreen, { ...recorderState, onStartRecording: this.startRecording, onStopRecording: this.stopRecording, enableScreenshots: this.opts.enableScreenshots, onScreenshot: this.captureScreenshot, onStop: this.stop, onSubmit: this.submit, i18n: this.i18n, stream: this.videoStream, onDiscard: this.discardRecordedMedia }));\n    }\n}\n", "{\n  \"name\": \"@uppy/status-bar\",\n  \"description\": \"A progress bar for Uppy, with many bells and whistles.\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\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  },\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@transloadit/prettier-bytes\": \"^0.3.4\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"classnames\": \"^2.2.6\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\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}\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        failedToAddFiles: 'Failed to add files',\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", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport classNames from 'classnames';\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';\nimport classNames from 'classnames';\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 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", "import { UIPlugin } from '@uppy/core';\nimport { emaFilter, getTextDirection } from '@uppy/utils';\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", "function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _isNativeFunction(fn) { try { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; } catch (e) { return typeof fn === \"function\"; } }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nvar DetailedError = /*#__PURE__*/function (_Error) {\n  function DetailedError(message) {\n    var _this;\n    var causingErr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    var req = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    var res = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n    _classCallCheck(this, DetailedError);\n    _this = _callSuper(this, DetailedError, [message]);\n    _this.originalRequest = req;\n    _this.originalResponse = res;\n    _this.causingError = causingErr;\n    if (causingErr != null) {\n      message += \", caused by \".concat(causingErr.toString());\n    }\n    if (req != null) {\n      var requestId = req.getHeader('X-Request-ID') || 'n/a';\n      var method = req.getMethod();\n      var url = req.getURL();\n      var status = res ? res.getStatus() : 'n/a';\n      var body = res ? res.getBody() || '' : 'n/a';\n      message += \", originated from request (method: \".concat(method, \", url: \").concat(url, \", response code: \").concat(status, \", response text: \").concat(body, \", request id: \").concat(requestId, \")\");\n    }\n    _this.message = message;\n    return _this;\n  }\n  _inherits(DetailedError, _Error);\n  return _createClass(DetailedError);\n}( /*#__PURE__*/_wrapNativeSuper(Error));\nexport default DetailedError;", "var isEnabled = false;\nexport function enableDebugLog() {\n  isEnabled = true;\n}\nexport function log(msg) {\n  if (!isEnabled) return;\n  console.log(msg);\n}", "function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar NoopUrlStorage = /*#__PURE__*/function () {\n  function NoopUrlStorage() {\n    _classCallCheck(this, NoopUrlStorage);\n  }\n  return _createClass(NoopUrlStorage, [{\n    key: \"listAllUploads\",\n    value: function listAllUploads() {\n      return Promise.resolve([]);\n    }\n  }, {\n    key: \"findUploadsByFingerprint\",\n    value: function findUploadsByFingerprint(_fingerprint) {\n      return Promise.resolve([]);\n    }\n  }, {\n    key: \"removeUpload\",\n    value: function removeUpload(_urlStorageKey) {\n      return Promise.resolve();\n    }\n  }, {\n    key: \"addUpload\",\n    value: function addUpload(_fingerprint, _upload) {\n      return Promise.resolve(null);\n    }\n  }]);\n}();\nexport { NoopUrlStorage as default };", "/**\n *  base64.ts\n *\n *  Licensed under the BSD 3-Clause License.\n *    http://opensource.org/licenses/BSD-3-Clause\n *\n *  References:\n *    http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.7';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n    let tab = {};\n    a.forEach((c, i) => tab[c] = i);\n    return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n    ? Uint8Array.from.bind(Uint8Array)\n    : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n    .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n    // console.log('polyfilled');\n    let u32, c0, c1, c2, asc = '';\n    const pad = bin.length % 3;\n    for (let i = 0; i < bin.length;) {\n        if ((c0 = bin.charCodeAt(i++)) > 255 ||\n            (c1 = bin.charCodeAt(i++)) > 255 ||\n            (c2 = bin.charCodeAt(i++)) > 255)\n            throw new TypeError('invalid character found');\n        u32 = (c0 << 16) | (c1 << 8) | c2;\n        asc += b64chs[u32 >> 18 & 63]\n            + b64chs[u32 >> 12 & 63]\n            + b64chs[u32 >> 6 & 63]\n            + b64chs[u32 & 63];\n    }\n    return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n    : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n        : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n    ? (u8a) => Buffer.from(u8a).toString('base64')\n    : (u8a) => {\n        // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n        const maxargs = 0x1000;\n        let strs = [];\n        for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n            strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n        }\n        return _btoa(strs.join(''));\n    };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 \u00A75\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n    if (c.length < 2) {\n        var cc = c.charCodeAt(0);\n        return cc < 0x80 ? c\n            : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n                + _fromCC(0x80 | (cc & 0x3f)))\n                : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n                    + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n                    + _fromCC(0x80 | (cc & 0x3f)));\n    }\n    else {\n        var cc = 0x10000\n            + (c.charCodeAt(0) - 0xD800) * 0x400\n            + (c.charCodeAt(1) - 0xDC00);\n        return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n            + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n            + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n            + _fromCC(0x80 | (cc & 0x3f)));\n    }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n    ? (s) => Buffer.from(s, 'utf8').toString('base64')\n    : _TE\n        ? (s) => _fromUint8Array(_TE.encode(s))\n        : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n    ? _mkUriSafe(_encode(src))\n    : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 \u00A75.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n    switch (cccc.length) {\n        case 4:\n            var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n                | ((0x3f & cccc.charCodeAt(1)) << 12)\n                | ((0x3f & cccc.charCodeAt(2)) << 6)\n                | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n            return (_fromCC((offset >>> 10) + 0xD800)\n                + _fromCC((offset & 0x3FF) + 0xDC00));\n        case 3:\n            return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n                | ((0x3f & cccc.charCodeAt(1)) << 6)\n                | (0x3f & cccc.charCodeAt(2)));\n        default:\n            return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n                | (0x3f & cccc.charCodeAt(1)));\n    }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n    // console.log('polyfilled');\n    asc = asc.replace(/\\s+/g, '');\n    if (!b64re.test(asc))\n        throw new TypeError('malformed base64.');\n    asc += '=='.slice(2 - (asc.length & 3));\n    let u24, bin = '', r1, r2;\n    for (let i = 0; i < asc.length;) {\n        u24 = b64tab[asc.charAt(i++)] << 18\n            | b64tab[asc.charAt(i++)] << 12\n            | (r1 = b64tab[asc.charAt(i++)]) << 6\n            | (r2 = b64tab[asc.charAt(i++)]);\n        bin += r1 === 64 ? _fromCC(u24 >> 16 & 255)\n            : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255)\n                : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255);\n    }\n    return bin;\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n    : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n        : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n    ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n    : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n    ? (a) => Buffer.from(a, 'base64').toString('utf8')\n    : _TD\n        ? (a) => _TD.decode(_toUint8Array(a))\n        : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string.  Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n  */\nconst isValid = (src) => {\n    if (typeof src !== 'string')\n        return false;\n    const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n    return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n    return {\n        value: v, enumerable: false, writable: true, configurable: true\n    };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n    const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n    _add('fromBase64', function () { return decode(this); });\n    _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n    _add('toBase64URI', function () { return encode(this, true); });\n    _add('toBase64URL', function () { return encode(this, true); });\n    _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n    const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n    _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n    _add('toBase64URI', function () { return fromUint8Array(this, true); });\n    _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n    extendString();\n    extendUint8Array();\n};\nconst gBase64 = {\n    version: version,\n    VERSION: VERSION,\n    atob: _atob,\n    atobPolyfill: atobPolyfill,\n    btoa: _btoa,\n    btoaPolyfill: btoaPolyfill,\n    fromBase64: decode,\n    toBase64: encode,\n    encode: encode,\n    encodeURI: encodeURI,\n    encodeURL: encodeURI,\n    utob: utob,\n    btou: btou,\n    decode: decode,\n    isValid: isValid,\n    fromUint8Array: fromUint8Array,\n    toUint8Array: toUint8Array,\n    extendString: extendString,\n    extendUint8Array: extendUint8Array,\n    extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n", "function _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { Base64 } from 'js-base64';\nimport URL from 'url-parse';\nimport DetailedError from './error.js';\nimport { log } from './logger.js';\nimport uuid from './uuid.js';\nvar PROTOCOL_TUS_V1 = 'tus-v1';\nvar PROTOCOL_IETF_DRAFT_03 = 'ietf-draft-03';\nvar PROTOCOL_IETF_DRAFT_05 = 'ietf-draft-05';\nvar defaultOptions = {\n  endpoint: null,\n  uploadUrl: null,\n  metadata: {},\n  metadataForPartialUploads: {},\n  fingerprint: null,\n  uploadSize: null,\n  onProgress: null,\n  onChunkComplete: null,\n  onSuccess: null,\n  onError: null,\n  onUploadUrlAvailable: null,\n  overridePatchMethod: false,\n  headers: {},\n  addRequestId: false,\n  onBeforeRequest: null,\n  onAfterResponse: null,\n  onShouldRetry: defaultOnShouldRetry,\n  chunkSize: Number.POSITIVE_INFINITY,\n  retryDelays: [0, 1000, 3000, 5000],\n  parallelUploads: 1,\n  parallelUploadBoundaries: null,\n  storeFingerprintForResuming: true,\n  removeFingerprintOnSuccess: false,\n  uploadLengthDeferred: false,\n  uploadDataDuringCreation: false,\n  urlStorage: null,\n  fileReader: null,\n  httpStack: null,\n  protocol: PROTOCOL_TUS_V1\n};\nvar BaseUpload = /*#__PURE__*/function () {\n  function BaseUpload(file, options) {\n    _classCallCheck(this, BaseUpload);\n    // Warn about removed options from previous versions\n    if ('resume' in options) {\n      console.log('tus: The `resume` option has been removed in tus-js-client v2. Please use the URL storage API instead.');\n    }\n\n    // The default options will already be added from the wrapper classes.\n    this.options = options;\n\n    // Cast chunkSize to integer\n    this.options.chunkSize = Number(this.options.chunkSize);\n\n    // The storage module used to store URLs\n    this._urlStorage = this.options.urlStorage;\n\n    // The underlying File/Blob object\n    this.file = file;\n\n    // The URL against which the file will be uploaded\n    this.url = null;\n\n    // The underlying request object for the current PATCH request\n    this._req = null;\n\n    // The fingerpinrt for the current file (set after start())\n    this._fingerprint = null;\n\n    // The key that the URL storage returned when saving an URL with a fingerprint,\n    this._urlStorageKey = null;\n\n    // The offset used in the current PATCH request\n    this._offset = null;\n\n    // True if the current PATCH request has been aborted\n    this._aborted = false;\n\n    // The file's size in bytes\n    this._size = null;\n\n    // The Source object which will wrap around the given file and provides us\n    // with a unified interface for getting its size and slice chunks from its\n    // content allowing us to easily handle Files, Blobs, Buffers and Streams.\n    this._source = null;\n\n    // The current count of attempts which have been made. Zero indicates none.\n    this._retryAttempt = 0;\n\n    // The timeout's ID which is used to delay the next retry\n    this._retryTimeout = null;\n\n    // The offset of the remote upload before the latest attempt was started.\n    this._offsetBeforeRetry = 0;\n\n    // An array of BaseUpload instances which are used for uploading the different\n    // parts, if the parallelUploads option is used.\n    this._parallelUploads = null;\n\n    // An array of upload URLs which are used for uploading the different\n    // parts, if the parallelUploads option is used.\n    this._parallelUploadUrls = null;\n  }\n\n  /**\n   * Use the Termination extension to delete an upload from the server by sending a DELETE\n   * request to the specified upload URL. This is only possible if the server supports the\n   * Termination extension. If the `options.retryDelays` property is set, the method will\n   * also retry if an error ocurrs.\n   *\n   * @param {String} url The upload's URL which will be terminated.\n   * @param {object} options Optional options for influencing HTTP requests.\n   * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n   */\n  return _createClass(BaseUpload, [{\n    key: \"findPreviousUploads\",\n    value: function findPreviousUploads() {\n      var _this = this;\n      return this.options.fingerprint(this.file, this.options).then(function (fingerprint) {\n        return _this._urlStorage.findUploadsByFingerprint(fingerprint);\n      });\n    }\n  }, {\n    key: \"resumeFromPreviousUpload\",\n    value: function resumeFromPreviousUpload(previousUpload) {\n      this.url = previousUpload.uploadUrl || null;\n      this._parallelUploadUrls = previousUpload.parallelUploadUrls || null;\n      this._urlStorageKey = previousUpload.urlStorageKey;\n    }\n  }, {\n    key: \"start\",\n    value: function start() {\n      var _this2 = this;\n      var file = this.file;\n      if (!file) {\n        this._emitError(new Error('tus: no file or stream to upload provided'));\n        return;\n      }\n      if (![PROTOCOL_TUS_V1, PROTOCOL_IETF_DRAFT_03, PROTOCOL_IETF_DRAFT_05].includes(this.options.protocol)) {\n        this._emitError(new Error(\"tus: unsupported protocol \".concat(this.options.protocol)));\n        return;\n      }\n      if (!this.options.endpoint && !this.options.uploadUrl && !this.url) {\n        this._emitError(new Error('tus: neither an endpoint or an upload URL is provided'));\n        return;\n      }\n      var retryDelays = this.options.retryDelays;\n      if (retryDelays != null && Object.prototype.toString.call(retryDelays) !== '[object Array]') {\n        this._emitError(new Error('tus: the `retryDelays` option must either be an array or null'));\n        return;\n      }\n      if (this.options.parallelUploads > 1) {\n        // Test which options are incompatible with parallel uploads.\n        for (var _i = 0, _arr = ['uploadUrl', 'uploadSize', 'uploadLengthDeferred']; _i < _arr.length; _i++) {\n          var optionName = _arr[_i];\n          if (this.options[optionName]) {\n            this._emitError(new Error(\"tus: cannot use the \".concat(optionName, \" option when parallelUploads is enabled\")));\n            return;\n          }\n        }\n      }\n      if (this.options.parallelUploadBoundaries) {\n        if (this.options.parallelUploads <= 1) {\n          this._emitError(new Error('tus: cannot use the `parallelUploadBoundaries` option when `parallelUploads` is disabled'));\n          return;\n        }\n        if (this.options.parallelUploads !== this.options.parallelUploadBoundaries.length) {\n          this._emitError(new Error('tus: the `parallelUploadBoundaries` must have the same length as the value of `parallelUploads`'));\n          return;\n        }\n      }\n      this.options.fingerprint(file, this.options).then(function (fingerprint) {\n        if (fingerprint == null) {\n          log('No fingerprint was calculated meaning that the upload cannot be stored in the URL storage.');\n        } else {\n          log(\"Calculated fingerprint: \".concat(fingerprint));\n        }\n        _this2._fingerprint = fingerprint;\n        if (_this2._source) {\n          return _this2._source;\n        }\n        return _this2.options.fileReader.openFile(file, _this2.options.chunkSize);\n      }).then(function (source) {\n        _this2._source = source;\n\n        // First, we look at the uploadLengthDeferred option.\n        // Next, we check if the caller has supplied a manual upload size.\n        // Finally, we try to use the calculated size from the source object.\n        if (_this2.options.uploadLengthDeferred) {\n          _this2._size = null;\n        } else if (_this2.options.uploadSize != null) {\n          _this2._size = Number(_this2.options.uploadSize);\n          if (Number.isNaN(_this2._size)) {\n            _this2._emitError(new Error('tus: cannot convert `uploadSize` option into a number'));\n            return;\n          }\n        } else {\n          _this2._size = _this2._source.size;\n          if (_this2._size == null) {\n            _this2._emitError(new Error(\"tus: cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option\"));\n            return;\n          }\n        }\n\n        // If the upload was configured to use multiple requests or if we resume from\n        // an upload which used multiple requests, we start a parallel upload.\n        if (_this2.options.parallelUploads > 1 || _this2._parallelUploadUrls != null) {\n          _this2._startParallelUpload();\n        } else {\n          _this2._startSingleUpload();\n        }\n      })[\"catch\"](function (err) {\n        _this2._emitError(err);\n      });\n    }\n\n    /**\n     * Initiate the uploading procedure for a parallelized upload, where one file is split into\n     * multiple request which are run in parallel.\n     *\n     * @api private\n     */\n  }, {\n    key: \"_startParallelUpload\",\n    value: function _startParallelUpload() {\n      var _this$options$paralle,\n        _this3 = this;\n      var totalSize = this._size;\n      var totalProgress = 0;\n      this._parallelUploads = [];\n      var partCount = this._parallelUploadUrls != null ? this._parallelUploadUrls.length : this.options.parallelUploads;\n\n      // The input file will be split into multiple slices which are uploaded in separate\n      // requests. Here we get the start and end position for the slices.\n      var parts = (_this$options$paralle = this.options.parallelUploadBoundaries) !== null && _this$options$paralle !== void 0 ? _this$options$paralle : splitSizeIntoParts(this._source.size, partCount);\n\n      // Attach URLs from previous uploads, if available.\n      if (this._parallelUploadUrls) {\n        parts.forEach(function (part, index) {\n          part.uploadUrl = _this3._parallelUploadUrls[index] || null;\n        });\n      }\n\n      // Create an empty list for storing the upload URLs\n      this._parallelUploadUrls = new Array(parts.length);\n\n      // Generate a promise for each slice that will be resolve if the respective\n      // upload is completed.\n      var uploads = parts.map(function (part, index) {\n        var lastPartProgress = 0;\n        return _this3._source.slice(part.start, part.end).then(function (_ref) {\n          var value = _ref.value;\n          return new Promise(function (resolve, reject) {\n            // Merge with the user supplied options but overwrite some values.\n            var options = _objectSpread(_objectSpread({}, _this3.options), {}, {\n              // If available, the partial upload should be resumed from a previous URL.\n              uploadUrl: part.uploadUrl || null,\n              // We take manually care of resuming for partial uploads, so they should\n              // not be stored in the URL storage.\n              storeFingerprintForResuming: false,\n              removeFingerprintOnSuccess: false,\n              // Reset the parallelUploads option to not cause recursion.\n              parallelUploads: 1,\n              // Reset this option as we are not doing a parallel upload.\n              parallelUploadBoundaries: null,\n              metadata: _this3.options.metadataForPartialUploads,\n              // Add the header to indicate the this is a partial upload.\n              headers: _objectSpread(_objectSpread({}, _this3.options.headers), {}, {\n                'Upload-Concat': 'partial'\n              }),\n              // Reject or resolve the promise if the upload errors or completes.\n              onSuccess: resolve,\n              onError: reject,\n              // Based in the progress for this partial upload, calculate the progress\n              // for the entire final upload.\n              onProgress: function onProgress(newPartProgress) {\n                totalProgress = totalProgress - lastPartProgress + newPartProgress;\n                lastPartProgress = newPartProgress;\n                _this3._emitProgress(totalProgress, totalSize);\n              },\n              // Wait until every partial upload has an upload URL, so we can add\n              // them to the URL storage.\n              onUploadUrlAvailable: function onUploadUrlAvailable() {\n                _this3._parallelUploadUrls[index] = upload.url;\n                // Test if all uploads have received an URL\n                if (_this3._parallelUploadUrls.filter(function (u) {\n                  return Boolean(u);\n                }).length === parts.length) {\n                  _this3._saveUploadInUrlStorage();\n                }\n              }\n            });\n            var upload = new BaseUpload(value, options);\n            upload.start();\n\n            // Store the upload in an array, so we can later abort them if necessary.\n            _this3._parallelUploads.push(upload);\n          });\n        });\n      });\n      var req;\n      // Wait until all partial uploads are finished and we can send the POST request for\n      // creating the final upload.\n      Promise.all(uploads).then(function () {\n        req = _this3._openRequest('POST', _this3.options.endpoint);\n        req.setHeader('Upload-Concat', \"final;\".concat(_this3._parallelUploadUrls.join(' ')));\n\n        // Add metadata if values have been added\n        var metadata = encodeMetadata(_this3.options.metadata);\n        if (metadata !== '') {\n          req.setHeader('Upload-Metadata', metadata);\n        }\n        return _this3._sendRequest(req, null);\n      }).then(function (res) {\n        if (!inStatusCategory(res.getStatus(), 200)) {\n          _this3._emitHttpError(req, res, 'tus: unexpected response while creating upload');\n          return;\n        }\n        var location = res.getHeader('Location');\n        if (location == null) {\n          _this3._emitHttpError(req, res, 'tus: invalid or missing Location header');\n          return;\n        }\n        _this3.url = resolveUrl(_this3.options.endpoint, location);\n        log(\"Created upload at \".concat(_this3.url));\n        _this3._emitSuccess(res);\n      })[\"catch\"](function (err) {\n        _this3._emitError(err);\n      });\n    }\n\n    /**\n     * Initiate the uploading procedure for a non-parallel upload. Here the entire file is\n     * uploaded in a sequential matter.\n     *\n     * @api private\n     */\n  }, {\n    key: \"_startSingleUpload\",\n    value: function _startSingleUpload() {\n      // Reset the aborted flag when the upload is started or else the\n      // _performUpload will stop before sending a request if the upload has been\n      // aborted previously.\n      this._aborted = false;\n\n      // The upload had been started previously and we should reuse this URL.\n      if (this.url != null) {\n        log(\"Resuming upload from previous URL: \".concat(this.url));\n        this._resumeUpload();\n        return;\n      }\n\n      // A URL has manually been specified, so we try to resume\n      if (this.options.uploadUrl != null) {\n        log(\"Resuming upload from provided URL: \".concat(this.options.uploadUrl));\n        this.url = this.options.uploadUrl;\n        this._resumeUpload();\n        return;\n      }\n\n      // An upload has not started for the file yet, so we start a new one\n      log('Creating a new upload');\n      this._createUpload();\n    }\n\n    /**\n     * Abort any running request and stop the current upload. After abort is called, no event\n     * handler will be invoked anymore. You can use the `start` method to resume the upload\n     * again.\n     * If `shouldTerminate` is true, the `terminate` function will be called to remove the\n     * current upload from the server.\n     *\n     * @param {boolean} shouldTerminate True if the upload should be deleted from the server.\n     * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n     */\n  }, {\n    key: \"abort\",\n    value: function abort(shouldTerminate) {\n      var _this4 = this;\n      // Stop any parallel partial uploads, that have been started in _startParallelUploads.\n      if (this._parallelUploads != null) {\n        var _iterator = _createForOfIteratorHelper(this._parallelUploads),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var upload = _step.value;\n            upload.abort(shouldTerminate);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      }\n\n      // Stop any current running request.\n      if (this._req !== null) {\n        this._req.abort();\n        // Note: We do not close the file source here, so the user can resume in the future.\n      }\n      this._aborted = true;\n\n      // Stop any timeout used for initiating a retry.\n      if (this._retryTimeout != null) {\n        clearTimeout(this._retryTimeout);\n        this._retryTimeout = null;\n      }\n      if (!shouldTerminate || this.url == null) {\n        return Promise.resolve();\n      }\n      return BaseUpload.terminate(this.url, this.options)\n      // Remove entry from the URL storage since the upload URL is no longer valid.\n      .then(function () {\n        return _this4._removeFromUrlStorage();\n      });\n    }\n  }, {\n    key: \"_emitHttpError\",\n    value: function _emitHttpError(req, res, message, causingErr) {\n      this._emitError(new DetailedError(message, causingErr, req, res));\n    }\n  }, {\n    key: \"_emitError\",\n    value: function _emitError(err) {\n      var _this5 = this;\n      // Do not emit errors, e.g. from aborted HTTP requests, if the upload has been stopped.\n      if (this._aborted) return;\n\n      // Check if we should retry, when enabled, before sending the error to the user.\n      if (this.options.retryDelays != null) {\n        // We will reset the attempt counter if\n        // - we were already able to connect to the server (offset != null) and\n        // - we were able to upload a small chunk of data to the server\n        var shouldResetDelays = this._offset != null && this._offset > this._offsetBeforeRetry;\n        if (shouldResetDelays) {\n          this._retryAttempt = 0;\n        }\n        if (shouldRetry(err, this._retryAttempt, this.options)) {\n          var delay = this.options.retryDelays[this._retryAttempt++];\n          this._offsetBeforeRetry = this._offset;\n          this._retryTimeout = setTimeout(function () {\n            _this5.start();\n          }, delay);\n          return;\n        }\n      }\n      if (typeof this.options.onError === 'function') {\n        this.options.onError(err);\n      } else {\n        throw err;\n      }\n    }\n\n    /**\n     * Publishes notification if the upload has been successfully completed.\n     *\n     * @param {object} lastResponse Last HTTP response.\n     * @api private\n     */\n  }, {\n    key: \"_emitSuccess\",\n    value: function _emitSuccess(lastResponse) {\n      if (this.options.removeFingerprintOnSuccess) {\n        // Remove stored fingerprint and corresponding endpoint. This causes\n        // new uploads of the same file to be treated as a different file.\n        this._removeFromUrlStorage();\n      }\n      if (typeof this.options.onSuccess === 'function') {\n        this.options.onSuccess({\n          lastResponse: lastResponse\n        });\n      }\n    }\n\n    /**\n     * Publishes notification when data has been sent to the server. This\n     * data may not have been accepted by the server yet.\n     *\n     * @param {number} bytesSent  Number of bytes sent to the server.\n     * @param {number} bytesTotal Total number of bytes to be sent to the server.\n     * @api private\n     */\n  }, {\n    key: \"_emitProgress\",\n    value: function _emitProgress(bytesSent, bytesTotal) {\n      if (typeof this.options.onProgress === 'function') {\n        this.options.onProgress(bytesSent, bytesTotal);\n      }\n    }\n\n    /**\n     * Publishes notification when a chunk of data has been sent to the server\n     * and accepted by the server.\n     * @param {number} chunkSize  Size of the chunk that was accepted by the server.\n     * @param {number} bytesAccepted Total number of bytes that have been\n     *                                accepted by the server.\n     * @param {number} bytesTotal Total number of bytes to be sent to the server.\n     * @api private\n     */\n  }, {\n    key: \"_emitChunkComplete\",\n    value: function _emitChunkComplete(chunkSize, bytesAccepted, bytesTotal) {\n      if (typeof this.options.onChunkComplete === 'function') {\n        this.options.onChunkComplete(chunkSize, bytesAccepted, bytesTotal);\n      }\n    }\n\n    /**\n     * Create a new upload using the creation extension by sending a POST\n     * request to the endpoint. After successful creation the file will be\n     * uploaded\n     *\n     * @api private\n     */\n  }, {\n    key: \"_createUpload\",\n    value: function _createUpload() {\n      var _this6 = this;\n      if (!this.options.endpoint) {\n        this._emitError(new Error('tus: unable to create upload because no endpoint is provided'));\n        return;\n      }\n      var req = this._openRequest('POST', this.options.endpoint);\n      if (this.options.uploadLengthDeferred) {\n        req.setHeader('Upload-Defer-Length', '1');\n      } else {\n        req.setHeader('Upload-Length', \"\".concat(this._size));\n      }\n\n      // Add metadata if values have been added\n      var metadata = encodeMetadata(this.options.metadata);\n      if (metadata !== '') {\n        req.setHeader('Upload-Metadata', metadata);\n      }\n      var promise;\n      if (this.options.uploadDataDuringCreation && !this.options.uploadLengthDeferred) {\n        this._offset = 0;\n        promise = this._addChunkToRequest(req);\n      } else {\n        if (this.options.protocol === PROTOCOL_IETF_DRAFT_03 || this.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n          req.setHeader('Upload-Complete', '?0');\n        }\n        promise = this._sendRequest(req, null);\n      }\n      promise.then(function (res) {\n        if (!inStatusCategory(res.getStatus(), 200)) {\n          _this6._emitHttpError(req, res, 'tus: unexpected response while creating upload');\n          return;\n        }\n        var location = res.getHeader('Location');\n        if (location == null) {\n          _this6._emitHttpError(req, res, 'tus: invalid or missing Location header');\n          return;\n        }\n        _this6.url = resolveUrl(_this6.options.endpoint, location);\n        log(\"Created upload at \".concat(_this6.url));\n        if (typeof _this6.options.onUploadUrlAvailable === 'function') {\n          _this6.options.onUploadUrlAvailable();\n        }\n        if (_this6._size === 0) {\n          // Nothing to upload and file was successfully created\n          _this6._emitSuccess(res);\n          _this6._source.close();\n          return;\n        }\n        _this6._saveUploadInUrlStorage().then(function () {\n          if (_this6.options.uploadDataDuringCreation) {\n            _this6._handleUploadResponse(req, res);\n          } else {\n            _this6._offset = 0;\n            _this6._performUpload();\n          }\n        });\n      })[\"catch\"](function (err) {\n        _this6._emitHttpError(req, null, 'tus: failed to create upload', err);\n      });\n    }\n\n    /*\n     * Try to resume an existing upload. First a HEAD request will be sent\n     * to retrieve the offset. If the request fails a new upload will be\n     * created. In the case of a successful response the file will be uploaded.\n     *\n     * @api private\n     */\n  }, {\n    key: \"_resumeUpload\",\n    value: function _resumeUpload() {\n      var _this7 = this;\n      var req = this._openRequest('HEAD', this.url);\n      var promise = this._sendRequest(req, null);\n      promise.then(function (res) {\n        var status = res.getStatus();\n        if (!inStatusCategory(status, 200)) {\n          // If the upload is locked (indicated by the 423 Locked status code), we\n          // emit an error instead of directly starting a new upload. This way the\n          // retry logic can catch the error and will retry the upload. An upload\n          // is usually locked for a short period of time and will be available\n          // afterwards.\n          if (status === 423) {\n            _this7._emitHttpError(req, res, 'tus: upload is currently locked; retry later');\n            return;\n          }\n          if (inStatusCategory(status, 400)) {\n            // Remove stored fingerprint and corresponding endpoint,\n            // on client errors since the file can not be found\n            _this7._removeFromUrlStorage();\n          }\n          if (!_this7.options.endpoint) {\n            // Don't attempt to create a new upload if no endpoint is provided.\n            _this7._emitHttpError(req, res, 'tus: unable to resume upload (new upload cannot be created without an endpoint)');\n            return;\n          }\n\n          // Try to create a new upload\n          _this7.url = null;\n          _this7._createUpload();\n          return;\n        }\n        var offset = Number.parseInt(res.getHeader('Upload-Offset'), 10);\n        if (Number.isNaN(offset)) {\n          _this7._emitHttpError(req, res, 'tus: invalid or missing offset value');\n          return;\n        }\n        var length = Number.parseInt(res.getHeader('Upload-Length'), 10);\n        if (Number.isNaN(length) && !_this7.options.uploadLengthDeferred && _this7.options.protocol === PROTOCOL_TUS_V1) {\n          _this7._emitHttpError(req, res, 'tus: invalid or missing length value');\n          return;\n        }\n        if (typeof _this7.options.onUploadUrlAvailable === 'function') {\n          _this7.options.onUploadUrlAvailable();\n        }\n        _this7._saveUploadInUrlStorage().then(function () {\n          // Upload has already been completed and we do not need to send additional\n          // data to the server\n          if (offset === length) {\n            _this7._emitProgress(length, length);\n            _this7._emitSuccess(res);\n            return;\n          }\n          _this7._offset = offset;\n          _this7._performUpload();\n        });\n      })[\"catch\"](function (err) {\n        _this7._emitHttpError(req, null, 'tus: failed to resume upload', err);\n      });\n    }\n\n    /**\n     * Start uploading the file using PATCH requests. The file will be divided\n     * into chunks as specified in the chunkSize option. During the upload\n     * the onProgress event handler may be invoked multiple times.\n     *\n     * @api private\n     */\n  }, {\n    key: \"_performUpload\",\n    value: function _performUpload() {\n      var _this8 = this;\n      // If the upload has been aborted, we will not send the next PATCH request.\n      // This is important if the abort method was called during a callback, such\n      // as onChunkComplete or onProgress.\n      if (this._aborted) {\n        return;\n      }\n      var req;\n\n      // Some browser and servers may not support the PATCH method. For those\n      // cases, you can tell tus-js-client to use a POST request with the\n      // X-HTTP-Method-Override header for simulating a PATCH request.\n      if (this.options.overridePatchMethod) {\n        req = this._openRequest('POST', this.url);\n        req.setHeader('X-HTTP-Method-Override', 'PATCH');\n      } else {\n        req = this._openRequest('PATCH', this.url);\n      }\n      req.setHeader('Upload-Offset', \"\".concat(this._offset));\n      var promise = this._addChunkToRequest(req);\n      promise.then(function (res) {\n        if (!inStatusCategory(res.getStatus(), 200)) {\n          _this8._emitHttpError(req, res, 'tus: unexpected response while uploading chunk');\n          return;\n        }\n        _this8._handleUploadResponse(req, res);\n      })[\"catch\"](function (err) {\n        // Don't emit an error if the upload was aborted manually\n        if (_this8._aborted) {\n          return;\n        }\n        _this8._emitHttpError(req, null, \"tus: failed to upload chunk at offset \".concat(_this8._offset), err);\n      });\n    }\n\n    /**\n     * _addChunktoRequest reads a chunk from the source and sends it using the\n     * supplied request object. It will not handle the response.\n     *\n     * @api private\n     */\n  }, {\n    key: \"_addChunkToRequest\",\n    value: function _addChunkToRequest(req) {\n      var _this9 = this;\n      var start = this._offset;\n      var end = this._offset + this.options.chunkSize;\n      req.setProgressHandler(function (bytesSent) {\n        _this9._emitProgress(start + bytesSent, _this9._size);\n      });\n      if (this.options.protocol === PROTOCOL_TUS_V1) {\n        req.setHeader('Content-Type', 'application/offset+octet-stream');\n      } else if (this.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n        req.setHeader('Content-Type', 'application/partial-upload');\n      }\n\n      // The specified chunkSize may be Infinity or the calcluated end position\n      // may exceed the file's size. In both cases, we limit the end position to\n      // the input's total size for simpler calculations and correctness.\n      if ((end === Number.POSITIVE_INFINITY || end > this._size) && !this.options.uploadLengthDeferred) {\n        end = this._size;\n      }\n      return this._source.slice(start, end).then(function (_ref2) {\n        var value = _ref2.value,\n          done = _ref2.done;\n        var valueSize = value !== null && value !== void 0 && value.size ? value.size : 0;\n\n        // If the upload length is deferred, the upload size was not specified during\n        // upload creation. So, if the file reader is done reading, we know the total\n        // upload size and can tell the tus server.\n        if (_this9.options.uploadLengthDeferred && done) {\n          _this9._size = _this9._offset + valueSize;\n          req.setHeader('Upload-Length', \"\".concat(_this9._size));\n        }\n\n        // The specified uploadSize might not match the actual amount of data that a source\n        // provides. In these cases, we cannot successfully complete the upload, so we\n        // rather error out and let the user know. If not, tus-js-client will be stuck\n        // in a loop of repeating empty PATCH requests.\n        // See https://community.transloadit.com/t/how-to-abort-hanging-companion-uploads/16488/13\n        var newSize = _this9._offset + valueSize;\n        if (!_this9.options.uploadLengthDeferred && done && newSize !== _this9._size) {\n          return Promise.reject(new Error(\"upload was configured with a size of \".concat(_this9._size, \" bytes, but the source is done after \").concat(newSize, \" bytes\")));\n        }\n        if (value === null) {\n          return _this9._sendRequest(req);\n        }\n        if (_this9.options.protocol === PROTOCOL_IETF_DRAFT_03 || _this9.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n          req.setHeader('Upload-Complete', done ? '?1' : '?0');\n        }\n        _this9._emitProgress(_this9._offset, _this9._size);\n        return _this9._sendRequest(req, value);\n      });\n    }\n\n    /**\n     * _handleUploadResponse is used by requests that haven been sent using _addChunkToRequest\n     * and already have received a response.\n     *\n     * @api private\n     */\n  }, {\n    key: \"_handleUploadResponse\",\n    value: function _handleUploadResponse(req, res) {\n      var offset = Number.parseInt(res.getHeader('Upload-Offset'), 10);\n      if (Number.isNaN(offset)) {\n        this._emitHttpError(req, res, 'tus: invalid or missing offset value');\n        return;\n      }\n      this._emitProgress(offset, this._size);\n      this._emitChunkComplete(offset - this._offset, offset, this._size);\n      this._offset = offset;\n      if (offset === this._size) {\n        // Yay, finally done :)\n        this._emitSuccess(res);\n        this._source.close();\n        return;\n      }\n      this._performUpload();\n    }\n\n    /**\n     * Create a new HTTP request object with the given method and URL.\n     *\n     * @api private\n     */\n  }, {\n    key: \"_openRequest\",\n    value: function _openRequest(method, url) {\n      var req = openRequest(method, url, this.options);\n      this._req = req;\n      return req;\n    }\n\n    /**\n     * Remove the entry in the URL storage, if it has been saved before.\n     *\n     * @api private\n     */\n  }, {\n    key: \"_removeFromUrlStorage\",\n    value: function _removeFromUrlStorage() {\n      var _this10 = this;\n      if (!this._urlStorageKey) return;\n      this._urlStorage.removeUpload(this._urlStorageKey)[\"catch\"](function (err) {\n        _this10._emitError(err);\n      });\n      this._urlStorageKey = null;\n    }\n\n    /**\n     * Add the upload URL to the URL storage, if possible.\n     *\n     * @api private\n     */\n  }, {\n    key: \"_saveUploadInUrlStorage\",\n    value: function _saveUploadInUrlStorage() {\n      var _this11 = this;\n      // We do not store the upload URL\n      // - if it was disabled in the option, or\n      // - if no fingerprint was calculated for the input (i.e. a stream), or\n      // - if the URL is already stored (i.e. key is set alread).\n      if (!this.options.storeFingerprintForResuming || !this._fingerprint || this._urlStorageKey !== null) {\n        return Promise.resolve();\n      }\n      var storedUpload = {\n        size: this._size,\n        metadata: this.options.metadata,\n        creationTime: new Date().toString()\n      };\n      if (this._parallelUploads) {\n        // Save multiple URLs if the parallelUploads option is used ...\n        storedUpload.parallelUploadUrls = this._parallelUploadUrls;\n      } else {\n        // ... otherwise we just save the one available URL.\n        storedUpload.uploadUrl = this.url;\n      }\n      return this._urlStorage.addUpload(this._fingerprint, storedUpload).then(function (urlStorageKey) {\n        _this11._urlStorageKey = urlStorageKey;\n      });\n    }\n\n    /**\n     * Send a request with the provided body.\n     *\n     * @api private\n     */\n  }, {\n    key: \"_sendRequest\",\n    value: function _sendRequest(req) {\n      var body = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      return sendRequest(req, body, this.options);\n    }\n  }], [{\n    key: \"terminate\",\n    value: function terminate(url) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var req = openRequest('DELETE', url, options);\n      return sendRequest(req, null, options).then(function (res) {\n        // A 204 response indicates a successfull request\n        if (res.getStatus() === 204) {\n          return;\n        }\n        throw new DetailedError('tus: unexpected response while terminating upload', null, req, res);\n      })[\"catch\"](function (err) {\n        if (!(err instanceof DetailedError)) {\n          err = new DetailedError('tus: failed to terminate upload', err, req, null);\n        }\n        if (!shouldRetry(err, 0, options)) {\n          throw err;\n        }\n\n        // Instead of keeping track of the retry attempts, we remove the first element from the delays\n        // array. If the array is empty, all retry attempts are used up and we will bubble up the error.\n        // We recursively call the terminate function will removing elements from the retryDelays array.\n        var delay = options.retryDelays[0];\n        var remainingDelays = options.retryDelays.slice(1);\n        var newOptions = _objectSpread(_objectSpread({}, options), {}, {\n          retryDelays: remainingDelays\n        });\n        return new Promise(function (resolve) {\n          return setTimeout(resolve, delay);\n        }).then(function () {\n          return BaseUpload.terminate(url, newOptions);\n        });\n      });\n    }\n  }]);\n}();\nfunction encodeMetadata(metadata) {\n  return Object.entries(metadata).map(function (_ref3) {\n    var _ref4 = _slicedToArray(_ref3, 2),\n      key = _ref4[0],\n      value = _ref4[1];\n    return \"\".concat(key, \" \").concat(Base64.encode(String(value)));\n  }).join(',');\n}\n\n/**\n * Checks whether a given status is in the range of the expected category.\n * For example, only a status between 200 and 299 will satisfy the category 200.\n *\n * @api private\n */\nfunction inStatusCategory(status, category) {\n  return status >= category && status < category + 100;\n}\n\n/**\n * Create a new HTTP request with the specified method and URL.\n * The necessary headers that are included in every request\n * will be added, including the request ID.\n *\n * @api private\n */\nfunction openRequest(method, url, options) {\n  var req = options.httpStack.createRequest(method, url);\n  if (options.protocol === PROTOCOL_IETF_DRAFT_03) {\n    req.setHeader('Upload-Draft-Interop-Version', '5');\n  } else if (options.protocol === PROTOCOL_IETF_DRAFT_05) {\n    req.setHeader('Upload-Draft-Interop-Version', '6');\n  } else {\n    req.setHeader('Tus-Resumable', '1.0.0');\n  }\n  var headers = options.headers || {};\n  for (var _i2 = 0, _Object$entries = Object.entries(headers); _i2 < _Object$entries.length; _i2++) {\n    var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),\n      name = _Object$entries$_i[0],\n      value = _Object$entries$_i[1];\n    req.setHeader(name, value);\n  }\n  if (options.addRequestId) {\n    var requestId = uuid();\n    req.setHeader('X-Request-ID', requestId);\n  }\n  return req;\n}\n\n/**\n * Send a request with the provided body while invoking the onBeforeRequest\n * and onAfterResponse callbacks.\n *\n * @api private\n */\nfunction sendRequest(_x, _x2, _x3) {\n  return _sendRequest2.apply(this, arguments);\n}\n/**\n * Checks whether the browser running this code has internet access.\n * This function will always return true in the node.js environment\n *\n * @api private\n */\nfunction _sendRequest2() {\n  _sendRequest2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(req, body, options) {\n    var res;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          if (!(typeof options.onBeforeRequest === 'function')) {\n            _context.next = 3;\n            break;\n          }\n          _context.next = 3;\n          return options.onBeforeRequest(req);\n        case 3:\n          _context.next = 5;\n          return req.send(body);\n        case 5:\n          res = _context.sent;\n          if (!(typeof options.onAfterResponse === 'function')) {\n            _context.next = 9;\n            break;\n          }\n          _context.next = 9;\n          return options.onAfterResponse(req, res);\n        case 9:\n          return _context.abrupt(\"return\", res);\n        case 10:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  return _sendRequest2.apply(this, arguments);\n}\nfunction isOnline() {\n  var online = true;\n  // Note: We don't reference `window` here because the navigator object also exists\n  // in a Web Worker's context.\n  if (typeof navigator !== 'undefined' && navigator.onLine === false) {\n    online = false;\n  }\n  return online;\n}\n\n/**\n * Checks whether or not it is ok to retry a request.\n * @param {Error|DetailedError} err the error returned from the last request\n * @param {number} retryAttempt the number of times the request has already been retried\n * @param {object} options tus Upload options\n *\n * @api private\n */\nfunction shouldRetry(err, retryAttempt, options) {\n  // We only attempt a retry if\n  // - retryDelays option is set\n  // - we didn't exceed the maxium number of retries, yet, and\n  // - this error was caused by a request or it's response and\n  // - the error is server error (i.e. not a status 4xx except a 409 or 423) or\n  // a onShouldRetry is specified and returns true\n  // - the browser does not indicate that we are offline\n  if (options.retryDelays == null || retryAttempt >= options.retryDelays.length || err.originalRequest == null) {\n    return false;\n  }\n  if (options && typeof options.onShouldRetry === 'function') {\n    return options.onShouldRetry(err, retryAttempt, options);\n  }\n  return defaultOnShouldRetry(err);\n}\n\n/**\n * determines if the request should be retried. Will only retry if not a status 4xx except a 409 or 423\n * @param {DetailedError} err\n * @returns {boolean}\n */\nfunction defaultOnShouldRetry(err) {\n  var status = err.originalResponse ? err.originalResponse.getStatus() : 0;\n  return (!inStatusCategory(status, 400) || status === 409 || status === 423) && isOnline();\n}\n\n/**\n * Resolve a relative link given the origin as source. For example,\n * if a HTTP request to http://example.com/files/ returns a Location\n * header with the value /upload/abc, the resolved URL will be:\n * http://example.com/upload/abc\n */\nfunction resolveUrl(origin, link) {\n  return new URL(link, origin).toString();\n}\n\n/**\n * Calculate the start and end positions for the parts if an upload\n * is split into multiple parallel requests.\n *\n * @param {number} totalSize The byte size of the upload, which will be split.\n * @param {number} partCount The number in how many parts the upload will be split.\n * @return {object[]}\n * @api private\n */\nfunction splitSizeIntoParts(totalSize, partCount) {\n  var partSize = Math.floor(totalSize / partCount);\n  var parts = [];\n  for (var i = 0; i < partCount; i++) {\n    parts.push({\n      start: partSize * i,\n      end: partSize * (i + 1)\n    });\n  }\n  parts[partCount - 1].end = totalSize;\n  return parts;\n}\nBaseUpload.defaultOptions = defaultOptions;\nexport default BaseUpload;", "/**\n * Generate a UUID v4 based on random numbers. We intentioanlly use the less\n * secure Math.random function here since the more secure crypto.getRandomNumbers\n * is not available on all platforms.\n * This is not a problem for us since we use the UUID only for generating a\n * request ID, so we can correlate server logs to client errors.\n *\n * This function is taken from following site:\n * https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n *\n * @return {string} The generate UUID\n */\nexport default function uuid() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n    var r = Math.random() * 16 | 0;\n    var v = c === 'x' ? r : r & 0x3 | 0x8;\n    return v.toString(16);\n  });\n}", "var isReactNative = function isReactNative() {\n  return typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative';\n};\nexport default isReactNative;", "/**\n * uriToBlob resolves a URI to a Blob object. This is used for\n * React Native to retrieve a file (identified by a file://\n * URI) as a blob.\n */\nexport default function uriToBlob(uri) {\n  return new Promise(function (resolve, reject) {\n    var xhr = new XMLHttpRequest();\n    xhr.responseType = 'blob';\n    xhr.onload = function () {\n      var blob = xhr.response;\n      resolve(blob);\n    };\n    xhr.onerror = function (err) {\n      reject(err);\n    };\n    xhr.open('GET', uri);\n    xhr.send();\n  });\n}", "var isCordova = function isCordova() {\n  return typeof window !== 'undefined' && (typeof window.PhoneGap !== 'undefined' || typeof window.Cordova !== 'undefined' || typeof window.cordova !== 'undefined');\n};\nexport default isCordova;", "/**\n * readAsByteArray converts a File object to a Uint8Array.\n * This function is only used on the Apache Cordova platform.\n * See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file\n */\nexport default function readAsByteArray(chunk) {\n  return new Promise(function (resolve, reject) {\n    var reader = new FileReader();\n    reader.onload = function () {\n      var value = new Uint8Array(reader.result);\n      resolve({\n        value: value\n      });\n    };\n    reader.onerror = function (err) {\n      reject(err);\n    };\n    reader.readAsArrayBuffer(chunk);\n  });\n}", "function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport isCordova from './isCordova.js';\nimport readAsByteArray from './readAsByteArray.js';\nvar FileSource = /*#__PURE__*/function () {\n  // Make this.size a method\n  function FileSource(file) {\n    _classCallCheck(this, FileSource);\n    this._file = file;\n    this.size = file.size;\n  }\n  return _createClass(FileSource, [{\n    key: \"slice\",\n    value: function slice(start, end) {\n      // In Apache Cordova applications, a File must be resolved using\n      // FileReader instances, see\n      // https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file\n      if (isCordova()) {\n        return readAsByteArray(this._file.slice(start, end));\n      }\n      var value = this._file.slice(start, end);\n      var done = end >= this.size;\n      return Promise.resolve({\n        value: value,\n        done: done\n      });\n    }\n  }, {\n    key: \"close\",\n    value: function close() {\n      // Nothing to do here since we don't need to release any resources.\n    }\n  }]);\n}();\nexport { FileSource as default };", "function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction len(blobOrArray) {\n  if (blobOrArray === undefined) return 0;\n  if (blobOrArray.size !== undefined) return blobOrArray.size;\n  return blobOrArray.length;\n}\n\n/*\n  Typed arrays and blobs don't have a concat method.\n  This function helps StreamSource accumulate data to reach chunkSize.\n*/\nfunction concat(a, b) {\n  if (a.concat) {\n    // Is `a` an Array?\n    return a.concat(b);\n  }\n  if (a instanceof Blob) {\n    return new Blob([a, b], {\n      type: a.type\n    });\n  }\n  if (a.set) {\n    // Is `a` a typed array?\n    var c = new a.constructor(a.length + b.length);\n    c.set(a);\n    c.set(b, a.length);\n    return c;\n  }\n  throw new Error('Unknown data type');\n}\nvar StreamSource = /*#__PURE__*/function () {\n  function StreamSource(reader) {\n    _classCallCheck(this, StreamSource);\n    this._buffer = undefined;\n    this._bufferOffset = 0;\n    this._reader = reader;\n    this._done = false;\n  }\n  return _createClass(StreamSource, [{\n    key: \"slice\",\n    value: function slice(start, end) {\n      if (start < this._bufferOffset) {\n        return Promise.reject(new Error(\"Requested data is before the reader's current offset\"));\n      }\n      return this._readUntilEnoughDataOrDone(start, end);\n    }\n  }, {\n    key: \"_readUntilEnoughDataOrDone\",\n    value: function _readUntilEnoughDataOrDone(start, end) {\n      var _this = this;\n      var hasEnoughData = end <= this._bufferOffset + len(this._buffer);\n      if (this._done || hasEnoughData) {\n        var value = this._getDataFromBuffer(start, end);\n        var done = value == null ? this._done : false;\n        return Promise.resolve({\n          value: value,\n          done: done\n        });\n      }\n      return this._reader.read().then(function (_ref) {\n        var value = _ref.value,\n          done = _ref.done;\n        if (done) {\n          _this._done = true;\n        } else if (_this._buffer === undefined) {\n          _this._buffer = value;\n        } else {\n          _this._buffer = concat(_this._buffer, value);\n        }\n        return _this._readUntilEnoughDataOrDone(start, end);\n      });\n    }\n  }, {\n    key: \"_getDataFromBuffer\",\n    value: function _getDataFromBuffer(start, end) {\n      // Remove data from buffer before `start`.\n      // Data might be reread from the buffer if an upload fails, so we can only\n      // safely delete data when it comes *before* what is currently being read.\n      if (start > this._bufferOffset) {\n        this._buffer = this._buffer.slice(start - this._bufferOffset);\n        this._bufferOffset = start;\n      }\n      // If the buffer is empty after removing old data, all data has been read.\n      var hasAllDataBeenRead = len(this._buffer) === 0;\n      if (this._done && hasAllDataBeenRead) {\n        return null;\n      }\n      // We already removed data before `start`, so we just return the first\n      // chunk from the buffer.\n      return this._buffer.slice(0, end - start);\n    }\n  }, {\n    key: \"close\",\n    value: function close() {\n      if (this._reader.cancel) {\n        this._reader.cancel();\n      }\n    }\n  }]);\n}();\nexport { StreamSource as default };", "function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport isReactNative from './isReactNative.js';\nimport uriToBlob from './uriToBlob.js';\nimport FileSource from './sources/FileSource.js';\nimport StreamSource from './sources/StreamSource.js';\nvar FileReader = /*#__PURE__*/function () {\n  function FileReader() {\n    _classCallCheck(this, FileReader);\n  }\n  return _createClass(FileReader, [{\n    key: \"openFile\",\n    value: function () {\n      var _openFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(input, chunkSize) {\n        var blob;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              if (!(isReactNative() && input && typeof input.uri !== 'undefined')) {\n                _context.next = 11;\n                break;\n              }\n              _context.prev = 1;\n              _context.next = 4;\n              return uriToBlob(input.uri);\n            case 4:\n              blob = _context.sent;\n              return _context.abrupt(\"return\", new FileSource(blob));\n            case 8:\n              _context.prev = 8;\n              _context.t0 = _context[\"catch\"](1);\n              throw new Error(\"tus: cannot fetch `file.uri` as Blob, make sure the uri is correct and accessible. \".concat(_context.t0));\n            case 11:\n              if (!(typeof input.slice === 'function' && typeof input.size !== 'undefined')) {\n                _context.next = 13;\n                break;\n              }\n              return _context.abrupt(\"return\", Promise.resolve(new FileSource(input)));\n            case 13:\n              if (!(typeof input.read === 'function')) {\n                _context.next = 18;\n                break;\n              }\n              chunkSize = Number(chunkSize);\n              if (Number.isFinite(chunkSize)) {\n                _context.next = 17;\n                break;\n              }\n              return _context.abrupt(\"return\", Promise.reject(new Error('cannot create source for stream without a finite value for the `chunkSize` option')));\n            case 17:\n              return _context.abrupt(\"return\", Promise.resolve(new StreamSource(input, chunkSize)));\n            case 18:\n              return _context.abrupt(\"return\", Promise.reject(new Error('source object may only be an instance of File, Blob, or Reader in this environment')));\n            case 19:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee, null, [[1, 8]]);\n      }));\n      function openFile(_x, _x2) {\n        return _openFile.apply(this, arguments);\n      }\n      return openFile;\n    }()\n  }]);\n}();\nexport { FileReader as default };", "import isReactNative from './isReactNative.js';\n\n// TODO: Differenciate between input types\n\n/**\n * Generate a fingerprint for a file which will be used the store the endpoint\n *\n * @param {File} file\n * @param {Object} options\n * @param {Function} callback\n */\nexport default function fingerprint(file, options) {\n  if (isReactNative()) {\n    return Promise.resolve(reactNativeFingerprint(file, options));\n  }\n  return Promise.resolve(['tus-br', file.name, file.type, file.size, file.lastModified, options.endpoint].join('-'));\n}\nfunction reactNativeFingerprint(file, options) {\n  var exifHash = file.exif ? hashCode(JSON.stringify(file.exif)) : 'noexif';\n  return ['tus-rn', file.name || 'noname', file.size || 'nosize', exifHash, options.endpoint].join('/');\n}\nfunction hashCode(str) {\n  // from https://stackoverflow.com/a/8831937/151666\n  var hash = 0;\n  if (str.length === 0) {\n    return hash;\n  }\n  for (var i = 0; i < str.length; i++) {\n    var _char = str.charCodeAt(i);\n    hash = (hash << 5) - hash + _char;\n    hash &= hash; // Convert to 32bit integer\n  }\n  return hash;\n}", "function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar XHRHttpStack = /*#__PURE__*/function () {\n  function XHRHttpStack() {\n    _classCallCheck(this, XHRHttpStack);\n  }\n  return _createClass(XHRHttpStack, [{\n    key: \"createRequest\",\n    value: function createRequest(method, url) {\n      return new Request(method, url);\n    }\n  }, {\n    key: \"getName\",\n    value: function getName() {\n      return 'XHRHttpStack';\n    }\n  }]);\n}();\nexport { XHRHttpStack as default };\nvar Request = /*#__PURE__*/function () {\n  function Request(method, url) {\n    _classCallCheck(this, Request);\n    this._xhr = new XMLHttpRequest();\n    this._xhr.open(method, url, true);\n    this._method = method;\n    this._url = url;\n    this._headers = {};\n  }\n  return _createClass(Request, [{\n    key: \"getMethod\",\n    value: function getMethod() {\n      return this._method;\n    }\n  }, {\n    key: \"getURL\",\n    value: function getURL() {\n      return this._url;\n    }\n  }, {\n    key: \"setHeader\",\n    value: function setHeader(header, value) {\n      this._xhr.setRequestHeader(header, value);\n      this._headers[header] = value;\n    }\n  }, {\n    key: \"getHeader\",\n    value: function getHeader(header) {\n      return this._headers[header];\n    }\n  }, {\n    key: \"setProgressHandler\",\n    value: function setProgressHandler(progressHandler) {\n      // Test support for progress events before attaching an event listener\n      if (!('upload' in this._xhr)) {\n        return;\n      }\n      this._xhr.upload.onprogress = function (e) {\n        if (!e.lengthComputable) {\n          return;\n        }\n        progressHandler(e.loaded);\n      };\n    }\n  }, {\n    key: \"send\",\n    value: function send() {\n      var _this = this;\n      var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      return new Promise(function (resolve, reject) {\n        _this._xhr.onload = function () {\n          resolve(new Response(_this._xhr));\n        };\n        _this._xhr.onerror = function (err) {\n          reject(err);\n        };\n        _this._xhr.send(body);\n      });\n    }\n  }, {\n    key: \"abort\",\n    value: function abort() {\n      this._xhr.abort();\n      return Promise.resolve();\n    }\n  }, {\n    key: \"getUnderlyingObject\",\n    value: function getUnderlyingObject() {\n      return this._xhr;\n    }\n  }]);\n}();\nvar Response = /*#__PURE__*/function () {\n  function Response(xhr) {\n    _classCallCheck(this, Response);\n    this._xhr = xhr;\n  }\n  return _createClass(Response, [{\n    key: \"getStatus\",\n    value: function getStatus() {\n      return this._xhr.status;\n    }\n  }, {\n    key: \"getHeader\",\n    value: function getHeader(header) {\n      return this._xhr.getResponseHeader(header);\n    }\n  }, {\n    key: \"getBody\",\n    value: function getBody() {\n      return this._xhr.responseText;\n    }\n  }, {\n    key: \"getUnderlyingObject\",\n    value: function getUnderlyingObject() {\n      return this._xhr;\n    }\n  }]);\n}();", "function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar hasStorage = false;\ntry {\n  // Note: localStorage does not exist in the Web Worker's context, so we must use window here.\n  hasStorage = 'localStorage' in window;\n\n  // Attempt to store and read entries from the local storage to detect Private\n  // Mode on Safari on iOS (see #49)\n  // If the key was not used before, we remove it from local storage again to\n  // not cause confusion where the entry came from.\n  var key = 'tusSupport';\n  var originalValue = localStorage.getItem(key);\n  localStorage.setItem(key, originalValue);\n  if (originalValue === null) localStorage.removeItem(key);\n} catch (e) {\n  // If we try to access localStorage inside a sandboxed iframe, a SecurityError\n  // is thrown. When in private mode on iOS Safari, a QuotaExceededError is\n  // thrown (see #49)\n  if (e.code === e.SECURITY_ERR || e.code === e.QUOTA_EXCEEDED_ERR) {\n    hasStorage = false;\n  } else {\n    throw e;\n  }\n}\nexport var canStoreURLs = hasStorage;\nexport var WebStorageUrlStorage = /*#__PURE__*/function () {\n  function WebStorageUrlStorage() {\n    _classCallCheck(this, WebStorageUrlStorage);\n  }\n  return _createClass(WebStorageUrlStorage, [{\n    key: \"findAllUploads\",\n    value: function findAllUploads() {\n      var results = this._findEntries('tus::');\n      return Promise.resolve(results);\n    }\n  }, {\n    key: \"findUploadsByFingerprint\",\n    value: function findUploadsByFingerprint(fingerprint) {\n      var results = this._findEntries(\"tus::\".concat(fingerprint, \"::\"));\n      return Promise.resolve(results);\n    }\n  }, {\n    key: \"removeUpload\",\n    value: function removeUpload(urlStorageKey) {\n      localStorage.removeItem(urlStorageKey);\n      return Promise.resolve();\n    }\n  }, {\n    key: \"addUpload\",\n    value: function addUpload(fingerprint, upload) {\n      var id = Math.round(Math.random() * 1e12);\n      var key = \"tus::\".concat(fingerprint, \"::\").concat(id);\n      localStorage.setItem(key, JSON.stringify(upload));\n      return Promise.resolve(key);\n    }\n  }, {\n    key: \"_findEntries\",\n    value: function _findEntries(prefix) {\n      var results = [];\n      for (var i = 0; i < localStorage.length; i++) {\n        var _key = localStorage.key(i);\n        if (_key.indexOf(prefix) !== 0) continue;\n        try {\n          var upload = JSON.parse(localStorage.getItem(_key));\n          upload.urlStorageKey = _key;\n          results.push(upload);\n        } catch (_e) {\n          // The JSON parse error is intentionally ignored here, so a malformed\n          // entry in the storage cannot prevent an upload.\n        }\n      }\n      return results;\n    }\n  }]);\n}();", "function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport DetailedError from '../error.js';\nimport { enableDebugLog } from '../logger.js';\nimport NoopUrlStorage from '../noopUrlStorage.js';\nimport BaseUpload from '../upload.js';\nimport FileReader from './fileReader.js';\nimport fingerprint from './fileSignature.js';\nimport DefaultHttpStack from './httpStack.js';\nimport { WebStorageUrlStorage, canStoreURLs } from './urlStorage.js';\nvar defaultOptions = _objectSpread(_objectSpread({}, BaseUpload.defaultOptions), {}, {\n  httpStack: new DefaultHttpStack(),\n  fileReader: new FileReader(),\n  urlStorage: canStoreURLs ? new WebStorageUrlStorage() : new NoopUrlStorage(),\n  fingerprint: fingerprint\n});\nvar Upload = /*#__PURE__*/function (_BaseUpload) {\n  function Upload() {\n    var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    _classCallCheck(this, Upload);\n    options = _objectSpread(_objectSpread({}, defaultOptions), options);\n    return _callSuper(this, Upload, [file, options]);\n  }\n  _inherits(Upload, _BaseUpload);\n  return _createClass(Upload, null, [{\n    key: \"terminate\",\n    value: function terminate(url) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      options = _objectSpread(_objectSpread({}, defaultOptions), options);\n      return BaseUpload.terminate(url, options);\n    }\n  }]);\n}(BaseUpload); // Note: We don't reference `window` here because these classes also exist in a Web Worker's context.\nvar isSupported = typeof XMLHttpRequest === 'function' && typeof Blob === 'function' && typeof Blob.prototype.slice === 'function';\nexport { Upload, canStoreURLs, defaultOptions, isSupported, enableDebugLog, DefaultHttpStack, DetailedError };", "{\n  \"name\": \"@uppy/tus\",\n  \"description\": \"Resumable uploads for Uppy using Tus.io\",\n  \"version\": \"5.1.1\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\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-plugin\",\n    \"upload\",\n    \"resumable\",\n    \"tus\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"tus-js-client\": \"^4.2.3\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"jsdom\": \"^26.1.0\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  }\n}\n", "import * as tus from 'tus-js-client';\nfunction isCordova() {\n    return (typeof window !== 'undefined' &&\n        // @ts-expect-error may exist\n        (typeof window.PhoneGap !== 'undefined' ||\n            // @ts-expect-error may exist\n            typeof window.Cordova !== 'undefined' ||\n            // @ts-expect-error may exist\n            typeof window.cordova !== 'undefined'));\n}\nfunction isReactNative() {\n    return (typeof navigator !== 'undefined' &&\n        typeof navigator.product === 'string' &&\n        navigator.product.toLowerCase() === 'reactnative');\n}\n// We override tus fingerprint to uppy\u2019s `file.id`, since the `file.id`\n// now also includes `relativePath` for files added from folders.\n// This means you can add 2 identical files, if one is in folder a,\n// the other in folder b \u2014 `a/file.jpg` and `b/file.jpg`, when added\n// together with a folder, will be treated as 2 separate files.\n//\n// For React Native and Cordova, we let tus-js-client\u2019s default\n// fingerprint handling take charge.\nexport default function getFingerprint(uppyFile) {\n    return (file, options) => {\n        if (isCordova() || isReactNative()) {\n            return tus.defaultOptions.fingerprint(file, options);\n        }\n        const uppyFingerprint = ['tus', uppyFile.id, options.endpoint].join('-');\n        return Promise.resolve(uppyFingerprint);\n    };\n}\n", "import { BasePlugin, EventManager } from '@uppy/core';\nimport { filterFilesToEmitUploadStarted, filterFilesToUpload, getAllowedMetaFields, hasProperty, isNetworkError, NetworkError, RateLimitedQueue, } from '@uppy/utils';\nimport * as tus from 'tus-js-client';\nimport packageJson from '../package.json' with { type: 'json' };\nimport getFingerprint from './getFingerprint.js';\n/**\n * Extracted from https://github.com/tus/tus-js-client/blob/master/lib/upload.js#L13\n * excepted we removed 'fingerprint' key to avoid adding more dependencies\n */\nconst tusDefaultOptions = {\n    endpoint: '',\n    uploadUrl: null,\n    metadata: {},\n    uploadSize: null,\n    onProgress: null,\n    onChunkComplete: null,\n    onSuccess: null,\n    onError: null,\n    overridePatchMethod: false,\n    headers: {},\n    addRequestId: false,\n    chunkSize: Infinity,\n    retryDelays: [100, 1000, 3000, 5000],\n    parallelUploads: 1,\n    removeFingerprintOnSuccess: false,\n    uploadLengthDeferred: false,\n    uploadDataDuringCreation: false,\n};\nconst defaultOptions = {\n    limit: 20,\n    retryDelays: tusDefaultOptions.retryDelays,\n    withCredentials: false,\n    allowedMetaFields: true,\n};\n/**\n * Tus resumable file uploader\n */\nexport default class Tus extends BasePlugin {\n    static VERSION = packageJson.version;\n    #retryDelayIterator;\n    requests;\n    uploaders;\n    uploaderEvents;\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOptions, ...opts });\n        this.type = 'uploader';\n        this.id = this.opts.id || 'Tus';\n        if (opts?.allowedMetaFields === undefined && 'metaFields' in this.opts) {\n            throw new Error('The `metaFields` option has been renamed to `allowedMetaFields`.');\n        }\n        if ('autoRetry' in opts) {\n            throw new Error('The `autoRetry` option was deprecated and has been removed.');\n        }\n        /**\n         * Simultaneous upload limiting is shared across all uploads with this plugin.\n         *\n         * @type {RateLimitedQueue}\n         */\n        this.requests =\n            this.opts.rateLimitedQueue ?? new RateLimitedQueue(this.opts.limit);\n        this.#retryDelayIterator = this.opts.retryDelays?.values();\n        this.uploaders = Object.create(null);\n        this.uploaderEvents = Object.create(null);\n    }\n    /**\n     * Clean up all references for a file's upload: the tus.Upload instance,\n     * any events related to the file, and the Companion WebSocket connection.\n     */\n    resetUploaderReferences(fileID, opts) {\n        const uploader = this.uploaders[fileID];\n        if (uploader) {\n            uploader.abort();\n            if (opts?.abort) {\n                uploader.abort(true);\n            }\n            this.uploaders[fileID] = null;\n        }\n        if (this.uploaderEvents[fileID]) {\n            this.uploaderEvents[fileID].remove();\n            this.uploaderEvents[fileID] = null;\n        }\n    }\n    /**\n     * Create a new Tus upload.\n     *\n     * A lot can happen during an upload, so this is quite hard to follow!\n     * - First, the upload is started. If the file was already paused by the time the upload starts, nothing should happen.\n     *   If the `limit` option is used, the upload must be queued onto the `this.requests` queue.\n     *   When an upload starts, we store the tus.Upload instance, and an EventManager instance that manages the event listeners\n     *   for pausing, cancellation, removal, etc.\n     * - While the upload is in progress, it may be paused or cancelled.\n     *   Pausing aborts the underlying tus.Upload, and removes the upload from the `this.requests` queue. All other state is\n     *   maintained.\n     *   Cancelling removes the upload from the `this.requests` queue, and completely aborts the upload-- the `tus.Upload`\n     *   instance is aborted and discarded, the EventManager instance is destroyed (removing all listeners).\n     *   Resuming the upload uses the `this.requests` queue as well, to prevent selectively pausing and resuming uploads from\n     *   bypassing the limit.\n     * - After completing an upload, the tus.Upload and EventManager instances are cleaned up, and the upload is marked as done\n     *   in the `this.requests` queue.\n     * - When an upload completed with an error, the same happens as on successful completion, but the `upload()` promise is\n     *   rejected.\n     *\n     * When working on this function, keep in mind:\n     *  - When an upload is completed or cancelled for any reason, the tus.Upload and EventManager instances need to be cleaned\n     *    up using this.resetUploaderReferences().\n     *  - When an upload is cancelled or paused, for any reason, it needs to be removed from the `this.requests` queue using\n     *    `queuedRequest.abort()`.\n     *  - When an upload is completed for any reason, including errors, it needs to be marked as such using\n     *    `queuedRequest.done()`.\n     *  - When an upload is started or resumed, it needs to go through the `this.requests` queue. The `queuedRequest` variable\n     *    must be updated so the other uses of it are valid.\n     *  - Before replacing the `queuedRequest` variable, the previous `queuedRequest` must be aborted, else it will keep taking\n     *    up a spot in the queue.\n     *\n     */\n    async #uploadLocalFile(file) {\n        this.resetUploaderReferences(file.id);\n        // Create a new tus upload\n        return new Promise((resolve, reject) => {\n            let queuedRequest;\n            // biome-ignore lint/style/useConst: ...\n            let qRequest;\n            // biome-ignore lint/style/useConst: ...\n            let upload;\n            const opts = {\n                ...this.opts,\n                ...(file.tus || {}),\n            };\n            if (typeof opts.headers === 'function') {\n                opts.headers = opts.headers(file);\n            }\n            const { onShouldRetry, onBeforeRequest, ...commonOpts } = opts;\n            const uploadOptions = {\n                ...tusDefaultOptions,\n                ...commonOpts,\n            };\n            // We override tus fingerprint to uppy\u2019s `file.id`, since the `file.id`\n            // now also includes `relativePath` for files added from folders.\n            // This means you can add 2 identical files, if one is in folder a,\n            // the other in folder b.\n            uploadOptions.fingerprint = getFingerprint(file);\n            uploadOptions.onBeforeRequest = async (req) => {\n                const xhr = req.getUnderlyingObject();\n                if (xhr) {\n                    xhr.withCredentials = !!opts.withCredentials;\n                }\n                let userProvidedPromise;\n                if (typeof onBeforeRequest === 'function') {\n                    userProvidedPromise = onBeforeRequest(req, file);\n                }\n                if (hasProperty(queuedRequest, 'shouldBeRequeued')) {\n                    if (!queuedRequest.shouldBeRequeued)\n                        return Promise.reject();\n                    // TODO: switch to `Promise.withResolvers` on the next major if available.\n                    let done;\n                    const p = new Promise((res) => {\n                        done = res;\n                    });\n                    queuedRequest = this.requests.run(() => {\n                        if (file.isPaused) {\n                            queuedRequest.abort();\n                        }\n                        done();\n                        return () => { };\n                    });\n                    // If the request has been requeued because it was rate limited by the\n                    // remote server, we want to wait for `RateLimitedQueue` to dispatch\n                    // the re-try request.\n                    // Therefore we create a promise that the queue will resolve when\n                    // enough time has elapsed to expect not to be rate-limited again.\n                    // This means we can hold the Tus retry here with a `Promise.all`,\n                    // together with the returned value of the user provided\n                    // `onBeforeRequest` option callback (in case it returns a promise).\n                    // @ts-expect-error it's fine\n                    await Promise.all([p, userProvidedPromise]);\n                    return undefined;\n                }\n                // @ts-expect-error it's fine\n                return userProvidedPromise;\n            };\n            uploadOptions.onError = (err) => {\n                this.uppy.log(err);\n                const xhr = err.originalRequest != null\n                    ? err.originalRequest.getUnderlyingObject()\n                    : null;\n                if (isNetworkError(xhr)) {\n                    err = new NetworkError(err, xhr);\n                }\n                this.resetUploaderReferences(file.id);\n                queuedRequest?.abort();\n                if (typeof opts.onError === 'function') {\n                    opts.onError(err);\n                }\n                reject(err);\n            };\n            uploadOptions.onProgress = (bytesUploaded, bytesTotal) => {\n                this.onReceiveUploadUrl(file, upload.url);\n                if (typeof opts.onProgress === 'function') {\n                    opts.onProgress(bytesUploaded, bytesTotal);\n                }\n                const latestFile = this.uppy.getFile(file.id);\n                this.uppy.emit('upload-progress', latestFile, {\n                    uploadStarted: latestFile.progress.uploadStarted ?? 0,\n                    bytesUploaded,\n                    bytesTotal,\n                });\n            };\n            uploadOptions.onSuccess = (payload) => {\n                const uploadResp = {\n                    uploadURL: upload.url ?? undefined,\n                    status: 200,\n                    body: {\n                        // We have to put `as XMLHttpRequest` because tus-js-client\n                        // returns `any`, as the type differs in Node.js and the browser.\n                        // In the browser it's always `XMLHttpRequest`.\n                        xhr: payload.lastResponse.getUnderlyingObject(),\n                        // Body extends Record<string, unknown> and thus `xhr` is not known\n                        // but we export the `TusBody` type, which people pass as a generic into the Uppy class,\n                        // so on the implementer side it works as expected.\n                    },\n                };\n                this.uppy.emit('upload-success', this.uppy.getFile(file.id), uploadResp);\n                this.resetUploaderReferences(file.id);\n                queuedRequest.done();\n                if (upload.url) {\n                    this.uppy.log(`Download ${upload.url}`);\n                }\n                if (typeof opts.onSuccess === 'function') {\n                    opts.onSuccess(payload);\n                }\n                resolve(upload);\n            };\n            const defaultOnShouldRetry = (err) => {\n                const status = err?.originalResponse?.getStatus();\n                if (status === 429) {\n                    // HTTP 429 Too Many Requests => to avoid the whole download to fail, pause all requests.\n                    if (!this.requests.isPaused) {\n                        const next = this.#retryDelayIterator?.next();\n                        if (next == null || next.done) {\n                            return false;\n                        }\n                        this.requests.rateLimit(next.value);\n                    }\n                }\n                else if (status != null &&\n                    status >= 400 &&\n                    status < 500 &&\n                    status !== 409 &&\n                    status !== 423) {\n                    // HTTP 4xx, the server won't send anything, it's doesn't make sense to retry\n                    // HTTP 409 Conflict (happens if the Upload-Offset header does not match the one on the server)\n                    // HTTP 423 Locked (happens when a paused download is resumed too quickly)\n                    return false;\n                }\n                else if (typeof navigator !== 'undefined' &&\n                    navigator.onLine === false) {\n                    // The navigator is offline, let's wait for it to come back online.\n                    if (!this.requests.isPaused) {\n                        this.requests.pause();\n                        window.addEventListener('online', () => {\n                            this.requests.resume();\n                        }, { once: true });\n                    }\n                }\n                queuedRequest.abort();\n                queuedRequest = {\n                    shouldBeRequeued: true,\n                    abort() {\n                        this.shouldBeRequeued = false;\n                    },\n                    done() {\n                        throw new Error('Cannot mark a queued request as done: this indicates a bug');\n                    },\n                    fn() {\n                        throw new Error('Cannot run a queued request: this indicates a bug');\n                    },\n                };\n                return true;\n            };\n            if (onShouldRetry != null) {\n                uploadOptions.onShouldRetry = (error, retryAttempt) => onShouldRetry(error, retryAttempt, opts, defaultOnShouldRetry);\n            }\n            else {\n                uploadOptions.onShouldRetry = defaultOnShouldRetry;\n            }\n            const copyProp = (obj, srcProp, destProp) => {\n                if (hasProperty(obj, srcProp) && !hasProperty(obj, destProp)) {\n                    obj[destProp] = obj[srcProp];\n                }\n            };\n            // We can't use `allowedMetaFields` to index generic M\n            // and we also don't care about the type specifically here,\n            // we just want to pass the meta fields along.\n            const meta = {};\n            const allowedMetaFields = getAllowedMetaFields(opts.allowedMetaFields, file.meta);\n            allowedMetaFields.forEach((item) => {\n                // tus type definition for metadata only accepts `Record<string, string>`\n                // but in reality (at runtime) it accepts `Record<string, unknown>`\n                // tus internally converts everything into a string, but let's do it here instead to be explicit.\n                // because Uppy can have anything inside meta values, (for example relativePath: null is often sent by uppy)\n                meta[item] = String(file.meta[item]);\n            });\n            // tusd uses metadata fields 'filetype' and 'filename'\n            copyProp(meta, 'type', 'filetype');\n            copyProp(meta, 'name', 'filename');\n            uploadOptions.metadata = meta;\n            if (file.data == null)\n                throw new Error('File data is empty');\n            upload = new tus.Upload(file.data, uploadOptions);\n            this.uploaders[file.id] = upload;\n            const eventManager = new EventManager(this.uppy);\n            this.uploaderEvents[file.id] = eventManager;\n            qRequest = () => {\n                if (!file.isPaused) {\n                    upload.start();\n                }\n                // Don't do anything here, the caller will take care of cancelling the upload itself\n                // using resetUploaderReferences(). This is because resetUploaderReferences() has to be\n                // called when this request is still in the queue, and has not been started yet, too. At\n                // that point this cancellation function is not going to be called.\n                // Also, we need to remove the request from the queue _without_ destroying everything\n                // related to this upload to handle pauses.\n                return () => { };\n            };\n            upload.findPreviousUploads().then((previousUploads) => {\n                const previousUpload = previousUploads[0];\n                if (previousUpload) {\n                    this.uppy.log(`[Tus] Resuming upload of ${file.id} started at ${previousUpload.creationTime}`);\n                    upload.resumeFromPreviousUpload(previousUpload);\n                }\n                queuedRequest = this.requests.run(qRequest);\n            });\n            eventManager.onFileRemove(file.id, (targetFileID) => {\n                queuedRequest.abort();\n                this.resetUploaderReferences(file.id, { abort: !!upload.url });\n                resolve(`upload ${targetFileID} was removed`);\n            });\n            eventManager.onPause(file.id, (isPaused) => {\n                queuedRequest.abort();\n                if (isPaused) {\n                    // Remove this file from the queue so another file can start in its place.\n                    upload.abort();\n                }\n                else {\n                    // Resuming an upload should be queued, else you could pause and then\n                    // resume a queued upload to make it skip the queue.\n                    queuedRequest = this.requests.run(qRequest);\n                }\n            });\n            eventManager.onPauseAll(file.id, () => {\n                queuedRequest.abort();\n                upload.abort();\n            });\n            eventManager.onCancelAll(file.id, () => {\n                queuedRequest.abort();\n                this.resetUploaderReferences(file.id, { abort: !!upload.url });\n                resolve(`upload ${file.id} was canceled`);\n            });\n            eventManager.onResumeAll(file.id, () => {\n                queuedRequest.abort();\n                if (file.error) {\n                    upload.abort();\n                }\n                queuedRequest = this.requests.run(qRequest);\n            });\n        }).catch((err) => {\n            this.uppy.emit('upload-error', file, err);\n            throw err;\n        });\n    }\n    /**\n     * Store the uploadUrl on the file options, so that when Golden Retriever\n     * restores state, we will continue uploading to the correct URL.\n     */\n    onReceiveUploadUrl(file, uploadURL) {\n        const currentFile = this.uppy.getFile(file.id);\n        if (!currentFile)\n            return;\n        // Only do the update if we didn't have an upload URL yet.\n        if (!currentFile.tus || currentFile.tus.uploadUrl !== uploadURL) {\n            this.uppy.log('[Tus] Storing upload url');\n            this.uppy.setFileState(currentFile.id, {\n                tus: { ...currentFile.tus, uploadUrl: uploadURL },\n            });\n        }\n    }\n    #getCompanionClientArgs(file) {\n        const opts = { ...this.opts };\n        if (file.tus) {\n            // Install file-specific upload overrides.\n            Object.assign(opts, file.tus);\n        }\n        if (typeof opts.headers === 'function') {\n            opts.headers = opts.headers(file);\n        }\n        return {\n            ...('remote' in file && file.remote.body),\n            endpoint: opts.endpoint,\n            uploadUrl: opts.uploadUrl,\n            protocol: 'tus',\n            size: file.data.size,\n            headers: opts.headers,\n            metadata: file.meta,\n        };\n    }\n    async #uploadFiles(files) {\n        const filesFiltered = filterFilesToUpload(files);\n        const filesToEmit = filterFilesToEmitUploadStarted(filesFiltered);\n        this.uppy.emit('upload-start', filesToEmit);\n        await Promise.allSettled(filesFiltered.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('[Tus] No files to upload');\n            return;\n        }\n        if (this.opts.limit === 0) {\n            this.uppy.log('[Tus] 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/tus/#limit-0', 'warning');\n        }\n        this.uppy.log('[Tus] Uploading...');\n        const filesToUpload = this.uppy.getFilesByIds(fileIDs);\n        await this.#uploadFiles(filesToUpload);\n    };\n    install() {\n        this.uppy.setState({\n            capabilities: {\n                ...this.uppy.getState().capabilities,\n                resumableUploads: true,\n            },\n        });\n        this.uppy.addUploader(this.#handleUpload);\n    }\n    uninstall() {\n        this.uppy.setState({\n            capabilities: {\n                ...this.uppy.getState().capabilities,\n                resumableUploads: false,\n            },\n        });\n        this.uppy.removeUploader(this.#handleUpload);\n    }\n}\n", "{\n  \"name\": \"@uppy/transloadit\",\n  \"description\": \"The Transloadit plugin can be used to upload files to Transloadit for all kinds of processing, such as transcoding video, resizing images, zipping/unzipping, and more\",\n  \"version\": \"5.5.1\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\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    \"transloadit\",\n    \"file encoding\",\n    \"encoding\",\n    \"file processing\",\n    \"video encoding\",\n    \"crop\",\n    \"resize\",\n    \"watermark\",\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@transloadit/types\": \"^4.1.3\",\n    \"@uppy/tus\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\",\n    \"component-emitter\": \"^2.0.0\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"jsdom\": \"^26.1.0\",\n    \"msw\": \"^2.10.4\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\",\n    \"whatwg-fetch\": \"^3.6.2\"\n  }\n}\n", "import { fetchWithNetworkError, hasProperty as has, NetworkError, } from '@uppy/utils';\nimport Emitter from 'component-emitter';\nimport { getAssemblyUrlSsl, } from './index.js';\nconst ASSEMBLY_UPLOADING = 'ASSEMBLY_UPLOADING';\nconst ASSEMBLY_EXECUTING = 'ASSEMBLY_EXECUTING';\nconst ASSEMBLY_COMPLETED = 'ASSEMBLY_COMPLETED';\nconst statusOrder = [ASSEMBLY_UPLOADING, ASSEMBLY_EXECUTING, ASSEMBLY_COMPLETED];\n/**\n * Check that an assembly status is equal to or larger than some desired status.\n * It checks for things that are larger so that a comparison like this works,\n * when the old assembly status is UPLOADING but the new is FINISHED:\n *\n * !isStatus(oldStatus, ASSEMBLY_EXECUTING) && isStatus(newState, ASSEMBLY_EXECUTING)\n *\n * \u2026so that we can emit the 'executing' event even if the execution step was so\n * fast that we missed it.\n */\nfunction isStatus(status, test) {\n    if (typeof status !== 'string') {\n        return false;\n    }\n    return statusOrder.indexOf(status) >= statusOrder.indexOf(test);\n}\nclass TransloaditAssembly extends Emitter {\n    #rateLimitedQueue;\n    #fetchWithNetworkError;\n    #previousFetchStatusStillPending = false;\n    #sse = null;\n    #status;\n    pollInterval;\n    closed;\n    constructor(assembly, rateLimitedQueue) {\n        super();\n        // The current assembly status.\n        this.#status = assembly;\n        // The interval timer for full status updates.\n        this.pollInterval = null;\n        // Whether this assembly has been closed (finished or errored)\n        this.closed = false;\n        this.#rateLimitedQueue = rateLimitedQueue;\n        this.#fetchWithNetworkError = rateLimitedQueue.wrapPromiseFunction(fetchWithNetworkError);\n    }\n    connect() {\n        this.#connectServerSentEvents();\n        this.#beginPolling();\n    }\n    #onFinished() {\n        this.emit('finished');\n        this.close();\n    }\n    get status() {\n        return this.#status;\n    }\n    set status(status) {\n        this.#status = status;\n        this.emit('status', status);\n    }\n    #connectServerSentEvents() {\n        this.#sse = new EventSource(`${this.status.websocket_url}?assembly=${this.status.assembly_id}`);\n        this.#sse.addEventListener('open', () => {\n            clearInterval(this.pollInterval);\n            this.pollInterval = null;\n        });\n        /*\n         * The event \"message\" is a special case, as it\n         * will capture events without an event field\n         * as well as events that have the specific type\n         * other event type.\n         */\n        this.#sse.addEventListener('message', (e) => {\n            if (e.data === 'assembly_finished') {\n                this.#onFinished();\n            }\n            if (e.data === 'assembly_uploading_finished') {\n                this.emit('executing');\n            }\n            if (e.data === 'assembly_upload_meta_data_extracted') {\n                this.emit('metadata');\n                this.#fetchStatus({ diff: false });\n            }\n        });\n        this.#sse.addEventListener('assembly_upload_finished', (e) => {\n            const file = JSON.parse(e.data);\n            this.status = {\n                ...this.status,\n                uploads: [...(this.status.uploads ?? []), file],\n            };\n            this.emit('upload', file);\n        });\n        this.#sse.addEventListener('assembly_result_finished', (e) => {\n            const [stepName, result] = JSON.parse(e.data);\n            this.status = {\n                ...this.status,\n                results: {\n                    ...this.status.results,\n                    [stepName]: [...(this.status.results?.[stepName] ?? []), result],\n                },\n            };\n            this.emit('result', stepName, result);\n        });\n        this.#sse.addEventListener('assembly_execution_progress', (e) => {\n            const details = JSON.parse(e.data);\n            this.emit('execution-progress', details);\n        });\n        this.#sse.addEventListener('assembly_error', (e) => {\n            try {\n                this.#onError(JSON.parse(e.data));\n            }\n            catch {\n                this.#onError(new Error(e.data));\n            }\n            // Refetch for updated status code\n            this.#fetchStatus({ diff: false });\n        });\n    }\n    #onError(assemblyOrError) {\n        this.emit('error', Object.assign(new Error(assemblyOrError.message), assemblyOrError));\n        this.close();\n    }\n    /**\n     * Begin polling for assembly status changes. This sends a request to the\n     * assembly status endpoint every so often, if SSE connection failed.\n     * If the SSE connection fails or takes a long time, we won't miss any\n     * events.\n     */\n    #beginPolling() {\n        this.pollInterval = setInterval(() => {\n            this.#fetchStatus();\n        }, 2000);\n    }\n    /**\n     * Reload assembly status. Useful if SSE doesn't work.\n     *\n     * Pass `diff: false` to avoid emitting diff events, instead only emitting\n     * 'status'.\n     */\n    async #fetchStatus({ diff = true } = {}) {\n        if (this.closed ||\n            this.#rateLimitedQueue.isPaused ||\n            this.#previousFetchStatusStillPending)\n            return;\n        try {\n            this.#previousFetchStatusStillPending = true;\n            const statusUrl = getAssemblyUrlSsl(this.status);\n            const response = await this.#fetchWithNetworkError(statusUrl);\n            this.#previousFetchStatusStillPending = false;\n            if (this.closed)\n                return;\n            if (response.status === 429) {\n                this.#rateLimitedQueue.rateLimit(2_000);\n                return;\n            }\n            if (!response.ok) {\n                this.#onError(new NetworkError(response.statusText));\n                return;\n            }\n            const status = await response.json();\n            // Avoid updating if we closed during this request's lifetime.\n            if (this.closed)\n                return;\n            if (diff) {\n                this.updateStatus(status);\n            }\n            else {\n                this.status = status;\n            }\n        }\n        catch (err) {\n            this.#onError(err);\n        }\n    }\n    update() {\n        return this.#fetchStatus({ diff: true });\n    }\n    /**\n     * Update this assembly's status with a full new object. Events will be\n     * emitted for status changes, new files, and new results.\n     */\n    updateStatus(next) {\n        this.#diffStatus(this.status, next);\n        this.status = next;\n    }\n    /**\n     * Diff two assembly statuses, and emit the events necessary to go from `prev`\n     * to `next`.\n     */\n    #diffStatus(prev, next) {\n        const prevStatus = prev.ok;\n        const nextStatus = next.ok;\n        if (next.error && !prev.error) {\n            return this.#onError(next);\n        }\n        // Desired emit order:\n        //  - executing\n        //  - (n \u00D7 upload)\n        //  - metadata\n        //  - (m \u00D7 result)\n        //  - finished\n        // The below checks run in this order, that way even if we jump from\n        // UPLOADING straight to FINISHED all the events are emitted as expected.\n        const nowExecuting = isStatus(nextStatus, ASSEMBLY_EXECUTING) &&\n            !isStatus(prevStatus, ASSEMBLY_EXECUTING);\n        if (nowExecuting) {\n            // Without SSE, this is our only way to tell if uploading finished.\n            // Hence, we emit this just before the 'upload's and before the 'metadata'\n            // event for the most intuitive ordering, corresponding to the _usual_\n            // ordering (if not guaranteed) that you'd get on SSE.\n            this.emit('executing');\n        }\n        // Only emit if the upload is new (not in prev.uploads).\n        const prevUploads = prev.uploads;\n        const nextUploads = next.uploads;\n        if (nextUploads != null && prevUploads != null) {\n            Object.keys(nextUploads)\n                .filter((upload) => !has(prevUploads, upload))\n                .forEach((upload) => {\n                // This is a bit confusing. Not sure why Object.keys was chosen here, because nextUploads is an Array. Object.keys returns strings for array keys (\"0\", \"1\", etc.). Typescript expects arrays to be indexed with a number, not a string nextUploads[0], even though JavaScript is fine with it, so we need to type assert here:\n                this.emit('upload', nextUploads[upload]);\n            });\n        }\n        if (nowExecuting) {\n            this.emit('metadata');\n        }\n        // Find new results.\n        const nextResultsMap = next.results;\n        const prevResultsMap = prev.results;\n        if (nextResultsMap != null && prevResultsMap != null) {\n            Object.keys(nextResultsMap).forEach((stepName) => {\n                const nextResults = nextResultsMap[stepName] ?? [];\n                const prevResults = prevResultsMap[stepName] ?? [];\n                nextResults\n                    .filter((n) => !prevResults || !prevResults.some((p) => p.id === n.id))\n                    .forEach((result) => {\n                    this.emit('result', stepName, result);\n                });\n            });\n        }\n        if (isStatus(nextStatus, ASSEMBLY_COMPLETED) &&\n            !isStatus(prevStatus, ASSEMBLY_COMPLETED)) {\n            this.emit('finished');\n        }\n        return undefined;\n    }\n    /**\n     * Stop updating this assembly.\n     */\n    close() {\n        this.closed = true;\n        if (this.#sse) {\n            this.#sse.close();\n            this.#sse = null;\n        }\n        clearInterval(this.pollInterval);\n        this.pollInterval = null;\n    }\n}\nexport default TransloaditAssembly;\n", "import Emitter from 'component-emitter';\n/**\n * Track completion of multiple assemblies.\n *\n * Emits 'assembly-complete' when an assembly completes.\n * Emits 'assembly-error' when an assembly fails.\n * Exposes a `.promise` property that resolves when all assemblies have\n * completed (or failed).\n */\nclass TransloaditAssemblyWatcher extends Emitter {\n    #assemblyIDs;\n    #remaining;\n    promise;\n    #resolve;\n    #reject;\n    #uppy;\n    constructor(uppy, assemblyIDs) {\n        super();\n        this.#uppy = uppy;\n        this.#assemblyIDs = assemblyIDs;\n        this.#remaining = assemblyIDs.length;\n        this.promise = new Promise((resolve, reject) => {\n            this.#resolve = resolve;\n            this.#reject = reject;\n        });\n        this.#addListeners();\n    }\n    /**\n     * Are we watching this assembly ID?\n     */\n    #watching(id) {\n        return this.#assemblyIDs.indexOf(id) !== -1;\n    }\n    #onAssemblyComplete = (assembly) => {\n        const assemblyId = assembly.assembly_id;\n        if (assemblyId == null || !this.#watching(assemblyId)) {\n            return;\n        }\n        this.#uppy.log(`[Transloadit] AssemblyWatcher: Got Assembly finish ${assemblyId}`);\n        this.emit('assembly-complete', assemblyId);\n        this.#checkAllComplete();\n    };\n    #onAssemblyCancel = (assembly) => {\n        const assemblyId = assembly.assembly_id;\n        if (assemblyId == null || !this.#watching(assemblyId)) {\n            return;\n        }\n        this.#checkAllComplete();\n    };\n    #onAssemblyError = (assembly, error) => {\n        const assemblyId = assembly.assembly_id;\n        if (assemblyId == null || !this.#watching(assemblyId)) {\n            return;\n        }\n        this.#uppy.log(`[Transloadit] AssemblyWatcher: Got Assembly error ${assemblyId}`);\n        this.#uppy.log(error);\n        this.emit('assembly-error', assemblyId, error);\n        this.#checkAllComplete();\n    };\n    #onImportError = (assembly, fileID, error) => {\n        const assemblyId = assembly.assembly_id;\n        if (assemblyId == null || !this.#watching(assemblyId)) {\n            return;\n        }\n        // Not sure if we should be doing something when it's just one file failing.\n        // ATM, the only options are 1) ignoring or 2) failing the entire upload.\n        // I think failing the upload is better than silently ignoring.\n        // In the future we should maybe have a way to resolve uploads with some failures,\n        // like returning an object with `{ successful, failed }` uploads.\n        this.#onAssemblyError(assembly, error);\n    };\n    #checkAllComplete() {\n        this.#remaining -= 1;\n        if (this.#remaining === 0) {\n            // We're done, these listeners can be removed\n            this.#removeListeners();\n            this.#resolve();\n        }\n    }\n    #removeListeners() {\n        this.#uppy.off('transloadit:complete', this.#onAssemblyComplete);\n        this.#uppy.off('transloadit:assembly-cancel', this.#onAssemblyCancel);\n        this.#uppy.off('transloadit:assembly-error', this.#onAssemblyError);\n        this.#uppy.off('transloadit:import-error', this.#onImportError);\n    }\n    #addListeners() {\n        this.#uppy.on('transloadit:complete', this.#onAssemblyComplete);\n        this.#uppy.on('transloadit:assembly-cancel', this.#onAssemblyCancel);\n        this.#uppy.on('transloadit:assembly-error', this.#onAssemblyError);\n        this.#uppy.on('transloadit:import-error', this.#onImportError);\n    }\n}\nexport default TransloaditAssemblyWatcher;\n", "import { fetchWithNetworkError } from '@uppy/utils';\nimport { getAssemblyUrlSsl, } from './index.js';\nconst ASSEMBLIES_ENDPOINT = '/assemblies';\nexport class AssemblyError extends Error {\n    details;\n    assembly;\n    constructor(message, details, assembly) {\n        super(message);\n        this.details = details;\n        this.assembly = assembly;\n    }\n}\n/**\n * A Barebones HTTP API client for Transloadit.\n */\nexport default class Client {\n    #headers = {};\n    #fetchWithNetworkError;\n    opts;\n    constructor(opts) {\n        this.opts = opts;\n        if (this.opts.client != null) {\n            this.#headers['Transloadit-Client'] = this.opts.client;\n        }\n        this.#fetchWithNetworkError =\n            this.opts.rateLimitedQueue.wrapPromiseFunction(fetchWithNetworkError);\n    }\n    async #fetchJSON(...args) {\n        const response = await this.#fetchWithNetworkError(...args);\n        if (response.status === 429) {\n            this.opts.rateLimitedQueue.rateLimit(2_000);\n            return this.#fetchJSON(...args);\n        }\n        if (!response.ok) {\n            const serverError = new Error(response.statusText);\n            // @ts-expect-error statusCode is not a standard property\n            serverError.statusCode = response.status;\n            if (!`${args[0]}`.endsWith(ASSEMBLIES_ENDPOINT))\n                return Promise.reject(serverError);\n            // Failed assembly requests should return a more detailed error in JSON.\n            return response.json().then((assembly) => {\n                if (!assembly.error)\n                    throw serverError;\n                const error = new AssemblyError(assembly.error, assembly.message, assembly);\n                if (assembly.assembly_id) {\n                    error.details += ` Assembly ID: ${assembly.assembly_id}`;\n                }\n                throw error;\n            }, (err) => {\n                err.cause = serverError;\n                throw err;\n            });\n        }\n        return response.json();\n    }\n    async createAssembly({ params, fields, signature, expectedFiles, }) {\n        const data = new FormData();\n        data.append('params', typeof params === 'string' ? params : JSON.stringify(params));\n        if (signature) {\n            data.append('signature', signature);\n        }\n        Object.keys(fields).forEach((key) => {\n            data.append(key, String(fields[key]));\n        });\n        data.append('num_expected_upload_files', String(expectedFiles));\n        const url = new URL(ASSEMBLIES_ENDPOINT, `${this.opts.service}`).href;\n        return this.#fetchJSON(url, {\n            method: 'POST',\n            headers: this.#headers,\n            body: data,\n        }).catch((err) => this.#reportError(err, { url, type: 'API_ERROR' }));\n    }\n    /**\n     * Reserve resources for a file in an Assembly. Then addFile can be used later.\n     */\n    async reserveFile(assembly, file) {\n        const size = encodeURIComponent(file.size);\n        const assemblyUrl = getAssemblyUrlSsl(assembly);\n        const url = `${assemblyUrl}/reserve_file?size=${size}`;\n        return this.#fetchJSON(url, {\n            method: 'POST',\n            headers: this.#headers,\n        }).catch((err) => this.#reportError(err, { assembly, file, url, type: 'API_ERROR' }));\n    }\n    /**\n     * Import a remote file to an Assembly.\n     */\n    async addFile(assembly, file) {\n        if (!file.uploadURL) {\n            return Promise.reject(new Error('File does not have an `uploadURL`.'));\n        }\n        const size = encodeURIComponent(file.size);\n        const uploadUrl = encodeURIComponent(file.uploadURL);\n        const filename = encodeURIComponent(file.name ?? 'Unnamed');\n        const fieldname = 'file';\n        const qs = `size=${size}&filename=${filename}&fieldname=${fieldname}&s3Url=${uploadUrl}`;\n        const assemblyUrl = getAssemblyUrlSsl(assembly);\n        const url = `${assemblyUrl}/add_file?${qs}`;\n        return this.#fetchJSON(url, {\n            method: 'POST',\n            headers: this.#headers,\n        }).catch((err) => this.#reportError(err, { assembly, file, url, type: 'API_ERROR' }));\n    }\n    /**\n     * Cancel a running Assembly.\n     */\n    async cancelAssembly(assembly) {\n        const url = getAssemblyUrlSsl(assembly);\n        await this.#fetchWithNetworkError(url, {\n            method: 'DELETE',\n            headers: this.#headers,\n        }).catch((err) => this.#reportError(err, { url, type: 'API_ERROR' }));\n    }\n    /**\n     * Get the current status for an assembly.\n     */\n    async getAssemblyStatus(url) {\n        return this.#fetchJSON(url, { headers: this.#headers }).catch((err) => this.#reportError(err, { url, type: 'STATUS_ERROR' }));\n    }\n    async submitError(err, { endpoint, instance, assembly, } = {}) {\n        const message = err.details\n            ? `${err.message} (${err.details})`\n            : err.message;\n        return this.#fetchJSON('https://transloaditstatus.com/client_error', {\n            method: 'POST',\n            body: JSON.stringify({\n                endpoint,\n                instance,\n                assembly_id: assembly,\n                agent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n                client: this.opts.client,\n                error: message,\n            }),\n        });\n    }\n    #reportError = (err, params) => {\n        if (this.opts.errorReporting === false) {\n            throw err;\n        }\n        const opts = {\n            type: params.type,\n        };\n        if (params.assembly) {\n            opts.assembly = params.assembly.assembly_id;\n            opts.instance = params.assembly.instance;\n        }\n        if (params.url) {\n            opts.endpoint = params.url;\n        }\n        this.submitError(err, opts).catch(() => {\n            // not much we can do then is there\n        });\n        throw err;\n    };\n}\n", "export default {\n    strings: {\n        // Shown while Assemblies are being created for an upload.\n        creatingAssembly: 'Preparing upload...',\n        // Shown if an Assembly could not be created.\n        creatingAssemblyFailed: 'Transloadit: Could not create Assembly',\n        // Shown after uploads have succeeded, but when the Assembly is still executing.\n        // This only shows if `waitForMetadata` or `waitForEncoding` was enabled.\n        encoding: 'Encoding...',\n    },\n};\n", "import { BasePlugin } from '@uppy/core';\nimport Tus, {} from '@uppy/tus';\nimport { ErrorWithCause, hasProperty, RateLimitedQueue, } from '@uppy/utils';\nimport packageJson from '../package.json' with { type: 'json' };\nimport Assembly from './Assembly.js';\nimport AssemblyWatcher from './AssemblyWatcher.js';\nimport Client, {} from './Client.js';\nimport locale from './locale.js';\nconst defaultOptions = {\n    service: 'https://api2.transloadit.com',\n    errorReporting: true,\n    waitForEncoding: false,\n    waitForMetadata: false,\n    alwaysRunAssembly: false,\n    importFromUploadURLs: false,\n    limit: 20,\n    retryDelays: [7_000, 10_000, 15_000, 20_000],\n    clientName: null,\n};\nconst sendErrorToConsole = (originalErr) => (err) => {\n    const error = new ErrorWithCause('Failed to send error to the client', {\n        cause: err,\n    });\n    console.error(error, originalErr);\n};\nfunction validateParams(params) {\n    if (params == null) {\n        throw new Error('Transloadit: The `params` option is required.');\n    }\n    let parsed;\n    if (typeof params === 'string') {\n        try {\n            parsed = JSON.parse(params);\n        }\n        catch (err) {\n            // Tell the user that this is not an Uppy bug!\n            throw new ErrorWithCause('Transloadit: The `params` option is a malformed JSON string.', { cause: err });\n        }\n    }\n    else {\n        parsed = params;\n    }\n    if (!parsed.auth || !parsed.auth.key) {\n        throw new Error('Transloadit: The `params.auth.key` option is required. ' +\n            'You can find your Transloadit API key at https://transloadit.com/c/template-credentials');\n    }\n}\nfunction ensureAssemblyId(status) {\n    if (!status.assembly_id) {\n        console.warn('Assembly status is missing `assembly_id`.', status);\n        throw new Error('Transloadit: Assembly status is missing `assembly_id`.');\n    }\n    return status.assembly_id;\n}\nfunction ensureUrl(label, ...candidates) {\n    for (const value of candidates) {\n        if (typeof value === 'string' && value.length > 0) {\n            return value;\n        }\n    }\n    throw new Error(`Transloadit: Assembly status is missing ${label}.`);\n}\nexport function getAssemblyUrl(assembly) {\n    return ensureUrl('`assembly_url`', assembly.assembly_url, assembly.assembly_ssl_url);\n}\nexport function getAssemblyUrlSsl(assembly) {\n    return ensureUrl('`assembly_ssl_url`', assembly.assembly_ssl_url, assembly.assembly_url);\n}\nconst COMPANION_URL = 'https://api2.transloadit.com/companion';\n// Regex matching acceptable postMessage() origins for authentication feedback from companion.\nconst COMPANION_ALLOWED_HOSTS = /\\.transloadit\\.com$/;\n// Regex used to check if a Companion address is run by Transloadit.\nconst TL_COMPANION = /https?:\\/\\/api2(?:-\\w+)?\\.transloadit\\.com\\/companion/;\n/**\n * Upload files to Transloadit using Tus.\n */\nexport default class Transloadit extends BasePlugin {\n    static VERSION = packageJson.version;\n    static COMPANION_URL = COMPANION_URL;\n    static COMPANION_ALLOWED_HOSTS = COMPANION_ALLOWED_HOSTS;\n    #rateLimitedQueue;\n    client;\n    #assembly;\n    #watcher;\n    completedFiles;\n    restored = null;\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOptions, ...opts });\n        this.type = 'uploader';\n        this.id = this.opts.id || 'Transloadit';\n        this.defaultLocale = locale;\n        this.#rateLimitedQueue = new RateLimitedQueue(this.opts.limit);\n        this.i18nInit();\n        this.client = new Client({\n            service: this.opts.service,\n            client: this.#getClientVersion(),\n            errorReporting: this.opts.errorReporting,\n            rateLimitedQueue: this.#rateLimitedQueue,\n        });\n        // Contains a file IDs that have completed postprocessing before the upload\n        // they belong to has entered the postprocess stage.\n        this.completedFiles = Object.create(null);\n    }\n    #getClientVersion() {\n        const list = [\n            // @ts-expect-error VERSION comes from babel, TS does not understand\n            `uppy-core:${this.uppy.constructor.VERSION}`,\n            // @ts-expect-error VERSION comes from babel, TS does not understand\n            `uppy-transloadit:${this.constructor.VERSION}`,\n            `uppy-tus:${Tus.VERSION}`,\n        ];\n        const addPluginVersion = (pluginName, versionName) => {\n            const plugin = this.uppy.getPlugin(pluginName);\n            if (plugin) {\n                // @ts-expect-error VERSION comes from babel, TS does not understand\n                list.push(`${versionName}:${plugin.constructor.VERSION}`);\n            }\n        };\n        if (this.opts.importFromUploadURLs) {\n            addPluginVersion('XHRUpload', 'uppy-xhr-upload');\n            addPluginVersion('AwsS3', 'uppy-aws-s3');\n            addPluginVersion('AwsS3Multipart', 'uppy-aws-s3-multipart');\n        }\n        addPluginVersion('Dropbox', 'uppy-dropbox');\n        addPluginVersion('Box', 'uppy-box');\n        addPluginVersion('Facebook', 'uppy-facebook');\n        addPluginVersion('GoogleDrive', 'uppy-google-drive');\n        addPluginVersion('GoogleDrivePicker', 'uppy-google-drive-picker');\n        addPluginVersion('GooglePhotosPicker', 'uppy-google-photos-picker');\n        addPluginVersion('Instagram', 'uppy-instagram');\n        addPluginVersion('OneDrive', 'uppy-onedrive');\n        addPluginVersion('Zoom', 'uppy-zoom');\n        addPluginVersion('Url', 'uppy-url');\n        if (this.opts.clientName != null) {\n            list.push(this.opts.clientName);\n        }\n        return list.join(',');\n    }\n    /**\n     * Attach metadata to files to configure the Tus plugin to upload to Transloadit.\n     * Also use Transloadit's Companion\n     *\n     * See: https://github.com/tus/tusd/wiki/Uploading-to-Transloadit-using-tus#uploading-using-tus\n     */\n    #attachAssemblyMetadata(file, status) {\n        // Add the metadata parameters Transloadit needs.\n        const assemblyUrl = getAssemblyUrl(status);\n        const tusEndpoint = ensureUrl('`tus_url`', status.tus_url);\n        const assemblyId = ensureAssemblyId(status);\n        const meta = {\n            ...file.meta,\n            // @TODO(tim-kos), can we safely bump this to assembly_ssl_url / getAssemblyUrlSsl?\n            assembly_url: assemblyUrl,\n            filename: file.name,\n            fieldname: 'file',\n        };\n        // Add Assembly-specific Tus endpoint.\n        const tus = {\n            ...file.tus,\n            endpoint: tusEndpoint,\n            // Include X-Request-ID headers for better debugging.\n            addRequestId: true,\n        };\n        // Set Companion location. We only add this, if 'file' has the attribute\n        // remote, because this is the criteria to identify remote files.\n        // We only replace the hostname for Transloadit's companions, so that\n        // people can also self-host them while still using Transloadit for encoding.\n        let remote;\n        if ('remote' in file && file.remote) {\n            ;\n            ({ remote } = file);\n            if (status.companion_url && TL_COMPANION.test(file.remote.companionUrl)) {\n                const newHost = status.companion_url.replace(/\\/$/, '');\n                const path = file.remote.url\n                    .replace(file.remote.companionUrl, '')\n                    .replace(/^\\//, '');\n                remote = {\n                    ...file.remote,\n                    companionUrl: newHost,\n                    url: `${newHost}/${path}`,\n                };\n            }\n        }\n        // Store the Assembly ID this file is in on the file under the `transloadit` key.\n        const newFile = {\n            ...file,\n            transloadit: {\n                assembly: assemblyId,\n            },\n        };\n        // Only configure the Tus plugin if we are uploading straight to Transloadit (the default).\n        if (!this.opts.importFromUploadURLs) {\n            Object.assign(newFile, { meta, tus, remote });\n        }\n        return newFile;\n    }\n    async #createAssembly(fileIDs, assemblyOptions) {\n        this.uppy.log('[Transloadit] Create Assembly');\n        try {\n            const newAssembly = await this.client.createAssembly({\n                ...assemblyOptions,\n                expectedFiles: fileIDs.length,\n            });\n            const files = this.uppy\n                .getFiles()\n                .filter(({ id }) => fileIDs.includes(id));\n            if (files.length === 0 && fileIDs.length !== 0) {\n                // All files have been removed, cancelling.\n                await this.client.cancelAssembly(newAssembly);\n                return null;\n            }\n            const assembly = new Assembly(newAssembly, this.#rateLimitedQueue);\n            const { status } = assembly;\n            const assemblyID = ensureAssemblyId(status);\n            const updatedFiles = {};\n            files.forEach((file) => {\n                updatedFiles[file.id] = this.#attachAssemblyMetadata(file, status);\n            });\n            this.uppy.setState({\n                files: {\n                    ...this.uppy.getState().files,\n                    ...updatedFiles,\n                },\n            });\n            this.uppy.emit('transloadit:assembly-created', status, fileIDs);\n            this.uppy.log(`[Transloadit] Created Assembly ${assemblyID}`);\n            return assembly;\n        }\n        catch (err) {\n            // TODO: use AssemblyError?\n            const wrapped = new ErrorWithCause(`${this.i18n('creatingAssemblyFailed')}: ${err.message}`, { cause: err });\n            if ('details' in err) {\n                // @ts-expect-error details is not in the Error type\n                wrapped.details = err.details;\n            }\n            if ('assembly' in err) {\n                // @ts-expect-error assembly is not in the Error type\n                wrapped.assembly = err.assembly;\n            }\n            throw wrapped;\n        }\n    }\n    #createAssemblyWatcher(idOrArrayOfIds) {\n        // AssemblyWatcher tracks completion states of all Assemblies in this upload.\n        const ids = Array.isArray(idOrArrayOfIds)\n            ? idOrArrayOfIds\n            : [idOrArrayOfIds];\n        const watcher = new AssemblyWatcher(this.uppy, ids);\n        watcher.on('assembly-complete', (id) => {\n            const files = this.getAssemblyFiles(id);\n            files.forEach((file) => {\n                this.completedFiles[file.id] = true;\n                this.uppy.emit('postprocess-complete', file);\n            });\n        });\n        watcher.on('assembly-error', (id, error) => {\n            // Clear postprocessing state for all our files.\n            const filesFromAssembly = this.getAssemblyFiles(id);\n            filesFromAssembly.forEach((file) => {\n                // TODO Maybe make a postprocess-error event here?\n                this.uppy.emit('upload-error', file, error);\n                this.uppy.emit('postprocess-complete', file);\n            });\n            // Reset `tus` key in the file state, so when the upload is retried,\n            // old tus upload is not re-used \u2014 Assebmly expects a new upload, can't currently\n            // re-use the old one. See: https://github.com/transloadit/uppy/issues/4412\n            // and `onReceiveUploadUrl` in @uppy/tus\n            const files = { ...this.uppy.getState().files };\n            filesFromAssembly.forEach((file) => delete files[file.id].tus);\n            this.uppy.setState({ files });\n            this.uppy.emit('error', error);\n        });\n        this.#watcher = watcher;\n    }\n    #shouldWaitAfterUpload() {\n        return this.opts.waitForEncoding || this.opts.waitForMetadata;\n    }\n    /**\n     * Used when `importFromUploadURLs` is enabled: reserves all files in\n     * the Assembly.\n     */\n    #reserveFiles(assembly, fileIDs) {\n        return Promise.all(fileIDs.map((fileID) => {\n            const file = this.uppy.getFile(fileID);\n            return this.client.reserveFile(assembly.status, file);\n        }));\n    }\n    /**\n     * Allows Golden Retriever plugin to serialize the Assembly status so we can restore it later\n     */\n    #handleAssemblyStatusUpdate = (assemblyResponse) => {\n        this.uppy.emit('restore:plugin-data-changed', {\n            [this.id]: assemblyResponse ? { assemblyResponse } : undefined,\n        });\n    };\n    get assembly() {\n        return this.#assembly;\n    }\n    set assembly(newAssembly) {\n        if (!newAssembly && this.assembly) {\n            this.assembly.off('status', this.#handleAssemblyStatusUpdate);\n        }\n        this.#assembly = newAssembly;\n        this.#handleAssemblyStatusUpdate(newAssembly?.status);\n        if (newAssembly) {\n            newAssembly.on('status', this.#handleAssemblyStatusUpdate);\n        }\n    }\n    /**\n     * Used when `importFromUploadURLs` is enabled: adds files to the Assembly\n     * once they have been fully uploaded.\n     */\n    #onFileUploadURLAvailable = (rawFile) => {\n        const file = this.uppy.getFile(rawFile.id);\n        if (!file?.transloadit?.assembly) {\n            return;\n        }\n        const { status } = this.assembly;\n        this.client.addFile(status, file).catch((err) => {\n            this.uppy.log(err);\n            this.uppy.emit('transloadit:import-error', status, file.id, err);\n        });\n    };\n    #findFile(uploadedFile) {\n        const files = this.uppy.getFiles();\n        for (let i = 0; i < files.length; i++) {\n            const file = files[i];\n            // Completed file upload.\n            if (file.uploadURL === uploadedFile.tus_upload_url) {\n                return file;\n            }\n            // In-progress file upload.\n            if (file.tus && file.tus.uploadUrl === uploadedFile.tus_upload_url) {\n                return file;\n            }\n            if (!uploadedFile.is_tus_file) {\n                // Fingers-crossed check for non-tus uploads, eg imported from S3.\n                if (file.name === uploadedFile.name &&\n                    file.size === uploadedFile.size) {\n                    return file;\n                }\n            }\n        }\n        return undefined;\n    }\n    #onFileUploadComplete(assemblyId, uploadedFile) {\n        const state = this.getPluginState();\n        const file = this.#findFile(uploadedFile);\n        if (!file) {\n            this.uppy.log('[Transloadit] Couldn\u2019t find the file, it was likely removed in the process');\n            return;\n        }\n        this.setPluginState({\n            files: {\n                ...state.files,\n                [uploadedFile.id]: {\n                    assembly: assemblyId,\n                    id: file.id,\n                    uploadedFile,\n                },\n            },\n        });\n        this.uppy.emit('transloadit:upload', uploadedFile, this.getAssembly());\n    }\n    #onResult(assemblyId, stepName, result) {\n        const state = this.getPluginState();\n        if (!('id' in result)) {\n            console.warn('Result has no id', result);\n            return;\n        }\n        if (typeof result.id !== 'string') {\n            console.warn('Result has no id of type string', result);\n            return;\n        }\n        const entry = {\n            result,\n            stepName,\n            id: result.id,\n            assembly: assemblyId,\n        };\n        this.setPluginState({\n            results: [...state.results, entry],\n        });\n        this.uppy.emit('transloadit:result', stepName, entry.result, this.getAssembly());\n    }\n    /**\n     * When an Assembly has finished processing, get the final state\n     * and emit it.\n     */\n    #onAssemblyFinished(assembly) {\n        const url = getAssemblyUrlSsl(assembly.status);\n        this.client.getAssemblyStatus(url).then((finalStatus) => {\n            assembly.status = finalStatus;\n            this.uppy.emit('transloadit:complete', finalStatus);\n        });\n    }\n    async #cancelAssembly(assembly) {\n        await this.client.cancelAssembly(assembly);\n        // TODO bubble this through AssemblyWatcher so its event handlers can clean up correctly\n        this.uppy.emit('transloadit:assembly-cancelled', assembly);\n        this.assembly = undefined;\n    }\n    /**\n     * When all files are removed, cancel in-progress Assemblies.\n     */\n    #onCancelAll = async () => {\n        if (this.assembly) {\n            try {\n                await this.#cancelAssembly(this.assembly.status);\n            }\n            catch (err) {\n                this.uppy.log(err);\n            }\n        }\n        // Reset allowNewUpload when upload is cancelled\n        this.uppy.setState({ allowNewUpload: true });\n    };\n    #onRestored = (pluginData) => {\n        const savedState = pluginData?.[this.id] ? pluginData[this.id] : {};\n        const previousAssembly = savedState.assemblyResponse;\n        if (!previousAssembly) {\n            // Nothing to restore.\n            return;\n        }\n        // Convert loaded Assembly statuses to a Transloadit plugin state object.\n        const restoreState = () => {\n            const files = {};\n            const results = [];\n            const id = ensureAssemblyId(previousAssembly);\n            previousAssembly.uploads?.forEach((uploadedFile) => {\n                const file = this.#findFile(uploadedFile);\n                files[uploadedFile.id] = {\n                    id: file.id,\n                    assembly: id,\n                    uploadedFile,\n                };\n            });\n            const state = this.getPluginState();\n            const restoredResults = previousAssembly.results ?? {};\n            Object.keys(restoredResults).forEach((stepName) => {\n                const stepResults = restoredResults[stepName] ?? [];\n                for (const result of stepResults) {\n                    if (!('id' in result)) {\n                        console.warn('Result has no id', result);\n                        continue;\n                    }\n                    if (typeof result.id !== 'string') {\n                        console.warn('Result has no id of type string', result);\n                        continue;\n                    }\n                    if (!('original_id' in result)) {\n                        console.warn('Result has no original_id', result);\n                        continue;\n                    }\n                    if (typeof result.original_id !== 'string') {\n                        console.warn('Result has no original_id of type string', result);\n                        continue;\n                    }\n                    const file = state.files[result.original_id];\n                    results.push({\n                        id: result.id,\n                        result: { ...result, localId: file ? file.id : null },\n                        stepName,\n                        assembly: id,\n                    });\n                }\n            });\n            const assembly = new Assembly(previousAssembly, this.#rateLimitedQueue);\n            assembly.status = previousAssembly;\n            this.assembly = assembly;\n            this.setPluginState({ files, results });\n            return files;\n        };\n        // Set up the Assembly instances and AssemblyWatchers for existing Assemblies.\n        const restoreAssemblies = (ids) => {\n            this.#createAssemblyWatcher(ensureAssemblyId(previousAssembly));\n            this.#connectAssembly(this.assembly, ids);\n        };\n        // Force-update Assembly to check for missed events.\n        const updateAssembly = () => {\n            return this.assembly?.update();\n        };\n        // Restore all Assembly state.\n        this.restored = (async () => {\n            const files = restoreState();\n            restoreAssemblies(Object.keys(files));\n            await updateAssembly();\n            this.restored = null;\n        })();\n        this.restored.catch((err) => {\n            this.uppy.log('Failed to restore', err);\n        });\n    };\n    #connectAssembly(assembly, ids) {\n        const { status } = assembly;\n        const id = ensureAssemblyId(status);\n        assembly.on('upload', (file) => {\n            this.#onFileUploadComplete(id, file);\n        });\n        assembly.on('error', (error) => {\n            error.assembly = assembly.status;\n            this.uppy.emit('transloadit:assembly-error', assembly.status, error);\n        });\n        assembly.on('executing', () => {\n            this.uppy.emit('transloadit:assembly-executing', assembly.status);\n        });\n        assembly.on('execution-progress', (details) => {\n            this.uppy.emit('transloadit:execution-progress', details);\n            if (details.progress_combined != null) {\n                // TODO: Transloadit emits progress information for the entire Assembly combined\n                // (progress_combined) and for each imported/uploaded file (progress_per_original_file).\n                // Uppy's current design requires progress to be set for each file, which is then\n                // averaged to get the total progress (see calculateProcessingProgress.js).\n                // Therefore, we currently set the combined progres for every file, so that this is\n                // the same value that is displayed to the end user, although we have more accurate\n                // per-file progress as well. We cannot use this here or otherwise progress from\n                // imported files would not be counted towards the total progress because imported\n                // files are not registered with Uppy.\n                for (const file of this.uppy.getFilesByIds(ids)) {\n                    this.uppy.emit('postprocess-progress', file, {\n                        mode: 'determinate',\n                        value: details.progress_combined / 100,\n                        message: this.i18n('encoding'),\n                    });\n                }\n            }\n        });\n        if (this.opts.waitForEncoding) {\n            assembly.on('result', (stepName, result) => {\n                this.#onResult(id, stepName, result);\n            });\n        }\n        if (this.opts.waitForEncoding) {\n            assembly.on('finished', () => {\n                this.#onAssemblyFinished(assembly);\n            });\n        }\n        else if (this.opts.waitForMetadata) {\n            assembly.on('metadata', () => {\n                this.#onAssemblyFinished(assembly);\n            });\n        }\n        // No need to connect to the socket if the Assembly has completed by now.\n        // @ts-expect-error ok does not exist on Assembly?\n        if (assembly.ok === 'ASSEMBLY_COMPLETE') {\n            return assembly;\n        }\n        assembly.connect();\n        return assembly;\n    }\n    #prepareUpload = async (fileIDs) => {\n        // Prevent adding/dropping files during upload to avoid creating multiple assemblies\n        // TODO we should rewrite to instead infer allowNewUpload based on upload state\n        this.uppy.setState({ allowNewUpload: false });\n        const assemblyOptions = (typeof this.opts.assemblyOptions === 'function'\n            ? await this.opts.assemblyOptions()\n            : this.opts.assemblyOptions);\n        assemblyOptions.fields = {\n            ...(assemblyOptions.fields ?? {}),\n        };\n        validateParams(assemblyOptions.params);\n        try {\n            const assembly = \n            // this.assembly can already be defined if we recovered files with Golden Retriever (this.#onRestored)\n            this.assembly ?? (await this.#createAssembly(fileIDs, assemblyOptions));\n            if (assembly == null)\n                throw new Error('All files were canceled after assembly was created');\n            if (this.opts.importFromUploadURLs) {\n                await this.#reserveFiles(assembly, fileIDs);\n            }\n            fileIDs.forEach((fileID) => {\n                const file = this.uppy.getFile(fileID);\n                this.uppy.emit('preprocess-complete', file);\n            });\n            this.#createAssemblyWatcher(ensureAssemblyId(assembly.status));\n            this.assembly = assembly;\n            this.#connectAssembly(assembly, fileIDs);\n        }\n        catch (err) {\n            fileIDs.forEach((fileID) => {\n                const file = this.uppy.getFile(fileID);\n                // Clear preprocessing state when the Assembly could not be created,\n                // otherwise the UI gets confused about the lingering progress keys\n                this.uppy.emit('preprocess-complete', file);\n                this.uppy.emit('upload-error', file, err);\n            });\n            // Reset allowNewUpload on error\n            this.uppy.setState({ allowNewUpload: true });\n            throw err;\n        }\n    };\n    #afterUpload = async (fileIDs, uploadID) => {\n        try {\n            // If we're still restoring state, wait for that to be done.\n            await this.restored;\n            const files = fileIDs\n                .map((fileID) => this.uppy.getFile(fileID))\n                // Only use files without errors\n                .filter((file) => !file.error);\n            const assemblyID = this.assembly\n                ? ensureAssemblyId(this.assembly.status)\n                : undefined;\n            const closeSocketConnections = () => {\n                this.assembly?.close();\n            };\n            // If we don't have to wait for encoding metadata or results, we can close\n            // the socket immediately and finish the upload.\n            if (!this.#shouldWaitAfterUpload()) {\n                closeSocketConnections();\n                const status = this.assembly?.status;\n                if (status != null) {\n                    this.uppy.addResultData(uploadID, {\n                        transloadit: [status],\n                    });\n                }\n                return;\n            }\n            // If no Assemblies were created for this upload, we also do not have to wait.\n            // There's also no sockets or anything to close, so just return immediately.\n            if (!assemblyID) {\n                this.uppy.addResultData(uploadID, { transloadit: [] });\n                return;\n            }\n            const incompleteFiles = files.filter((file) => !hasProperty(this.completedFiles, file.id));\n            incompleteFiles.forEach((file) => {\n                this.uppy.emit('postprocess-progress', file, {\n                    mode: 'indeterminate',\n                    message: this.i18n('encoding'),\n                });\n            });\n            await this.#watcher.promise;\n            // assembly is now done processing!\n            closeSocketConnections();\n            const status = this.assembly?.status;\n            if (status != null) {\n                this.uppy.addResultData(uploadID, {\n                    transloadit: [status],\n                });\n            }\n        }\n        finally {\n            // in case allowMultipleUploadBatches is true and the user wants to upload again,\n            // we need to allow a new assembly to be created.\n            // see https://github.com/transloadit/uppy/issues/5397\n            this.assembly = undefined;\n            // Allow new uploads now that this upload is complete\n            this.uppy.setState({ allowNewUpload: true });\n        }\n    };\n    #closeAssemblyIfExists = () => {\n        this.assembly?.close();\n    };\n    #onError = (err) => {\n        this.#closeAssemblyIfExists();\n        this.assembly = undefined;\n        this.client\n            .submitError(err)\n            // if we can't report the error that sucks\n            .catch(sendErrorToConsole(err));\n        // Reset allowNewUpload when upload encounters an error\n        this.uppy.setState({ allowNewUpload: true });\n    };\n    #onTusError = (_, err) => {\n        this.#closeAssemblyIfExists();\n        if (err?.message?.startsWith('tus: ')) {\n            const endpoint = err.originalRequest?.getUnderlyingObject()?.responseURL;\n            this.client\n                .submitError(err, { endpoint })\n                // if we can't report the error that sucks\n                .catch(sendErrorToConsole(err));\n        }\n    };\n    install() {\n        this.uppy.addPreProcessor(this.#prepareUpload);\n        this.uppy.addPostProcessor(this.#afterUpload);\n        // We may need to close socket.io connections on error.\n        this.uppy.on('error', this.#onError);\n        // Handle cancellation.\n        this.uppy.on('cancel-all', this.#onCancelAll);\n        this.uppy.on('upload-error', this.#onTusError);\n        if (this.opts.importFromUploadURLs) {\n            // No uploader needed when importing; instead we take the upload URL from an existing uploader.\n            this.uppy.on('upload-success', this.#onFileUploadURLAvailable);\n        }\n        else {\n            // we don't need it here.\n            // the regional endpoint from the Transloadit API before we can set it.\n            this.uppy.use(Tus, {\n                // Disable tus-js-client fingerprinting, otherwise uploading the same file at different times\n                // will upload to an outdated Assembly, and we won't get socket events for it.\n                //\n                // To resume a Transloadit upload, we need to reconnect to the websocket, and the state that's\n                // required to do that is not saved by tus-js-client's fingerprinting. We need the tus URL,\n                // the Assembly URL, and the WebSocket URL, at least. We also need to know _all_ the files that\n                // were added to the Assembly, so we can properly complete it. All that state is handled by\n                // Golden Retriever. So, Golden Retriever is required to do resumability with the Transloadit plugin,\n                // and we disable Tus's default resume implementation to prevent bad behaviours.\n                storeFingerprintForResuming: false,\n                // Send all metadata to Transloadit. Metadata set by the user\n                // ends up as in the template as `file.user_meta`\n                allowedMetaFields: true,\n                // Pass the limit option to @uppy/tus\n                limit: this.opts.limit,\n                rateLimitedQueue: this.#rateLimitedQueue,\n                retryDelays: this.opts.retryDelays,\n            });\n        }\n        this.uppy.on('restored', this.#onRestored);\n        this.setPluginState({\n            // Contains file data from Transloadit, indexed by their Transloadit-assigned ID.\n            files: {},\n            // Contains result data from Transloadit.\n            results: [],\n        });\n        // We cannot cancel individual files because Assemblies tend to contain many files.\n        const { capabilities } = this.uppy.getState();\n        this.uppy.setState({\n            capabilities: {\n                ...capabilities,\n                individualCancellation: false,\n            },\n        });\n    }\n    uninstall() {\n        this.uppy.removePreProcessor(this.#prepareUpload);\n        this.uppy.removePostProcessor(this.#afterUpload);\n        this.uppy.off('error', this.#onError);\n        this.uppy.off('cancel-all', this.#onCancelAll);\n        if (this.opts.importFromUploadURLs) {\n            this.uppy.off('upload-success', this.#onFileUploadURLAvailable);\n        }\n        const { capabilities } = this.uppy.getState();\n        this.uppy.setState({\n            capabilities: {\n                ...capabilities,\n                individualCancellation: true,\n            },\n        });\n    }\n    getAssembly() {\n        return this.assembly?.status;\n    }\n    getAssemblyFiles(assemblyID) {\n        return this.uppy.getFiles().filter((file) => {\n            return file?.transloadit?.assembly === assemblyID;\n        });\n    }\n}\nexport { COMPANION_URL, COMPANION_ALLOWED_HOSTS };\n// Low-level classes for advanced usage (e.g., creating assemblies without file uploads)\nexport { default as Assembly } from './Assembly.js';\nexport { AssemblyError, default as Client } from './Client.js';\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { UIPlugin } from '@uppy/core';\nimport { canvasToBlob, getFileTypeExtension, mimeTypes } from '@uppy/utils';\nimport { isMobile } from 'is-mobile';\n// biome-ignore lint/style/useImportType: h is not a type\nimport { h } from 'preact';\nimport packageJson from '../package.json' with { type: 'json' };\nimport CameraIcon from './CameraIcon.js';\nimport CameraScreen from './CameraScreen.js';\nimport locale from './locale.js';\nimport PermissionsScreen from './PermissionsScreen.js';\nimport supportsMediaRecorder from './supportsMediaRecorder.js';\n/**\n * Normalize a MIME type or file extension into a MIME type.\n *\n * @param fileType - MIME type or a file extension prefixed with `.`.\n * @returns The MIME type or `undefined` if the fileType is an extension and is not known.\n */\nfunction toMimeType(fileType) {\n    if (fileType[0] === '.') {\n        return mimeTypes[fileType.slice(1)];\n    }\n    return fileType;\n}\n/**\n * Is this MIME type a video?\n */\nfunction isVideoMimeType(mimeType) {\n    return /^video\\/[^*]+$/.test(mimeType);\n}\n/**\n * Is this MIME type an image?\n */\nfunction isImageMimeType(mimeType) {\n    return /^image\\/[^*]+$/.test(mimeType);\n}\nfunction getMediaDevices() {\n    // bug in the compatibility data\n    return navigator.mediaDevices;\n}\nfunction isModeAvailable(modes, mode) {\n    return modes.includes(mode);\n}\n// set default options\nexport const defaultOptions = {\n    onBeforeSnapshot: () => Promise.resolve(),\n    countdown: false,\n    modes: ['video-audio', 'video-only', 'audio-only', 'picture'],\n    mirror: true,\n    showVideoSourceDropdown: false,\n    preferredImageMimeType: null,\n    preferredVideoMimeType: null,\n    showRecordingLength: false,\n    mobileNativeCamera: isMobile({ tablet: true }),\n};\n/**\n * Webcam\n */\nexport default class Webcam extends UIPlugin {\n    static VERSION = packageJson.version;\n    // enableMirror is used to toggle mirroring, for instance when discarding the video,\n    // while `opts.mirror` is used to remember the initial user setting\n    #enableMirror;\n    mediaDevices;\n    supportsUserMedia;\n    protocol;\n    capturedMediaFile;\n    icon;\n    webcamActive;\n    stream = null;\n    recorder = null;\n    recordingChunks = null;\n    recordingLengthTimer;\n    captureInProgress = false;\n    constructor(uppy, opts) {\n        super(uppy, { ...defaultOptions, ...opts });\n        this.mediaDevices = getMediaDevices();\n        this.supportsUserMedia = !!this.mediaDevices;\n        this.protocol = location.protocol.match(/https/i) ? 'https' : 'http';\n        this.id = this.opts.id || 'Webcam';\n        this.type = 'acquirer';\n        this.capturedMediaFile = null;\n        this.icon = () => (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", width: \"32\", height: \"32\", viewBox: \"0 0 32 32\", children: _jsx(\"path\", { d: \"M23.5 9.5c1.417 0 2.5 1.083 2.5 2.5v9.167c0 1.416-1.083 2.5-2.5 2.5h-15c-1.417 0-2.5-1.084-2.5-2.5V12c0-1.417 1.083-2.5 2.5-2.5h2.917l1.416-2.167C13 7.167 13.25 7 13.5 7h5c.25 0 .5.167.667.333L20.583 9.5H23.5zM16 11.417a4.706 4.706 0 00-4.75 4.75 4.704 4.704 0 004.75 4.75 4.703 4.703 0 004.75-4.75c0-2.663-2.09-4.75-4.75-4.75zm0 7.825c-1.744 0-3.076-1.332-3.076-3.074 0-1.745 1.333-3.077 3.076-3.077 1.744 0 3.074 1.333 3.074 3.076s-1.33 3.075-3.074 3.075z\", fill: \"#02B383\", fillRule: \"nonzero\" }) }));\n        this.defaultLocale = locale;\n        this.i18nInit();\n        this.title = this.i18n('pluginNameCamera');\n        this.#enableMirror = this.opts.mirror;\n        this.install = this.install.bind(this);\n        this.setPluginState = this.setPluginState.bind(this);\n        this.render = this.render.bind(this);\n        // Camera controls\n        this.start = this.start.bind(this);\n        this.stop = this.stop.bind(this);\n        this.takeSnapshot = this.takeSnapshot.bind(this);\n        this.startRecording = this.startRecording.bind(this);\n        this.stopRecording = this.stopRecording.bind(this);\n        this.discardRecordedMedia = this.discardRecordedMedia.bind(this);\n        this.submit = this.submit.bind(this);\n        this.oneTwoThreeSmile = this.oneTwoThreeSmile.bind(this);\n        this.focus = this.focus.bind(this);\n        this.changeVideoSource = this.changeVideoSource.bind(this);\n        this.webcamActive = false;\n        if (this.opts.countdown) {\n            this.opts.onBeforeSnapshot = this.oneTwoThreeSmile;\n        }\n        this.setPluginState({\n            hasCamera: false,\n            cameraReady: false,\n            cameraError: null,\n            recordingLengthSeconds: 0,\n            videoSources: [],\n            currentDeviceId: null,\n            capturedSnapshot: null,\n        });\n    }\n    getStatus() {\n        const { recordedVideo, capturedSnapshot, isRecording, cameraReady, cameraError, } = this.getPluginState();\n        if (isRecording)\n            return 'recording';\n        if (recordedVideo != null || capturedSnapshot != null)\n            return 'captured';\n        if (cameraReady)\n            return 'ready';\n        if (cameraError)\n            return 'error';\n        return 'init';\n    }\n    setOptions(newOpts) {\n        super.setOptions({\n            ...newOpts,\n            videoConstraints: {\n                // May be undefined but ... handles that\n                ...this.opts.videoConstraints,\n                ...newOpts?.videoConstraints,\n            },\n        });\n    }\n    hasCameraCheck() {\n        if (!this.mediaDevices) {\n            return Promise.resolve(false);\n        }\n        return this.mediaDevices.enumerateDevices().then((devices) => {\n            return devices.some((device) => device.kind === 'videoinput');\n        });\n    }\n    isAudioOnly() {\n        return this.opts.modes.length === 1 && this.opts.modes[0] === 'audio-only';\n    }\n    getConstraints(deviceId = null) {\n        const acceptsAudio = this.opts.modes.indexOf('video-audio') !== -1 ||\n            this.opts.modes.indexOf('audio-only') !== -1;\n        const acceptsVideo = !this.isAudioOnly() &&\n            (this.opts.modes.indexOf('video-audio') !== -1 ||\n                this.opts.modes.indexOf('video-only') !== -1 ||\n                this.opts.modes.indexOf('picture') !== -1);\n        const videoConstraints = {\n            ...(this.opts.videoConstraints || {}),\n            ...(deviceId != null && { deviceId }),\n        };\n        return {\n            audio: acceptsAudio,\n            video: acceptsVideo ? videoConstraints : false,\n        };\n    }\n    start(options = null) {\n        if (!this.supportsUserMedia) {\n            return Promise.reject(new Error('Webcam access not supported'));\n        }\n        this.webcamActive = true;\n        if (this.opts.mirror) {\n            this.#enableMirror = true;\n        }\n        const constraints = this.getConstraints(options?.deviceId);\n        // TODO: add a return and/or convert this to async/await\n        this.hasCameraCheck().then((hasCamera) => {\n            this.setPluginState({\n                hasCamera,\n            });\n            // ask user for access to their camera\n            return this.mediaDevices\n                .getUserMedia(constraints)\n                .then((stream) => {\n                this.stream = stream;\n                let currentDeviceId = null;\n                const tracks = this.isAudioOnly()\n                    ? stream.getAudioTracks()\n                    : stream.getVideoTracks();\n                if (!options || !options.deviceId) {\n                    currentDeviceId = tracks[0].getSettings().deviceId;\n                }\n                else {\n                    tracks.forEach((track) => {\n                        if (track.getSettings().deviceId === options.deviceId) {\n                            currentDeviceId = track.getSettings().deviceId;\n                        }\n                    });\n                }\n                // Update the sources now, so we can access the names.\n                this.updateVideoSources();\n                this.setPluginState({\n                    currentDeviceId,\n                    cameraReady: true,\n                });\n            })\n                .catch((err) => {\n                this.setPluginState({\n                    cameraReady: false,\n                    cameraError: err,\n                });\n                this.uppy.info(err.message, 'error');\n            });\n        });\n    }\n    getMediaRecorderOptions() {\n        const options = {};\n        // Try to use the `opts.preferredVideoMimeType` or one of the `allowedFileTypes` for the recording.\n        // If the browser doesn't support it, we'll fall back to the browser default instead.\n        // Safari doesn't have the `isTypeSupported` API.\n        if (MediaRecorder.isTypeSupported) {\n            const { restrictions } = this.uppy.opts;\n            let preferredVideoMimeTypes = [];\n            if (this.opts.preferredVideoMimeType) {\n                preferredVideoMimeTypes = [this.opts.preferredVideoMimeType];\n            }\n            else if (restrictions.allowedFileTypes) {\n                preferredVideoMimeTypes = restrictions.allowedFileTypes\n                    .map(toMimeType)\n                    .filter(isVideoMimeType);\n            }\n            const filterSupportedTypes = (candidateType) => MediaRecorder.isTypeSupported(candidateType) &&\n                getFileTypeExtension(candidateType);\n            const acceptableMimeTypes = preferredVideoMimeTypes.filter(filterSupportedTypes);\n            if (acceptableMimeTypes.length > 0) {\n                options.mimeType = acceptableMimeTypes[0];\n            }\n        }\n        return options;\n    }\n    startRecording() {\n        // only used if supportsMediaRecorder() returned true\n        this.recorder = new MediaRecorder(this.stream, this.getMediaRecorderOptions());\n        this.recordingChunks = [];\n        let stoppingBecauseOfMaxSize = false;\n        this.recorder.addEventListener('dataavailable', (event) => {\n            this.recordingChunks.push(event.data);\n            const { restrictions } = this.uppy.opts;\n            if (this.recordingChunks.length > 1 &&\n                restrictions.maxFileSize != null &&\n                !stoppingBecauseOfMaxSize) {\n                const totalSize = this.recordingChunks.reduce((acc, chunk) => acc + chunk.size, 0);\n                // Exclude the initial chunk from the average size calculation because it is likely to be a very small outlier\n                const averageChunkSize = (totalSize - this.recordingChunks[0].size) /\n                    (this.recordingChunks.length - 1);\n                const expectedEndChunkSize = averageChunkSize * 3;\n                const maxSize = Math.max(0, restrictions.maxFileSize - expectedEndChunkSize);\n                if (totalSize > maxSize) {\n                    stoppingBecauseOfMaxSize = true;\n                    this.uppy.info(this.i18n('recordingStoppedMaxSize'), 'warning', 4000);\n                    this.stopRecording();\n                }\n            }\n        });\n        // use a \"time slice\" of 500ms: ondataavailable will be called each 500ms\n        // smaller time slices mean we can more accurately check the max file size restriction\n        this.recorder.start(500);\n        if (this.opts.showRecordingLength) {\n            // Start the recordingLengthTimer if we are showing the recording length.\n            this.recordingLengthTimer = setInterval(() => {\n                const currentRecordingLength = this.getPluginState().recordingLengthSeconds;\n                this.setPluginState({\n                    recordingLengthSeconds: currentRecordingLength + 1,\n                });\n            }, 1000);\n        }\n        this.setPluginState({\n            isRecording: true,\n        });\n    }\n    stopRecording() {\n        const stopped = new Promise((resolve) => {\n            this.recorder.addEventListener('stop', () => {\n                resolve();\n            });\n            this.recorder.stop();\n            if (this.opts.showRecordingLength) {\n                // Stop the recordingLengthTimer if we are showing the recording length.\n                clearInterval(this.recordingLengthTimer);\n                this.setPluginState({ recordingLengthSeconds: 0 });\n            }\n        });\n        return stopped\n            .then(() => {\n            this.setPluginState({\n                isRecording: false,\n            });\n            return this.getVideo();\n        })\n            .then((file) => {\n            try {\n                this.capturedMediaFile = file;\n                // create object url for capture result preview\n                this.setPluginState({\n                    recordedVideo: URL.createObjectURL(file.data),\n                });\n                this.#enableMirror = false;\n            }\n            catch (err) {\n                // Logging the error, exept restrictions, which is handled in Core\n                if (!err.isRestriction) {\n                    this.uppy.log(err);\n                }\n            }\n        })\n            .then(() => {\n            this.recordingChunks = null;\n            this.recorder = null;\n        }, (error) => {\n            this.recordingChunks = null;\n            this.recorder = null;\n            throw error;\n        });\n    }\n    discardRecordedMedia() {\n        const { recordedVideo, capturedSnapshot } = this.getPluginState();\n        if (recordedVideo) {\n            URL.revokeObjectURL(recordedVideo);\n        }\n        if (capturedSnapshot) {\n            URL.revokeObjectURL(capturedSnapshot);\n        }\n        this.setPluginState({\n            recordedVideo: null,\n            capturedSnapshot: null,\n        });\n        if (this.opts.mirror) {\n            this.#enableMirror = true;\n        }\n        this.capturedMediaFile = null;\n    }\n    submit() {\n        try {\n            if (this.capturedMediaFile) {\n                this.uppy.addFile(this.capturedMediaFile);\n            }\n        }\n        catch (err) {\n            // Logging the error, exept restrictions, which is handled in Core\n            if (!err.isRestriction) {\n                this.uppy.log(err, 'error');\n            }\n        }\n    }\n    async stop() {\n        if (this.stream) {\n            const audioTracks = this.stream.getAudioTracks();\n            const videoTracks = this.stream.getVideoTracks();\n            audioTracks.concat(videoTracks).forEach((track) => track.stop());\n        }\n        if (this.recorder) {\n            await new Promise((resolve) => {\n                this.recorder.addEventListener('stop', resolve, { once: true });\n                this.recorder.stop();\n                if (this.opts.showRecordingLength) {\n                    clearInterval(this.recordingLengthTimer);\n                }\n            });\n        }\n        this.recordingChunks = null;\n        this.recorder = null;\n        this.webcamActive = false;\n        this.stream = null;\n        this.setPluginState({\n            recordedVideo: null,\n            capturedSnapshot: null,\n            isRecording: false,\n            recordingLengthSeconds: 0,\n        });\n    }\n    getVideoElement() {\n        return this.el.querySelector('.uppy-Webcam-video');\n    }\n    oneTwoThreeSmile() {\n        return new Promise((resolve, reject) => {\n            let count = this.opts.countdown;\n            const countDown = setInterval(() => {\n                if (!this.webcamActive) {\n                    clearInterval(countDown);\n                    this.captureInProgress = false;\n                    return reject(new Error('Webcam is not active'));\n                }\n                if (count) {\n                    this.uppy.info(`${count}...`, 'warning', 800);\n                    count--;\n                }\n                else {\n                    clearInterval(countDown);\n                    this.uppy.info(this.i18n('smile'), 'success', 1500);\n                    setTimeout(() => resolve(), 1500);\n                }\n            }, 1000);\n        });\n    }\n    async takeSnapshot() {\n        if (this.captureInProgress)\n            return;\n        this.captureInProgress = true;\n        try {\n            await this.opts.onBeforeSnapshot();\n        }\n        catch (err) {\n            const message = typeof err === 'object' ? err.message : err;\n            this.uppy.info(message, 'error', 5000);\n            throw new Error(`onBeforeSnapshot: ${message}`);\n        }\n        try {\n            const file = await this.getImage();\n            this.capturedMediaFile = file;\n            if (file.data == null)\n                throw new Error('File data is empty');\n            // Create object URL for preview\n            const capturedSnapshotUrl = URL.createObjectURL(file.data);\n            this.setPluginState({ capturedSnapshot: capturedSnapshotUrl });\n            this.captureInProgress = false;\n        }\n        catch (error) {\n            // Logging the error, except restrictions, which is handled in Core\n            this.captureInProgress = false;\n            if (!error.isRestriction) {\n                this.uppy.log(error);\n            }\n        }\n    }\n    async getImage() {\n        const video = this.getVideoElement();\n        if (!video) {\n            return Promise.reject(new Error('No video element found, likely due to the Webcam tab being closed.'));\n        }\n        const width = video.videoWidth;\n        const height = video.videoHeight;\n        const canvas = document.createElement('canvas');\n        canvas.width = width;\n        canvas.height = height;\n        const ctx = canvas.getContext('2d');\n        ctx.drawImage(video, 0, 0);\n        const { restrictions } = this.uppy.opts;\n        let preferredImageMimeTypes = [];\n        if (this.opts.preferredImageMimeType) {\n            preferredImageMimeTypes = [this.opts.preferredImageMimeType];\n        }\n        else if (restrictions.allowedFileTypes) {\n            preferredImageMimeTypes = restrictions.allowedFileTypes\n                .map(toMimeType)\n                .filter(isImageMimeType);\n        }\n        const mimeType = preferredImageMimeTypes[0] || 'image/jpeg';\n        const ext = getFileTypeExtension(mimeType) || 'jpg';\n        const name = `cam-${Date.now()}.${ext}`;\n        return canvasToBlob(canvas, mimeType).then((blob) => {\n            return {\n                source: this.id,\n                name,\n                data: new Blob([blob], { type: mimeType }),\n                type: mimeType,\n            };\n        });\n    }\n    getVideo() {\n        // Sometimes in iOS Safari, Blobs (especially the first Blob in the recordingChunks Array)\n        // have empty 'type' attributes (e.g. '') so we need to find a Blob that has a defined 'type'\n        // attribute in order to determine the correct MIME type.\n        const mimeType = this.recordingChunks.find((blob) => blob.type?.length > 0).type;\n        const fileExtension = getFileTypeExtension(mimeType);\n        if (!fileExtension) {\n            return Promise.reject(new Error(`Could not retrieve recording: Unsupported media type \"${mimeType}\"`));\n        }\n        const name = `webcam-${Date.now()}.${fileExtension}`;\n        const blob = new Blob(this.recordingChunks, { type: mimeType });\n        const file = {\n            source: this.id,\n            name,\n            data: new Blob([blob], { type: mimeType }),\n            type: mimeType,\n        };\n        return Promise.resolve(file);\n    }\n    focus() {\n        if (!this.opts.countdown)\n            return;\n        setTimeout(() => {\n            this.uppy.info(this.i18n('smile'), 'success', 1500);\n        }, 1000);\n    }\n    changeVideoSource(deviceId) {\n        this.stop();\n        this.start({ deviceId });\n    }\n    updateVideoSources() {\n        this.mediaDevices.enumerateDevices().then((devices) => {\n            this.setPluginState({\n                videoSources: devices.filter((device) => device.kind === 'videoinput'),\n            });\n        });\n    }\n    render() {\n        if (!this.webcamActive) {\n            this.start();\n        }\n        const webcamState = this.getPluginState();\n        if (!webcamState.cameraReady || !webcamState.hasCamera) {\n            return (_jsx(PermissionsScreen, { icon: CameraIcon, i18n: this.i18n, hasCamera: webcamState.hasCamera }));\n        }\n        return (_jsx(CameraScreen, { ...webcamState, onChangeVideoSource: this.changeVideoSource, onSnapshot: this.takeSnapshot, onStartRecording: this.startRecording, onStopRecording: this.stopRecording, onDiscardRecordedMedia: this.discardRecordedMedia, onSubmit: this.submit, onFocus: this.focus, onStop: this.stop, i18n: this.i18n, modes: this.opts.modes, showRecordingLength: this.opts.showRecordingLength, showVideoSourceDropdown: this.opts.showVideoSourceDropdown, supportsRecording: supportsMediaRecorder(), recording: webcamState.isRecording, mirror: this.#enableMirror, src: this.stream }));\n    }\n    install() {\n        const { mobileNativeCamera, modes, videoConstraints } = this.opts;\n        const { target } = this.opts;\n        if (mobileNativeCamera && target) {\n            this.getTargetPlugin(target)?.setOptions({\n                showNativeVideoCameraButton: isModeAvailable(modes, 'video-only') ||\n                    isModeAvailable(modes, 'video-audio'),\n                showNativePhotoCameraButton: isModeAvailable(modes, 'picture'),\n                nativeCameraFacingMode: videoConstraints?.facingMode,\n            });\n            return;\n        }\n        this.setPluginState({\n            cameraReady: false,\n            recordingLengthSeconds: 0,\n        });\n        if (target) {\n            this.mount(target, this);\n        }\n        if (this.mediaDevices) {\n            this.updateVideoSources();\n            this.mediaDevices.ondevicechange = () => {\n                this.updateVideoSources();\n                if (this.stream) {\n                    let restartStream = true;\n                    const { videoSources, currentDeviceId } = this.getPluginState();\n                    videoSources.forEach((videoSource) => {\n                        if (currentDeviceId === videoSource.deviceId) {\n                            restartStream = false;\n                        }\n                    });\n                    if (restartStream) {\n                        this.stop();\n                        this.start();\n                    }\n                }\n            };\n        }\n    }\n    uninstall() {\n        this.stop();\n        this.unmount();\n    }\n    onUnmount() {\n        this.stop();\n    }\n}\n", "{\n  \"name\": \"@uppy/webcam\",\n  \"description\": \"Uppy plugin that takes photos or records videos using the device's camera.\",\n  \"version\": \"5.1.0\",\n  \"license\": \"MIT\",\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    \"webcam\",\n    \"picture\",\n    \"photo\",\n    \"video\",\n    \"record\",\n    \"mediarecorder\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./css/style.css\": \"./dist/style.css\",\n    \"./css/style.min.css\": \"./dist/style.min.css\",\n    \"./css/style.scss\": \"./src/style.scss\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/utils\": \"workspace:^\",\n    \"is-mobile\": \"^4.0.0\",\n    \"preact\": \"^10.26.10\"\n  },\n  \"devDependencies\": {\n    \"cssnano\": \"^7.0.7\",\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  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  }\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nexport default function CameraIcon() {\n    return (_jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", fill: \"#0097DC\", width: \"66\", height: \"55\", viewBox: \"0 0 66 55\", children: _jsx(\"path\", { d: \"M57.3 8.433c4.59 0 8.1 3.51 8.1 8.1v29.7c0 4.59-3.51 8.1-8.1 8.1H8.7c-4.59 0-8.1-3.51-8.1-8.1v-29.7c0-4.59 3.51-8.1 8.1-8.1h9.45l4.59-7.02c.54-.54 1.35-1.08 2.16-1.08h16.2c.81 0 1.62.54 2.16 1.08l4.59 7.02h9.45zM33 14.64c-8.62 0-15.393 6.773-15.393 15.393 0 8.62 6.773 15.393 15.393 15.393 8.62 0 15.393-6.773 15.393-15.393 0-8.62-6.773-15.393-15.393-15.393zM33 40c-5.648 0-9.966-4.319-9.966-9.967 0-5.647 4.318-9.966 9.966-9.966s9.966 4.319 9.966 9.966C42.966 35.681 38.648 40 33 40z\", fillRule: \"evenodd\" }) }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nfunction DiscardButton({ onDiscard, i18n }) {\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--discard\", type: \"button\", title: i18n('discardRecordedFile'), \"aria-label\": i18n('discardRecordedFile'), onClick: onDiscard, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { width: \"13\", height: \"13\", viewBox: \"0 0 13 13\", xmlns: \"http://www.w3.org/2000/svg\", \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", children: _jsxs(\"g\", { fill: \"#FFF\", fillRule: \"evenodd\", children: [_jsx(\"path\", { d: \"M.496 11.367L11.103.76l1.414 1.414L1.911 12.781z\" }), _jsx(\"path\", { d: \"M11.104 12.782L.497 2.175 1.911.76l10.607 10.606z\" })] }) }) }));\n}\nexport default DiscardButton;\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nexport default function RecordButton({ recording, onStartRecording, onStopRecording, i18n, }) {\n    if (recording) {\n        return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button\", type: \"button\", title: i18n('stopRecording'), \"aria-label\": i18n('stopRecording'), onClick: onStopRecording, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"100\", height: \"100\", viewBox: \"0 0 100 100\", children: _jsx(\"rect\", { x: \"15\", y: \"15\", width: \"70\", height: \"70\" }) }) }));\n    }\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button\", type: \"button\", title: i18n('startRecording'), \"aria-label\": i18n('startRecording'), onClick: onStartRecording, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", width: \"100\", height: \"100\", viewBox: \"0 0 100 100\", children: _jsx(\"circle\", { cx: \"50\", cy: \"50\", r: \"40\" }) }) }));\n}\n", "/**\n * Takes an Integer value of seconds (e.g. 83) and converts it into a human-readable formatted string (e.g. '1:23').\n *\n */\nexport default function formatSeconds(seconds) {\n    return `${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, '0')}`;\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport formatSeconds from './formatSeconds.js';\nexport default function RecordingLength({ recordingLengthSeconds, }) {\n    const formattedRecordingLengthSeconds = formatSeconds(recordingLengthSeconds);\n    return _jsx(\"span\", { children: formattedRecordingLengthSeconds });\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport CameraIcon from './CameraIcon.js';\nexport default function SnapshotButton({ onSnapshot, i18n, }) {\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--picture\", type: \"button\", title: i18n('takePicture'), \"aria-label\": i18n('takePicture'), onClick: onSnapshot, \"data-uppy-super-focusable\": true, children: CameraIcon() }));\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nfunction SubmitButton({ onSubmit, i18n }) {\n    return (_jsx(\"button\", { className: \"uppy-u-reset uppy-c-btn uppy-Webcam-button uppy-Webcam-button--submit\", type: \"button\", title: i18n('submitRecordedFile'), \"aria-label\": i18n('submitRecordedFile'), onClick: onSubmit, \"data-uppy-super-focusable\": true, children: _jsx(\"svg\", { width: \"12\", height: \"9\", viewBox: \"0 0 12 9\", xmlns: \"http://www.w3.org/2000/svg\", \"aria-hidden\": \"true\", focusable: \"false\", className: \"uppy-c-icon\", children: _jsx(\"path\", { fill: \"#fff\", fillRule: \"nonzero\", d: \"M10.66 0L12 1.31 4.136 9 0 4.956l1.34-1.31L4.136 6.38z\" }) }) }));\n}\nexport default SubmitButton;\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\nexport default function VideoSourceSelect({ currentDeviceId, videoSources, onChangeVideoSource, }) {\n    return (_jsx(\"div\", { className: \"uppy-Webcam-videoSource\", children: _jsx(\"select\", { className: \"uppy-u-reset uppy-Webcam-videoSource-select\", onChange: (event) => {\n                onChangeVideoSource(event.target.value);\n            }, children: videoSources.map((videoSource) => (_jsx(\"option\", { value: videoSource.deviceId, selected: videoSource.deviceId === currentDeviceId, children: videoSource.label }, videoSource.deviceId))) }) }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nimport { Component } from 'preact';\nimport DiscardButton from './DiscardButton.js';\nimport RecordButton from './RecordButton.js';\nimport RecordingLength from './RecordingLength.js';\nimport SnapshotButton from './SnapshotButton.js';\nimport SubmitButton from './SubmitButton.js';\nimport VideoSourceSelect, {} from './VideoSourceSelect.js';\nfunction isModeAvailable(modes, mode) {\n    return modes.includes(mode);\n}\nclass CameraScreen extends Component {\n    videoElement;\n    refs;\n    componentDidMount() {\n        const { onFocus } = this.props;\n        onFocus();\n    }\n    componentWillUnmount() {\n        const { onStop } = this.props;\n        onStop();\n    }\n    render() {\n        const { src, recordedVideo, capturedSnapshot, recording, modes, supportsRecording, videoSources, showVideoSourceDropdown, showRecordingLength, onSubmit, i18n, mirror, onSnapshot, onStartRecording, onStopRecording, onDiscardRecordedMedia, recordingLengthSeconds, } = this.props;\n        const hasRecordedVideo = !!recordedVideo;\n        const hasCapturedSnapshot = !!capturedSnapshot;\n        const hasRecordedMedia = hasRecordedVideo || hasCapturedSnapshot;\n        const shouldShowRecordButton = !hasRecordedMedia &&\n            supportsRecording &&\n            (isModeAvailable(modes, 'video-only') ||\n                isModeAvailable(modes, 'audio-only') ||\n                isModeAvailable(modes, 'video-audio'));\n        const shouldShowSnapshotButton = !hasRecordedMedia && isModeAvailable(modes, 'picture');\n        const shouldShowRecordingLength = supportsRecording && showRecordingLength && !hasRecordedVideo;\n        const shouldShowVideoSourceDropdown = showVideoSourceDropdown && videoSources && videoSources.length > 1;\n        const videoProps = {\n            playsInline: true,\n        };\n        if (recordedVideo) {\n            videoProps.muted = false;\n            videoProps.controls = true;\n            videoProps.src = recordedVideo;\n            // reset srcObject in dom. If not resetted, stream sticks in element\n            if (this.videoElement) {\n                this.videoElement.srcObject = null;\n            }\n        }\n        else {\n            videoProps.muted = true;\n            videoProps.autoPlay = true;\n            videoProps.srcObject = src;\n        }\n        return (_jsxs(\"div\", { className: \"uppy uppy-Webcam-container\", children: [_jsx(\"div\", { className: \"uppy-Webcam-videoContainer\", children: capturedSnapshot && !recording && !recordedVideo ? (_jsx(\"div\", { className: \"uppy-Webcam-imageContainer\", children: _jsx(\"img\", { src: capturedSnapshot, className: \"uppy-Webcam-video\", alt: \"capturedSnapshot\" }) })) : (_jsx(\"video\", { ref: (videoElement) => {\n                            this.videoElement = videoElement;\n                        }, className: `uppy-Webcam-video  ${mirror ? 'uppy-Webcam-video--mirrored' : ''}`, ...videoProps })) }), _jsxs(\"div\", { className: \"uppy-Webcam-footer\", children: [_jsx(\"div\", { className: \"uppy-Webcam-videoSourceContainer\", children: shouldShowVideoSourceDropdown\n                                ? VideoSourceSelect(this.props)\n                                : null }), _jsxs(\"div\", { className: \"uppy-Webcam-buttonContainer\", children: [shouldShowSnapshotButton && (_jsx(SnapshotButton, { onSnapshot: onSnapshot, i18n: i18n })), shouldShowRecordButton && (_jsx(RecordButton, { recording: recording, onStartRecording: onStartRecording, onStopRecording: onStopRecording, i18n: i18n })), (hasRecordedVideo || hasCapturedSnapshot) && (_jsx(SubmitButton, { onSubmit: onSubmit, i18n: i18n })), (hasRecordedVideo || hasCapturedSnapshot) && (_jsx(DiscardButton, { onDiscard: onDiscardRecordedMedia, i18n: i18n }))] }), _jsx(\"div\", { className: \"uppy-Webcam-recordingLength\", children: shouldShowRecordingLength && (_jsx(RecordingLength, { recordingLengthSeconds: recordingLengthSeconds })) })] })] }));\n    }\n}\nexport default CameraScreen;\n", "export default {\n    strings: {\n        pluginNameCamera: 'Camera',\n        noCameraTitle: 'Camera Not Available',\n        noCameraDescription: 'In order to take pictures or record video, please connect a camera device',\n        recordingStoppedMaxSize: 'Recording stopped because the file size is about to exceed the limit',\n        submitRecordedFile: 'Submit recorded file',\n        discardRecordedFile: 'Discard recorded file',\n        // Shown before a picture is taken when the `countdown` option is set.\n        smile: 'Smile!',\n        // Used as the label for the button that takes a picture.\n        // This is not visibly rendered but is picked up by screen readers.\n        takePicture: 'Take a picture',\n        // Used as the label for the button that starts a video recording.\n        // This is not visibly rendered but is picked up by screen readers.\n        startRecording: 'Begin video recording',\n        // Used as the label for the button that stops a video recording.\n        // This is not visibly rendered but is picked up by screen readers.\n        stopRecording: 'Stop video recording',\n        // Used as the label for the recording length counter. See the showRecordingLength option.\n        // This is not visibly rendered but is picked up by screen readers.\n        recordingLength: 'Recording length %{recording_length}',\n        // Title on the \u201Callow access\u201D screen\n        allowAccessTitle: 'Please allow access to your camera',\n        // Description on the \u201Callow access\u201D screen\n        allowAccessDescription: 'In order to take pictures or record video with your camera, please allow camera access for this site.',\n    },\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"preact/jsx-runtime\";\nexport default function PermissionsScreen({ icon, i18n, hasCamera, }) {\n    return (_jsxs(\"div\", { className: \"uppy-Webcam-permissons\", children: [_jsx(\"div\", { className: \"uppy-Webcam-permissonsIcon\", children: icon() }), _jsx(\"div\", { className: \"uppy-Webcam-title\", children: hasCamera ? i18n('allowAccessTitle') : i18n('noCameraTitle') }), _jsx(\"p\", { children: hasCamera\n                    ? i18n('allowAccessDescription')\n                    : i18n('noCameraDescription') })] }));\n}\n", "export default function supportsMediaRecorder() {\n    return (typeof MediaRecorder === 'function' &&\n        !!MediaRecorder.prototype &&\n        typeof MediaRecorder.prototype.start === 'function');\n}\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\": \"5.2.0\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsc --build tsconfig.build.json\",\n    \"typecheck\": \"tsc --build\",\n    \"test\": \"vitest run --silent='passed-only'\",\n    \"test:e2e\": \"vitest run --project browser\"\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  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"@uppy/companion-client\": \"workspace:^\",\n    \"@uppy/utils\": \"workspace:^\"\n  },\n  \"devDependencies\": {\n    \"@uppy/core\": \"workspace:^\",\n    \"@uppy/dashboard\": \"workspace:^\",\n    \"@vitest/browser\": \"^3.2.4\",\n    \"jsdom\": \"^26.1.0\",\n    \"msw\": \"^2.10.4\",\n    \"nock\": \"^13.1.0\",\n    \"playwright\": \"1.57.0\",\n    \"typescript\": \"^5.8.3\",\n    \"vitest\": \"^3.2.4\"\n  },\n  \"peerDependencies\": {\n    \"@uppy/core\": \"workspace:^\"\n  }\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 { BasePlugin, EventManager } from '@uppy/core';\nimport { fetcher, filterFilesToEmitUploadStarted, filterFilesToUpload, getAllowedMetaFields, isNetworkError, NetworkError, TaskQueue, } from '@uppy/utils';\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    #queue;\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        this.#queue = new TaskQueue({ concurrency: this.opts.limit });\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                                    if (file != null) {\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                    });\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        events.onFileRemove(file.id, () => controller.abort());\n        events.onCancelAll(file.id, () => controller.abort());\n        try {\n            await this.#queue.add(async (signal) => {\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: AbortSignal.any([signal, controller.signal]),\n                });\n            });\n        }\n        catch (error) {\n            if (error.name === 'AbortError') {\n                return;\n            }\n            throw error;\n        }\n        finally {\n            events.remove();\n        }\n    }\n    async #uploadBundle(files) {\n        const controller = new AbortController();\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 this.#queue.add(async (signal) => {\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: AbortSignal.any([signal, controller.signal]),\n                });\n            });\n        }\n        catch (error) {\n            if (error.name === 'AbortError') {\n                return;\n            }\n            throw error;\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.#queue;\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                return this.uppy\n                    .getRequestClientForFile(file)\n                    .uploadRemoteFile(file, this.#getCompanionClientArgs(file), {\n                    signal: controller.signal,\n                    getQueue,\n                })\n                    .finally(() => {\n                    this.uppy.off('file-removed', removedHandler);\n                });\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\n        if (this.opts.limit === 0) {\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 = filterFilesToUpload(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", "// Core\n// Plugin base classes\nexport { BasePlugin, debugLogger, default as Uppy, UIPlugin } from '@uppy/core'\n\n/**\n * @deprecated Use `Uppy` instead of `Core`\n */\nexport function Core() {\n  throw new Error('Core has been renamed to Uppy')\n}\n\n// Utilities\nexport * as server from '@uppy/companion-client'\n\nimport * as ProviderView from '@uppy/provider-views'\n\nexport const views = { ProviderView }\n\n// Acquirers\nexport { default as Audio } from '@uppy/audio'\n// Uploaders\nexport { default as AwsS3 } from '@uppy/aws-s3'\nexport { default as Box } from '@uppy/box'\n// Miscellaneous\nexport { default as Compressor } from '@uppy/compressor'\n// UI plugins\nexport { default as Dashboard } from '@uppy/dashboard'\nexport { default as DragDrop } from '@uppy/drag-drop'\nexport { default as DropTarget } from '@uppy/drop-target'\nexport { default as Dropbox } from '@uppy/dropbox'\nexport { default as Facebook } from '@uppy/facebook'\nexport { default as Form } from '@uppy/form'\nexport { default as GoldenRetriever } from '@uppy/golden-retriever'\nexport { default as GoogleDrive } from '@uppy/google-drive'\nexport { default as GoogleDrivePicker } from '@uppy/google-drive-picker'\nexport { default as GooglePhotosPicker } from '@uppy/google-photos-picker'\nexport { default as ImageEditor } from '@uppy/image-editor'\nexport { default as Instagram } from '@uppy/instagram'\nexport { default as OneDrive } from '@uppy/onedrive'\nexport { default as RemoteSources } from '@uppy/remote-sources'\nexport { default as ScreenCapture } from '@uppy/screen-capture'\nexport { default as StatusBar } from '@uppy/status-bar'\n// Stores\nexport { default as DefaultStore } from '@uppy/store-default'\nexport { default as ThumbnailGenerator } from '@uppy/thumbnail-generator'\nexport { default as Transloadit } from '@uppy/transloadit'\nexport { default as Tus } from '@uppy/tus'\nexport { default as Unsplash } from '@uppy/unsplash'\nexport { default as Url } from '@uppy/url'\nexport { default as Webcam } from '@uppy/webcam'\nexport { default as XHRUpload } from '@uppy/xhr-upload'\nexport { default as Zoom } from '@uppy/zoom'\n\nexport const locales = {}\n"],
  "mappings": "uqBAGAA,GAAA,QAASC,EAAA,SAAuBC,EAAW,CACzC,GAAI,OAAOA,GAAQ,UAAY,OAAO,MAAMA,CAAG,EAC7C,MAAM,IAAI,UAAU,0BAA0B,OAAOA,CAAG,EAAE,EAG5D,IAAMC,EAAMD,EAAM,EACZE,EAAQ,CAAC,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EAMlE,GAJID,IACFD,EAAM,CAACA,GAGLA,EAAM,EACR,MAAO,IAAIC,EAAM,IAAM,IAAMD,CAAG,KAGlC,IAAMG,EAAW,KAAK,IAAI,KAAK,MAAM,KAAK,IAAIH,CAAG,EAAI,KAAK,IAAI,IAAI,CAAC,EAAGE,EAAM,OAAS,CAAC,EACtFF,EAAM,OAAOA,EAAM,MAAQG,CAAQ,EACnC,IAAMC,EAAOF,EAAMC,CAAQ,EAE3B,OAAIH,GAAO,IAAMA,EAAM,IAAM,EAGpB,IAAIC,EAAM,IAAM,IAAMD,EAAI,QAAQ,CAAC,CAAC,IAAII,CAAI,GAG9C,IAAIH,EAAM,IAAM,IAAMD,EAAI,QAAQ,CAAC,CAAC,IAAII,CAAI,EACrD,EA3BS,mBCHT,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cA8BA,SAASC,GAAgBC,EAAMC,EAAW,CACxC,KAAK,KAAOD,EAAOA,GAAQ,GAC3B,KAAK,QAAU,CAACA,EAAK,QAAQ,GAAG,EAChC,KAAK,UAAYC,EACjB,KAAK,MAAQD,EAAK,MAAMC,CAAS,CACnC,CALSC,EAAAH,GAAA,mBAOTA,GAAgB,UAAU,MAAQ,SAASI,EAAO,CAChD,IAAIC,EAAU,GACVC,EAAQ,KAAK,MACbC,EACAC,EAAaF,EAAM,OACnBG,EAEJ,GAAI,OAAOL,GAAS,UAAYA,aAAiB,OAC/C,GAAI,CAAC,KAAK,SAAW,KAAK,MAAQA,EAChCC,EAAU,OACL,CAEL,IADAI,GAAaL,GAAS,IAAI,MAAM,KAAK,SAAS,EACzCG,EAAK,EAAGF,GAAWE,EAAKC,EAAYD,IACnCD,EAAMC,CAAE,IAAM,MAEPA,EAAKE,EAAU,OACxBJ,EAAUC,EAAMC,CAAE,IAAME,EAAUF,CAAE,EAEpCF,EAAU,IAKdA,EAAUA,GAAWI,CACvB,SAEO,OAAOL,EAAM,QAAU,WAG9B,IAFAC,EAAU,CAAC,EAENE,EAAKH,EAAM,OAAQG,KAClB,KAAK,MAAMH,EAAMG,CAAE,CAAC,IACtBF,EAAQA,EAAQ,MAAM,EAAID,EAAMG,CAAE,WAI/B,OAAOH,GAAS,SAAU,CACjCC,EAAU,CAAC,EAEX,QAASK,KAAON,EACV,KAAK,MAAMM,CAAG,IAChBL,EAAQK,CAAG,EAAIN,EAAMM,CAAG,EAG9B,CAEA,OAAOL,CACT,EAEAN,GAAO,QAAU,SAASE,EAAMU,EAAMT,EAAW,CAC/C,IAAIU,EAAU,IAAIZ,GAAgBC,EAAMC,GAAa,QAAQ,EAC7D,OAAI,OAAOS,EAAQ,IACVC,EAAQ,MAAMD,CAAI,EAGpBC,CACT,IC5FA,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAW,KACXC,GAAkB,WAatBF,GAAO,QAAU,SAASG,EAAQC,EAAS,CACzC,SAASC,EAAKD,EAAS,CACrB,IAAIE,EAASL,GAASG,EAASD,EAAQD,EAAe,EAGtD,OAAOI,GAAUA,EAAO,QAAU,CACpC,CALS,OAAAC,EAAAF,EAAA,QAOFD,EAAUC,EAAKD,EAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,EAAIC,CACjD,ICvBA,IAAAG,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CAyBA,SAASC,GAASC,EAAO,CACvB,IAAIC,EAAO,OAAOD,EAClB,OAAOA,GAAS,OAASC,GAAQ,UAAYA,GAAQ,WACvD,CAHSC,EAAAH,GAAA,YAKTD,GAAO,QAAUC,KC9BjB,IAAAI,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CACA,IAAIC,GAAa,OAAO,QAAU,UAAY,QAAU,OAAO,SAAW,QAAU,OAEpFD,GAAO,QAAUC,KCHjB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAa,KAGbC,GAAW,OAAO,MAAQ,UAAY,MAAQ,KAAK,SAAW,QAAU,KAGxEC,GAAOF,IAAcC,IAAY,SAAS,aAAa,EAAE,EAE7DF,GAAO,QAAUG,KCRjB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAO,KAkBPC,GAAMC,EAAA,UAAW,CACnB,OAAOF,GAAK,KAAK,IAAI,CACvB,EAFU,OAIVD,GAAO,QAAUE,KCtBjB,IAAAE,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CACA,IAAIC,GAAe,KAUnB,SAASC,GAAgBC,EAAQ,CAG/B,QAFIC,EAAQD,EAAO,OAEZC,KAAWH,GAAa,KAAKE,EAAO,OAAOC,CAAK,CAAC,GAAG,CAC3D,OAAOA,CACT,CALSC,EAAAH,GAAA,mBAOTF,GAAO,QAAUE,KClBjB,IAAAI,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAkB,KAGlBC,GAAc,OASlB,SAASC,GAASC,EAAQ,CACxB,OAAOA,GACHA,EAAO,MAAM,EAAGH,GAAgBG,CAAM,EAAI,CAAC,EAAE,QAAQF,GAAa,EAAE,CAE1E,CAJSG,EAAAF,GAAA,YAMTH,GAAO,QAAUG,KClBjB,IAAAG,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAO,KAGPC,GAASD,GAAK,OAElBD,GAAO,QAAUE,KCLjB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAS,KAGTC,GAAc,OAAO,UAGrBC,GAAiBD,GAAY,eAO7BE,GAAuBF,GAAY,SAGnCG,GAAiBJ,GAASA,GAAO,YAAc,OASnD,SAASK,GAAUC,EAAO,CACxB,IAAIC,EAAQL,GAAe,KAAKI,EAAOF,EAAc,EACjDI,EAAMF,EAAMF,EAAc,EAE9B,GAAI,CACFE,EAAMF,EAAc,EAAI,OACxB,IAAIK,EAAW,EACjB,MAAY,CAAC,CAEb,IAAIC,EAASP,GAAqB,KAAKG,CAAK,EAC5C,OAAIG,IACEF,EACFD,EAAMF,EAAc,EAAII,EAExB,OAAOF,EAAMF,EAAc,GAGxBM,CACT,CAlBSC,EAAAN,GAAA,aAoBTN,GAAO,QAAUM,KC7CjB,IAAAO,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CACA,IAAIC,GAAc,OAAO,UAOrBC,GAAuBD,GAAY,SASvC,SAASE,GAAeC,EAAO,CAC7B,OAAOF,GAAqB,KAAKE,CAAK,CACxC,CAFSC,EAAAF,GAAA,kBAITH,GAAO,QAAUG,KCrBjB,IAAAG,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAS,KACTC,GAAY,KACZC,GAAiB,KAGjBC,GAAU,gBACVC,GAAe,qBAGfC,GAAiBL,GAASA,GAAO,YAAc,OASnD,SAASM,GAAWC,EAAO,CACzB,OAAIA,GAAS,KACJA,IAAU,OAAYH,GAAeD,GAEtCE,IAAkBA,MAAkB,OAAOE,CAAK,EACpDN,GAAUM,CAAK,EACfL,GAAeK,CAAK,CAC1B,CAPSC,EAAAF,GAAA,cASTP,GAAO,QAAUO,KC3BjB,IAAAG,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CAwBA,SAASC,GAAaC,EAAO,CAC3B,OAAOA,GAAS,MAAQ,OAAOA,GAAS,QAC1C,CAFSC,EAAAF,GAAA,gBAITD,GAAO,QAAUC,KC5BjB,IAAAG,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAa,KACbC,GAAe,KAGfC,GAAY,kBAmBhB,SAASC,GAASC,EAAO,CACvB,OAAO,OAAOA,GAAS,UACpBH,GAAaG,CAAK,GAAKJ,GAAWI,CAAK,GAAKF,EACjD,CAHSG,EAAAF,GAAA,YAKTJ,GAAO,QAAUI,KC5BjB,IAAAG,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAW,KACXC,GAAW,KACXC,GAAW,KAGXC,GAAM,IAGNC,GAAa,qBAGbC,GAAa,aAGbC,GAAY,cAGZC,GAAe,SAyBnB,SAASC,GAASC,EAAO,CACvB,GAAI,OAAOA,GAAS,SAClB,OAAOA,EAET,GAAIP,GAASO,CAAK,EAChB,OAAON,GAET,GAAIF,GAASQ,CAAK,EAAG,CACnB,IAAIC,EAAQ,OAAOD,EAAM,SAAW,WAAaA,EAAM,QAAQ,EAAIA,EACnEA,EAAQR,GAASS,CAAK,EAAKA,EAAQ,GAAMA,CAC3C,CACA,GAAI,OAAOD,GAAS,SAClB,OAAOA,IAAU,EAAIA,EAAQ,CAACA,EAEhCA,EAAQT,GAASS,CAAK,EACtB,IAAIE,EAAWN,GAAW,KAAKI,CAAK,EACpC,OAAQE,GAAYL,GAAU,KAAKG,CAAK,EACpCF,GAAaE,EAAM,MAAM,CAAC,EAAGE,EAAW,EAAI,CAAC,EAC5CP,GAAW,KAAKK,CAAK,EAAIN,GAAM,CAACM,CACvC,CAnBSG,EAAAJ,GAAA,YAqBTT,GAAO,QAAUS,KC/DjB,IAAAK,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAW,KACXC,GAAM,KACNC,GAAW,KAGXC,GAAkB,sBAGlBC,GAAY,KAAK,IACjBC,GAAY,KAAK,IAwDrB,SAASC,GAASC,EAAMC,EAAMC,EAAS,CACrC,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAAiB,EACjBC,EAAU,GACVC,EAAS,GACTC,EAAW,GAEf,GAAI,OAAOZ,GAAQ,WACjB,MAAM,IAAI,UAAUJ,EAAe,EAErCK,EAAON,GAASM,CAAI,GAAK,EACrBR,GAASS,CAAO,IAClBQ,EAAU,CAAC,CAACR,EAAQ,QACpBS,EAAS,YAAaT,EACtBG,EAAUM,EAASd,GAAUF,GAASO,EAAQ,OAAO,GAAK,EAAGD,CAAI,EAAII,EACrEO,EAAW,aAAcV,EAAU,CAAC,CAACA,EAAQ,SAAWU,GAG1D,SAASC,EAAWC,EAAM,CACxB,IAAIC,EAAOZ,EACPa,EAAUZ,EAEd,OAAAD,EAAWC,EAAW,OACtBK,EAAiBK,EACjBR,EAASN,EAAK,MAAMgB,EAASD,CAAI,EAC1BT,CACT,CARSW,EAAAJ,EAAA,cAUT,SAASK,EAAYJ,EAAM,CAEzB,OAAAL,EAAiBK,EAEjBP,EAAU,WAAWY,EAAclB,CAAI,EAEhCS,EAAUG,EAAWC,CAAI,EAAIR,CACtC,CAPSW,EAAAC,EAAA,eAST,SAASE,EAAcN,EAAM,CAC3B,IAAIO,EAAoBP,EAAON,EAC3Bc,EAAsBR,EAAOL,EAC7Bc,EAActB,EAAOoB,EAEzB,OAAOV,EACHb,GAAUyB,EAAalB,EAAUiB,CAAmB,EACpDC,CACN,CARSN,EAAAG,EAAA,iBAUT,SAASI,EAAaV,EAAM,CAC1B,IAAIO,EAAoBP,EAAON,EAC3Bc,EAAsBR,EAAOL,EAKjC,OAAQD,IAAiB,QAAca,GAAqBpB,GACzDoB,EAAoB,GAAOV,GAAUW,GAAuBjB,CACjE,CATSY,EAAAO,EAAA,gBAWT,SAASL,GAAe,CACtB,IAAIL,EAAOpB,GAAI,EACf,GAAI8B,EAAaV,CAAI,EACnB,OAAOW,EAAaX,CAAI,EAG1BP,EAAU,WAAWY,EAAcC,EAAcN,CAAI,CAAC,CACxD,CAPSG,EAAAE,EAAA,gBAST,SAASM,EAAaX,EAAM,CAK1B,OAJAP,EAAU,OAINK,GAAYT,EACPU,EAAWC,CAAI,GAExBX,EAAWC,EAAW,OACfE,EACT,CAVSW,EAAAQ,EAAA,gBAYT,SAASC,GAAS,CACZnB,IAAY,QACd,aAAaA,CAAO,EAEtBE,EAAiB,EACjBN,EAAWK,EAAeJ,EAAWG,EAAU,MACjD,CANSU,EAAAS,EAAA,UAQT,SAASC,GAAQ,CACf,OAAOpB,IAAY,OAAYD,EAASmB,EAAa/B,GAAI,CAAC,CAC5D,CAFSuB,EAAAU,EAAA,SAIT,SAASC,GAAY,CACnB,IAAId,EAAOpB,GAAI,EACXmC,EAAaL,EAAaV,CAAI,EAMlC,GAJAX,EAAW,UACXC,EAAW,KACXI,EAAeM,EAEXe,EAAY,CACd,GAAItB,IAAY,OACd,OAAOW,EAAYV,CAAY,EAEjC,GAAIG,EAEF,oBAAaJ,CAAO,EACpBA,EAAU,WAAWY,EAAclB,CAAI,EAChCY,EAAWL,CAAY,CAElC,CACA,OAAID,IAAY,SACdA,EAAU,WAAWY,EAAclB,CAAI,GAElCK,CACT,CAvBS,OAAAW,EAAAW,EAAA,aAwBTA,EAAU,OAASF,EACnBE,EAAU,MAAQD,EACXC,CACT,CA3HSX,EAAAlB,GAAA,YA6HTP,GAAO,QAAUO,KC9LjB,IAAA+B,GAAAC,GAAA,CAAAC,GAAAC,KAAA,KAAIC,GAAW,KACXC,GAAW,KAGXC,GAAkB,sBA8CtB,SAASC,GAASC,EAAMC,EAAMC,EAAS,CACrC,IAAIC,EAAU,GACVC,EAAW,GAEf,GAAI,OAAOJ,GAAQ,WACjB,MAAM,IAAI,UAAUF,EAAe,EAErC,OAAID,GAASK,CAAO,IAClBC,EAAU,YAAaD,EAAU,CAAC,CAACA,EAAQ,QAAUC,EACrDC,EAAW,aAAcF,EAAU,CAAC,CAACA,EAAQ,SAAWE,GAEnDR,GAASI,EAAMC,EAAM,CAC1B,QAAWE,EACX,QAAWF,EACX,SAAYG,CACd,CAAC,CACH,CAhBSC,EAAAN,GAAA,YAkBTJ,GAAO,QAAUI,KCpEjB,IAAAO,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CAcAA,GAAO,QAAUC,EAAA,UAAmC,CAClD,IAAIC,EAAU,CAAC,EACXC,EAAOD,EAAQ,KAAO,CAAC,EAY3BA,EAAQ,KAAOD,EAAA,SAAeG,EAAOC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAM,CACvE,IAAIC,EAASC,EAAaR,CAAK,EAE3BO,EAAO,QACTE,EAAQT,EAAOO,EAAQ,CAACN,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,CAAI,CAAC,CAE/D,EANe,QAiBfR,EAAQ,GAAKD,EAAA,SAAaG,EAAOU,EAAI,CAC9BX,EAAKC,CAAK,IACbD,EAAKC,CAAK,EAAI,CAAC,GAGjBD,EAAKC,CAAK,EAAE,KAAKU,CAAE,CACrB,EANa,MAiBbZ,EAAQ,KAAOD,EAAA,SAAeG,EAAOU,EAAI,CACvC,SAASC,GAAO,CACdD,EAAG,MAAM,KAAM,SAAS,EACxBZ,EAAQ,IAAIE,EAAOW,CAAG,CACxB,CAHSd,EAAAc,EAAA,OAIT,KAAK,GAAGX,EAAOW,CAAG,CACpB,EANe,QAmBfb,EAAQ,IAAMD,EAAA,SAAcG,EAAOU,EAAI,CACrC,IAAIE,EAAO,CAAC,EAEZ,GAAIZ,GAASU,EAAI,CACf,IAAIG,EAAM,KAAK,KAAKb,CAAK,EACrBc,EAAI,EACJC,EAAIF,EAAMA,EAAI,OAAS,EAE3B,IAAKC,EAAGA,EAAIC,EAAGD,IACTD,EAAIC,CAAC,IAAMJ,GACbE,EAAK,KAAKC,EAAIC,CAAC,CAAC,CAGtB,CAEAF,EAAK,OAAS,KAAK,KAAKZ,CAAK,EAAIY,EAAO,OAAO,KAAK,KAAKZ,CAAK,CAChE,EAhBc,OAkBd,SAASQ,EAAcQ,EAAG,CACxB,IAAIC,EAAMlB,EAAKiB,CAAC,EAAIjB,EAAKiB,CAAC,EAAI,CAAC,EAC3BE,EAAMF,EAAE,QAAQ,GAAG,EACnBG,EAAQD,IAAQ,GAAM,CAACF,CAAC,EAAI,CAACA,EAAE,UAAU,EAAGE,CAAG,EAAGF,EAAE,UAAUE,EAAM,CAAC,CAAC,EAEtEE,EAAO,OAAO,KAAKrB,CAAI,EACvBe,EAAI,EACJC,EAAIK,EAAK,OAEb,IAAKN,EAAGA,EAAIC,EAAGD,IAAK,CAClB,IAAIO,EAAMD,EAAKN,CAAC,EAKhB,GAJIO,IAAQ,MACVJ,EAAMA,EAAI,OAAOlB,EAAKsB,CAAG,CAAC,GAGxBF,EAAK,SAAW,GAAKA,EAAK,CAAC,IAAME,EAAK,CACxCJ,EAAMA,EAAI,OAAOlB,EAAKsB,CAAG,CAAC,EAC1B,KACF,CACF,CAEA,OAAOJ,CACT,CAtBSpB,EAAAW,EAAA,gBAwBT,SAASC,EAASO,EAAGH,EAAKM,EAAM,CAC9B,IAAIL,EAAI,EACJC,EAAIF,EAAI,OAEZ,IAAKC,EAAGA,EAAIC,GACLF,EAAIC,CAAC,EADGA,IAEbD,EAAIC,CAAC,EAAE,MAAQE,EACfH,EAAIC,CAAC,EAAE,MAAMD,EAAIC,CAAC,EAAGK,CAAI,CAE7B,CATS,OAAAtB,EAAAY,EAAA,WAWFX,CACT,EAzHiB,4BCdjB,IAAAwB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,UAASC,GAAeC,EAAUC,EAAS,CAErC,OAAOA,GAAY,YACrBA,EAAU,CAAE,QAASA,CAAQ,GAG/B,KAAK,kBAAoB,KAAK,MAAM,KAAK,UAAUD,CAAQ,CAAC,EAC5D,KAAK,UAAYA,EACjB,KAAK,SAAWC,GAAW,CAAC,EAC5B,KAAK,cAAgBA,GAAWA,EAAQ,cAAgB,IACxD,KAAK,IAAM,KACX,KAAK,QAAU,CAAC,EAChB,KAAK,UAAY,EACjB,KAAK,kBAAoB,KACzB,KAAK,oBAAsB,KAC3B,KAAK,SAAW,KAChB,KAAK,gBAAkB,KACvB,KAAK,OAAS,KAEV,KAAK,SAAS,UAChB,KAAK,gBAAkB,KAAK,UAAU,MAAM,CAAC,EAEjD,CAtBSC,EAAAH,GAAA,kBAuBTD,GAAO,QAAUC,GAEjBA,GAAe,UAAU,MAAQ,UAAW,CAC1C,KAAK,UAAY,EACjB,KAAK,UAAY,KAAK,kBAAkB,MAAM,CAAC,CACjD,EAEAA,GAAe,UAAU,KAAO,UAAW,CACrC,KAAK,UACP,aAAa,KAAK,QAAQ,EAExB,KAAK,QACP,aAAa,KAAK,MAAM,EAG1B,KAAK,UAAkB,CAAC,EACxB,KAAK,gBAAkB,IACzB,EAEAA,GAAe,UAAU,MAAQ,SAASI,EAAK,CAK7C,GAJI,KAAK,UACP,aAAa,KAAK,QAAQ,EAGxB,CAACA,EACH,MAAO,GAET,IAAIC,EAAc,IAAI,KAAK,EAAE,QAAQ,EACrC,GAAID,GAAOC,EAAc,KAAK,iBAAmB,KAAK,cACpD,YAAK,QAAQ,KAAKD,CAAG,EACrB,KAAK,QAAQ,QAAQ,IAAI,MAAM,iCAAiC,CAAC,EAC1D,GAGT,KAAK,QAAQ,KAAKA,CAAG,EAErB,IAAIE,EAAU,KAAK,UAAU,MAAM,EACnC,GAAIA,IAAY,OACd,GAAI,KAAK,gBAEP,KAAK,QAAQ,OAAO,EAAG,KAAK,QAAQ,OAAS,CAAC,EAC9CA,EAAU,KAAK,gBAAgB,MAAM,EAAE,MAEvC,OAAO,GAIX,IAAIC,EAAO,KACX,YAAK,OAAS,WAAW,UAAW,CAClCA,EAAK,YAEDA,EAAK,sBACPA,EAAK,SAAW,WAAW,UAAW,CACpCA,EAAK,oBAAoBA,EAAK,SAAS,CACzC,EAAGA,EAAK,iBAAiB,EAErBA,EAAK,SAAS,OACdA,EAAK,SAAS,MAAM,GAI1BA,EAAK,IAAIA,EAAK,SAAS,CACzB,EAAGD,CAAO,EAEN,KAAK,SAAS,OACd,KAAK,OAAO,MAAM,EAGf,EACT,EAEAN,GAAe,UAAU,QAAU,SAASQ,EAAIC,EAAY,CAC1D,KAAK,IAAMD,EAEPC,IACEA,EAAW,UACb,KAAK,kBAAoBA,EAAW,SAElCA,EAAW,KACb,KAAK,oBAAsBA,EAAW,KAI1C,IAAIF,EAAO,KACP,KAAK,sBACP,KAAK,SAAW,WAAW,UAAW,CACpCA,EAAK,oBAAoB,CAC3B,EAAGA,EAAK,iBAAiB,GAG3B,KAAK,gBAAkB,IAAI,KAAK,EAAE,QAAQ,EAE1C,KAAK,IAAI,KAAK,SAAS,CACzB,EAEAP,GAAe,UAAU,IAAM,SAASQ,EAAI,CAC1C,QAAQ,IAAI,0CAA0C,EACtD,KAAK,QAAQA,CAAE,CACjB,EAEAR,GAAe,UAAU,MAAQ,SAASQ,EAAI,CAC5C,QAAQ,IAAI,4CAA4C,EACxD,KAAK,QAAQA,CAAE,CACjB,EAEAR,GAAe,UAAU,MAAQA,GAAe,UAAU,IAE1DA,GAAe,UAAU,OAAS,UAAW,CAC3C,OAAO,KAAK,OACd,EAEAA,GAAe,UAAU,SAAW,UAAW,CAC7C,OAAO,KAAK,SACd,EAEAA,GAAe,UAAU,UAAY,UAAW,CAC9C,GAAI,KAAK,QAAQ,SAAW,EAC1B,OAAO,KAOT,QAJIU,EAAS,CAAC,EACVC,EAAY,KACZC,EAAiB,EAEZC,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQA,IAAK,CAC5C,IAAIC,EAAQ,KAAK,QAAQD,CAAC,EACtBE,EAAUD,EAAM,QAChBE,GAASN,EAAOK,CAAO,GAAK,GAAK,EAErCL,EAAOK,CAAO,EAAIC,EAEdA,GAASJ,IACXD,EAAYG,EACZF,EAAiBI,EAErB,CAEA,OAAOL,CACT,ICjKA,IAAAM,GAAAC,GAAAC,IAAA,KAAIC,GAAiB,KAErBD,GAAQ,UAAY,SAASE,EAAS,CACpC,IAAIC,EAAWH,GAAQ,SAASE,CAAO,EACvC,OAAO,IAAID,GAAeE,EAAU,CAChC,QAASD,IAAYA,EAAQ,SAAWA,EAAQ,UAAY,KAC5D,MAAOA,GAAWA,EAAQ,MAC1B,aAAcA,GAAWA,EAAQ,YACrC,CAAC,CACH,EAEAF,GAAQ,SAAW,SAASE,EAAS,CACnC,GAAIA,aAAmB,MACrB,MAAO,CAAC,EAAE,OAAOA,CAAO,EAG1B,IAAIE,EAAO,CACT,QAAS,GACT,OAAQ,EACR,WAAY,EAAI,IAChB,WAAY,IACZ,UAAW,EACb,EACA,QAASC,KAAOH,EACdE,EAAKC,CAAG,EAAIH,EAAQG,CAAG,EAGzB,GAAID,EAAK,WAAaA,EAAK,WACzB,MAAM,IAAI,MAAM,uCAAuC,EAIzD,QADID,EAAW,CAAC,EACPG,EAAI,EAAGA,EAAIF,EAAK,QAASE,IAChCH,EAAS,KAAK,KAAK,cAAcG,EAAGF,CAAI,CAAC,EAG3C,OAAIF,GAAWA,EAAQ,SAAW,CAACC,EAAS,QAC1CA,EAAS,KAAK,KAAK,cAAcG,EAAGF,CAAI,CAAC,EAI3CD,EAAS,KAAK,SAASI,EAAEC,EAAG,CAC1B,OAAOD,EAAIC,CACb,CAAC,EAEML,CACT,EAEAH,GAAQ,cAAgB,SAASS,EAASL,EAAM,CAC9C,IAAIM,EAAUN,EAAK,UACd,KAAK,OAAO,EAAI,EACjB,EAEAO,EAAU,KAAK,MAAMD,EAAS,KAAK,IAAIN,EAAK,WAAY,CAAC,EAAI,KAAK,IAAIA,EAAK,OAAQK,CAAO,CAAC,EAC/F,OAAAE,EAAU,KAAK,IAAIA,EAASP,EAAK,UAAU,EAEpCO,CACT,EAEAX,GAAQ,KAAO,SAASY,EAAKV,EAASW,EAAS,CAM7C,GALIX,aAAmB,QACrBW,EAAUX,EACVA,EAAU,MAGR,CAACW,EAAS,CACZA,EAAU,CAAC,EACX,QAASR,KAAOO,EACV,OAAOA,EAAIP,CAAG,GAAM,YACtBQ,EAAQ,KAAKR,CAAG,CAGtB,CAEA,QAASC,EAAI,EAAGA,EAAIO,EAAQ,OAAQP,IAAK,CACvC,IAAIQ,EAAWD,EAAQP,CAAC,EACpBS,EAAWH,EAAIE,CAAM,EAEzBF,EAAIE,CAAM,EAAIE,EAAA,SAAsBD,EAAU,CAC5C,IAAIE,EAAWjB,GAAQ,UAAUE,CAAO,EACpCgB,EAAW,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,EAClDC,EAAWD,EAAK,IAAI,EAExBA,EAAK,KAAK,SAASE,EAAK,CAClBH,EAAG,MAAMG,CAAG,IAGZA,IACF,UAAU,CAAC,EAAIH,EAAG,UAAU,GAE9BE,EAAS,MAAM,KAAM,SAAS,EAChC,CAAC,EAEDF,EAAG,QAAQ,UAAW,CACpBF,EAAS,MAAMH,EAAKM,CAAI,CAC1B,CAAC,CACH,EAlBc,gBAkBZ,KAAKN,EAAKG,CAAQ,EACpBH,EAAIE,CAAM,EAAE,QAAUZ,CACxB,CACF,ICnGA,IAAAmB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CAAAA,GAAO,QAAU,OCAjB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAOC,UAAY,CACZ,aAEA,IAAIC,EAAS,CAAC,EAAE,eAEhB,SAASC,GAAc,CAGtB,QAFIC,EAAU,GAELC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAC1C,IAAIC,EAAM,UAAUD,CAAC,EACjBC,IACHF,EAAUG,EAAYH,EAASI,EAAWF,CAAG,CAAC,EAEhD,CAEA,OAAOF,CACR,CAXSK,EAAAN,EAAA,cAaT,SAASK,EAAYF,EAAK,CACzB,GAAI,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,SAC7C,OAAOA,EAGR,GAAI,OAAOA,GAAQ,SAClB,MAAO,GAGR,GAAI,MAAM,QAAQA,CAAG,EACpB,OAAOH,EAAW,MAAM,KAAMG,CAAG,EAGlC,GAAIA,EAAI,WAAa,OAAO,UAAU,UAAY,CAACA,EAAI,SAAS,SAAS,EAAE,SAAS,eAAe,EAClG,OAAOA,EAAI,SAAS,EAGrB,IAAIF,EAAU,GAEd,QAASM,KAAOJ,EACXJ,EAAO,KAAKI,EAAKI,CAAG,GAAKJ,EAAII,CAAG,IACnCN,EAAUG,EAAYH,EAASM,CAAG,GAIpC,OAAON,CACR,CA1BSK,EAAAD,EAAA,cA4BT,SAASD,EAAaI,EAAOC,EAAU,CACtC,OAAKA,EAIDD,EACIA,EAAQ,IAAMC,EAGfD,EAAQC,EAPPD,CAQT,CAVSF,EAAAF,EAAA,eAYL,OAAON,GAAW,KAAeA,GAAO,SAC3CE,EAAW,QAAUA,EACrBF,GAAO,QAAUE,GACP,OAAO,QAAW,YAAc,OAAO,OAAO,KAAQ,UAAY,OAAO,IAEnF,OAAO,aAAc,CAAC,EAAG,UAAY,CACpC,OAAOA,CACR,CAAC,EAED,OAAO,WAAaA,CAEtB,GAAE,IC5EF,IAAAU,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAEA,IAAIC,GAAM,OAAO,UAAU,eACvBC,GAAS,IASb,SAASC,IAAS,CAAC,CAAVC,EAAAD,GAAA,UASL,OAAO,SACTA,GAAO,UAAY,OAAO,OAAO,IAAI,EAMhC,IAAIA,GAAO,EAAE,YAAWD,GAAS,KAYxC,SAASG,GAAGC,EAAIC,EAASC,EAAM,CAC7B,KAAK,GAAKF,EACV,KAAK,QAAUC,EACf,KAAK,KAAOC,GAAQ,EACtB,CAJSJ,EAAAC,GAAA,MAiBT,SAASI,GAAYC,EAASC,EAAOL,EAAIC,EAASC,EAAM,CACtD,GAAI,OAAOF,GAAO,WAChB,MAAM,IAAI,UAAU,iCAAiC,EAGvD,IAAIM,EAAW,IAAIP,GAAGC,EAAIC,GAAWG,EAASF,CAAI,EAC9CK,EAAMX,GAASA,GAASS,EAAQA,EAEpC,OAAKD,EAAQ,QAAQG,CAAG,EACdH,EAAQ,QAAQG,CAAG,EAAE,GAC1BH,EAAQ,QAAQG,CAAG,EAAI,CAACH,EAAQ,QAAQG,CAAG,EAAGD,CAAQ,EADxBF,EAAQ,QAAQG,CAAG,EAAE,KAAKD,CAAQ,GAD1CF,EAAQ,QAAQG,CAAG,EAAID,EAAUF,EAAQ,gBAI7DA,CACT,CAbSN,EAAAK,GAAA,eAsBT,SAASK,GAAWJ,EAASG,EAAK,CAC5B,EAAEH,EAAQ,eAAiB,EAAGA,EAAQ,QAAU,IAAIP,GACnD,OAAOO,EAAQ,QAAQG,CAAG,CACjC,CAHST,EAAAU,GAAA,cAYT,SAASC,IAAe,CACtB,KAAK,QAAU,IAAIZ,GACnB,KAAK,aAAe,CACtB,CAHSC,EAAAW,GAAA,gBAYTA,GAAa,UAAU,WAAaX,EAAA,UAAsB,CACxD,IAAIY,EAAQ,CAAC,EACTC,EACAC,EAEJ,GAAI,KAAK,eAAiB,EAAG,OAAOF,EAEpC,IAAKE,KAASD,EAAS,KAAK,QACtBhB,GAAI,KAAKgB,EAAQC,CAAI,GAAGF,EAAM,KAAKd,GAASgB,EAAK,MAAM,CAAC,EAAIA,CAAI,EAGtE,OAAI,OAAO,sBACFF,EAAM,OAAO,OAAO,sBAAsBC,CAAM,CAAC,EAGnDD,CACT,EAhBoC,cAyBpCD,GAAa,UAAU,UAAYX,EAAA,SAAmBO,EAAO,CAC3D,IAAIE,EAAMX,GAASA,GAASS,EAAQA,EAChCQ,EAAW,KAAK,QAAQN,CAAG,EAE/B,GAAI,CAACM,EAAU,MAAO,CAAC,EACvB,GAAIA,EAAS,GAAI,MAAO,CAACA,EAAS,EAAE,EAEpC,QAASC,EAAI,EAAGC,EAAIF,EAAS,OAAQG,EAAK,IAAI,MAAMD,CAAC,EAAGD,EAAIC,EAAGD,IAC7DE,EAAGF,CAAC,EAAID,EAASC,CAAC,EAAE,GAGtB,OAAOE,CACT,EAZmC,aAqBnCP,GAAa,UAAU,cAAgBX,EAAA,SAAuBO,EAAO,CACnE,IAAIE,EAAMX,GAASA,GAASS,EAAQA,EAChCY,EAAY,KAAK,QAAQV,CAAG,EAEhC,OAAKU,EACDA,EAAU,GAAW,EAClBA,EAAU,OAFM,CAGzB,EAPuC,iBAgBvCR,GAAa,UAAU,KAAOX,EAAA,SAAcO,EAAOa,EAAIC,EAAIC,EAAIC,EAAIC,EAAI,CACrE,IAAIf,EAAMX,GAASA,GAASS,EAAQA,EAEpC,GAAI,CAAC,KAAK,QAAQE,CAAG,EAAG,MAAO,GAE/B,IAAIU,EAAY,KAAK,QAAQV,CAAG,EAC5BgB,EAAM,UAAU,OAChBC,EACAV,EAEJ,GAAIG,EAAU,GAAI,CAGhB,OAFIA,EAAU,MAAM,KAAK,eAAeZ,EAAOY,EAAU,GAAI,OAAW,EAAI,EAEpEM,EAAK,CACX,IAAK,GAAG,OAAON,EAAU,GAAG,KAAKA,EAAU,OAAO,EAAG,GACrD,IAAK,GAAG,OAAOA,EAAU,GAAG,KAAKA,EAAU,QAASC,CAAE,EAAG,GACzD,IAAK,GAAG,OAAOD,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,CAAE,EAAG,GAC7D,IAAK,GAAG,OAAOF,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,EAAIC,CAAE,EAAG,GACjE,IAAK,GAAG,OAAOH,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,EAAIC,EAAIC,CAAE,EAAG,GACrE,IAAK,GAAG,OAAOJ,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,EAAG,EAC3E,CAEA,IAAKR,EAAI,EAAGU,EAAO,IAAI,MAAMD,EAAK,CAAC,EAAGT,EAAIS,EAAKT,IAC7CU,EAAKV,EAAI,CAAC,EAAI,UAAUA,CAAC,EAG3BG,EAAU,GAAG,MAAMA,EAAU,QAASO,CAAI,CAC5C,KAAO,CACL,IAAIC,EAASR,EAAU,OACnBS,EAEJ,IAAKZ,EAAI,EAAGA,EAAIW,EAAQX,IAGtB,OAFIG,EAAUH,CAAC,EAAE,MAAM,KAAK,eAAeT,EAAOY,EAAUH,CAAC,EAAE,GAAI,OAAW,EAAI,EAE1ES,EAAK,CACX,IAAK,GAAGN,EAAUH,CAAC,EAAE,GAAG,KAAKG,EAAUH,CAAC,EAAE,OAAO,EAAG,MACpD,IAAK,GAAGG,EAAUH,CAAC,EAAE,GAAG,KAAKG,EAAUH,CAAC,EAAE,QAASI,CAAE,EAAG,MACxD,IAAK,GAAGD,EAAUH,CAAC,EAAE,GAAG,KAAKG,EAAUH,CAAC,EAAE,QAASI,EAAIC,CAAE,EAAG,MAC5D,IAAK,GAAGF,EAAUH,CAAC,EAAE,GAAG,KAAKG,EAAUH,CAAC,EAAE,QAASI,EAAIC,EAAIC,CAAE,EAAG,MAChE,QACE,GAAI,CAACI,EAAM,IAAKE,EAAI,EAAGF,EAAO,IAAI,MAAMD,EAAK,CAAC,EAAGG,EAAIH,EAAKG,IACxDF,EAAKE,EAAI,CAAC,EAAI,UAAUA,CAAC,EAG3BT,EAAUH,CAAC,EAAE,GAAG,MAAMG,EAAUH,CAAC,EAAE,QAASU,CAAI,CACpD,CAEJ,CAEA,MAAO,EACT,EAlD8B,QA6D9Bf,GAAa,UAAU,GAAKX,EAAA,SAAYO,EAAOL,EAAIC,EAAS,CAC1D,OAAOE,GAAY,KAAME,EAAOL,EAAIC,EAAS,EAAK,CACpD,EAF4B,MAa5BQ,GAAa,UAAU,KAAOX,EAAA,SAAcO,EAAOL,EAAIC,EAAS,CAC9D,OAAOE,GAAY,KAAME,EAAOL,EAAIC,EAAS,EAAI,CACnD,EAF8B,QAc9BQ,GAAa,UAAU,eAAiBX,EAAA,SAAwBO,EAAOL,EAAIC,EAASC,EAAM,CACxF,IAAIK,EAAMX,GAASA,GAASS,EAAQA,EAEpC,GAAI,CAAC,KAAK,QAAQE,CAAG,EAAG,OAAO,KAC/B,GAAI,CAACP,EACH,OAAAQ,GAAW,KAAMD,CAAG,EACb,KAGT,IAAIU,EAAY,KAAK,QAAQV,CAAG,EAEhC,GAAIU,EAAU,GAEVA,EAAU,KAAOjB,IAChB,CAACE,GAAQe,EAAU,QACnB,CAAChB,GAAWgB,EAAU,UAAYhB,IAEnCO,GAAW,KAAMD,CAAG,MAEjB,CACL,QAASO,EAAI,EAAGH,EAAS,CAAC,EAAGc,EAASR,EAAU,OAAQH,EAAIW,EAAQX,KAEhEG,EAAUH,CAAC,EAAE,KAAOd,GACnBE,GAAQ,CAACe,EAAUH,CAAC,EAAE,MACtBb,GAAWgB,EAAUH,CAAC,EAAE,UAAYb,IAErCU,EAAO,KAAKM,EAAUH,CAAC,CAAC,EAOxBH,EAAO,OAAQ,KAAK,QAAQJ,CAAG,EAAII,EAAO,SAAW,EAAIA,EAAO,CAAC,EAAIA,EACpEH,GAAW,KAAMD,CAAG,CAC3B,CAEA,OAAO,IACT,EAtCwC,kBA+CxCE,GAAa,UAAU,mBAAqBX,EAAA,SAA4BO,EAAO,CAC7E,IAAIE,EAEJ,OAAIF,GACFE,EAAMX,GAASA,GAASS,EAAQA,EAC5B,KAAK,QAAQE,CAAG,GAAGC,GAAW,KAAMD,CAAG,IAE3C,KAAK,QAAU,IAAIV,GACnB,KAAK,aAAe,GAGf,IACT,EAZ4C,sBAiB5CY,GAAa,UAAU,IAAMA,GAAa,UAAU,eACpDA,GAAa,UAAU,YAAcA,GAAa,UAAU,GAK5DA,GAAa,SAAWb,GAKxBa,GAAa,aAAeA,GAKR,OAAOf,GAAvB,MACFA,GAAO,QAAUe,MC9UnB,IAAAkB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAUC,SAAUC,EAAQC,EAAS,CAC1B,OAAOH,IAAY,UAAY,OAAOC,GAAW,IAAcA,GAAO,QAAUE,EAAQ,EACxF,OAAO,QAAW,YAAc,OAAO,IAAM,OAAOA,CAAO,GAC1DD,EAAS,OAAO,WAAe,IAAc,WAAaA,GAAU,KAAMA,EAAO,WAAaC,EAAQ,EACzG,GAAGH,IAAO,UAAY,CAAE,aAEtB,SAASI,EAAQC,EAAQC,EAAgB,CACvC,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAC7B,GAAI,OAAO,sBAAuB,CAChC,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EACjDC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CACzD,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UACtD,CAAC,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CACpC,CACA,OAAOD,CACT,CATSG,EAAAN,EAAA,WAUT,SAASO,EAAeC,EAAQ,CAC9B,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAC,EACpDA,EAAI,EAAIT,EAAQ,OAAOU,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUC,EAAK,CACzDC,EAAgBJ,EAAQG,EAAKD,EAAOC,CAAG,CAAC,CAC1C,CAAC,EAAI,OAAO,0BAA4B,OAAO,iBAAiBH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIV,EAAQ,OAAOU,CAAM,CAAC,EAAE,QAAQ,SAAUC,EAAK,CACjK,OAAO,eAAeH,EAAQG,EAAK,OAAO,yBAAyBD,EAAQC,CAAG,CAAC,CACjF,CAAC,CACH,CACA,OAAOH,CACT,CAVSF,EAAAC,EAAA,kBAWT,SAASM,EAAgBC,EAAUC,EAAa,CAC9C,GAAI,EAAED,aAAoBC,GACxB,MAAM,IAAI,UAAU,mCAAmC,CAE3D,CAJST,EAAAO,EAAA,mBAKT,SAASG,EAAkBR,EAAQS,EAAO,CACxC,QAASR,EAAI,EAAGA,EAAIQ,EAAM,OAAQR,IAAK,CACrC,IAAIS,EAAaD,EAAMR,CAAC,EACxBS,EAAW,WAAaA,EAAW,YAAc,GACjDA,EAAW,aAAe,GACtB,UAAWA,IAAYA,EAAW,SAAW,IACjD,OAAO,eAAeV,EAAQW,EAAeD,EAAW,GAAG,EAAGA,CAAU,CAC1E,CACF,CARSZ,EAAAU,EAAA,qBAST,SAASI,EAAaL,EAAaM,EAAYC,EAAa,CAC1D,OAAID,GAAYL,EAAkBD,EAAY,UAAWM,CAAU,EAC/DC,GAAaN,EAAkBD,EAAaO,CAAW,EAC3D,OAAO,eAAeP,EAAa,YAAa,CAC9C,SAAU,EACZ,CAAC,EACMA,CACT,CAPST,EAAAc,EAAA,gBAQT,SAASR,EAAgBW,EAAKZ,EAAKa,EAAO,CACxC,OAAAb,EAAMQ,EAAeR,CAAG,EACpBA,KAAOY,EACT,OAAO,eAAeA,EAAKZ,EAAK,CAC9B,MAAOa,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EACZ,CAAC,EAEDD,EAAIZ,CAAG,EAAIa,EAEND,CACT,CAbSjB,EAAAM,EAAA,mBAcT,SAASa,GAAW,CAClB,OAAAA,EAAW,OAAO,OAAS,OAAO,OAAO,KAAK,EAAI,SAAUjB,EAAQ,CAClE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIC,EAAS,UAAUD,CAAC,EACxB,QAASE,KAAOD,EACV,OAAO,UAAU,eAAe,KAAKA,EAAQC,CAAG,IAClDH,EAAOG,CAAG,EAAID,EAAOC,CAAG,EAG9B,CACA,OAAOH,CACT,EACOiB,EAAS,MAAM,KAAM,SAAS,CACvC,CAbSnB,EAAAmB,EAAA,YAcT,SAASC,EAAaC,EAAOC,EAAM,CACjC,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EACxD,IAAIE,EAAOF,EAAM,OAAO,WAAW,EACnC,GAAIE,IAAS,OAAW,CACtB,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAC5C,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EACpC,MAAM,IAAI,UAAU,8CAA8C,CACpE,CACA,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CACpD,CATSrB,EAAAoB,EAAA,gBAUT,SAASP,EAAeY,EAAK,CAC3B,IAAIpB,EAAMe,EAAaK,EAAK,QAAQ,EACpC,OAAO,OAAOpB,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CACnD,CAHSL,EAAAa,EAAA,kBAKT,IAAIa,EAAe,CAAC,QAAS,CAAC,CAAC,GAe9B,SAAUnC,EAAQ,CACf,OAAO,OAAW,MAGnB,SAAUoC,EAAQ,CAEjB,IAAIC,EAAkBD,EAAO,mBAAqBA,EAAO,kBAAkB,UACvEE,EAAqBF,EAAO,OAAQ,UAAY,CAClD,GAAI,CACF,MAAO,EAAQ,IAAI,IACrB,MAAY,CACV,MAAO,EACT,CACF,GAAE,EACEG,EAA4BD,GAAsBF,EAAO,aAAc,UAAY,CACrF,GAAI,CACF,OAAO,IAAI,KAAK,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE,OAAS,GAClD,MAAY,CACV,MAAO,EACT,CACF,GAAE,EACEI,EAAcJ,EAAO,aAAeA,EAAO,mBAAqBA,EAAO,gBAAkBA,EAAO,cAChGK,GAAiB,0CACjBC,IAAiBJ,GAAsBE,IAAgBJ,EAAO,MAAQA,EAAO,aAAeA,EAAO,YAAc,SAAUO,GAAS,CACtI,IAAIC,GAASC,GAAWC,GAAUC,GAAYC,GAAYC,GAAaC,GAAUtC,GAAGuC,GAGpF,GADAP,GAAUD,GAAQ,MAAMF,EAAc,EAClC,CAACG,GACH,MAAM,IAAI,MAAM,kBAAkB,EAgBpC,IAbAC,GAAYD,GAAQ,CAAC,EAAIA,GAAQ,CAAC,EAAI,cAAgBA,GAAQ,CAAC,GAAK,qBACpEE,GAAW,CAAC,CAACF,GAAQ,CAAC,EACtBG,GAAaJ,GAAQ,MAAMC,GAAQ,CAAC,EAAE,MAAM,EACxCE,GAEFE,GAAa,KAAKD,EAAU,EAG5BC,GAAa,mBAAmBD,EAAU,EAG5CE,GAAc,IAAI,YAAYD,GAAW,MAAM,EAC/CE,GAAW,IAAI,WAAWD,EAAW,EAChCrC,GAAI,EAAGA,GAAIoC,GAAW,OAAQpC,IAAK,EACtCsC,GAAStC,EAAC,EAAIoC,GAAW,WAAWpC,EAAC,EAGvC,OAAI0B,EACK,IAAI,KAAK,CAACC,EAA4BW,GAAWD,EAAW,EAAG,CACpE,KAAMJ,EACR,CAAC,GAEHM,GAAK,IAAIX,EACTW,GAAG,OAAOF,EAAW,EACdE,GAAG,QAAQN,EAAS,EAC7B,EACIT,EAAO,mBAAqB,CAACC,EAAgB,SAC3CA,EAAgB,aAClBA,EAAgB,OAAS,SAAUe,GAAUC,GAAMC,GAAS,CAC1D,IAAIC,GAAO,KACX,WAAW,UAAY,CACjBD,IAAWjB,EAAgB,WAAaK,GAC1CU,GAASV,GAAca,GAAK,UAAUF,GAAMC,EAAO,CAAC,CAAC,EAErDF,GAASG,GAAK,aAAa,OAAQF,EAAI,CAAC,CAE5C,CAAC,CACH,EACShB,EAAgB,WAAaK,KAClCL,EAAgB,SAClBA,EAAgB,OAAS,SAAUe,GAAUC,GAAMC,GAAS,CAC1D,IAAIC,GAAO,KACX,WAAW,UAAY,EAChBF,IAAQA,KAAS,aAAeC,KAAYjB,EAAgB,WAAaK,GAC5EU,GAASV,GAAca,GAAK,UAAUF,GAAMC,EAAO,CAAC,CAAC,EAErDF,GAASG,GAAK,SAASF,EAAI,CAAC,CAEhC,CAAC,CACH,EAEAhB,EAAgB,OAAS,SAAUe,GAAUC,GAAMC,GAAS,CAC1D,IAAIC,GAAO,KACX,WAAW,UAAY,CACrBH,GAASV,GAAca,GAAK,UAAUF,GAAMC,EAAO,CAAC,CAAC,CACvD,CAAC,CACH,IAIFtD,EAAO,QACTA,EAAO,QAAU0C,GAEjBN,EAAO,cAAgBM,EAE3B,GAAG,MAAM,CACX,GAAGP,CAAY,EACf,IAAIqB,EAASrB,EAAa,QAEtBsB,EAAShD,EAAA,SAAgBkB,EAAO,CAClC,OAAI,OAAO,KAAS,IACX,GAEFA,aAAiB,MAAQ,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,eAC5E,EALa,UAOT+B,EAAW,CAMb,OAAQ,GAMR,iBAAkB,GAKlB,WAAY,GAKZ,SAAU,IAKV,UAAW,IAKX,SAAU,EAKV,UAAW,EAMX,MAAO,OAMP,OAAQ,OAMR,OAAQ,OAQR,QAAS,GAMT,SAAU,OAMV,aAAc,CAAC,WAAW,EAM1B,YAAa,IAWb,WAAY,KAWZ,KAAM,KAUN,QAAS,KAUT,MAAO,IACT,EAEIC,EAAa,OAAO,OAAW,KAAe,OAAO,OAAO,SAAa,IACzEC,EAASD,EAAa,OAAS,CAAC,EAOhCE,EAAmBpD,EAAA,SAA0BkB,EAAO,CACtD,OAAOA,EAAQ,GAAKA,EAAQ,GAC9B,EAFuB,oBAGnBmC,EAAQ,MAAM,UAAU,MAO5B,SAASC,EAAQpC,EAAO,CACtB,OAAO,MAAM,KAAO,MAAM,KAAKA,CAAK,EAAImC,EAAM,KAAKnC,CAAK,CAC1D,CAFSlB,EAAAsD,EAAA,WAGT,IAAIC,EAAoB,cAOxB,SAASC,EAAYtC,EAAO,CAC1B,OAAOqC,EAAkB,KAAKrC,CAAK,CACrC,CAFSlB,EAAAwD,EAAA,eAST,SAASC,EAAqBvC,EAAO,CACnC,IAAIwC,EAAYF,EAAYtC,CAAK,EAAIA,EAAM,OAAO,CAAC,EAAI,GACvD,OAAIwC,IAAc,SAChBA,EAAY,OAEP,IAAI,OAAOA,CAAS,CAC7B,CANS1D,EAAAyD,EAAA,wBAOT,IAAIE,EAAe,OAAO,aAS1B,SAASC,EAAsBC,EAAUC,EAAOC,EAAQ,CACtD,IAAIC,EAAM,GACN7D,EAEJ,IADA4D,GAAUD,EACL3D,EAAI2D,EAAO3D,EAAI4D,EAAQ5D,GAAK,EAC/B6D,GAAOL,EAAaE,EAAS,SAAS1D,CAAC,CAAC,EAE1C,OAAO6D,CACT,CARShE,EAAA4D,EAAA,yBAST,IAAIK,EAAOd,EAAO,KAQlB,SAASe,EAAqB1B,EAAa2B,EAAU,CAInD,QAHIC,EAAS,CAAC,EACVC,EAAY,KACZC,EAAQ,IAAI,WAAW9B,CAAW,EAC/B8B,EAAM,OAAS,GAGpBF,EAAO,KAAKT,EAAa,MAAM,KAAML,EAAQgB,EAAM,SAAS,EAAGD,CAAS,CAAC,CAAC,CAAC,EAC3EC,EAAQA,EAAM,SAASD,CAAS,EAElC,MAAO,QAAQ,OAAOF,EAAU,UAAU,EAAE,OAAOF,EAAKG,EAAO,KAAK,EAAE,CAAC,CAAC,CAC1E,CAXSpE,EAAAkE,EAAA,wBAkBT,SAASK,EAAuB/B,EAAa,CAC3C,IAAIqB,EAAW,IAAI,SAASrB,CAAW,EACnCgC,EAGJ,GAAI,CACF,IAAIC,EACAC,EACAC,EAGJ,GAAId,EAAS,SAAS,CAAC,IAAM,KAAQA,EAAS,SAAS,CAAC,IAAM,IAG5D,QAFIE,GAASF,EAAS,WAClBe,GAAS,EACNA,GAAS,EAAIb,IAAQ,CAC1B,GAAIF,EAAS,SAASe,EAAM,IAAM,KAAQf,EAAS,SAASe,GAAS,CAAC,IAAM,IAAM,CAChFF,EAAYE,GACZ,KACF,CACAA,IAAU,CACZ,CAEF,GAAIF,EAAW,CACb,IAAIG,GAAaH,EAAY,EACzBI,GAAaJ,EAAY,GAC7B,GAAId,EAAsBC,EAAUgB,GAAY,CAAC,IAAM,OAAQ,CAC7D,IAAIE,GAAalB,EAAS,UAAUiB,EAAU,EAE9C,GADAL,EAAeM,KAAe,OAC1BN,GAAgBM,KAAe,QAC7BlB,EAAS,UAAUiB,GAAa,EAAGL,CAAY,IAAM,GAAQ,CAC/D,IAAIO,GAAiBnB,EAAS,UAAUiB,GAAa,EAAGL,CAAY,EAChEO,IAAkB,IACpBL,EAAWG,GAAaE,GAE5B,CAEJ,CACF,CACA,GAAIL,EAAU,CACZ,IAAIM,GAAUpB,EAAS,UAAUc,EAAUF,CAAY,EACnDS,GACA/E,GACJ,IAAKA,GAAI,EAAGA,GAAI8E,GAAS9E,IAAK,EAE5B,GADA+E,GAAUP,EAAWxE,GAAI,GAAK,EAC1B0D,EAAS,UAAUqB,GAAST,CAAY,IAAM,IAA0B,CAE1ES,IAAW,EAGXV,EAAcX,EAAS,UAAUqB,GAAST,CAAY,EAGtDZ,EAAS,UAAUqB,GAAS,EAAGT,CAAY,EAC3C,KACF,CAEJ,CACF,MAAY,CACVD,EAAc,CAChB,CACA,OAAOA,CACT,CA7DSxE,EAAAuE,EAAA,0BAoET,SAASY,GAAiBX,EAAa,CACrC,IAAIY,EAAS,EACTC,EAAS,EACTC,EAAS,EACb,OAAQd,EAAa,CAEnB,IAAK,GACHa,EAAS,GACT,MAGF,IAAK,GACHD,EAAS,KACT,MAGF,IAAK,GACHE,EAAS,GACT,MAGF,IAAK,GACHF,EAAS,GACTE,EAAS,GACT,MAGF,IAAK,GACHF,EAAS,GACT,MAGF,IAAK,GACHA,EAAS,GACTC,EAAS,GACT,MAGF,IAAK,GACHD,EAAS,IACT,KACJ,CACA,MAAO,CACL,OAAQA,EACR,OAAQC,EACR,OAAQC,CACV,CACF,CA/CStF,EAAAmF,GAAA,oBAgDT,IAAII,GAAkB,uBAStB,SAASC,GAAuBtE,EAAO,CACrC,IAAIuE,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAChF,OAAOF,GAAgB,KAAKrE,CAAK,EAAI,KAAK,MAAMA,EAAQuE,CAAK,EAAIA,EAAQvE,CAC3E,CAHSlB,EAAAwF,GAAA,0BAWT,SAASE,GAAiBC,EAAM,CAC9B,IAAIC,EAAcD,EAAK,YACrBE,EAASF,EAAK,OACdG,EAAQH,EAAK,MACX/C,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,OAC3EmD,EAAe3C,EAAiB0C,CAAK,EACrCE,GAAgB5C,EAAiByC,CAAM,EAC3C,GAAIE,GAAgBC,GAAe,CACjC,IAAIC,GAAgBJ,EAASD,GACxBhD,IAAS,WAAaA,IAAS,SAAWqD,GAAgBH,GAASlD,IAAS,SAAWqD,GAAgBH,EAC1GD,EAASC,EAAQF,EAEjBE,EAAQD,EAASD,CAErB,MAAWG,EACTF,EAASC,EAAQF,EACRI,KACTF,EAAQD,EAASD,GAEnB,MAAO,CACL,MAAOE,EACP,OAAQD,CACV,CACF,CAvBS7F,EAAA0F,GAAA,oBA8BT,SAASQ,GAAQ1D,EAAa,CAK5B,QAJI2D,EAAQ7C,EAAQ,IAAI,WAAWd,CAAW,CAAC,EAC3CuB,EAASoC,EAAM,OACfC,EAAW,CAAC,EACZtC,EAAQ,EACLA,EAAQ,EAAIC,GAAQ,CACzB,IAAI7C,EAAQiF,EAAMrC,CAAK,EACnBuC,GAAOF,EAAMrC,EAAQ,CAAC,EAG1B,GAAI5C,IAAU,KAAQmF,KAAS,IAC7B,MAIF,GAAInF,IAAU,KAAQmF,KAAS,IAC7BvC,GAAS,MACJ,CACL,IAAIc,GAASuB,EAAMrC,EAAQ,CAAC,EAAI,IAAMqC,EAAMrC,EAAQ,CAAC,EACjDwC,GAAMxC,EAAQc,GAAS,EACvB2B,GAAUJ,EAAM,MAAMrC,EAAOwC,EAAG,EACpCF,EAAS,KAAKG,EAAO,EACrBzC,EAAQwC,EACV,CACF,CACA,OAAOF,EAAS,OAAO,SAAUI,GAAWC,GAAS,CACnD,OAAIA,GAAQ,CAAC,IAAM,KAAQA,GAAQ,CAAC,IAAM,IACjCD,GAAU,OAAOC,EAAO,EAE1BD,EACT,EAAG,CAAC,CAAC,CACP,CA/BSxG,EAAAkG,GAAA,WAuCT,SAASQ,GAAWlE,EAAagE,EAAW,CAC1C,IAAIL,EAAQ7C,EAAQ,IAAI,WAAWd,CAAW,CAAC,EAC/C,GAAI2D,EAAM,CAAC,IAAM,KAAQA,EAAM,CAAC,IAAM,IACpC,OAAO3D,EAET,IAAImE,EAAaR,EAAM,CAAC,EAAI,IAAMA,EAAM,CAAC,EACrCS,EAAiB,CAAC,IAAM,GAAI,EAAE,OAAOJ,EAAWL,EAAM,MAAM,EAAIQ,CAAU,CAAC,EAC/E,OAAO,IAAI,WAAWC,CAAc,CACtC,CARS5G,EAAA0G,GAAA,cAUT,IAAIG,EAAgB1D,EAAO,YACzB2D,EAAa3D,EAAO,WAClB4D,EAAM5D,EAAO,KAAOA,EAAO,UAC3B6D,EAAmB,SACnBC,EAAoB9D,EAAO,WAM3B+D,GAA0B,UAAY,CAMxC,SAASA,EAAWC,EAAMC,EAAS,CACjC7G,EAAgB,KAAM2G,CAAU,EAChC,KAAK,KAAOC,EACZ,KAAK,KAAO,CAAC,EACb,KAAK,MAAQ,IAAI,MACjB,KAAK,QAAUlH,EAAeA,EAAe,CAAC,EAAGgD,CAAQ,EAAGmE,CAAO,EACnE,KAAK,QAAU,GACf,KAAK,OAAS,KACd,KAAK,KAAK,CACZ,CATS,OAAApH,EAAAkH,EAAA,cAUTpG,EAAaoG,EAAY,CAAC,CACxB,IAAK,OACL,MAAOlH,EAAA,UAAgB,CACrB,IAAIqH,EAAQ,KACRF,EAAO,KAAK,KACdC,EAAU,KAAK,QACjB,GAAI,CAACpE,EAAOmE,CAAI,EAAG,CACjB,KAAK,KAAK,IAAI,MAAM,mDAAmD,CAAC,EACxE,MACF,CACA,IAAIhD,EAAWgD,EAAK,KACpB,GAAI,CAAC3D,EAAYW,CAAQ,EAAG,CAC1B,KAAK,KAAK,IAAI,MAAM,0DAA0D,CAAC,EAC/E,MACF,CACA,GAAI,CAAC4C,GAAO,CAACD,EAAY,CACvB,KAAK,KAAK,IAAI,MAAM,yDAAyD,CAAC,EAC9E,MACF,CACKD,IACHO,EAAQ,iBAAmB,GAC3BA,EAAQ,WAAa,IAEvB,IAAIE,GAAcnD,IAAa,aAC3BoD,GAAmBD,IAAeF,EAAQ,iBAC1CI,GAAaF,IAAeF,EAAQ,WACxC,GAAIL,GAAO,CAACQ,IAAoB,CAACC,GAC/B,KAAK,KAAK,CACR,IAAKT,EAAI,gBAAgBI,CAAI,CAC/B,CAAC,MACI,CACL,IAAIM,GAAS,IAAIX,EACjB,KAAK,OAASW,GACdA,GAAO,OAAS,SAAU9B,GAAM,CAC9B,IAAIzF,GAASyF,GAAK,OACd+B,GAASxH,GAAO,OAChByH,GAAO,CAAC,EACRnD,GAAc,EACd+C,KAGF/C,GAAcD,EAAuBmD,EAAM,EACvClD,GAAc,GAChBrD,EAASwG,GAAMxC,GAAiBX,EAAW,CAAC,GAG5CgD,KACFH,EAAM,KAAOnB,GAAQwB,EAAM,GAEzBH,IAAoBC,GAClB,CAACT,GAGFvC,GAAc,EACfmD,GAAK,IAAMzD,EAAqBwD,GAAQvD,CAAQ,EAEhDwD,GAAK,IAAMZ,EAAI,gBAAgBI,CAAI,EAGrCQ,GAAK,IAAMD,GAEbL,EAAM,KAAKM,EAAI,CACjB,EACAF,GAAO,QAAU,UAAY,CAC3BJ,EAAM,KAAK,IAAI,MAAM,4CAA4C,CAAC,CACpE,EACAI,GAAO,QAAU,UAAY,CAC3BJ,EAAM,KAAK,IAAI,MAAM,2CAA2C,CAAC,CACnE,EACAI,GAAO,UAAY,UAAY,CAC7BJ,EAAM,OAAS,IACjB,EACIE,IAAoBC,GACtBC,GAAO,kBAAkBN,CAAI,EAE7BM,GAAO,cAAcN,CAAI,CAE7B,CACF,EA5EO,OA6ET,EAAG,CACD,IAAK,OACL,MAAOnH,EAAA,SAAc2H,EAAM,CACzB,IAAIC,EAAS,KACTT,EAAO,KAAK,KACdU,EAAQ,KAAK,MACfA,EAAM,OAAS,UAAY,CACzBD,EAAO,KAAK3H,EAAeA,EAAe,CAAC,EAAG0H,CAAI,EAAG,CAAC,EAAG,CACvD,aAAcE,EAAM,aACpB,cAAeA,EAAM,aACvB,CAAC,CAAC,CACJ,EACAA,EAAM,QAAU,UAAY,CAC1BD,EAAO,KAAK,IAAI,MAAM,4BAA4B,CAAC,CACrD,EACAC,EAAM,QAAU,UAAY,CAC1BD,EAAO,KAAK,IAAI,MAAM,2BAA2B,CAAC,CACpD,EAIIzE,EAAO,WAAa,sCAAsC,KAAKA,EAAO,UAAU,SAAS,IAE3F0E,EAAM,YAAc,aAEtBA,EAAM,IAAMV,EAAK,KACjBU,EAAM,IAAMF,EAAK,GACnB,EAzBO,OA0BT,EAAG,CACD,IAAK,OACL,MAAO3H,EAAA,SAAc8H,EAAO,CAC1B,IAAIC,EAAS,KACTC,EAAeF,EAAM,aACvBG,EAAgBH,EAAM,cACtBI,GAAeJ,EAAM,OACrB1C,GAAS8C,KAAiB,OAAS,EAAIA,GACvCC,GAAeL,EAAM,OACrBzC,GAAS8C,KAAiB,OAAS,EAAIA,GACvCC,GAAeN,EAAM,OACrBxC,GAAS8C,KAAiB,OAAS,EAAIA,GACrCjB,GAAO,KAAK,KACdU,GAAQ,KAAK,MACbT,GAAU,KAAK,QACbiB,GAAS,SAAS,cAAc,QAAQ,EACxCC,GAAUD,GAAO,WAAW,IAAI,EAChCE,GAAqB,KAAK,IAAInD,EAAM,EAAI,MAAQ,GAChDoD,IAAapB,GAAQ,SAAW,WAAaA,GAAQ,SAAW,UAAYhE,EAAiBgE,GAAQ,KAAK,GAAKhE,EAAiBgE,GAAQ,MAAM,EAC9IqB,GAAW,KAAK,IAAIrB,GAAQ,SAAU,CAAC,GAAK,IAC5CsB,GAAY,KAAK,IAAItB,GAAQ,UAAW,CAAC,GAAK,IAC9CuB,GAAW,KAAK,IAAIvB,GAAQ,SAAU,CAAC,GAAK,EAC5CwB,GAAY,KAAK,IAAIxB,GAAQ,UAAW,CAAC,GAAK,EAC9CxB,GAAcoC,EAAeC,EAC7BnC,GAAQsB,GAAQ,MAClBvB,GAASuB,GAAQ,OACnB,GAAImB,GAAoB,CACtB,IAAIM,GAAQ,CAACH,GAAWD,EAAQ,EAChCA,GAAWI,GAAM,CAAC,EAClBH,GAAYG,GAAM,CAAC,EACnB,IAAIC,GAAQ,CAACF,GAAWD,EAAQ,EAChCA,GAAWG,GAAM,CAAC,EAClBF,GAAYE,GAAM,CAAC,EACnB,IAAIC,GAAQ,CAAClD,GAAQC,EAAK,EAC1BA,GAAQiD,GAAM,CAAC,EACflD,GAASkD,GAAM,CAAC,CAClB,CACIP,KACF5C,GAAcE,GAAQD,IAExB,IAAImD,GAAoBtD,GAAiB,CACvC,YAAaE,GACb,MAAO6C,GACP,OAAQC,EACV,EAAG,SAAS,EACZD,GAAWO,GAAkB,MAC7BN,GAAYM,GAAkB,OAC9B,IAAIC,GAAqBvD,GAAiB,CACxC,YAAaE,GACb,MAAO+C,GACP,OAAQC,EACV,EAAG,OAAO,EAGV,GAFAD,GAAWM,GAAmB,MAC9BL,GAAYK,GAAmB,OAC3BT,GAAW,CACb,IAAIU,GAAqBxD,GAAiB,CACxC,YAAaE,GACb,MAAOE,GACP,OAAQD,EACV,EAAGuB,GAAQ,MAAM,EACjBtB,GAAQoD,GAAmB,MAC3BrD,GAASqD,GAAmB,MAC9B,KAAO,CACL,IAAIC,GAAqBzD,GAAiB,CACxC,YAAaE,GACb,MAAOE,GACP,OAAQD,EACV,CAAC,EACGuD,GAAwBD,GAAmB,MAC/CrD,GAAQsD,KAA0B,OAASpB,EAAeoB,GAC1D,IAAIC,GAAwBF,GAAmB,OAC/CtD,GAASwD,KAA0B,OAASpB,EAAgBoB,EAC9D,CACAvD,GAAQ,KAAK,MAAMN,GAAuB,KAAK,IAAI,KAAK,IAAIM,GAAO6C,EAAQ,EAAGF,EAAQ,CAAC,CAAC,EACxF5C,GAAS,KAAK,MAAML,GAAuB,KAAK,IAAI,KAAK,IAAIK,GAAQ+C,EAAS,EAAGF,EAAS,CAAC,CAAC,EAC5F,IAAIY,GAAQ,CAACxD,GAAQ,EACjByD,GAAQ,CAAC1D,GAAS,EAClB2D,GAAY1D,GACZ2D,GAAa5D,GACb6D,GAAS,CAAC,EACd,GAAIlB,GAAW,CACb,IAAImB,GAAO,EACPC,GAAO,EACPC,GAAW7B,EACX8B,GAAY7B,EACZ8B,GAAqBrE,GAAiB,CACxC,YAAaE,GACb,MAAOoC,EACP,OAAQC,CACV,EAAG,CACD,QAAS,QACT,MAAO,SACT,EAAEb,GAAQ,MAAM,CAAC,EACjByC,GAAWE,GAAmB,MAC9BD,GAAYC,GAAmB,OAC/BJ,IAAQ3B,EAAe6B,IAAY,EACnCD,IAAQ3B,EAAgB6B,IAAa,EACrCJ,GAAO,KAAKC,GAAMC,GAAMC,GAAUC,EAAS,CAC7C,CAEA,GADAJ,GAAO,KAAKJ,GAAOC,GAAOC,GAAWC,EAAU,EAC3ClB,GAAoB,CACtB,IAAIyB,GAAQ,CAACnE,GAAQC,EAAK,EAC1BA,GAAQkE,GAAM,CAAC,EACfnE,GAASmE,GAAM,CAAC,CAClB,CACA3B,GAAO,MAAQvC,GACfuC,GAAO,OAASxC,GACXrC,EAAY4D,GAAQ,QAAQ,IAC/BA,GAAQ,SAAWD,GAAK,MAE1B,IAAI8C,GAAY,cAGZ9C,GAAK,KAAOC,GAAQ,aAAeA,GAAQ,aAAa,QAAQA,GAAQ,QAAQ,GAAK,IACvFA,GAAQ,SAAW,cAErB,IAAIE,GAAcF,GAAQ,WAAa,aAWvC,GAVIE,KACF2C,GAAY,QAId3B,GAAQ,UAAY2B,GACpB3B,GAAQ,SAAS,EAAG,EAAGxC,GAAOD,EAAM,EAChCuB,GAAQ,YACVA,GAAQ,WAAW,KAAK,KAAMkB,GAASD,EAAM,EAE3C,MAAK,UAGTC,GAAQ,KAAK,EACbA,GAAQ,UAAUxC,GAAQ,EAAGD,GAAS,CAAC,EACvCyC,GAAQ,OAAOlD,GAAS,KAAK,GAAK,GAAG,EACrCkD,GAAQ,MAAMjD,GAAQC,EAAM,EAC5BgD,GAAQ,UAAU,MAAMA,GAAS,CAACT,EAAK,EAAE,OAAO6B,EAAM,CAAC,EACvDpB,GAAQ,QAAQ,EACZlB,GAAQ,MACVA,GAAQ,KAAK,KAAK,KAAMkB,GAASD,EAAM,EAErC,MAAK,SAGT,KAAI1F,GAAW3C,EAAA,SAAkBkK,GAAM,CACrC,GAAI,CAACnC,EAAO,QAAS,CACnB,IAAIoC,GAAOnK,EAAA,SAAc0H,GAAQ,CAC/B,OAAOK,EAAO,KAAK,CACjB,aAAcC,EACd,cAAeC,EACf,OAAQP,EACV,CAAC,CACH,EANW,QAOX,GAAIwC,IAAQ5C,IAAeF,GAAQ,YAAcW,EAAO,MAAQA,EAAO,KAAK,OAAS,EAAG,CACtF,IAAI1B,GAAOrG,EAAA,SAAcwC,GAAa,CACpC,OAAO2H,GAAKpH,EAAOmB,EAAqBwC,GAAWlE,GAAauF,EAAO,IAAI,EAAGX,GAAQ,QAAQ,CAAC,CAAC,CAClG,EAFW,QAGX,GAAI8C,GAAK,YACPA,GAAK,YAAY,EAAE,KAAK7D,EAAI,EAAE,MAAM,UAAY,CAC9C0B,EAAO,KAAK,IAAI,MAAM,8DAA8D,CAAC,CACvF,CAAC,MACI,CACL,IAAIN,GAAS,IAAIX,EACjBiB,EAAO,OAASN,GAChBA,GAAO,OAAS,SAAU2C,GAAO,CAC/B,IAAIlK,GAASkK,GAAM,OACnB/D,GAAKnG,GAAO,MAAM,CACpB,EACAuH,GAAO,QAAU,UAAY,CAC3BM,EAAO,KAAK,IAAI,MAAM,uDAAuD,CAAC,CAChF,EACAN,GAAO,QAAU,UAAY,CAC3BM,EAAO,KAAK,IAAI,MAAM,sDAAsD,CAAC,CAC/E,EACAN,GAAO,UAAY,UAAY,CAC7BM,EAAO,OAAS,IAClB,EACAN,GAAO,kBAAkByC,EAAI,CAC/B,CACF,MACEC,GAAKD,EAAI,CAEb,CACF,EAvCe,YAwCX7B,GAAO,OACTA,GAAO,OAAO1F,GAAUyE,GAAQ,SAAUA,GAAQ,OAAO,EAEzDzE,GAASI,EAAOsF,GAAO,UAAUjB,GAAQ,SAAUA,GAAQ,OAAO,CAAC,CAAC,EAExE,EAzLO,OA0LT,EAAG,CACD,IAAK,OACL,MAAOpH,EAAA,SAAcqK,EAAO,CAC1B,IAAIrC,EAAeqC,EAAM,aACvBpC,EAAgBoC,EAAM,cACtB3C,EAAS2C,EAAM,OACblD,GAAO,KAAK,KACdU,GAAQ,KAAK,MACbT,GAAU,KAAK,QAIjB,GAHIL,GAAOc,GAAM,IAAI,QAAQ,OAAO,IAAM,GACxCd,EAAI,gBAAgBc,GAAM,GAAG,EAE3BH,EAEF,GAAIN,GAAQ,QAAU,CAACA,GAAQ,YAAcM,EAAO,KAAOP,GAAK,MAAQC,GAAQ,WAAaD,GAAK,MAAQ,EAAEC,GAAQ,MAAQY,GAAgBZ,GAAQ,OAASa,GAAiBb,GAAQ,SAAWY,GAAgBZ,GAAQ,UAAYa,GAAiBb,GAAQ,SAAWY,GAAgBZ,GAAQ,UAAYa,GAC3SP,EAASP,OACJ,CACL,IAAImD,GAAO,IAAI,KACf5C,EAAO,aAAe4C,GAAK,QAAQ,EACnC5C,EAAO,iBAAmB4C,GAC1B5C,EAAO,KAAOP,GAAK,KAGfO,EAAO,MAAQA,EAAO,OAASP,GAAK,OACtCO,EAAO,KAAOA,EAAO,KAAK,QAAQV,EAAkBvD,EAAqBiE,EAAO,IAAI,CAAC,EAEzF,MAGAA,EAASP,GAEX,KAAK,OAASO,EACVN,GAAQ,SACVA,GAAQ,QAAQ,KAAK,KAAMM,CAAM,CAErC,EAjCO,OAkCT,EAAG,CACD,IAAK,OACL,MAAO1H,EAAA,SAAcuK,EAAK,CACxB,IAAInD,EAAU,KAAK,QACnB,GAAIA,EAAQ,MACVA,EAAQ,MAAM,KAAK,KAAMmD,CAAG,MAE5B,OAAMA,CAEV,EAPO,OAQT,EAAG,CACD,IAAK,QACL,MAAOvK,EAAA,UAAiB,CACjB,KAAK,UACR,KAAK,QAAU,GACX,KAAK,OACP,KAAK,OAAO,MAAM,EACR,KAAK,MAAM,SAIrB,KAAK,KAAK,IAAI,MAAM,2CAA2C,CAAC,GAHhE,KAAK,MAAM,OAAS,KACpB,KAAK,MAAM,QAAQ,GAKzB,EAZO,QAkBT,CAAC,EAAG,CAAC,CACH,IAAK,aACL,MAAOA,EAAA,UAAsB,CAC3B,cAAO,WAAaiH,EACbC,CACT,EAHO,aAST,EAAG,CACD,IAAK,cACL,MAAOlH,EAAA,SAAqBoH,EAAS,CACnCjG,EAAS8B,EAAUmE,CAAO,CAC5B,EAFO,cAGT,CAAC,CAAC,EACKF,CACT,GAAE,EAEF,OAAOA,CAET,EAAE,ICtiCF,IAAAsD,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAUC,SAAUC,EAAQC,EAAS,CAC1B,OAAOH,IAAY,UAAY,OAAOC,GAAW,IAAcA,GAAO,QAAUE,EAAQ,EACxF,OAAO,QAAW,YAAc,OAAO,IAAM,OAAOA,CAAO,GAC1DD,EAAS,OAAO,WAAe,IAAc,WAAaA,GAAU,KAAMA,EAAO,QAAUC,EAAQ,EACtG,GAAGH,IAAO,UAAY,CAAE,aAEtB,SAASI,EAAQC,EAAGC,EAAG,CACrB,IAAIC,EAAI,OAAO,KAAKF,CAAC,EACrB,GAAI,OAAO,sBAAuB,CAChC,IAAIG,EAAI,OAAO,sBAAsBH,CAAC,EACtCC,IAAME,EAAIA,EAAE,OAAO,SAAUF,EAAG,CAC9B,OAAO,OAAO,yBAAyBD,EAAGC,CAAC,EAAE,UAC/C,CAAC,GAAIC,EAAE,KAAK,MAAMA,EAAGC,CAAC,CACxB,CACA,OAAOD,CACT,CATSE,EAAAL,EAAA,WAUT,SAASM,EAAeL,EAAG,CACzB,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIC,EAAY,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAC,EAC/CA,EAAI,EAAIF,EAAQ,OAAOG,CAAC,EAAG,EAAE,EAAE,QAAQ,SAAUD,EAAG,CAClDK,EAAgBN,EAAGC,EAAGC,EAAED,CAAC,CAAC,CAC5B,CAAC,EAAI,OAAO,0BAA4B,OAAO,iBAAiBD,EAAG,OAAO,0BAA0BE,CAAC,CAAC,EAAIH,EAAQ,OAAOG,CAAC,CAAC,EAAE,QAAQ,SAAUD,EAAG,CAChJ,OAAO,eAAeD,EAAGC,EAAG,OAAO,yBAAyBC,EAAGD,CAAC,CAAC,CACnE,CAAC,CACH,CACA,OAAOD,CACT,CAVSI,EAAAC,EAAA,kBAWT,SAASE,EAAaL,EAAGD,EAAG,CAC1B,GAAgB,OAAOC,GAAnB,UAAwB,CAACA,EAAG,OAAOA,EACvC,IAAIF,EAAIE,EAAE,OAAO,WAAW,EAC5B,GAAeF,IAAX,OAAc,CAChB,IAAIQ,EAAIR,EAAE,KAAKE,EAAGD,GAAK,SAAS,EAChC,GAAgB,OAAOO,GAAnB,SAAsB,OAAOA,EACjC,MAAM,IAAI,UAAU,8CAA8C,CACpE,CACA,OAAqBP,IAAb,SAAiB,OAAS,QAAQC,CAAC,CAC7C,CATSE,EAAAG,EAAA,gBAUT,SAASE,EAAeP,EAAG,CACzB,IAAIM,EAAID,EAAaL,EAAG,QAAQ,EAChC,OAAmB,OAAOM,GAAnB,SAAuBA,EAAIA,EAAI,EACxC,CAHSJ,EAAAK,EAAA,kBAIT,SAASC,EAAQP,EAAG,CAClB,0BAEA,OAAOO,EAAwB,OAAO,QAArB,YAA2C,OAAO,OAAO,UAA1B,SAAqC,SAAUP,EAAG,CAChG,OAAO,OAAOA,CAChB,EAAI,SAAUA,EAAG,CACf,OAAOA,GAAmB,OAAO,QAArB,YAA+BA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CACpH,EAAGO,EAAQP,CAAC,CACd,CARSC,EAAAM,EAAA,WAST,SAASC,EAAgBC,EAAUC,EAAa,CAC9C,GAAI,EAAED,aAAoBC,GACxB,MAAM,IAAI,UAAU,mCAAmC,CAE3D,CAJST,EAAAO,EAAA,mBAKT,SAASG,EAAkBC,EAAQC,EAAO,CACxC,QAASR,EAAI,EAAGA,EAAIQ,EAAM,OAAQR,IAAK,CACrC,IAAIS,EAAaD,EAAMR,CAAC,EACxBS,EAAW,WAAaA,EAAW,YAAc,GACjDA,EAAW,aAAe,GACtB,UAAWA,IAAYA,EAAW,SAAW,IACjD,OAAO,eAAeF,EAAQN,EAAeQ,EAAW,GAAG,EAAGA,CAAU,CAC1E,CACF,CARSb,EAAAU,EAAA,qBAST,SAASI,EAAaL,EAAaM,EAAYC,EAAa,CAC1D,OAAID,GAAYL,EAAkBD,EAAY,UAAWM,CAAU,EAC/DC,GAAaN,EAAkBD,EAAaO,CAAW,EAC3D,OAAO,eAAeP,EAAa,YAAa,CAC9C,SAAU,EACZ,CAAC,EACMA,CACT,CAPST,EAAAc,EAAA,gBAQT,SAASZ,EAAgBe,EAAKC,EAAKC,EAAO,CACxC,OAAAD,EAAMb,EAAea,CAAG,EACpBA,KAAOD,EACT,OAAO,eAAeA,EAAKC,EAAK,CAC9B,MAAOC,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EACZ,CAAC,EAEDF,EAAIC,CAAG,EAAIC,EAENF,CACT,CAbSjB,EAAAE,EAAA,mBAcT,SAASkB,EAAmBC,EAAK,CAC/B,OAAOC,EAAmBD,CAAG,GAAKE,EAAiBF,CAAG,GAAKG,EAA4BH,CAAG,GAAKI,EAAmB,CACpH,CAFSzB,EAAAoB,EAAA,sBAGT,SAASE,EAAmBD,EAAK,CAC/B,GAAI,MAAM,QAAQA,CAAG,EAAG,OAAOK,EAAkBL,CAAG,CACtD,CAFSrB,EAAAsB,EAAA,sBAGT,SAASC,EAAiBI,EAAM,CAC9B,GAAI,OAAO,OAAW,KAAeA,EAAK,OAAO,QAAQ,GAAK,MAAQA,EAAK,YAAY,GAAK,KAAM,OAAO,MAAM,KAAKA,CAAI,CAC1H,CAFS3B,EAAAuB,EAAA,oBAGT,SAASC,EAA4BzB,EAAG6B,EAAQ,CAC9C,GAAK7B,EACL,IAAI,OAAOA,GAAM,SAAU,OAAO2B,EAAkB3B,EAAG6B,CAAM,EAC7D,IAAIC,EAAI,OAAO,UAAU,SAAS,KAAK9B,CAAC,EAAE,MAAM,EAAG,EAAE,EAErD,GADI8B,IAAM,UAAY9B,EAAE,cAAa8B,EAAI9B,EAAE,YAAY,MACnD8B,IAAM,OAASA,IAAM,MAAO,OAAO,MAAM,KAAK9B,CAAC,EACnD,GAAI8B,IAAM,aAAe,2CAA2C,KAAKA,CAAC,EAAG,OAAOH,EAAkB3B,EAAG6B,CAAM,EACjH,CAPS5B,EAAAwB,EAAA,+BAQT,SAASE,EAAkBL,EAAKS,EAAK,EAC/BA,GAAO,MAAQA,EAAMT,EAAI,UAAQS,EAAMT,EAAI,QAC/C,QAASjB,EAAI,EAAG2B,EAAO,IAAI,MAAMD,CAAG,EAAG1B,EAAI0B,EAAK1B,IAAK2B,EAAK3B,CAAC,EAAIiB,EAAIjB,CAAC,EACpE,OAAO2B,CACT,CAJS/B,EAAA0B,EAAA,qBAKT,SAASD,GAAqB,CAC5B,MAAM,IAAI,UAAU;AAAA,mFAAsI,CAC5J,CAFSzB,EAAAyB,EAAA,sBAIT,IAAIO,EAAa,OAAO,OAAW,KAAe,OAAO,OAAO,SAAa,IACzEC,EAASD,EAAa,OAAS,CAAC,EAChCE,EAAkBF,GAAcC,EAAO,SAAS,gBAAkB,iBAAkBA,EAAO,SAAS,gBAAkB,GACtHE,EAAoBH,EAAa,iBAAkBC,EAAS,GAC5DG,EAAY,UAGZC,EAAa,MACbC,EAAc,OACdC,EAAc,OACdC,EAAc,OACdC,EAAc,IACdC,EAAc,IACdC,GAAe,IACfC,GAAe,IACfC,GAAoB,KACpBC,GAAoB,KACpBC,GAAoB,KACpBC,GAAoB,KAGpBC,EAAa,GAAG,OAAOb,EAAW,OAAO,EACzCc,EAAiB,GAAG,OAAOd,EAAW,WAAW,EACjDe,EAAe,GAAG,OAAOf,EAAW,SAAS,EAC7CgB,EAAa,GAAG,OAAOhB,EAAW,OAAO,EACzCiB,EAAkB,GAAG,OAAOjB,EAAW,YAAY,EACnDkB,EAAc,GAAG,OAAOlB,EAAW,QAAQ,EAC3CmB,EAAa,GAAG,OAAOnB,EAAW,OAAO,EAGzCoB,EAAc,GAAG,OAAOpB,EAAW,QAAQ,EAC3CqB,EAAe,GAAG,OAAOrB,EAAW,SAAS,EAG7CsB,EAAiB,OACjBC,EAAiB,OACjBC,EAAiB,OAGjBC,GAAa,OACbC,GAAiB,UACjBC,GAAkB,WAClBC,GAAmB,YACnBC,GAAiB,WACjBC,GAAoBhC,EAAkB,aAAe,YACrDiC,GAAmBjC,EAAkB,YAAc,YACnDkC,GAAkBlC,EAAkB,uBAAyB,UAC7DmC,GAAqBlC,EAAoB,cAAgB+B,GACzDI,GAAqBnC,EAAoB,cAAgBgC,GACzDI,GAAmBpC,EAAoB,0BAA4BiC,GACnEI,GAAc,QACdC,GAAe,SACfC,GAAc,QACdC,GAAa,OAGbC,GAAiB,aAGjBC,GAAiB,2CACjBC,GAAkB,SAClBC,GAAuB,4BACvBC,GAAkB,gBAIlBC,GAAsB,IACtBC,GAAuB,IAEvBC,GAAW,CAEb,SAAU,EAIV,SAAUzB,EAIV,mBAAoB,IAEpB,YAAa,IAEb,KAAM,KAEN,QAAS,GAET,WAAY,GAEZ,QAAS,GAET,iBAAkB,GAElB,iBAAkB,GAElB,MAAO,GAEP,OAAQ,GAER,OAAQ,GAER,UAAW,GAEX,WAAY,GAEZ,SAAU,GAEV,aAAc,GAEd,QAAS,GAET,UAAW,GAEX,SAAU,GAEV,SAAU,GAEV,YAAa,GAEb,YAAa,GAEb,eAAgB,GAEhB,eAAgB,GAEhB,iBAAkB,GAElB,yBAA0B,GAE1B,eAAgB,EAChB,gBAAiB,EACjB,gBAAiB,EACjB,iBAAkB,EAClB,kBAAmBuB,GACnB,mBAAoBC,GAEpB,MAAO,KACP,UAAW,KACX,SAAU,KACV,QAAS,KACT,KAAM,KACN,KAAM,IACR,EAEIE,GAAW,orCAKXC,GAAQ,OAAO,OAASpD,EAAO,MAOnC,SAASqD,GAASnE,EAAO,CACvB,OAAO,OAAOA,GAAU,UAAY,CAACkE,GAAMlE,CAAK,CAClD,CAFSnB,EAAAsF,GAAA,YAST,IAAIC,GAAmBvF,EAAA,SAA0BmB,EAAO,CACtD,OAAOA,EAAQ,GAAKA,EAAQ,GAC9B,EAFuB,oBASvB,SAASqE,GAAYrE,EAAO,CAC1B,OAAO,OAAOA,EAAU,GAC1B,CAFSnB,EAAAwF,GAAA,eAST,SAASC,GAAStE,EAAO,CACvB,OAAOb,EAAQa,CAAK,IAAM,UAAYA,IAAU,IAClD,CAFSnB,EAAAyF,GAAA,YAGT,IAAIC,GAAiB,OAAO,UAAU,eAOtC,SAASC,GAAcxE,EAAO,CAC5B,GAAI,CAACsE,GAAStE,CAAK,EACjB,MAAO,GAET,GAAI,CACF,IAAIyE,EAAezE,EAAM,YACrB0E,EAAYD,EAAa,UAC7B,OAAOA,GAAgBC,GAAaH,GAAe,KAAKG,EAAW,eAAe,CACpF,MAAgB,CACd,MAAO,EACT,CACF,CAXS7F,EAAA2F,GAAA,iBAkBT,SAASG,GAAW3E,EAAO,CACzB,OAAO,OAAOA,GAAU,UAC1B,CAFSnB,EAAA8F,GAAA,cAGT,IAAIC,GAAQ,MAAM,UAAU,MAO5B,SAASC,GAAQ7E,EAAO,CACtB,OAAO,MAAM,KAAO,MAAM,KAAKA,CAAK,EAAI4E,GAAM,KAAK5E,CAAK,CAC1D,CAFSnB,EAAAgG,GAAA,WAUT,SAASC,GAAQC,EAAMC,EAAU,CAC/B,OAAID,GAAQJ,GAAWK,CAAQ,IACzB,MAAM,QAAQD,CAAI,GAAKZ,GAASY,EAAK,MAAM,EAC7CF,GAAQE,CAAI,EAAE,QAAQ,SAAU/E,EAAOD,EAAK,CAC1CiF,EAAS,KAAKD,EAAM/E,EAAOD,EAAKgF,CAAI,CACtC,CAAC,EACQT,GAASS,CAAI,GACtB,OAAO,KAAKA,CAAI,EAAE,QAAQ,SAAUhF,EAAK,CACvCiF,EAAS,KAAKD,EAAMA,EAAKhF,CAAG,EAAGA,EAAKgF,CAAI,CAC1C,CAAC,GAGEA,CACT,CAbSlG,EAAAiG,GAAA,WAqBT,IAAIG,GAAS,OAAO,QAAUpG,EAAA,SAAgBW,EAAQ,CACpD,QAAS0F,EAAO,UAAU,OAAQC,EAAO,IAAI,MAAMD,EAAO,EAAIA,EAAO,EAAI,CAAC,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IAClGD,EAAKC,EAAO,CAAC,EAAI,UAAUA,CAAI,EAEjC,OAAId,GAAS9E,CAAM,GAAK2F,EAAK,OAAS,GACpCA,EAAK,QAAQ,SAAUE,EAAK,CACtBf,GAASe,CAAG,GACd,OAAO,KAAKA,CAAG,EAAE,QAAQ,SAAUtF,EAAK,CACtCP,EAAOO,CAAG,EAAIsF,EAAItF,CAAG,CACvB,CAAC,CAEL,CAAC,EAEIP,CACT,EAd8B,UAe1B8F,GAAkB,uBAStB,SAASC,GAAuBvF,EAAO,CACrC,IAAIwF,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAChF,OAAOF,GAAgB,KAAKtF,CAAK,EAAI,KAAK,MAAMA,EAAQwF,CAAK,EAAIA,EAAQxF,CAC3E,CAHSnB,EAAA0G,GAAA,0BAIT,IAAIE,GAAgB,+CAOpB,SAASC,GAASC,EAASC,EAAQ,CACjC,IAAIC,EAAQF,EAAQ,MACpBb,GAAQc,EAAQ,SAAU5F,EAAO8F,EAAU,CACrCL,GAAc,KAAKK,CAAQ,GAAK3B,GAASnE,CAAK,IAChDA,EAAQ,GAAG,OAAOA,EAAO,IAAI,GAE/B6F,EAAMC,CAAQ,EAAI9F,CACpB,CAAC,CACH,CARSnB,EAAA6G,GAAA,YAgBT,SAASK,GAASJ,EAAS3F,EAAO,CAChC,OAAO2F,EAAQ,UAAYA,EAAQ,UAAU,SAAS3F,CAAK,EAAI2F,EAAQ,UAAU,QAAQ3F,CAAK,EAAI,EACpG,CAFSnB,EAAAkH,GAAA,YAST,SAASC,GAASL,EAAS3F,EAAO,CAChC,GAAKA,EAGL,IAAImE,GAASwB,EAAQ,MAAM,EAAG,CAC5Bb,GAAQa,EAAS,SAAUM,EAAM,CAC/BD,GAASC,EAAMjG,CAAK,CACtB,CAAC,EACD,MACF,CACA,GAAI2F,EAAQ,UAAW,CACrBA,EAAQ,UAAU,IAAI3F,CAAK,EAC3B,MACF,CACA,IAAIkG,EAAYP,EAAQ,UAAU,KAAK,EAClCO,EAEMA,EAAU,QAAQlG,CAAK,EAAI,IACpC2F,EAAQ,UAAY,GAAG,OAAOO,EAAW,GAAG,EAAE,OAAOlG,CAAK,GAF1D2F,EAAQ,UAAY3F,EAIxB,CApBSnB,EAAAmH,GAAA,YA2BT,SAASG,GAAYR,EAAS3F,EAAO,CACnC,GAAKA,EAGL,IAAImE,GAASwB,EAAQ,MAAM,EAAG,CAC5Bb,GAAQa,EAAS,SAAUM,EAAM,CAC/BE,GAAYF,EAAMjG,CAAK,CACzB,CAAC,EACD,MACF,CACA,GAAI2F,EAAQ,UAAW,CACrBA,EAAQ,UAAU,OAAO3F,CAAK,EAC9B,MACF,CACI2F,EAAQ,UAAU,QAAQ3F,CAAK,GAAK,IACtC2F,EAAQ,UAAYA,EAAQ,UAAU,QAAQ3F,EAAO,EAAE,GAE3D,CAjBSnB,EAAAsH,GAAA,eAyBT,SAASC,GAAYT,EAAS3F,EAAOqG,EAAO,CAC1C,GAAKrG,EAGL,IAAImE,GAASwB,EAAQ,MAAM,EAAG,CAC5Bb,GAAQa,EAAS,SAAUM,EAAM,CAC/BG,GAAYH,EAAMjG,EAAOqG,CAAK,CAChC,CAAC,EACD,MACF,CAGIA,EACFL,GAASL,EAAS3F,CAAK,EAEvBmG,GAAYR,EAAS3F,CAAK,EAE9B,CAjBSnB,EAAAuH,GAAA,eAkBT,IAAIE,GAAoB,oBAOxB,SAASC,GAAYvG,EAAO,CAC1B,OAAOA,EAAM,QAAQsG,GAAmB,OAAO,EAAE,YAAY,CAC/D,CAFSzH,EAAA0H,GAAA,eAUT,SAASC,GAAQb,EAASc,EAAM,CAC9B,OAAInC,GAASqB,EAAQc,CAAI,CAAC,EACjBd,EAAQc,CAAI,EAEjBd,EAAQ,QACHA,EAAQ,QAAQc,CAAI,EAEtBd,EAAQ,aAAa,QAAQ,OAAOY,GAAYE,CAAI,CAAC,CAAC,CAC/D,CARS5H,EAAA2H,GAAA,WAgBT,SAASE,GAAQf,EAASc,EAAM1B,EAAM,CAChCT,GAASS,CAAI,EACfY,EAAQc,CAAI,EAAI1B,EACPY,EAAQ,QACjBA,EAAQ,QAAQc,CAAI,EAAI1B,EAExBY,EAAQ,aAAa,QAAQ,OAAOY,GAAYE,CAAI,CAAC,EAAG1B,CAAI,CAEhE,CARSlG,EAAA6H,GAAA,WAeT,SAASC,GAAWhB,EAASc,EAAM,CACjC,GAAInC,GAASqB,EAAQc,CAAI,CAAC,EACxB,GAAI,CACF,OAAOd,EAAQc,CAAI,CACrB,MAAgB,CACdd,EAAQc,CAAI,EAAI,MAClB,SACSd,EAAQ,QAEjB,GAAI,CACF,OAAOA,EAAQ,QAAQc,CAAI,CAC7B,MAAgB,CACdd,EAAQ,QAAQc,CAAI,EAAI,MAC1B,MAEAd,EAAQ,gBAAgB,QAAQ,OAAOY,GAAYE,CAAI,CAAC,CAAC,CAE7D,CAjBS5H,EAAA8H,GAAA,cAkBT,IAAIC,GAAgB,QAChBC,IAAgB,UAAY,CAC9B,IAAIC,EAAY,GAChB,GAAIjG,EAAY,CACd,IAAIkG,EAAO,GACPC,EAAWnI,EAAA,UAAoB,CAAC,EAArB,YACXoI,EAAU,OAAO,eAAe,CAAC,EAAG,OAAQ,CAC9C,IAAKpI,EAAA,UAAe,CAClB,OAAAiI,EAAY,GACLC,CACT,EAHK,OASL,IAAKlI,EAAA,SAAamB,EAAO,CACvB+G,EAAO/G,CACT,EAFK,MAGP,CAAC,EACDc,EAAO,iBAAiB,OAAQkG,EAAUC,CAAO,EACjDnG,EAAO,oBAAoB,OAAQkG,EAAUC,CAAO,CACtD,CACA,OAAOH,CACT,GAAE,EASF,SAASI,GAAevB,EAASwB,EAAMH,EAAU,CAC/C,IAAIC,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC/EG,EAAUJ,EACdG,EAAK,KAAK,EAAE,MAAMP,EAAa,EAAE,QAAQ,SAAUS,EAAO,CACxD,GAAI,CAACR,GAAe,CAClB,IAAIS,EAAY3B,EAAQ,UACpB2B,GAAaA,EAAUD,CAAK,GAAKC,EAAUD,CAAK,EAAEL,CAAQ,IAC5DI,EAAUE,EAAUD,CAAK,EAAEL,CAAQ,EACnC,OAAOM,EAAUD,CAAK,EAAEL,CAAQ,EAC5B,OAAO,KAAKM,EAAUD,CAAK,CAAC,EAAE,SAAW,GAC3C,OAAOC,EAAUD,CAAK,EAEpB,OAAO,KAAKC,CAAS,EAAE,SAAW,GACpC,OAAO3B,EAAQ,UAGrB,CACAA,EAAQ,oBAAoB0B,EAAOD,EAASH,CAAO,CACrD,CAAC,CACH,CAnBSpI,EAAAqI,GAAA,kBA4BT,SAASK,GAAY5B,EAASwB,EAAMH,EAAU,CAC5C,IAAIC,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC/EO,EAAWR,EACfG,EAAK,KAAK,EAAE,MAAMP,EAAa,EAAE,QAAQ,SAAUS,EAAO,CACxD,GAAIJ,EAAQ,MAAQ,CAACJ,GAAe,CAClC,IAAIY,EAAqB9B,EAAQ,UAC/B2B,EAAYG,IAAuB,OAAS,CAAC,EAAIA,EACnDD,EAAW3I,EAAA,UAAmB,CAC5B,OAAOyI,EAAUD,CAAK,EAAEL,CAAQ,EAChCrB,EAAQ,oBAAoB0B,EAAOG,EAAUP,CAAO,EACpD,QAASS,EAAQ,UAAU,OAAQvC,EAAO,IAAI,MAAMuC,CAAK,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFxC,EAAKwC,CAAK,EAAI,UAAUA,CAAK,EAE/BX,EAAS,MAAMrB,EAASR,CAAI,CAC9B,EAPW,WAQNmC,EAAUD,CAAK,IAClBC,EAAUD,CAAK,EAAI,CAAC,GAElBC,EAAUD,CAAK,EAAEL,CAAQ,GAC3BrB,EAAQ,oBAAoB0B,EAAOC,EAAUD,CAAK,EAAEL,CAAQ,EAAGC,CAAO,EAExEK,EAAUD,CAAK,EAAEL,CAAQ,EAAIQ,EAC7B7B,EAAQ,UAAY2B,CACtB,CACA3B,EAAQ,iBAAiB0B,EAAOG,EAAUP,CAAO,CACnD,CAAC,CACH,CA1BSpI,EAAA0I,GAAA,eAmCT,SAASK,GAAcjC,EAASwB,EAAMpC,EAAM,CAC1C,IAAIsC,EAGJ,OAAI1C,GAAW,KAAK,GAAKA,GAAW,WAAW,EAC7C0C,EAAQ,IAAI,YAAYF,EAAM,CAC5B,OAAQpC,EACR,QAAS,GACT,WAAY,EACd,CAAC,GAEDsC,EAAQ,SAAS,YAAY,aAAa,EAC1CA,EAAM,gBAAgBF,EAAM,GAAM,GAAMpC,CAAI,GAEvCY,EAAQ,cAAc0B,CAAK,CACpC,CAfSxI,EAAA+I,GAAA,iBAsBT,SAASC,GAAUlC,EAAS,CAC1B,IAAImC,EAAMnC,EAAQ,sBAAsB,EACxC,MAAO,CACL,KAAMmC,EAAI,MAAQ,OAAO,YAAc,SAAS,gBAAgB,YAChE,IAAKA,EAAI,KAAO,OAAO,YAAc,SAAS,gBAAgB,UAChE,CACF,CANSjJ,EAAAgJ,GAAA,aAOT,IAAIE,GAAWjH,EAAO,SAClBkH,GAAiB,gCAOrB,SAASC,GAAiBC,EAAK,CAC7B,IAAIC,EAAQD,EAAI,MAAMF,EAAc,EACpC,OAAOG,IAAU,OAASA,EAAM,CAAC,IAAMJ,GAAS,UAAYI,EAAM,CAAC,IAAMJ,GAAS,UAAYI,EAAM,CAAC,IAAMJ,GAAS,KACtH,CAHSlJ,EAAAoJ,GAAA,oBAUT,SAASG,GAAaF,EAAK,CACzB,IAAIG,EAAY,aAAa,OAAO,IAAI,KAAK,EAAE,QAAQ,CAAC,EACxD,OAAOH,GAAOA,EAAI,QAAQ,GAAG,IAAM,GAAK,IAAM,KAAOG,CACvD,CAHSxJ,EAAAuJ,GAAA,gBAUT,SAASE,GAAcC,EAAM,CAC3B,IAAIC,EAASD,EAAK,OAChBE,EAASF,EAAK,OACdG,EAASH,EAAK,OACdI,EAAaJ,EAAK,WAClBK,EAAaL,EAAK,WAChBM,EAAS,CAAC,EACV1E,GAASwE,CAAU,GAAKA,IAAe,GACzCE,EAAO,KAAK,cAAc,OAAOF,EAAY,KAAK,CAAC,EAEjDxE,GAASyE,CAAU,GAAKA,IAAe,GACzCC,EAAO,KAAK,cAAc,OAAOD,EAAY,KAAK,CAAC,EAIjDzE,GAASqE,CAAM,GAAKA,IAAW,GACjCK,EAAO,KAAK,UAAU,OAAOL,EAAQ,MAAM,CAAC,EAE1CrE,GAASsE,CAAM,GAAKA,IAAW,GACjCI,EAAO,KAAK,UAAU,OAAOJ,EAAQ,GAAG,CAAC,EAEvCtE,GAASuE,CAAM,GAAKA,IAAW,GACjCG,EAAO,KAAK,UAAU,OAAOH,EAAQ,GAAG,CAAC,EAE3C,IAAII,EAAYD,EAAO,OAASA,EAAO,KAAK,GAAG,EAAI,OACnD,MAAO,CACL,gBAAiBC,EACjB,YAAaA,EACb,UAAWA,CACb,CACF,CA9BSjK,EAAAyJ,GAAA,iBAqCT,SAASS,GAAgBC,EAAU,CACjC,IAAIC,EAAYnK,EAAe,CAAC,EAAGkK,CAAQ,EACvCE,EAAW,EACf,OAAApE,GAAQkE,EAAU,SAAUG,EAASC,EAAW,CAC9C,OAAOH,EAAUG,CAAS,EAC1BtE,GAAQmE,EAAW,SAAUI,EAAU,CACrC,IAAIC,EAAK,KAAK,IAAIH,EAAQ,OAASE,EAAS,MAAM,EAC9CE,EAAK,KAAK,IAAIJ,EAAQ,OAASE,EAAS,MAAM,EAC9CG,EAAK,KAAK,IAAIL,EAAQ,KAAOE,EAAS,IAAI,EAC1CI,EAAK,KAAK,IAAIN,EAAQ,KAAOE,EAAS,IAAI,EAC1CK,EAAK,KAAK,KAAKJ,EAAKA,EAAKC,EAAKA,CAAE,EAChCI,EAAK,KAAK,KAAKH,EAAKA,EAAKC,EAAKA,CAAE,EAChCG,GAASD,EAAKD,GAAMA,EACpB,KAAK,IAAIE,CAAK,EAAI,KAAK,IAAIV,CAAQ,IACrCA,EAAWU,EAEf,CAAC,CACH,CAAC,EACMV,CACT,CAnBSrK,EAAAkK,GAAA,mBA2BT,SAASc,GAAWC,EAAOC,EAAS,CAClC,IAAIC,EAAQF,EAAM,MAChBG,EAAQH,EAAM,MACZI,EAAM,CACR,KAAMF,EACN,KAAMC,CACR,EACA,OAAOF,EAAUG,EAAMpL,EAAe,CACpC,OAAQkL,EACR,OAAQC,CACV,EAAGC,CAAG,CACR,CAXSrL,EAAAgL,GAAA,cAkBT,SAASM,GAAkBnB,EAAU,CACnC,IAAIgB,EAAQ,EACRC,EAAQ,EACRG,EAAQ,EACZ,OAAAtF,GAAQkE,EAAU,SAAUqB,EAAO,CACjC,IAAIC,EAASD,EAAM,OACjBE,EAASF,EAAM,OACjBL,GAASM,EACTL,GAASM,EACTH,GAAS,CACX,CAAC,EACDJ,GAASI,EACTH,GAASG,EACF,CACL,MAAOJ,EACP,MAAOC,CACT,CACF,CAjBSpL,EAAAsL,GAAA,qBAyBT,SAASK,GAAiBC,EAAO,CAC/B,IAAIC,EAAcD,EAAM,YACtBE,EAASF,EAAM,OACfG,EAAQH,EAAM,MACZtD,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,UAC3E0D,EAAezG,GAAiBwG,CAAK,EACrCE,EAAgB1G,GAAiBuG,CAAM,EAC3C,GAAIE,GAAgBC,EAAe,CACjC,IAAIC,EAAgBJ,EAASD,EACzBvD,IAAS,WAAa4D,EAAgBH,GAASzD,IAAS,SAAW4D,EAAgBH,EACrFD,EAASC,EAAQF,EAEjBE,EAAQD,EAASD,CAErB,MAAWG,EACTF,EAASC,EAAQF,EACRI,IACTF,EAAQD,EAASD,GAEnB,MAAO,CACL,MAAOE,EACP,OAAQD,CACV,CACF,CAvBS9L,EAAA2L,GAAA,oBA8BT,SAASQ,GAAgBC,EAAO,CAC9B,IAAIL,EAAQK,EAAM,MAChBN,EAASM,EAAM,OACfC,EAASD,EAAM,OAEjB,GADAC,EAAS,KAAK,IAAIA,CAAM,EAAI,IACxBA,IAAW,GACb,MAAO,CACL,MAAOP,EACP,OAAQC,CACV,EAEF,IAAIO,EAAMD,EAAS,GAAK,KAAK,GAAK,IAC9BE,EAAS,KAAK,IAAID,CAAG,EACrBE,EAAS,KAAK,IAAIF,CAAG,EACrBG,EAAWV,EAAQS,EAASV,EAASS,EACrCG,EAAYX,EAAQQ,EAAST,EAASU,EAC1C,OAAOH,EAAS,GAAK,CACnB,MAAOK,EACP,OAAQD,CACV,EAAI,CACF,MAAOA,EACP,OAAQC,CACV,CACF,CAvBS1M,EAAAmM,GAAA,mBAiCT,SAASQ,GAAgBC,EAAOC,EAAOC,EAAOC,EAAO,CACnD,IAAIC,EAAmBH,EAAM,YAC3BI,EAAoBJ,EAAM,aAC1BK,EAAqBL,EAAM,cAC3BM,EAAeN,EAAM,OACrBlD,EAASwD,IAAiB,OAAS,EAAIA,EACvCC,EAAeP,EAAM,OACrBjD,EAASwD,IAAiB,OAAS,EAAIA,EACvCC,EAAeR,EAAM,OACrBhD,EAASwD,IAAiB,OAAS,EAAIA,EACrCxB,GAAciB,EAAM,YACtBQ,GAAeR,EAAM,aACrBS,GAAgBT,EAAM,cACpBU,GAAkBT,EAAM,UAC1BU,GAAYD,KAAoB,OAAS,cAAgBA,GACzDE,GAAwBX,EAAM,sBAC9BY,GAAwBD,KAA0B,OAAS,GAAOA,GAClEE,GAAwBb,EAAM,sBAC9Bc,GAAwBD,KAA0B,OAAS,MAAQA,GACnEE,EAAiBf,EAAM,SACvBgB,GAAWD,IAAmB,OAAS,IAAWA,EAClDE,GAAkBjB,EAAM,UACxBkB,GAAYD,KAAoB,OAAS,IAAWA,GACpDE,GAAiBnB,EAAM,SACvBoB,GAAWD,KAAmB,OAAS,EAAIA,GAC3CE,GAAkBrB,EAAM,UACxBsB,GAAYD,KAAoB,OAAS,EAAIA,GAC3CE,GAAS,SAAS,cAAc,QAAQ,EACxCC,GAAUD,GAAO,WAAW,IAAI,EAChCE,GAAW7C,GAAiB,CAC9B,YAAaE,GACb,MAAOkC,GACP,OAAQE,EACV,CAAC,EACGQ,GAAW9C,GAAiB,CAC9B,YAAaE,GACb,MAAOsC,GACP,OAAQE,EACV,EAAG,OAAO,EACNtC,GAAQ,KAAK,IAAIyC,GAAS,MAAO,KAAK,IAAIC,GAAS,MAAOnB,EAAY,CAAC,EACvExB,GAAS,KAAK,IAAI0C,GAAS,OAAQ,KAAK,IAAIC,GAAS,OAAQlB,EAAa,CAAC,EAI3EmB,GAAe/C,GAAiB,CAClC,YAAaqB,EACb,MAAOe,GACP,OAAQE,EACV,CAAC,EACGU,GAAehD,GAAiB,CAClC,YAAaqB,EACb,MAAOmB,GACP,OAAQE,EACV,EAAG,OAAO,EACNO,GAAY,KAAK,IAAIF,GAAa,MAAO,KAAK,IAAIC,GAAa,MAAO1B,CAAiB,CAAC,EACxF4B,GAAa,KAAK,IAAIH,GAAa,OAAQ,KAAK,IAAIC,GAAa,OAAQzB,CAAkB,CAAC,EAC5F4B,GAAS,CAAC,CAACF,GAAY,EAAG,CAACC,GAAa,EAAGD,GAAWC,EAAU,EACpE,OAAAP,GAAO,MAAQ5H,GAAuBqF,EAAK,EAC3CuC,GAAO,OAAS5H,GAAuBoF,EAAM,EAC7CyC,GAAQ,UAAYd,GACpBc,GAAQ,SAAS,EAAG,EAAGxC,GAAOD,EAAM,EACpCyC,GAAQ,KAAK,EACbA,GAAQ,UAAUxC,GAAQ,EAAGD,GAAS,CAAC,EACvCyC,GAAQ,OAAO5E,EAAS,KAAK,GAAK,GAAG,EACrC4E,GAAQ,MAAM3E,EAAQC,CAAM,EAC5B0E,GAAQ,sBAAwBZ,GAChCY,GAAQ,sBAAwBV,GAChCU,GAAQ,UAAU,MAAMA,GAAS,CAAC3B,CAAK,EAAE,OAAOxL,EAAmB0N,GAAO,IAAI,SAAUC,GAAO,CAC7F,OAAO,KAAK,MAAMrI,GAAuBqI,EAAK,CAAC,CACjD,CAAC,CAAC,CAAC,CAAC,EACJR,GAAQ,QAAQ,EACTD,EACT,CAxEStO,EAAA2M,GAAA,mBAyET,IAAIqC,GAAe,OAAO,aAS1B,SAASC,GAAsBC,EAAUC,EAAOC,EAAQ,CACtD,IAAIC,EAAM,GACVD,GAAUD,EACV,QAAS/O,EAAI+O,EAAO/O,EAAIgP,EAAQhP,GAAK,EACnCiP,GAAOL,GAAaE,EAAS,SAAS9O,CAAC,CAAC,EAE1C,OAAOiP,CACT,CAPSrP,EAAAiP,GAAA,yBAQT,IAAIK,GAAuB,YAO3B,SAASC,GAAqBC,EAAS,CACrC,IAAIC,EAASD,EAAQ,QAAQF,GAAsB,EAAE,EACjDI,EAAS,KAAKD,CAAM,EACpBE,EAAc,IAAI,YAAYD,EAAO,MAAM,EAC3CE,EAAQ,IAAI,WAAWD,CAAW,EACtC,OAAA1J,GAAQ2J,EAAO,SAAUzO,EAAOf,EAAG,CACjCwP,EAAMxP,CAAC,EAAIsP,EAAO,WAAWtP,CAAC,CAChC,CAAC,EACMuP,CACT,CATS3P,EAAAuP,GAAA,wBAiBT,SAASM,GAAqBF,EAAaG,EAAU,CAMnD,QALIC,EAAS,CAAC,EAGVC,EAAY,KACZJ,EAAQ,IAAI,WAAWD,CAAW,EAC/BC,EAAM,OAAS,GAGpBG,EAAO,KAAKf,GAAa,MAAM,KAAMhJ,GAAQ4J,EAAM,SAAS,EAAGI,CAAS,CAAC,CAAC,CAAC,EAC3EJ,EAAQA,EAAM,SAASI,CAAS,EAElC,MAAO,QAAQ,OAAOF,EAAU,UAAU,EAAE,OAAO,KAAKC,EAAO,KAAK,EAAE,CAAC,CAAC,CAC1E,CAbS/P,EAAA6P,GAAA,wBAoBT,SAASI,GAAuBN,EAAa,CAC3C,IAAIT,EAAW,IAAI,SAASS,CAAW,EACnCO,EAGJ,GAAI,CACF,IAAIC,EACAC,EACAC,EAGJ,GAAInB,EAAS,SAAS,CAAC,IAAM,KAAQA,EAAS,SAAS,CAAC,IAAM,IAG5D,QAFIE,EAASF,EAAS,WAClBoB,EAAS,EACNA,EAAS,EAAIlB,GAAQ,CAC1B,GAAIF,EAAS,SAASoB,CAAM,IAAM,KAAQpB,EAAS,SAASoB,EAAS,CAAC,IAAM,IAAM,CAChFF,EAAYE,EACZ,KACF,CACAA,GAAU,CACZ,CAEF,GAAIF,EAAW,CACb,IAAIG,EAAaH,EAAY,EACzBI,EAAaJ,EAAY,GAC7B,GAAInB,GAAsBC,EAAUqB,EAAY,CAAC,IAAM,OAAQ,CAC7D,IAAIE,EAAavB,EAAS,UAAUsB,CAAU,EAE9C,GADAL,EAAeM,IAAe,OAC1BN,GAAgBM,IAAe,QAC7BvB,EAAS,UAAUsB,EAAa,EAAGL,CAAY,IAAM,GAAQ,CAC/D,IAAIO,EAAiBxB,EAAS,UAAUsB,EAAa,EAAGL,CAAY,EAChEO,GAAkB,IACpBL,EAAWG,EAAaE,EAE5B,CAEJ,CACF,CACA,GAAIL,EAAU,CACZ,IAAIM,EAAUzB,EAAS,UAAUmB,EAAUF,CAAY,EACnDS,GACAxQ,GACJ,IAAKA,GAAI,EAAGA,GAAIuQ,EAASvQ,IAAK,EAE5B,GADAwQ,GAAUP,EAAWjQ,GAAI,GAAK,EAC1B8O,EAAS,UAAU0B,GAAST,CAAY,IAAM,IAA0B,CAE1ES,IAAW,EAGXV,EAAchB,EAAS,UAAU0B,GAAST,CAAY,EAGtDjB,EAAS,UAAU0B,GAAS,EAAGT,CAAY,EAC3C,KACF,CAEJ,CACF,MAAgB,CACdD,EAAc,CAChB,CACA,OAAOA,CACT,CA7DSlQ,EAAAiQ,GAAA,0BAoET,SAASY,GAAiBX,EAAa,CACrC,IAAIvG,EAAS,EACTC,EAAS,EACTC,EAAS,EACb,OAAQqG,EAAa,CAEnB,IAAK,GACHtG,EAAS,GACT,MAGF,IAAK,GACHD,EAAS,KACT,MAGF,IAAK,GACHE,EAAS,GACT,MAGF,IAAK,GACHF,EAAS,GACTE,EAAS,GACT,MAGF,IAAK,GACHF,EAAS,GACT,MAGF,IAAK,GACHA,EAAS,GACTC,EAAS,GACT,MAGF,IAAK,GACHD,EAAS,IACT,KACJ,CACA,MAAO,CACL,OAAQA,EACR,OAAQC,EACR,OAAQC,CACV,CACF,CA/CS7J,EAAA6Q,GAAA,oBAiDT,IAAIC,GAAS,CACX,OAAQ9Q,EAAA,UAAkB,CACxB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EACd,KAAK,SACP,KAAK,cAAc,CAEvB,EARQ,UASR,cAAeA,EAAA,UAAyB,CACtC,IAAI8G,EAAU,KAAK,QACjBsB,EAAU,KAAK,QACf2I,EAAY,KAAK,UACjBC,EAAU,KAAK,QACb7C,EAAW,OAAO/F,EAAQ,iBAAiB,EAC3CiG,EAAY,OAAOjG,EAAQ,kBAAkB,EACjDjB,GAAS6J,EAAS7N,CAAY,EAC9BmE,GAAYR,EAAS3D,CAAY,EACjC,IAAI8N,EAAgB,CAClB,MAAO,KAAK,IAAIF,EAAU,YAAa5C,GAAY,EAAIA,EAAWlJ,EAAmB,EACrF,OAAQ,KAAK,IAAI8L,EAAU,aAAc1C,GAAa,EAAIA,EAAYnJ,EAAoB,CAC5F,EACA,KAAK,cAAgB+L,EACrBpK,GAASmK,EAAS,CAChB,MAAOC,EAAc,MACrB,OAAQA,EAAc,MACxB,CAAC,EACD9J,GAASL,EAAS3D,CAAY,EAC9BmE,GAAY0J,EAAS7N,CAAY,CACnC,EApBe,iBAsBf,WAAYnD,EAAA,UAAsB,CAChC,IAAIiR,EAAgB,KAAK,cACvBC,EAAY,KAAK,UACfC,EAAW,KAAK,QAAQ,SACxBC,EAAU,KAAK,IAAIF,EAAU,MAAM,EAAI,MAAQ,GAC/C5D,EAAe8D,EAAUF,EAAU,cAAgBA,EAAU,aAC7D3D,EAAgB6D,EAAUF,EAAU,aAAeA,EAAU,cAC7DrF,EAAcyB,EAAeC,EAC7B8D,EAAcJ,EAAc,MAC5BK,EAAeL,EAAc,OAC7BA,EAAc,OAASpF,EAAcoF,EAAc,MACjDE,IAAa,EACfE,EAAcJ,EAAc,OAASpF,EAErCyF,EAAeL,EAAc,MAAQpF,EAE9BsF,IAAa,EACtBG,EAAeL,EAAc,MAAQpF,EAErCwF,EAAcJ,EAAc,OAASpF,EAEvC,IAAI0F,EAAa,CACf,YAAa1F,EACb,aAAcyB,EACd,cAAeC,EACf,MAAO8D,EACP,OAAQC,CACV,EACA,KAAK,WAAaC,EAClB,KAAK,QAAUJ,IAAa,GAAKA,IAAa,EAC9C,KAAK,YAAY,GAAM,EAAI,EAC3BI,EAAW,MAAQ,KAAK,IAAI,KAAK,IAAIA,EAAW,MAAOA,EAAW,QAAQ,EAAGA,EAAW,QAAQ,EAChGA,EAAW,OAAS,KAAK,IAAI,KAAK,IAAIA,EAAW,OAAQA,EAAW,SAAS,EAAGA,EAAW,SAAS,EACpGA,EAAW,MAAQN,EAAc,MAAQM,EAAW,OAAS,EAC7DA,EAAW,KAAON,EAAc,OAASM,EAAW,QAAU,EAC9DA,EAAW,QAAUA,EAAW,KAChCA,EAAW,OAASA,EAAW,IAC/B,KAAK,kBAAoBnL,GAAO,CAAC,EAAGmL,CAAU,CAChD,EAtCY,cAuCZ,YAAavR,EAAA,SAAqBwR,EAAaC,EAAiB,CAC9D,IAAIrJ,EAAU,KAAK,QACjB6I,EAAgB,KAAK,cACrBM,EAAa,KAAK,WAClBG,EAAc,KAAK,YACjBP,EAAW/I,EAAQ,SACnByD,EAAc0F,EAAW,YACzBI,EAAU,KAAK,SAAWD,EAC9B,GAAIF,EAAa,CACf,IAAII,EAAiB,OAAOxJ,EAAQ,cAAc,GAAK,EACnDyJ,EAAkB,OAAOzJ,EAAQ,eAAe,GAAK,EACrD+I,EAAW,GACbS,EAAiB,KAAK,IAAIA,EAAgBX,EAAc,KAAK,EAC7DY,EAAkB,KAAK,IAAIA,EAAiBZ,EAAc,MAAM,EAC5DE,IAAa,IACXU,EAAkBhG,EAAc+F,EAClCA,EAAiBC,EAAkBhG,EAEnCgG,EAAkBD,EAAiB/F,IAG9BsF,EAAW,IAChBS,EACFA,EAAiB,KAAK,IAAIA,EAAgBD,EAAUD,EAAY,MAAQ,CAAC,EAChEG,EACTA,EAAkB,KAAK,IAAIA,EAAiBF,EAAUD,EAAY,OAAS,CAAC,EACnEC,IACTC,EAAiBF,EAAY,MAC7BG,EAAkBH,EAAY,OAC1BG,EAAkBhG,EAAc+F,EAClCA,EAAiBC,EAAkBhG,EAEnCgG,EAAkBD,EAAiB/F,IAIzC,IAAIiG,EAAoBnG,GAAiB,CACvC,YAAaE,EACb,MAAO+F,EACP,OAAQC,CACV,CAAC,EACDD,EAAiBE,EAAkB,MACnCD,EAAkBC,EAAkB,OACpCP,EAAW,SAAWK,EACtBL,EAAW,UAAYM,EACvBN,EAAW,SAAW,IACtBA,EAAW,UAAY,GACzB,CACA,GAAIE,EACF,GAAIN,GAAYQ,EAAU,EAAI,GAAI,CAChC,IAAII,GAAgBd,EAAc,MAAQM,EAAW,MACjDS,GAAef,EAAc,OAASM,EAAW,OACrDA,EAAW,QAAU,KAAK,IAAI,EAAGQ,EAAa,EAC9CR,EAAW,OAAS,KAAK,IAAI,EAAGS,EAAY,EAC5CT,EAAW,QAAU,KAAK,IAAI,EAAGQ,EAAa,EAC9CR,EAAW,OAAS,KAAK,IAAI,EAAGS,EAAY,EACxCL,GAAW,KAAK,UAClBJ,EAAW,QAAU,KAAK,IAAIG,EAAY,KAAMA,EAAY,MAAQA,EAAY,MAAQH,EAAW,MAAM,EACzGA,EAAW,OAAS,KAAK,IAAIG,EAAY,IAAKA,EAAY,KAAOA,EAAY,OAASH,EAAW,OAAO,EACxGA,EAAW,QAAUG,EAAY,KACjCH,EAAW,OAASG,EAAY,IAC5BP,IAAa,IACXI,EAAW,OAASN,EAAc,QACpCM,EAAW,QAAU,KAAK,IAAI,EAAGQ,EAAa,EAC9CR,EAAW,QAAU,KAAK,IAAI,EAAGQ,EAAa,GAE5CR,EAAW,QAAUN,EAAc,SACrCM,EAAW,OAAS,KAAK,IAAI,EAAGS,EAAY,EAC5CT,EAAW,OAAS,KAAK,IAAI,EAAGS,EAAY,IAIpD,MACET,EAAW,QAAU,CAACA,EAAW,MACjCA,EAAW,OAAS,CAACA,EAAW,OAChCA,EAAW,QAAUN,EAAc,MACnCM,EAAW,OAASN,EAAc,MAGxC,EA/Ea,eAgFb,aAAcjR,EAAA,SAAsBiS,EAASC,EAAa,CACxD,IAAIX,EAAa,KAAK,WACpBL,EAAY,KAAK,UACnB,GAAIgB,EAAa,CACf,IAAIC,EAAmBhG,GAAgB,CACnC,MAAO+E,EAAU,aAAe,KAAK,IAAIA,EAAU,QAAU,CAAC,EAC9D,OAAQA,EAAU,cAAgB,KAAK,IAAIA,EAAU,QAAU,CAAC,EAChE,OAAQA,EAAU,QAAU,CAC9B,CAAC,EACD5D,EAAe6E,EAAiB,MAChC5E,EAAgB4E,EAAiB,OAC/BpG,EAAQwF,EAAW,OAASjE,EAAeiE,EAAW,cACtDzF,EAASyF,EAAW,QAAUhE,EAAgBgE,EAAW,eAC7DA,EAAW,OAASxF,EAAQwF,EAAW,OAAS,EAChDA,EAAW,MAAQzF,EAASyF,EAAW,QAAU,EACjDA,EAAW,MAAQxF,EACnBwF,EAAW,OAASzF,EACpByF,EAAW,YAAcjE,EAAeC,EACxCgE,EAAW,aAAejE,EAC1BiE,EAAW,cAAgBhE,EAC3B,KAAK,YAAY,GAAM,EAAK,CAC9B,EACIgE,EAAW,MAAQA,EAAW,UAAYA,EAAW,MAAQA,EAAW,YAC1EA,EAAW,KAAOA,EAAW,UAE3BA,EAAW,OAASA,EAAW,WAAaA,EAAW,OAASA,EAAW,aAC7EA,EAAW,IAAMA,EAAW,QAE9BA,EAAW,MAAQ,KAAK,IAAI,KAAK,IAAIA,EAAW,MAAOA,EAAW,QAAQ,EAAGA,EAAW,QAAQ,EAChGA,EAAW,OAAS,KAAK,IAAI,KAAK,IAAIA,EAAW,OAAQA,EAAW,SAAS,EAAGA,EAAW,SAAS,EACpG,KAAK,YAAY,GAAO,EAAI,EAC5BA,EAAW,KAAO,KAAK,IAAI,KAAK,IAAIA,EAAW,KAAMA,EAAW,OAAO,EAAGA,EAAW,OAAO,EAC5FA,EAAW,IAAM,KAAK,IAAI,KAAK,IAAIA,EAAW,IAAKA,EAAW,MAAM,EAAGA,EAAW,MAAM,EACxFA,EAAW,QAAUA,EAAW,KAChCA,EAAW,OAASA,EAAW,IAC/B1K,GAAS,KAAK,OAAQT,GAAO,CAC3B,MAAOmL,EAAW,MAClB,OAAQA,EAAW,MACrB,EAAG9H,GAAc,CACf,WAAY8H,EAAW,KACvB,WAAYA,EAAW,GACzB,CAAC,CAAC,CAAC,EACH,KAAK,YAAYU,CAAO,EACpB,KAAK,SAAW,KAAK,SACvB,KAAK,aAAa,GAAM,EAAI,CAEhC,EA9Cc,gBA+Cd,YAAajS,EAAA,SAAqBiS,EAAS,CACzC,IAAIV,EAAa,KAAK,WACpBL,EAAY,KAAK,UACfnF,EAAQmF,EAAU,cAAgBK,EAAW,MAAQA,EAAW,cAChEzF,EAASoF,EAAU,eAAiBK,EAAW,OAASA,EAAW,eACvEnL,GAAO8K,EAAW,CAChB,MAAOnF,EACP,OAAQD,EACR,MAAOyF,EAAW,MAAQxF,GAAS,EACnC,KAAMwF,EAAW,OAASzF,GAAU,CACtC,CAAC,EACDjF,GAAS,KAAK,MAAOT,GAAO,CAC1B,MAAO8K,EAAU,MACjB,OAAQA,EAAU,MACpB,EAAGzH,GAAcrD,GAAO,CACtB,WAAY8K,EAAU,KACtB,WAAYA,EAAU,GACxB,EAAGA,CAAS,CAAC,CAAC,CAAC,EACXe,GACF,KAAK,OAAO,CAEhB,EArBa,eAsBb,YAAajS,EAAA,UAAuB,CAClC,IAAIoI,EAAU,KAAK,QACjBmJ,EAAa,KAAK,WAChB1F,EAAczD,EAAQ,aAAeA,EAAQ,mBAC7CgK,EAAe,OAAOhK,EAAQ,YAAY,GAAK,GAC/CsJ,EAAc,CAChB,MAAOH,EAAW,MAClB,OAAQA,EAAW,MACrB,EACI1F,IACE0F,EAAW,OAAS1F,EAAc0F,EAAW,MAC/CG,EAAY,OAASA,EAAY,MAAQ7F,EAEzC6F,EAAY,MAAQA,EAAY,OAAS7F,GAG7C,KAAK,YAAc6F,EACnB,KAAK,aAAa,GAAM,EAAI,EAG5BA,EAAY,MAAQ,KAAK,IAAI,KAAK,IAAIA,EAAY,MAAOA,EAAY,QAAQ,EAAGA,EAAY,QAAQ,EACpGA,EAAY,OAAS,KAAK,IAAI,KAAK,IAAIA,EAAY,OAAQA,EAAY,SAAS,EAAGA,EAAY,SAAS,EAGxGA,EAAY,MAAQ,KAAK,IAAIA,EAAY,SAAUA,EAAY,MAAQU,CAAY,EACnFV,EAAY,OAAS,KAAK,IAAIA,EAAY,UAAWA,EAAY,OAASU,CAAY,EACtFV,EAAY,KAAOH,EAAW,MAAQA,EAAW,MAAQG,EAAY,OAAS,EAC9EA,EAAY,IAAMH,EAAW,KAAOA,EAAW,OAASG,EAAY,QAAU,EAC9EA,EAAY,QAAUA,EAAY,KAClCA,EAAY,OAASA,EAAY,IACjC,KAAK,mBAAqBtL,GAAO,CAAC,EAAGsL,CAAW,CAClD,EA/Ba,eAgCb,aAAc1R,EAAA,SAAsBwR,EAAaC,EAAiB,CAChE,IAAIrJ,EAAU,KAAK,QACjB6I,EAAgB,KAAK,cACrBM,EAAa,KAAK,WAClBG,EAAc,KAAK,YACnBW,EAAU,KAAK,QACbxG,EAAczD,EAAQ,YAC1B,GAAIoJ,EAAa,CACf,IAAIc,EAAkB,OAAOlK,EAAQ,eAAe,GAAK,EACrDmK,EAAmB,OAAOnK,EAAQ,gBAAgB,GAAK,EACvDoK,EAAkBH,EAAU,KAAK,IAAIpB,EAAc,MAAOM,EAAW,MAAOA,EAAW,MAAQA,EAAW,KAAMN,EAAc,MAAQM,EAAW,IAAI,EAAIN,EAAc,MACvKwB,EAAmBJ,EAAU,KAAK,IAAIpB,EAAc,OAAQM,EAAW,OAAQA,EAAW,OAASA,EAAW,IAAKN,EAAc,OAASM,EAAW,GAAG,EAAIN,EAAc,OAG9KqB,EAAkB,KAAK,IAAIA,EAAiBrB,EAAc,KAAK,EAC/DsB,EAAmB,KAAK,IAAIA,EAAkBtB,EAAc,MAAM,EAC9DpF,IACEyG,GAAmBC,EACjBA,EAAmB1G,EAAcyG,EACnCC,EAAmBD,EAAkBzG,EAErCyG,EAAkBC,EAAmB1G,EAE9ByG,EACTC,EAAmBD,EAAkBzG,EAC5B0G,IACTD,EAAkBC,EAAmB1G,GAEnC4G,EAAmB5G,EAAc2G,EACnCC,EAAmBD,EAAkB3G,EAErC2G,EAAkBC,EAAmB5G,GAKzC6F,EAAY,SAAW,KAAK,IAAIY,EAAiBE,CAAe,EAChEd,EAAY,UAAY,KAAK,IAAIa,EAAkBE,CAAgB,EACnEf,EAAY,SAAWc,EACvBd,EAAY,UAAYe,CAC1B,CACIhB,IACEY,GACFX,EAAY,QAAU,KAAK,IAAI,EAAGH,EAAW,IAAI,EACjDG,EAAY,OAAS,KAAK,IAAI,EAAGH,EAAW,GAAG,EAC/CG,EAAY,QAAU,KAAK,IAAIT,EAAc,MAAOM,EAAW,KAAOA,EAAW,KAAK,EAAIG,EAAY,MACtGA,EAAY,OAAS,KAAK,IAAIT,EAAc,OAAQM,EAAW,IAAMA,EAAW,MAAM,EAAIG,EAAY,SAEtGA,EAAY,QAAU,EACtBA,EAAY,OAAS,EACrBA,EAAY,QAAUT,EAAc,MAAQS,EAAY,MACxDA,EAAY,OAAST,EAAc,OAASS,EAAY,QAG9D,EAtDc,gBAuDd,cAAe1R,EAAA,UAAyB,CACtC,IAAIoI,EAAU,KAAK,QACjB6I,EAAgB,KAAK,cACrBS,EAAc,KAAK,aACjBA,EAAY,MAAQA,EAAY,UAAYA,EAAY,MAAQA,EAAY,YAC9EA,EAAY,KAAOA,EAAY,UAE7BA,EAAY,OAASA,EAAY,WAAaA,EAAY,OAASA,EAAY,aACjFA,EAAY,IAAMA,EAAY,QAEhCA,EAAY,MAAQ,KAAK,IAAI,KAAK,IAAIA,EAAY,MAAOA,EAAY,QAAQ,EAAGA,EAAY,QAAQ,EACpGA,EAAY,OAAS,KAAK,IAAI,KAAK,IAAIA,EAAY,OAAQA,EAAY,SAAS,EAAGA,EAAY,SAAS,EACxG,KAAK,aAAa,GAAO,EAAI,EAC7BA,EAAY,KAAO,KAAK,IAAI,KAAK,IAAIA,EAAY,KAAMA,EAAY,OAAO,EAAGA,EAAY,OAAO,EAChGA,EAAY,IAAM,KAAK,IAAI,KAAK,IAAIA,EAAY,IAAKA,EAAY,MAAM,EAAGA,EAAY,MAAM,EAC5FA,EAAY,QAAUA,EAAY,KAClCA,EAAY,OAASA,EAAY,IAC7BtJ,EAAQ,SAAWA,EAAQ,gBAE7BP,GAAQ,KAAK,KAAMrE,EAAakO,EAAY,OAAST,EAAc,OAASS,EAAY,QAAUT,EAAc,OAAS1O,EAAcF,CAAU,EAEnJwE,GAAS,KAAK,QAAST,GAAO,CAC5B,MAAOsL,EAAY,MACnB,OAAQA,EAAY,MACtB,EAAGjI,GAAc,CACf,WAAYiI,EAAY,KACxB,WAAYA,EAAY,GAC1B,CAAC,CAAC,CAAC,EACC,KAAK,SAAW,KAAK,SACvB,KAAK,YAAY,GAAM,EAAI,EAExB,KAAK,UACR,KAAK,OAAO,CAEhB,EAlCe,iBAmCf,OAAQ1R,EAAA,UAAkB,CACxB,KAAK,QAAQ,EACb+I,GAAc,KAAK,QAASlF,GAAY,KAAK,QAAQ,CAAC,CACxD,EAHQ,SAIV,EAEI6O,GAAU,CACZ,YAAa1S,EAAA,UAAuB,CAClC,IAAI8G,EAAU,KAAK,QACjB6L,EAAc,KAAK,YACjBD,EAAU,KAAK,QAAQ,QACvBrJ,EAAMsJ,EAAc,KAAK,eAAiB,KAAK,IAC/CC,EAAM9L,EAAQ,KAAO,uBACrB8F,EAAQ,SAAS,cAAc,KAAK,EAQxC,GAPI+F,IACF/F,EAAM,YAAc+F,GAEtB/F,EAAM,IAAMvD,EACZuD,EAAM,IAAMgG,EACZ,KAAK,QAAQ,YAAYhG,CAAK,EAC9B,KAAK,aAAeA,EAChB,EAAC8F,EAGL,KAAIG,EAAWH,EACX,OAAOA,GAAY,SACrBG,EAAW/L,EAAQ,cAAc,iBAAiB4L,CAAO,EAChDA,EAAQ,gBACjBG,EAAW,CAACH,CAAO,GAErB,KAAK,SAAWG,EAChB5M,GAAQ4M,EAAU,SAAUC,EAAI,CAC9B,IAAIC,EAAM,SAAS,cAAc,KAAK,EAGtClL,GAAQiL,EAAIrP,EAAc,CACxB,MAAOqP,EAAG,YACV,OAAQA,EAAG,aACX,KAAMA,EAAG,SACX,CAAC,EACGH,IACFI,EAAI,YAAcJ,GAEpBI,EAAI,IAAM1J,EACV0J,EAAI,IAAMH,EAQVG,EAAI,MAAM,QAAU,0KACpBD,EAAG,UAAY,GACfA,EAAG,YAAYC,CAAG,CACpB,CAAC,EACH,EAjDa,eAkDb,aAAc/S,EAAA,UAAwB,CACpCiG,GAAQ,KAAK,SAAU,SAAUa,EAAS,CACxC,IAAIZ,EAAOyB,GAAQb,EAASrD,CAAY,EACxCoD,GAASC,EAAS,CAChB,MAAOZ,EAAK,MACZ,OAAQA,EAAK,MACf,CAAC,EACDY,EAAQ,UAAYZ,EAAK,KACzB4B,GAAWhB,EAASrD,CAAY,CAClC,CAAC,CACH,EAVc,gBAWd,QAASzD,EAAA,UAAmB,CAC1B,IAAIkR,EAAY,KAAK,UACnBK,EAAa,KAAK,WAClBG,EAAc,KAAK,YACjBsB,EAAetB,EAAY,MAC7BuB,EAAgBvB,EAAY,OAC1B3F,EAAQmF,EAAU,MACpBpF,EAASoF,EAAU,OACjBgC,EAAOxB,EAAY,KAAOH,EAAW,KAAOL,EAAU,KACtDiC,EAAMzB,EAAY,IAAMH,EAAW,IAAML,EAAU,IACnD,CAAC,KAAK,SAAW,KAAK,WAG1BrK,GAAS,KAAK,aAAcT,GAAO,CACjC,MAAO2F,EACP,OAAQD,CACV,EAAGrC,GAAcrD,GAAO,CACtB,WAAY,CAAC8M,EACb,WAAY,CAACC,CACf,EAAGjC,CAAS,CAAC,CAAC,CAAC,EACfjL,GAAQ,KAAK,SAAU,SAAUa,EAAS,CACxC,IAAIZ,EAAOyB,GAAQb,EAASrD,CAAY,EACpC2P,EAAgBlN,EAAK,MACrBmN,GAAiBnN,EAAK,OACtBuG,GAAW2G,EACX1G,GAAY2G,GACZtI,GAAQ,EACRiI,IACFjI,GAAQqI,EAAgBJ,EACxBtG,GAAYuG,EAAgBlI,IAE1BkI,GAAiBvG,GAAY2G,KAC/BtI,GAAQsI,GAAiBJ,EACzBxG,GAAWuG,EAAejI,GAC1B2B,GAAY2G,IAEdxM,GAASC,EAAS,CAChB,MAAO2F,GACP,OAAQC,EACV,CAAC,EACD7F,GAASC,EAAQ,qBAAqB,KAAK,EAAE,CAAC,EAAGV,GAAO,CACtD,MAAO2F,EAAQhB,GACf,OAAQe,EAASf,EACnB,EAAGtB,GAAcrD,GAAO,CACtB,WAAY,CAAC8M,EAAOnI,GACpB,WAAY,CAACoI,EAAMpI,EACrB,EAAGmG,CAAS,CAAC,CAAC,CAAC,CACjB,CAAC,EACH,EAhDS,UAiDX,EAEIoC,GAAS,CACX,KAAMtT,EAAA,UAAgB,CACpB,IAAI8G,EAAU,KAAK,QACjBsB,EAAU,KAAK,QACf4I,EAAU,KAAK,QACblL,GAAWsC,EAAQ,SAAS,GAC9BM,GAAY5B,EAAS9C,GAAkBoE,EAAQ,SAAS,EAEtDtC,GAAWsC,EAAQ,QAAQ,GAC7BM,GAAY5B,EAAS/C,GAAiBqE,EAAQ,QAAQ,EAEpDtC,GAAWsC,EAAQ,OAAO,GAC5BM,GAAY5B,EAAShD,GAAgBsE,EAAQ,OAAO,EAElDtC,GAAWsC,EAAQ,IAAI,GACzBM,GAAY5B,EAASjD,GAAYuE,EAAQ,IAAI,EAE3CtC,GAAWsC,EAAQ,IAAI,GACzBM,GAAY5B,EAASnC,GAAYyD,EAAQ,IAAI,EAE/CM,GAAYsI,EAAS3M,GAAoB,KAAK,YAAc,KAAK,UAAU,KAAK,IAAI,CAAC,EACjF+D,EAAQ,UAAYA,EAAQ,aAC9BM,GAAYsI,EAAStM,GAAa,KAAK,QAAU,KAAK,MAAM,KAAK,IAAI,EAAG,CACtE,QAAS,GACT,QAAS,EACX,CAAC,EAEC0D,EAAQ,0BACVM,GAAYsI,EAAS/M,GAAgB,KAAK,WAAa,KAAK,SAAS,KAAK,IAAI,CAAC,EAEjFyE,GAAY5B,EAAQ,cAAexC,GAAoB,KAAK,WAAa,KAAK,SAAS,KAAK,IAAI,CAAC,EACjGoE,GAAY5B,EAAQ,cAAevC,GAAkB,KAAK,UAAY,KAAK,QAAQ,KAAK,IAAI,CAAC,EACzF6D,EAAQ,YACVM,GAAY,OAAQjE,GAAc,KAAK,SAAW,KAAK,OAAO,KAAK,IAAI,CAAC,CAE5E,EAlCM,QAmCN,OAAQzE,EAAA,UAAkB,CACxB,IAAI8G,EAAU,KAAK,QACjBsB,EAAU,KAAK,QACf4I,EAAU,KAAK,QACblL,GAAWsC,EAAQ,SAAS,GAC9BC,GAAevB,EAAS9C,GAAkBoE,EAAQ,SAAS,EAEzDtC,GAAWsC,EAAQ,QAAQ,GAC7BC,GAAevB,EAAS/C,GAAiBqE,EAAQ,QAAQ,EAEvDtC,GAAWsC,EAAQ,OAAO,GAC5BC,GAAevB,EAAShD,GAAgBsE,EAAQ,OAAO,EAErDtC,GAAWsC,EAAQ,IAAI,GACzBC,GAAevB,EAASjD,GAAYuE,EAAQ,IAAI,EAE9CtC,GAAWsC,EAAQ,IAAI,GACzBC,GAAevB,EAASnC,GAAYyD,EAAQ,IAAI,EAElDC,GAAe2I,EAAS3M,GAAoB,KAAK,WAAW,EACxD+D,EAAQ,UAAYA,EAAQ,aAC9BC,GAAe2I,EAAStM,GAAa,KAAK,QAAS,CACjD,QAAS,GACT,QAAS,EACX,CAAC,EAEC0D,EAAQ,0BACVC,GAAe2I,EAAS/M,GAAgB,KAAK,UAAU,EAEzDoE,GAAevB,EAAQ,cAAexC,GAAoB,KAAK,UAAU,EACzE+D,GAAevB,EAAQ,cAAevC,GAAkB,KAAK,SAAS,EAClE6D,EAAQ,YACVC,GAAe,OAAQ5D,GAAc,KAAK,QAAQ,CAEtD,EAlCQ,SAmCV,EAEI8O,GAAW,CACb,OAAQvT,EAAA,UAAkB,CACxB,GAAI,MAAK,SAGT,KAAIoI,EAAU,KAAK,QACjB2I,EAAY,KAAK,UACjBE,EAAgB,KAAK,cACnBuC,EAASzC,EAAU,YAAcE,EAAc,MAC/CwC,EAAS1C,EAAU,aAAeE,EAAc,OAChDlG,EAAQ,KAAK,IAAIyI,EAAS,CAAC,EAAI,KAAK,IAAIC,EAAS,CAAC,EAAID,EAASC,EAGnE,GAAI1I,IAAU,EAAG,CACf,IAAIwG,EACAG,EACAtJ,EAAQ,UACVmJ,EAAa,KAAK,cAAc,EAChCG,EAAc,KAAK,eAAe,GAEpC,KAAK,OAAO,EACRtJ,EAAQ,UACV,KAAK,cAAcnC,GAAQsL,EAAY,SAAU1P,EAAGzB,EAAG,CACrDmR,EAAWnR,CAAC,EAAIyB,EAAIkJ,CACtB,CAAC,CAAC,EACF,KAAK,eAAe9E,GAAQyL,EAAa,SAAU7P,EAAGzB,EAAG,CACvDsR,EAAYtR,CAAC,EAAIyB,EAAIkJ,CACvB,CAAC,CAAC,EAEN,EACF,EA7BQ,UA8BR,SAAU/K,EAAA,UAAoB,CACxB,KAAK,UAAY,KAAK,QAAQ,WAAa4D,GAG/C,KAAK,YAAYsD,GAAS,KAAK,QAASjE,CAAU,EAAIU,EAAiBD,CAAc,CACvF,EALU,YAMV,MAAO1D,EAAA,SAAewI,EAAO,CAC3B,IAAIkL,EAAQ,KACR3I,EAAQ,OAAO,KAAK,QAAQ,cAAc,GAAK,GAC/C4I,EAAQ,EACR,KAAK,WAGTnL,EAAM,eAAe,EAGjB,MAAK,WAGT,KAAK,SAAW,GAChB,WAAW,UAAY,CACrBkL,EAAM,SAAW,EACnB,EAAG,EAAE,EACDlL,EAAM,OACRmL,EAAQnL,EAAM,OAAS,EAAI,EAAI,GACtBA,EAAM,WACfmL,EAAQ,CAACnL,EAAM,WAAa,IACnBA,EAAM,SACfmL,EAAQnL,EAAM,OAAS,EAAI,EAAI,IAEjC,KAAK,KAAK,CAACmL,EAAQ5I,EAAOvC,CAAK,GACjC,EAzBO,SA0BP,UAAWxI,EAAA,SAAmBwI,EAAO,CACnC,IAAIoL,EAAUpL,EAAM,QAClBqL,EAASrL,EAAM,OACjB,GAAI,OAAK,WAGLA,EAAM,OAAS,aAAeA,EAAM,OAAS,eAAiBA,EAAM,cAAgB,WAExFlD,GAASsO,CAAO,GAAKA,IAAY,GAAKtO,GAASuO,CAAM,GAAKA,IAAW,GAGlErL,EAAM,UAGT,KAAIJ,EAAU,KAAK,QACjB+B,EAAW,KAAK,SACd2J,EACAtL,EAAM,eAERvC,GAAQuC,EAAM,eAAgB,SAAUuL,EAAO,CAC7C5J,EAAS4J,EAAM,UAAU,EAAI/I,GAAW+I,CAAK,CAC/C,CAAC,EAGD5J,EAAS3B,EAAM,WAAa,CAAC,EAAIwC,GAAWxC,CAAK,EAE/C,OAAO,KAAK2B,CAAQ,EAAE,OAAS,GAAK/B,EAAQ,UAAYA,EAAQ,YAClE0L,EAAStR,EAETsR,EAASnM,GAAQa,EAAM,OAAQhF,CAAW,EAEvCqB,GAAe,KAAKiP,CAAM,GAG3B/K,GAAc,KAAK,QAAS/E,GAAkB,CAChD,cAAewE,EACf,OAAQsL,CACV,CAAC,IAAM,KAKPtL,EAAM,eAAe,EACrB,KAAK,OAASsL,EACd,KAAK,SAAW,GACZA,IAAWxR,IACb,KAAK,SAAW,GAChB6E,GAAS,KAAK,QAAS7D,CAAW,IAEtC,EAjDW,aAkDX,SAAUtD,EAAA,SAAkBwI,EAAO,CACjC,IAAIsL,EAAS,KAAK,OAClB,GAAI,OAAK,UAAY,CAACA,GAGtB,KAAI3J,EAAW,KAAK,SACpB3B,EAAM,eAAe,EACjBO,GAAc,KAAK,QAAShF,GAAiB,CAC/C,cAAeyE,EACf,OAAQsL,CACV,CAAC,IAAM,KAGHtL,EAAM,eACRvC,GAAQuC,EAAM,eAAgB,SAAUuL,EAAO,CAE7C3N,GAAO+D,EAAS4J,EAAM,UAAU,GAAK,CAAC,EAAG/I,GAAW+I,EAAO,EAAI,CAAC,CAClE,CAAC,EAED3N,GAAO+D,EAAS3B,EAAM,WAAa,CAAC,GAAK,CAAC,EAAGwC,GAAWxC,EAAO,EAAI,CAAC,EAEtE,KAAK,OAAOA,CAAK,GACnB,EAtBU,YAuBV,QAASxI,EAAA,SAAiBwI,EAAO,CAC/B,GAAI,MAAK,SAGT,KAAIsL,EAAS,KAAK,OAChB3J,EAAW,KAAK,SACd3B,EAAM,eACRvC,GAAQuC,EAAM,eAAgB,SAAUuL,EAAO,CAC7C,OAAO5J,EAAS4J,EAAM,UAAU,CAClC,CAAC,EAED,OAAO5J,EAAS3B,EAAM,WAAa,CAAC,EAEjCsL,IAGLtL,EAAM,eAAe,EAChB,OAAO,KAAK2B,CAAQ,EAAE,SACzB,KAAK,OAAS,IAEZ,KAAK,WACP,KAAK,SAAW,GAChB5C,GAAY,KAAK,QAASjE,EAAa,KAAK,SAAW,KAAK,QAAQ,KAAK,GAE3EyF,GAAc,KAAK,QAASjF,GAAgB,CAC1C,cAAe0E,EACf,OAAQsL,CACV,CAAC,GACH,EA5BS,UA6BX,EAEIE,GAAS,CACX,OAAQhU,EAAA,SAAgBwI,EAAO,CAC7B,IAAIJ,EAAU,KAAK,QACjBmJ,EAAa,KAAK,WAClBN,EAAgB,KAAK,cACrBS,EAAc,KAAK,YACnBvH,EAAW,KAAK,SACd2J,EAAS,KAAK,OACdjI,EAAczD,EAAQ,YACtB8K,EAAOxB,EAAY,KACrByB,EAAMzB,EAAY,IAClB3F,EAAQ2F,EAAY,MACpB5F,EAAS4F,EAAY,OACnBuC,GAAQf,EAAOnH,EACfmI,GAASf,EAAMrH,EACfqI,GAAU,EACVC,GAAS,EACTrG,GAAWkD,EAAc,MACzBhD,GAAYgD,EAAc,OAC1BoD,GAAa,GACb/D,GAGA,CAACzE,GAAerD,EAAM,WACxBqD,EAAcE,GAASD,EAASC,EAAQD,EAAS,GAE/C,KAAK,UACPqI,GAAUzC,EAAY,QACtB0C,GAAS1C,EAAY,OACrB3D,GAAWoG,GAAU,KAAK,IAAIlD,EAAc,MAAOM,EAAW,MAAOA,EAAW,KAAOA,EAAW,KAAK,EACvGtD,GAAYmG,GAAS,KAAK,IAAInD,EAAc,OAAQM,EAAW,OAAQA,EAAW,IAAMA,EAAW,MAAM,GAE3G,IAAIjH,GAAUH,EAAS,OAAO,KAAKA,CAAQ,EAAE,CAAC,CAAC,EAC3CmK,EAAQ,CACV,EAAGhK,GAAQ,KAAOA,GAAQ,OAC1B,EAAGA,GAAQ,KAAOA,GAAQ,MAC5B,EACIiK,GAAQvU,EAAA,SAAewU,GAAM,CAC/B,OAAQA,GAAM,CACZ,KAAK/R,EACCwR,GAAQK,EAAM,EAAIvG,KACpBuG,EAAM,EAAIvG,GAAWkG,IAEvB,MACF,KAAKvR,EACCwQ,EAAOoB,EAAM,EAAIH,KACnBG,EAAM,EAAIH,GAAUjB,GAEtB,MACF,KAAKtQ,GACCuQ,EAAMmB,EAAM,EAAIF,KAClBE,EAAM,EAAIF,GAASjB,GAErB,MACF,KAAKxQ,GACCuR,GAASI,EAAM,EAAIrG,KACrBqG,EAAM,EAAIrG,GAAYiG,IAExB,KACJ,CACF,EAvBY,SAwBZ,OAAQJ,EAAQ,CAEd,KAAKzR,EACH6Q,GAAQoB,EAAM,EACdnB,GAAOmB,EAAM,EACb,MAGF,KAAK7R,EACH,GAAI6R,EAAM,GAAK,IAAML,IAASlG,IAAYlC,IAAgBsH,GAAOiB,IAAUF,IAAUjG,KAAa,CAChGoG,GAAa,GACb,KACF,CACAE,GAAM9R,CAAW,EACjBsJ,GAASuI,EAAM,EACXvI,EAAQ,IACV+H,EAASpR,EACTqJ,EAAQ,CAACA,EACTmH,GAAQnH,GAENF,IACFC,EAASC,EAAQF,EACjBsH,IAAQzB,EAAY,OAAS5F,GAAU,GAEzC,MACF,KAAKlJ,GACH,GAAI0R,EAAM,GAAK,IAAMnB,GAAOiB,IAAUvI,IAAgBqH,GAAQiB,IAAWF,IAASlG,KAAY,CAC5FsG,GAAa,GACb,KACF,CACAE,GAAM3R,EAAY,EAClBkJ,GAAUwI,EAAM,EAChBnB,GAAOmB,EAAM,EACTxI,EAAS,IACXgI,EAASnR,GACTmJ,EAAS,CAACA,EACVqH,GAAOrH,GAELD,IACFE,EAAQD,EAASD,EACjBqH,IAASxB,EAAY,MAAQ3F,GAAS,GAExC,MACF,KAAKrJ,EACH,GAAI4R,EAAM,GAAK,IAAMpB,GAAQiB,IAAWtI,IAAgBsH,GAAOiB,IAAUF,IAAUjG,KAAa,CAC9FoG,GAAa,GACb,KACF,CACAE,GAAM7R,CAAW,EACjBqJ,GAASuI,EAAM,EACfpB,GAAQoB,EAAM,EACVvI,EAAQ,IACV+H,EAASrR,EACTsJ,EAAQ,CAACA,EACTmH,GAAQnH,GAENF,IACFC,EAASC,EAAQF,EACjBsH,IAAQzB,EAAY,OAAS5F,GAAU,GAEzC,MACF,KAAKnJ,GACH,GAAI2R,EAAM,GAAK,IAAMJ,IAAUjG,IAAapC,IAAgBqH,GAAQiB,IAAWF,IAASlG,KAAY,CAClGsG,GAAa,GACb,KACF,CACAE,GAAM5R,EAAY,EAClBmJ,GAAUwI,EAAM,EACZxI,EAAS,IACXgI,EAASlR,GACTkJ,EAAS,CAACA,EACVqH,GAAOrH,GAELD,IACFE,EAAQD,EAASD,EACjBqH,IAASxB,EAAY,MAAQ3F,GAAS,GAExC,MACF,KAAKlJ,GACH,GAAIgJ,EAAa,CACf,GAAIyI,EAAM,GAAK,IAAMnB,GAAOiB,IAAUH,IAASlG,IAAW,CACxDsG,GAAa,GACb,KACF,CACAE,GAAM3R,EAAY,EAClBkJ,GAAUwI,EAAM,EAChBnB,GAAOmB,EAAM,EACbvI,EAAQD,EAASD,CACnB,MACE0I,GAAM3R,EAAY,EAClB2R,GAAM9R,CAAW,EACb6R,EAAM,GAAK,EACTL,GAAQlG,GACVhC,GAASuI,EAAM,EACNA,EAAM,GAAK,GAAKnB,GAAOiB,KAChCC,GAAa,IAGftI,GAASuI,EAAM,EAEbA,EAAM,GAAK,EACTnB,EAAMiB,KACRtI,GAAUwI,EAAM,EAChBnB,GAAOmB,EAAM,IAGfxI,GAAUwI,EAAM,EAChBnB,GAAOmB,EAAM,GAGbvI,EAAQ,GAAKD,EAAS,GACxBgI,EAAS9Q,GACT8I,EAAS,CAACA,EACVC,EAAQ,CAACA,EACToH,GAAOrH,EACPoH,GAAQnH,GACCA,EAAQ,GACjB+H,EAAShR,GACTiJ,EAAQ,CAACA,EACTmH,GAAQnH,GACCD,EAAS,IAClBgI,EAAS/Q,GACT+I,EAAS,CAACA,EACVqH,GAAOrH,GAET,MACF,KAAKhJ,GACH,GAAI+I,EAAa,CACf,GAAIyI,EAAM,GAAK,IAAMnB,GAAOiB,IAAUlB,GAAQiB,IAAU,CACtDE,GAAa,GACb,KACF,CACAE,GAAM3R,EAAY,EAClBkJ,GAAUwI,EAAM,EAChBnB,GAAOmB,EAAM,EACbvI,EAAQD,EAASD,EACjBqH,GAAQxB,EAAY,MAAQ3F,CAC9B,MACEwI,GAAM3R,EAAY,EAClB2R,GAAM7R,CAAW,EACb4R,EAAM,GAAK,EACTpB,EAAOiB,IACTpI,GAASuI,EAAM,EACfpB,GAAQoB,EAAM,GACLA,EAAM,GAAK,GAAKnB,GAAOiB,KAChCC,GAAa,KAGftI,GAASuI,EAAM,EACfpB,GAAQoB,EAAM,GAEZA,EAAM,GAAK,EACTnB,EAAMiB,KACRtI,GAAUwI,EAAM,EAChBnB,GAAOmB,EAAM,IAGfxI,GAAUwI,EAAM,EAChBnB,GAAOmB,EAAM,GAGbvI,EAAQ,GAAKD,EAAS,GACxBgI,EAAS/Q,GACT+I,EAAS,CAACA,EACVC,EAAQ,CAACA,EACToH,GAAOrH,EACPoH,GAAQnH,GACCA,EAAQ,GACjB+H,EAASjR,GACTkJ,EAAQ,CAACA,EACTmH,GAAQnH,GACCD,EAAS,IAClBgI,EAAS9Q,GACT8I,EAAS,CAACA,EACVqH,GAAOrH,GAET,MACF,KAAK9I,GACH,GAAI6I,EAAa,CACf,GAAIyI,EAAM,GAAK,IAAMpB,GAAQiB,IAAWD,IAAUjG,IAAY,CAC5DoG,GAAa,GACb,KACF,CACAE,GAAM7R,CAAW,EACjBqJ,GAASuI,EAAM,EACfpB,GAAQoB,EAAM,EACdxI,EAASC,EAAQF,CACnB,MACE0I,GAAM5R,EAAY,EAClB4R,GAAM7R,CAAW,EACb4R,EAAM,GAAK,EACTpB,EAAOiB,IACTpI,GAASuI,EAAM,EACfpB,GAAQoB,EAAM,GACLA,EAAM,GAAK,GAAKJ,IAAUjG,KACnCoG,GAAa,KAGftI,GAASuI,EAAM,EACfpB,GAAQoB,EAAM,GAEZA,EAAM,GAAK,EACTJ,GAASjG,KACXnC,GAAUwI,EAAM,GAGlBxI,GAAUwI,EAAM,EAGhBvI,EAAQ,GAAKD,EAAS,GACxBgI,EAASjR,GACTiJ,EAAS,CAACA,EACVC,EAAQ,CAACA,EACToH,GAAOrH,EACPoH,GAAQnH,GACCA,EAAQ,GACjB+H,EAAS/Q,GACTgJ,EAAQ,CAACA,EACTmH,GAAQnH,GACCD,EAAS,IAClBgI,EAAShR,GACTgJ,EAAS,CAACA,EACVqH,GAAOrH,GAET,MACF,KAAK/I,GACH,GAAI8I,EAAa,CACf,GAAIyI,EAAM,GAAK,IAAML,IAASlG,IAAYmG,IAAUjG,IAAY,CAC9DoG,GAAa,GACb,KACF,CACAE,GAAM9R,CAAW,EACjBsJ,GAASuI,EAAM,EACfxI,EAASC,EAAQF,CACnB,MACE0I,GAAM5R,EAAY,EAClB4R,GAAM9R,CAAW,EACb6R,EAAM,GAAK,EACTL,GAAQlG,GACVhC,GAASuI,EAAM,EACNA,EAAM,GAAK,GAAKJ,IAAUjG,KACnCoG,GAAa,IAGftI,GAASuI,EAAM,EAEbA,EAAM,GAAK,EACTJ,GAASjG,KACXnC,GAAUwI,EAAM,GAGlBxI,GAAUwI,EAAM,EAGhBvI,EAAQ,GAAKD,EAAS,GACxBgI,EAAShR,GACTgJ,EAAS,CAACA,EACVC,EAAQ,CAACA,EACToH,GAAOrH,EACPoH,GAAQnH,GACCA,EAAQ,GACjB+H,EAAS9Q,GACT+I,EAAQ,CAACA,EACTmH,GAAQnH,GACCD,EAAS,IAClBgI,EAASjR,GACTiJ,EAAS,CAACA,EACVqH,GAAOrH,GAET,MAGF,KAAKvJ,EACH,KAAK,KAAK+R,EAAM,EAAGA,EAAM,CAAC,EAC1BD,GAAa,GACb,MAGF,KAAK7R,EACH,KAAK,KAAK0H,GAAgBC,CAAQ,EAAG3B,CAAK,EAC1C6L,GAAa,GACb,MAGF,KAAK/R,EACH,GAAI,CAACgS,EAAM,GAAK,CAACA,EAAM,EAAG,CACxBD,GAAa,GACb,KACF,CACA/D,GAAStH,GAAU,KAAK,OAAO,EAC/BkK,EAAO5I,GAAQ,OAASgG,GAAO,KAC/B6C,EAAM7I,GAAQ,OAASgG,GAAO,IAC9BvE,EAAQ2F,EAAY,SACpB5F,EAAS4F,EAAY,UACjB4C,EAAM,EAAI,EACZR,EAASQ,EAAM,EAAI,EAAIvR,GAAoBF,GAClCyR,EAAM,EAAI,IACnBpB,GAAQnH,EACR+H,EAASQ,EAAM,EAAI,EAAItR,GAAoBF,IAEzCwR,EAAM,EAAI,IACZnB,GAAOrH,GAIJ,KAAK,UACRxE,GAAY,KAAK,QAASnE,CAAY,EACtC,KAAK,QAAU,GACX,KAAK,SACP,KAAK,aAAa,GAAM,EAAI,GAGhC,KACJ,CACIkR,KACF3C,EAAY,MAAQ3F,EACpB2F,EAAY,OAAS5F,EACrB4F,EAAY,KAAOwB,EACnBxB,EAAY,IAAMyB,EAClB,KAAK,OAASW,EACd,KAAK,cAAc,GAIrB7N,GAAQkE,EAAU,SAAUsK,GAAG,CAC7BA,GAAE,OAASA,GAAE,KACbA,GAAE,OAASA,GAAE,IACf,CAAC,CACH,EApYQ,SAqYV,EAEIC,GAAU,CAEZ,KAAM1U,EAAA,UAAgB,CACpB,OAAI,KAAK,OAAS,CAAC,KAAK,SAAW,CAAC,KAAK,WACvC,KAAK,QAAU,GACf,KAAK,aAAa,GAAM,EAAI,EACxB,KAAK,QAAQ,OACfmH,GAAS,KAAK,QAAS7D,CAAW,EAEpCgE,GAAY,KAAK,QAASnE,CAAY,EACtC,KAAK,eAAe,KAAK,kBAAkB,GAEtC,IACT,EAXM,QAaN,MAAOnD,EAAA,UAAiB,CACtB,OAAI,KAAK,OAAS,CAAC,KAAK,WACtB,KAAK,UAAYoG,GAAO,CAAC,EAAG,KAAK,gBAAgB,EACjD,KAAK,WAAaA,GAAO,CAAC,EAAG,KAAK,iBAAiB,EACnD,KAAK,YAAcA,GAAO,CAAC,EAAG,KAAK,kBAAkB,EACrD,KAAK,aAAa,EACd,KAAK,SACP,KAAK,cAAc,GAGhB,IACT,EAXO,SAaP,MAAOpG,EAAA,UAAiB,CACtB,OAAI,KAAK,SAAW,CAAC,KAAK,WACxBoG,GAAO,KAAK,YAAa,CACvB,KAAM,EACN,IAAK,EACL,MAAO,EACP,OAAQ,CACV,CAAC,EACD,KAAK,QAAU,GACf,KAAK,cAAc,EACnB,KAAK,YAAY,GAAM,EAAI,EAG3B,KAAK,aAAa,EAClBkB,GAAY,KAAK,QAAShE,CAAW,EACrC6D,GAAS,KAAK,QAAShE,CAAY,GAE9B,IACT,EAlBO,SAyBP,QAASnD,EAAA,SAAiBqJ,EAAK,CAC7B,IAAIsL,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACtF,MAAI,CAAC,KAAK,UAAYtL,IAChB,KAAK,QACP,KAAK,QAAQ,IAAMA,GAEjBsL,GACF,KAAK,IAAMtL,EACX,KAAK,MAAM,IAAMA,EACb,KAAK,QACP,KAAK,aAAa,IAAMA,EACxBpD,GAAQ,KAAK,SAAU,SAAUa,EAAS,CACxCA,EAAQ,qBAAqB,KAAK,EAAE,CAAC,EAAE,IAAMuC,CAC/C,CAAC,KAGC,KAAK,QACP,KAAK,SAAW,IAElB,KAAK,QAAQ,KAAO,KACpB,KAAK,SAAS,EACd,KAAK,KAAKA,CAAG,IAGV,IACT,EAzBS,WA2BT,OAAQrJ,EAAA,UAAkB,CACxB,OAAI,KAAK,OAAS,KAAK,WACrB,KAAK,SAAW,GAChBsH,GAAY,KAAK,QAASpE,CAAc,GAEnC,IACT,EANQ,UAQR,QAASlD,EAAA,UAAmB,CAC1B,OAAI,KAAK,OAAS,CAAC,KAAK,WACtB,KAAK,SAAW,GAChBmH,GAAS,KAAK,QAASjE,CAAc,GAEhC,IACT,EANS,WAWT,QAASlD,EAAA,UAAmB,CAC1B,IAAI8G,EAAU,KAAK,QACnB,OAAKA,EAAQ1E,CAAS,GAGtB0E,EAAQ1E,CAAS,EAAI,OACjB,KAAK,OAAS,KAAK,WACrB0E,EAAQ,IAAM,KAAK,aAErB,KAAK,SAAS,EACP,MAPE,IAQX,EAXS,WAkBT,KAAM9G,EAAA,SAAc4U,EAAS,CAC3B,IAAIC,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAID,EAC9EE,EAAmB,KAAK,WAC1B5B,EAAO4B,EAAiB,KACxB3B,EAAM2B,EAAiB,IACzB,OAAO,KAAK,OAAOtP,GAAYoP,CAAO,EAAIA,EAAU1B,EAAO,OAAO0B,CAAO,EAAGpP,GAAYqP,CAAO,EAAIA,EAAU1B,EAAM,OAAO0B,CAAO,CAAC,CACpI,EANM,QAaN,OAAQ7U,EAAA,SAAgB+U,EAAG,CACzB,IAAIC,EAAI,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAID,EACxExD,EAAa,KAAK,WAClBU,EAAU,GACd,OAAA8C,EAAI,OAAOA,CAAC,EACZC,EAAI,OAAOA,CAAC,EACR,KAAK,OAAS,CAAC,KAAK,UAAY,KAAK,QAAQ,UAC3C1P,GAASyP,CAAC,IACZxD,EAAW,KAAOwD,EAClB9C,EAAU,IAER3M,GAAS0P,CAAC,IACZzD,EAAW,IAAMyD,EACjB/C,EAAU,IAERA,GACF,KAAK,aAAa,EAAI,GAGnB,IACT,EApBQ,UA2BR,KAAMjS,EAAA,SAAc+K,EAAOkK,EAAgB,CACzC,IAAI1D,EAAa,KAAK,WACtB,OAAAxG,EAAQ,OAAOA,CAAK,EAChBA,EAAQ,EACVA,EAAQ,GAAK,EAAIA,GAEjBA,EAAQ,EAAIA,EAEP,KAAK,OAAOwG,EAAW,MAAQxG,EAAQwG,EAAW,aAAc,KAAM0D,CAAc,CAC7F,EATM,QAiBN,OAAQjV,EAAA,SAAgB+K,EAAOmK,EAAOD,EAAgB,CACpD,IAAI7M,EAAU,KAAK,QACjBmJ,EAAa,KAAK,WAChBxF,EAAQwF,EAAW,MACrBzF,EAASyF,EAAW,OACpBjE,EAAeiE,EAAW,aAC1BhE,EAAgBgE,EAAW,cAE7B,GADAxG,EAAQ,OAAOA,CAAK,EAChBA,GAAS,GAAK,KAAK,OAAS,CAAC,KAAK,UAAY3C,EAAQ,SAAU,CAClE,IAAIqE,EAAWa,EAAevC,EAC1B2B,EAAYa,EAAgBxC,EAChC,GAAIhC,GAAc,KAAK,QAASpE,GAAY,CAC1C,MAAOoG,EACP,SAAUgB,EAAQuB,EAClB,cAAe2H,CACjB,CAAC,IAAM,GACL,OAAO,KAET,GAAIA,EAAgB,CAClB,IAAI9K,EAAW,KAAK,SAChBmG,GAAStH,GAAU,KAAK,OAAO,EAC/BmM,GAAShL,GAAY,OAAO,KAAKA,CAAQ,EAAE,OAASmB,GAAkBnB,CAAQ,EAAI,CACpF,MAAO8K,EAAe,MACtB,MAAOA,EAAe,KACxB,EAGA1D,EAAW,OAAS9E,EAAWV,KAAWoJ,GAAO,MAAQ7E,GAAO,KAAOiB,EAAW,MAAQxF,GAC1FwF,EAAW,MAAQ7E,EAAYZ,KAAYqJ,GAAO,MAAQ7E,GAAO,IAAMiB,EAAW,KAAOzF,EAC3F,MAAWnG,GAAcuP,CAAK,GAAK5P,GAAS4P,EAAM,CAAC,GAAK5P,GAAS4P,EAAM,CAAC,GACtE3D,EAAW,OAAS9E,EAAWV,KAAWmJ,EAAM,EAAI3D,EAAW,MAAQxF,GACvEwF,EAAW,MAAQ7E,EAAYZ,KAAYoJ,EAAM,EAAI3D,EAAW,KAAOzF,KAGvEyF,EAAW,OAAS9E,EAAWV,GAAS,EACxCwF,EAAW,MAAQ7E,EAAYZ,GAAU,GAE3CyF,EAAW,MAAQ9E,EACnB8E,EAAW,OAAS7E,EACpB,KAAK,aAAa,EAAI,CACxB,CACA,OAAO,IACT,EA1CQ,UAgDR,OAAQ1M,EAAA,SAAgBqM,EAAQ,CAC9B,OAAO,KAAK,UAAU,KAAK,UAAU,QAAU,GAAK,OAAOA,CAAM,CAAC,CACpE,EAFQ,UAQR,SAAUrM,EAAA,SAAkBqM,EAAQ,CAClC,OAAAA,EAAS,OAAOA,CAAM,EAClB/G,GAAS+G,CAAM,GAAK,KAAK,OAAS,CAAC,KAAK,UAAY,KAAK,QAAQ,YACnE,KAAK,UAAU,OAASA,EAAS,IACjC,KAAK,aAAa,GAAM,EAAI,GAEvB,IACT,EAPU,YAaV,OAAQrM,EAAA,SAAgBoV,EAAS,CAC/B,IAAIvL,EAAS,KAAK,UAAU,OAC5B,OAAO,KAAK,MAAMuL,EAAS9P,GAASuE,CAAM,EAAIA,EAAS,CAAC,CAC1D,EAHQ,UASR,OAAQ7J,EAAA,SAAgBqV,EAAS,CAC/B,IAAIzL,EAAS,KAAK,UAAU,OAC5B,OAAO,KAAK,MAAMtE,GAASsE,CAAM,EAAIA,EAAS,EAAGyL,CAAO,CAC1D,EAHQ,UAUR,MAAOrV,EAAA,SAAe4J,EAAQ,CAC5B,IAAIC,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAID,EAC7EsH,EAAY,KAAK,UACjBgB,EAAc,GAClB,OAAAtI,EAAS,OAAOA,CAAM,EACtBC,EAAS,OAAOA,CAAM,EAClB,KAAK,OAAS,CAAC,KAAK,UAAY,KAAK,QAAQ,WAC3CvE,GAASsE,CAAM,IACjBsH,EAAU,OAAStH,EACnBsI,EAAc,IAEZ5M,GAASuE,CAAM,IACjBqH,EAAU,OAASrH,EACnBqI,EAAc,IAEZA,GACF,KAAK,aAAa,GAAM,EAAI,GAGzB,IACT,EApBO,SA0BP,QAASlS,EAAA,UAAmB,CAC1B,IAAIsV,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC9ElN,EAAU,KAAK,QACjB8I,EAAY,KAAK,UACjBK,EAAa,KAAK,WAClBG,EAAc,KAAK,YACjBxL,EACJ,GAAI,KAAK,OAAS,KAAK,QAAS,CAC9BA,EAAO,CACL,EAAGwL,EAAY,KAAOH,EAAW,KACjC,EAAGG,EAAY,IAAMH,EAAW,IAChC,MAAOG,EAAY,MACnB,OAAQA,EAAY,MACtB,EACA,IAAI3G,EAAQmG,EAAU,MAAQA,EAAU,aAIxC,GAHAjL,GAAQC,EAAM,SAAUrE,EAAGzB,EAAG,CAC5B8F,EAAK9F,CAAC,EAAIyB,EAAIkJ,CAChB,CAAC,EACGuK,EAAS,CAGX,IAAIpB,EAAS,KAAK,MAAMhO,EAAK,EAAIA,EAAK,MAAM,EACxC+N,EAAQ,KAAK,MAAM/N,EAAK,EAAIA,EAAK,KAAK,EAC1CA,EAAK,EAAI,KAAK,MAAMA,EAAK,CAAC,EAC1BA,EAAK,EAAI,KAAK,MAAMA,EAAK,CAAC,EAC1BA,EAAK,MAAQ+N,EAAQ/N,EAAK,EAC1BA,EAAK,OAASgO,EAAShO,EAAK,CAC9B,CACF,MACEA,EAAO,CACL,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,CACV,EAEF,OAAIkC,EAAQ,YACVlC,EAAK,OAASgL,EAAU,QAAU,GAEhC9I,EAAQ,WACVlC,EAAK,OAASgL,EAAU,QAAU,EAClChL,EAAK,OAASgL,EAAU,QAAU,GAE7BhL,CACT,EA5CS,WAkDT,QAASlG,EAAA,SAAiBkG,EAAM,CAC9B,IAAIkC,EAAU,KAAK,QACjB8I,EAAY,KAAK,UACjBK,EAAa,KAAK,WAChBG,EAAc,CAAC,EACnB,GAAI,KAAK,OAAS,CAAC,KAAK,UAAY/L,GAAcO,CAAI,EAAG,CACvD,IAAIgM,EAAc,GACd9J,EAAQ,WACN9C,GAASY,EAAK,MAAM,GAAKA,EAAK,SAAWgL,EAAU,SACrDA,EAAU,OAAShL,EAAK,OACxBgM,EAAc,IAGd9J,EAAQ,WACN9C,GAASY,EAAK,MAAM,GAAKA,EAAK,SAAWgL,EAAU,SACrDA,EAAU,OAAShL,EAAK,OACxBgM,EAAc,IAEZ5M,GAASY,EAAK,MAAM,GAAKA,EAAK,SAAWgL,EAAU,SACrDA,EAAU,OAAShL,EAAK,OACxBgM,EAAc,KAGdA,GACF,KAAK,aAAa,GAAM,EAAI,EAE9B,IAAInH,EAAQmG,EAAU,MAAQA,EAAU,aACpC5L,GAASY,EAAK,CAAC,IACjBwL,EAAY,KAAOxL,EAAK,EAAI6E,EAAQwG,EAAW,MAE7CjM,GAASY,EAAK,CAAC,IACjBwL,EAAY,IAAMxL,EAAK,EAAI6E,EAAQwG,EAAW,KAE5CjM,GAASY,EAAK,KAAK,IACrBwL,EAAY,MAAQxL,EAAK,MAAQ6E,GAE/BzF,GAASY,EAAK,MAAM,IACtBwL,EAAY,OAASxL,EAAK,OAAS6E,GAErC,KAAK,eAAe2G,CAAW,CACjC,CACA,OAAO,IACT,EA1CS,WA+CT,iBAAkB1R,EAAA,UAA4B,CAC5C,OAAO,KAAK,MAAQoG,GAAO,CAAC,EAAG,KAAK,aAAa,EAAI,CAAC,CACxD,EAFkB,oBAOlB,aAAcpG,EAAA,UAAwB,CACpC,OAAO,KAAK,MAAQoG,GAAO,CAAC,EAAG,KAAK,SAAS,EAAI,CAAC,CACpD,EAFc,gBAOd,cAAepG,EAAA,UAAyB,CACtC,IAAIuR,EAAa,KAAK,WAClBrL,EAAO,CAAC,EACZ,OAAI,KAAK,OACPD,GAAQ,CAAC,OAAQ,MAAO,QAAS,SAAU,eAAgB,eAAe,EAAG,SAAUpE,EAAG,CACxFqE,EAAKrE,CAAC,EAAI0P,EAAW1P,CAAC,CACxB,CAAC,EAEIqE,CACT,EATe,iBAef,cAAelG,EAAA,SAAuBkG,EAAM,CAC1C,IAAIqL,EAAa,KAAK,WAClB1F,EAAc0F,EAAW,YAC7B,OAAI,KAAK,OAAS,CAAC,KAAK,UAAY5L,GAAcO,CAAI,IAChDZ,GAASY,EAAK,IAAI,IACpBqL,EAAW,KAAOrL,EAAK,MAErBZ,GAASY,EAAK,GAAG,IACnBqL,EAAW,IAAMrL,EAAK,KAEpBZ,GAASY,EAAK,KAAK,GACrBqL,EAAW,MAAQrL,EAAK,MACxBqL,EAAW,OAASrL,EAAK,MAAQ2F,GACxBvG,GAASY,EAAK,MAAM,IAC7BqL,EAAW,OAASrL,EAAK,OACzBqL,EAAW,MAAQrL,EAAK,OAAS2F,GAEnC,KAAK,aAAa,EAAI,GAEjB,IACT,EApBe,iBAyBf,eAAgB7L,EAAA,UAA0B,CACxC,IAAI0R,EAAc,KAAK,YACnBxL,EACJ,OAAI,KAAK,OAAS,KAAK,UACrBA,EAAO,CACL,KAAMwL,EAAY,KAClB,IAAKA,EAAY,IACjB,MAAOA,EAAY,MACnB,OAAQA,EAAY,MACtB,GAEKxL,GAAQ,CAAC,CAClB,EAZgB,kBAkBhB,eAAgBlG,EAAA,SAAwBkG,EAAM,CAC5C,IAAIwL,EAAc,KAAK,YACnB7F,EAAc,KAAK,QAAQ,YAC3B0J,EACAC,EACJ,OAAI,KAAK,OAAS,KAAK,SAAW,CAAC,KAAK,UAAY7P,GAAcO,CAAI,IAChEZ,GAASY,EAAK,IAAI,IACpBwL,EAAY,KAAOxL,EAAK,MAEtBZ,GAASY,EAAK,GAAG,IACnBwL,EAAY,IAAMxL,EAAK,KAErBZ,GAASY,EAAK,KAAK,GAAKA,EAAK,QAAUwL,EAAY,QACrD6D,EAAe,GACf7D,EAAY,MAAQxL,EAAK,OAEvBZ,GAASY,EAAK,MAAM,GAAKA,EAAK,SAAWwL,EAAY,SACvD8D,EAAgB,GAChB9D,EAAY,OAASxL,EAAK,QAExB2F,IACE0J,EACF7D,EAAY,OAASA,EAAY,MAAQ7F,EAChC2J,IACT9D,EAAY,MAAQA,EAAY,OAAS7F,IAG7C,KAAK,cAAc,GAEd,IACT,EA9BgB,kBAoChB,iBAAkB7L,EAAA,UAA4B,CAC5C,IAAIoI,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EACnF,GAAI,CAAC,KAAK,OAAS,CAAC,OAAO,kBACzB,OAAO,KAET,IAAImJ,EAAa,KAAK,WAClBkE,EAAS9I,GAAgB,KAAK,MAAO,KAAK,UAAW4E,EAAYnJ,CAAO,EAG5E,GAAI,CAAC,KAAK,QACR,OAAOqN,EAET,IAAIC,EAAgB,KAAK,QAAQtN,EAAQ,OAAO,EAC9CuN,EAAWD,EAAc,EACzBE,EAAWF,EAAc,EACzBG,EAAeH,EAAc,MAC7BI,EAAgBJ,EAAc,OAC5B3K,EAAQ0K,EAAO,MAAQ,KAAK,MAAMlE,EAAW,YAAY,EACzDxG,IAAU,IACZ4K,GAAY5K,EACZ6K,GAAY7K,EACZ8K,GAAgB9K,EAChB+K,GAAiB/K,GAEnB,IAAIc,EAAcgK,EAAeC,EAC7BtH,EAAW7C,GAAiB,CAC9B,YAAaE,EACb,MAAOzD,EAAQ,UAAY,IAC3B,OAAQA,EAAQ,WAAa,GAC/B,CAAC,EACGqG,EAAW9C,GAAiB,CAC9B,YAAaE,EACb,MAAOzD,EAAQ,UAAY,EAC3B,OAAQA,EAAQ,WAAa,CAC/B,EAAG,OAAO,EACN0J,GAAoBnG,GAAiB,CACrC,YAAaE,EACb,MAAOzD,EAAQ,QAAU2C,IAAU,EAAI0K,EAAO,MAAQI,GACtD,OAAQzN,EAAQ,SAAW2C,IAAU,EAAI0K,EAAO,OAASK,EAC3D,CAAC,EACD/J,GAAQ+F,GAAkB,MAC1BhG,GAASgG,GAAkB,OAC7B/F,GAAQ,KAAK,IAAIyC,EAAS,MAAO,KAAK,IAAIC,EAAS,MAAO1C,EAAK,CAAC,EAChED,GAAS,KAAK,IAAI0C,EAAS,OAAQ,KAAK,IAAIC,EAAS,OAAQ3C,EAAM,CAAC,EACpE,IAAIwC,GAAS,SAAS,cAAc,QAAQ,EACxCC,GAAUD,GAAO,WAAW,IAAI,EACpCA,GAAO,MAAQ5H,GAAuBqF,EAAK,EAC3CuC,GAAO,OAAS5H,GAAuBoF,EAAM,EAC7CyC,GAAQ,UAAYnG,EAAQ,WAAa,cACzCmG,GAAQ,SAAS,EAAG,EAAGxC,GAAOD,EAAM,EACpC,IAAIiK,GAAwB3N,EAAQ,sBAClCuF,GAAwBoI,KAA0B,OAAS,GAAOA,GAClElI,GAAwBzF,EAAQ,sBAClCmG,GAAQ,sBAAwBZ,GAC5BE,KACFU,GAAQ,sBAAwBV,IAIlC,IAAImI,GAAcP,EAAO,MACrBQ,EAAeR,EAAO,OAGtBS,GAAOP,EACPQ,GAAOP,EACPQ,GACAC,GAGAC,GACAC,GACAC,GACAC,GACAP,IAAQ,CAACL,GAAgBK,GAAOF,IAClCE,GAAO,EACPE,GAAW,EACXE,GAAO,EACPE,GAAW,GACFN,IAAQ,GACjBI,GAAO,CAACJ,GACRA,GAAO,EACPE,GAAW,KAAK,IAAIJ,GAAaH,EAAeK,EAAI,EACpDM,GAAWJ,IACFF,IAAQF,KACjBM,GAAO,EACPF,GAAW,KAAK,IAAIP,EAAcG,GAAcE,EAAI,EACpDM,GAAWJ,IAETA,IAAY,GAAKD,IAAQ,CAACL,GAAiBK,GAAOF,GACpDE,GAAO,EACPE,GAAY,EACZE,GAAO,EACPE,GAAY,GACHN,IAAQ,GACjBI,GAAO,CAACJ,GACRA,GAAO,EACPE,GAAY,KAAK,IAAIJ,EAAcH,EAAgBK,EAAI,EACvDM,GAAYJ,IACHF,IAAQF,IACjBM,GAAO,EACPF,GAAY,KAAK,IAAIP,EAAeG,EAAeE,EAAI,EACvDM,GAAYJ,IAEd,IAAIvH,GAAS,CAACoH,GAAMC,GAAMC,GAAUC,EAAS,EAG7C,GAAIG,GAAW,GAAKC,GAAY,EAAG,CACjC,IAAIC,GAAQ3K,GAAQ8J,EACpB/G,GAAO,KAAKwH,GAAOI,GAAOH,GAAOG,GAAOF,GAAWE,GAAOD,GAAYC,EAAK,CAC7E,CAIA,OAAAnI,GAAQ,UAAU,MAAMA,GAAS,CAACkH,CAAM,EAAE,OAAOrU,EAAmB0N,GAAO,IAAI,SAAUC,GAAO,CAC9F,OAAO,KAAK,MAAMrI,GAAuBqI,EAAK,CAAC,CACjD,CAAC,CAAC,CAAC,CAAC,EACGT,EACT,EArHkB,oBA2HlB,eAAgBtO,EAAA,SAAwB6L,EAAa,CACnD,IAAIzD,EAAU,KAAK,QACnB,MAAI,CAAC,KAAK,UAAY,CAAC5C,GAAYqG,CAAW,IAE5CzD,EAAQ,YAAc,KAAK,IAAI,EAAGyD,CAAW,GAAK,IAC9C,KAAK,QACP,KAAK,YAAY,EACb,KAAK,SACP,KAAK,cAAc,IAIlB,IACT,EAbgB,kBAmBhB,YAAa7L,EAAA,SAAqB2W,EAAM,CACtC,IAAIvO,EAAU,KAAK,QACjBwO,EAAU,KAAK,QACfC,EAAO,KAAK,KACd,GAAI,KAAK,OAAS,CAAC,KAAK,SAAU,CAChC,IAAIC,EAAYH,IAASjT,EACrBqT,EAAU3O,EAAQ,SAAWuO,IAAShT,EAC1CgT,EAAOG,GAAaC,EAAUJ,EAAO/S,EACrCwE,EAAQ,SAAWuO,EACnB9O,GAAQ+O,EAASpT,EAAamT,CAAI,EAClCpP,GAAYqP,EAAS3T,EAAY6T,CAAS,EAC1CvP,GAAYqP,EAASrT,EAAYwT,CAAO,EACnC3O,EAAQ,iBAEXP,GAAQgP,EAAMrT,EAAamT,CAAI,EAC/BpP,GAAYsP,EAAM5T,EAAY6T,CAAS,EACvCvP,GAAYsP,EAAMtT,EAAYwT,CAAO,EAEzC,CACA,OAAO,IACT,EApBa,cAqBf,EAEIC,GAAiB/U,EAAO,QACxBgV,IAAuB,UAAY,CAMrC,SAASA,EAAQnQ,EAAS,CACxB,IAAIsB,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAEnF,GADA7H,EAAgB,KAAM0W,CAAO,EACzB,CAACnQ,GAAW,CAAC9B,GAAgB,KAAK8B,EAAQ,OAAO,EACnD,MAAM,IAAI,MAAM,0EAA0E,EAE5F,KAAK,QAAUA,EACf,KAAK,QAAUV,GAAO,CAAC,EAAGjB,GAAUQ,GAAcyC,CAAO,GAAKA,CAAO,EACrE,KAAK,QAAU,GACf,KAAK,SAAW,GAChB,KAAK,SAAW,CAAC,EACjB,KAAK,MAAQ,GACb,KAAK,UAAY,GACjB,KAAK,SAAW,GAChB,KAAK,MAAQ,GACb,KAAK,OAAS,GACd,KAAK,KAAK,CACZ,CAjBS,OAAApI,EAAAiX,EAAA,WAkBFnW,EAAamW,EAAS,CAAC,CAC5B,IAAK,OACL,MAAOjX,EAAA,UAAgB,CACrB,IAAI8G,EAAU,KAAK,QACfoQ,EAAUpQ,EAAQ,QAAQ,YAAY,EACtCuC,EACJ,GAAI,CAAAvC,EAAQ1E,CAAS,EAIrB,IADA0E,EAAQ1E,CAAS,EAAI,KACjB8U,IAAY,MAAO,CAQrB,GAPA,KAAK,MAAQ,GAGb7N,EAAMvC,EAAQ,aAAa,KAAK,GAAK,GACrC,KAAK,YAAcuC,EAGf,CAACA,EACH,OAIFA,EAAMvC,EAAQ,GAChB,MAAWoQ,IAAY,UAAY,OAAO,oBACxC7N,EAAMvC,EAAQ,UAAU,GAE1B,KAAK,KAAKuC,CAAG,EACf,EA1BO,OA2BT,EAAG,CACD,IAAK,OACL,MAAOrJ,EAAA,SAAcqJ,EAAK,CACxB,IAAIqK,EAAQ,KACZ,GAAKrK,EAGL,MAAK,IAAMA,EACX,KAAK,UAAY,CAAC,EAClB,IAAIvC,EAAU,KAAK,QACjBsB,EAAU,KAAK,QAMjB,GALI,CAACA,EAAQ,WAAa,CAACA,EAAQ,WACjCA,EAAQ,iBAAmB,IAIzB,CAACA,EAAQ,kBAAoB,CAAC,OAAO,YAAa,CACpD,KAAK,MAAM,EACX,MACF,CAGA,GAAItD,GAAgB,KAAKuE,CAAG,EAAG,CAEzBtE,GAAqB,KAAKsE,CAAG,EAC/B,KAAK,KAAKkG,GAAqBlG,CAAG,CAAC,EAInC,KAAK,MAAM,EAEb,MACF,CAIA,IAAI8N,EAAM,IAAI,eACVC,EAAQ,KAAK,MAAM,KAAK,IAAI,EAChC,KAAK,UAAY,GACjB,KAAK,IAAMD,EAMXA,EAAI,QAAUC,EACdD,EAAI,QAAUC,EACdD,EAAI,UAAYC,EAChBD,EAAI,WAAa,UAAY,CAEvBA,EAAI,kBAAkB,cAAc,IAAMvS,IAC5CuS,EAAI,MAAM,CAEd,EACAA,EAAI,OAAS,UAAY,CACvBzD,EAAM,KAAKyD,EAAI,QAAQ,CACzB,EACAA,EAAI,UAAY,UAAY,CAC1BzD,EAAM,UAAY,GAClBA,EAAM,IAAM,IACd,EAGItL,EAAQ,kBAAoBgB,GAAiBC,CAAG,GAAKvC,EAAQ,cAC/DuC,EAAME,GAAaF,CAAG,GAIxB8N,EAAI,KAAK,MAAO9N,EAAK,EAAI,EACzB8N,EAAI,aAAe,cACnBA,EAAI,gBAAkBrQ,EAAQ,cAAgB,kBAC9CqQ,EAAI,KAAK,EACX,EAtEO,OAuET,EAAG,CACD,IAAK,OACL,MAAOnX,EAAA,SAAc2P,EAAa,CAChC,IAAIvH,EAAU,KAAK,QACjB8I,EAAY,KAAK,UAIfhB,EAAcD,GAAuBN,CAAW,EAChDhG,EAAS,EACTC,EAAS,EACTC,EAAS,EACb,GAAIqG,EAAc,EAAG,CAEnB,KAAK,IAAML,GAAqBF,EAAa/K,EAAc,EAC3D,IAAIyS,EAAoBxG,GAAiBX,CAAW,EACpDvG,EAAS0N,EAAkB,OAC3BzN,EAASyN,EAAkB,OAC3BxN,EAASwN,EAAkB,MAC7B,CACIjP,EAAQ,YACV8I,EAAU,OAASvH,GAEjBvB,EAAQ,WACV8I,EAAU,OAAStH,EACnBsH,EAAU,OAASrH,GAErB,KAAK,MAAM,CACb,EA1BO,OA2BT,EAAG,CACD,IAAK,QACL,MAAO7J,EAAA,UAAiB,CACtB,IAAI8G,EAAU,KAAK,QACjBuC,EAAM,KAAK,IACTsJ,EAAc7L,EAAQ,YACtBwQ,EAAiBjO,EACjB,KAAK,QAAQ,kBAAoBD,GAAiBC,CAAG,IAClDsJ,IACHA,EAAc,aAIhB2E,EAAiB/N,GAAaF,CAAG,GAEnC,KAAK,YAAcsJ,EACnB,KAAK,eAAiB2E,EACtB,IAAI1K,EAAQ,SAAS,cAAc,KAAK,EACpC+F,IACF/F,EAAM,YAAc+F,GAEtB/F,EAAM,IAAM0K,GAAkBjO,EAC9BuD,EAAM,IAAM9F,EAAQ,KAAO,oBAC3B,KAAK,MAAQ8F,EACbA,EAAM,OAAS,KAAK,MAAM,KAAK,IAAI,EACnCA,EAAM,QAAU,KAAK,KAAK,KAAK,IAAI,EACnCzF,GAASyF,EAAOxJ,CAAU,EAC1B0D,EAAQ,WAAW,aAAa8F,EAAO9F,EAAQ,WAAW,CAC5D,EA1BO,QA2BT,EAAG,CACD,IAAK,QACL,MAAO9G,EAAA,UAAiB,CACtB,IAAIuX,EAAS,KACT3K,EAAQ,KAAK,MACjBA,EAAM,OAAS,KACfA,EAAM,QAAU,KAChB,KAAK,OAAS,GAId,IAAI4K,EAAcvV,EAAO,WAAa,sCAAsC,KAAKA,EAAO,UAAU,SAAS,EACvGwV,EAAOzX,EAAA,SAAcsN,EAAcC,EAAe,CACpDnH,GAAOmR,EAAO,UAAW,CACvB,aAAcjK,EACd,cAAeC,EACf,YAAaD,EAAeC,CAC9B,CAAC,EACDgK,EAAO,iBAAmBnR,GAAO,CAAC,EAAGmR,EAAO,SAAS,EACrDA,EAAO,OAAS,GAChBA,EAAO,MAAQ,GACfA,EAAO,MAAM,CACf,EAVW,QAaX,GAAI3K,EAAM,cAAgB,CAAC4K,EAAa,CACtCC,EAAK7K,EAAM,aAAcA,EAAM,aAAa,EAC5C,MACF,CACA,IAAI8K,EAAc,SAAS,cAAc,KAAK,EAC1CC,EAAO,SAAS,MAAQ,SAAS,gBACrC,KAAK,YAAcD,EACnBA,EAAY,OAAS,UAAY,CAC/BD,EAAKC,EAAY,MAAOA,EAAY,MAAM,EACrCF,GACHG,EAAK,YAAYD,CAAW,CAEhC,EACAA,EAAY,IAAM9K,EAAM,IAInB4K,IACHE,EAAY,MAAM,QAAU,uJAC5BC,EAAK,YAAYD,CAAW,EAEhC,EA5CO,QA6CT,EAAG,CACD,IAAK,OACL,MAAO1X,EAAA,UAAgB,CACrB,IAAI4M,EAAQ,KAAK,MACjBA,EAAM,OAAS,KACfA,EAAM,QAAU,KAChBA,EAAM,WAAW,YAAYA,CAAK,EAClC,KAAK,MAAQ,IACf,EANO,OAOT,EAAG,CACD,IAAK,QACL,MAAO5M,EAAA,UAAiB,CACtB,GAAI,GAAC,KAAK,OAAS,KAAK,OAGxB,KAAI8G,EAAU,KAAK,QACjBsB,EAAU,KAAK,QACfwE,EAAQ,KAAK,MAGXmE,EAAYjK,EAAQ,WACpB8Q,EAAW,SAAS,cAAc,KAAK,EAC3CA,EAAS,UAAYxS,GACrB,IAAI4L,EAAU4G,EAAS,cAAc,IAAI,OAAOxV,EAAW,YAAY,CAAC,EACpEkM,EAAS0C,EAAQ,cAAc,IAAI,OAAO5O,EAAW,SAAS,CAAC,EAC/DwU,EAAU5F,EAAQ,cAAc,IAAI,OAAO5O,EAAW,WAAW,CAAC,EAClEyV,EAAU7G,EAAQ,cAAc,IAAI,OAAO5O,EAAW,WAAW,CAAC,EAClEyU,EAAOgB,EAAQ,cAAc,IAAI,OAAOzV,EAAW,OAAO,CAAC,EAC/D,KAAK,UAAY2O,EACjB,KAAK,QAAUC,EACf,KAAK,OAAS1C,EACd,KAAK,QAAUsI,EACf,KAAK,QAAUiB,EACf,KAAK,QAAU7G,EAAQ,cAAc,IAAI,OAAO5O,EAAW,WAAW,CAAC,EACvE,KAAK,KAAOyU,EACZvI,EAAO,YAAY1B,CAAK,EAGxBzF,GAASL,EAAS3D,CAAY,EAG9B4N,EAAU,aAAaC,EAASlK,EAAQ,WAAW,EAGnDQ,GAAYsF,EAAOxJ,CAAU,EAC7B,KAAK,YAAY,EACjB,KAAK,KAAK,EACVgF,EAAQ,mBAAqB,KAAK,IAAI,EAAGA,EAAQ,kBAAkB,GAAK,IACxEA,EAAQ,YAAc,KAAK,IAAI,EAAGA,EAAQ,WAAW,GAAK,IAC1DA,EAAQ,SAAW,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,KAAK,MAAMA,EAAQ,QAAQ,CAAC,CAAC,GAAK,EAC7EjB,GAAS0Q,EAAS1U,CAAY,EACzBiF,EAAQ,QACXjB,GAAS0Q,EAAQ,uBAAuB,GAAG,OAAOzV,EAAW,SAAS,CAAC,EAAGe,CAAY,EAEnFiF,EAAQ,QACXjB,GAAS0Q,EAAQ,uBAAuB,GAAG,OAAOzV,EAAW,SAAS,CAAC,EAAGe,CAAY,EAEpFiF,EAAQ,YACVjB,GAAS6J,EAAS,GAAG,OAAO5O,EAAW,KAAK,CAAC,EAE1CgG,EAAQ,WACXjB,GAAS0P,EAAMxT,CAAe,EAE5B+E,EAAQ,iBACVjB,GAAS0P,EAAMtT,CAAU,EACzBsE,GAAQgP,EAAMrT,EAAanB,CAAU,GAElC+F,EAAQ,mBACXjB,GAAS0Q,EAAQ,uBAAuB,GAAG,OAAOzV,EAAW,OAAO,CAAC,EAAGe,CAAY,EACpFgE,GAAS0Q,EAAQ,uBAAuB,GAAG,OAAOzV,EAAW,QAAQ,CAAC,EAAGe,CAAY,GAEvF,KAAK,OAAO,EACZ,KAAK,MAAQ,GACb,KAAK,YAAYiF,EAAQ,QAAQ,EAC7BA,EAAQ,UACV,KAAK,KAAK,EAEZ,KAAK,QAAQA,EAAQ,IAAI,EACrBtC,GAAWsC,EAAQ,KAAK,GAC1BM,GAAY5B,EAAStC,GAAa4D,EAAQ,MAAO,CAC/C,KAAM,EACR,CAAC,EAEHW,GAAcjC,EAAStC,EAAW,EACpC,EAzEO,QA0ET,EAAG,CACD,IAAK,UACL,MAAOxE,EAAA,UAAmB,CACxB,GAAK,KAAK,MAGV,MAAK,MAAQ,GACb,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,IAAI8X,EAAa,KAAK,QAAQ,WAC1BA,GACFA,EAAW,YAAY,KAAK,OAAO,EAErCxQ,GAAY,KAAK,QAASnE,CAAY,EACxC,EAZO,UAaT,EAAG,CACD,IAAK,WACL,MAAOnD,EAAA,UAAoB,CACrB,KAAK,OACP,KAAK,QAAQ,EACb,KAAK,MAAQ,GACb,KAAK,QAAU,IACN,KAAK,QACd,KAAK,YAAY,OAAS,KAC1B,KAAK,OAAS,GACd,KAAK,MAAQ,IACJ,KAAK,WACd,KAAK,IAAI,QAAU,KACnB,KAAK,IAAI,MAAM,GACN,KAAK,OACd,KAAK,KAAK,CAEd,EAfO,WAqBT,CAAC,EAAG,CAAC,CACH,IAAK,aACL,MAAOA,EAAA,UAAsB,CAC3B,cAAO,QAAUgX,GACVC,CACT,EAHO,aAST,EAAG,CACD,IAAK,cACL,MAAOjX,EAAA,SAAqBoI,EAAS,CACnChC,GAAOjB,GAAUQ,GAAcyC,CAAO,GAAKA,CAAO,CACpD,EAFO,cAGT,CAAC,CAAC,CACJ,GAAE,EACF,OAAAhC,GAAO6Q,GAAQ,UAAWnG,GAAQ4B,GAASY,GAAQC,GAAUS,GAAQU,EAAO,EAErEuC,EAET,EAAE,ICxsGF,IAAAc,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAWAA,GAAO,QAAUC,EAAA,SAAkBC,EAAMC,EAAU,CAIjD,GAHAA,EAAWA,EAAS,MAAM,GAAG,EAAE,CAAC,EAChCD,EAAO,CAACA,EAEJ,CAACA,EAAM,MAAO,GAElB,OAAQC,EAAU,CAChB,IAAK,OACL,IAAK,KACL,OAAOD,IAAS,GAEhB,IAAK,QACL,IAAK,MACL,OAAOA,IAAS,IAEhB,IAAK,MACL,OAAOA,IAAS,GAEhB,IAAK,SACL,OAAOA,IAAS,GAEhB,IAAK,OACL,MAAO,EACT,CAEA,OAAOA,IAAS,CAClB,EA1BiB,cCXjB,IAAAE,GAAAC,GAAAC,IAAA,cAEA,IAAIC,GAAM,OAAO,UAAU,eACvBC,GASJ,SAASC,GAAOC,EAAO,CACrB,GAAI,CACF,OAAO,mBAAmBA,EAAM,QAAQ,MAAO,GAAG,CAAC,CACrD,MAAY,CACV,OAAO,IACT,CACF,CANSC,EAAAF,GAAA,UAeT,SAASG,GAAOF,EAAO,CACrB,GAAI,CACF,OAAO,mBAAmBA,CAAK,CACjC,MAAY,CACV,OAAO,IACT,CACF,CANSC,EAAAC,GAAA,UAeT,SAASC,GAAYC,EAAO,CAK1B,QAJIC,EAAS,uBACTC,EAAS,CAAC,EACVC,EAEGA,EAAOF,EAAO,KAAKD,CAAK,GAAG,CAChC,IAAII,EAAMT,GAAOQ,EAAK,CAAC,CAAC,EACpBE,EAAQV,GAAOQ,EAAK,CAAC,CAAC,EAUtBC,IAAQ,MAAQC,IAAU,MAAQD,KAAOF,IAC7CA,EAAOE,CAAG,EAAIC,EAChB,CAEA,OAAOH,CACT,CAtBSL,EAAAE,GAAA,eAgCT,SAASO,GAAeC,EAAKC,EAAQ,CACnCA,EAASA,GAAU,GAEnB,IAAIC,EAAQ,CAAC,EACTJ,EACAD,EAKa,OAAOI,GAApB,WAA4BA,EAAS,KAEzC,IAAKJ,KAAOG,EACV,GAAId,GAAI,KAAKc,EAAKH,CAAG,EAAG,CAkBtB,GAjBAC,EAAQE,EAAIH,CAAG,EAMX,CAACC,IAAUA,IAAU,MAAQA,IAAUX,IAAS,MAAMW,CAAK,KAC7DA,EAAQ,IAGVD,EAAMN,GAAOM,CAAG,EAChBC,EAAQP,GAAOO,CAAK,EAMhBD,IAAQ,MAAQC,IAAU,KAAM,SACpCI,EAAM,KAAKL,EAAK,IAAKC,CAAK,CAC5B,CAGF,OAAOI,EAAM,OAASD,EAASC,EAAM,KAAK,GAAG,EAAI,EACnD,CArCSZ,EAAAS,GAAA,kBA0CTd,GAAQ,UAAYc,GACpBd,GAAQ,MAAQO,KCrHhB,IAAAW,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAEA,IAAIC,GAAW,KACXC,GAAK,KACLC,GAAsB,6EACtBC,GAAS,YACTC,GAAU,gCACVC,GAAO,QACPC,GAAa,mDACbC,GAAqB,aAUzB,SAASC,GAASC,EAAK,CACrB,OAAQA,GAAY,IAAI,SAAS,EAAE,QAAQP,GAAqB,EAAE,CACpE,CAFSQ,EAAAF,GAAA,YAgBT,IAAIG,GAAQ,CACV,CAAC,IAAK,MAAM,EACZ,CAAC,IAAK,OAAO,EACbD,EAAA,SAAkBE,EAASC,EAAK,CAC9B,OAAOC,GAAUD,EAAI,QAAQ,EAAID,EAAQ,QAAQ,MAAO,GAAG,EAAIA,CACjE,EAFA,YAGA,CAAC,IAAK,UAAU,EAChB,CAAC,IAAK,OAAQ,CAAC,EACf,CAAC,IAAK,OAAQ,OAAW,EAAG,CAAC,EAC7B,CAAC,UAAW,OAAQ,OAAW,CAAC,EAChC,CAAC,IAAK,WAAY,OAAW,EAAG,CAAC,CACnC,EAUIG,GAAS,CAAE,KAAM,EAAG,MAAO,CAAE,EAcjC,SAASC,GAAUC,EAAK,CACtB,IAAIC,EAEA,OAAO,OAAW,IAAaA,EAAY,OACtC,OAAO,OAAW,IAAaA,EAAY,OAC3C,OAAO,KAAS,IAAaA,EAAY,KAC7CA,EAAY,CAAC,EAElB,IAAIC,EAAWD,EAAU,UAAY,CAAC,EACtCD,EAAMA,GAAOE,EAEb,IAAIC,EAAmB,CAAC,EACpBC,EAAO,OAAOJ,EACdK,EAEJ,GAAgBL,EAAI,WAAhB,QACFG,EAAmB,IAAIG,GAAI,SAASN,EAAI,QAAQ,EAAG,CAAC,CAAC,UAC/BI,IAAb,SAAmB,CAC5BD,EAAmB,IAAIG,GAAIN,EAAK,CAAC,CAAC,EAClC,IAAKK,KAAOP,GAAQ,OAAOK,EAAiBE,CAAG,CACjD,SAAwBD,IAAb,SAAmB,CAC5B,IAAKC,KAAOL,EACNK,KAAOP,KACXK,EAAiBE,CAAG,EAAIL,EAAIK,CAAG,GAG7BF,EAAiB,UAAY,SAC/BA,EAAiB,QAAUhB,GAAQ,KAAKa,EAAI,IAAI,EAEpD,CAEA,OAAOG,CACT,CAhCSV,EAAAM,GAAA,aAyCT,SAASF,GAAUU,EAAQ,CACzB,OACEA,IAAW,SACXA,IAAW,QACXA,IAAW,SACXA,IAAW,UACXA,IAAW,OACXA,IAAW,MAEf,CATSd,EAAAI,GAAA,aA2BT,SAASW,GAAgBb,EAASO,EAAU,CAC1CP,EAAUJ,GAASI,CAAO,EAC1BA,EAAUA,EAAQ,QAAQT,GAAQ,EAAE,EACpCgB,EAAWA,GAAY,CAAC,EAExB,IAAIO,EAAQpB,GAAW,KAAKM,CAAO,EAC/Be,EAAWD,EAAM,CAAC,EAAIA,EAAM,CAAC,EAAE,YAAY,EAAI,GAC/CE,EAAiB,CAAC,CAACF,EAAM,CAAC,EAC1BG,EAAe,CAAC,CAACH,EAAM,CAAC,EACxBI,EAAe,EACfC,EAEJ,OAAIH,EACEC,GACFE,EAAOL,EAAM,CAAC,EAAIA,EAAM,CAAC,EAAIA,EAAM,CAAC,EACpCI,EAAeJ,EAAM,CAAC,EAAE,OAASA,EAAM,CAAC,EAAE,SAE1CK,EAAOL,EAAM,CAAC,EAAIA,EAAM,CAAC,EACzBI,EAAeJ,EAAM,CAAC,EAAE,QAGtBG,GACFE,EAAOL,EAAM,CAAC,EAAIA,EAAM,CAAC,EACzBI,EAAeJ,EAAM,CAAC,EAAE,QAExBK,EAAOL,EAAM,CAAC,EAIdC,IAAa,QACXG,GAAgB,IAClBC,EAAOA,EAAK,MAAM,CAAC,GAEZjB,GAAUa,CAAQ,EAC3BI,EAAOL,EAAM,CAAC,EACLC,EACLC,IACFG,EAAOA,EAAK,MAAM,CAAC,GAEZD,GAAgB,GAAKhB,GAAUK,EAAS,QAAQ,IACzDY,EAAOL,EAAM,CAAC,GAGT,CACL,SAAUC,EACV,QAASC,GAAkBd,GAAUa,CAAQ,EAC7C,aAAcG,EACd,KAAMC,CACR,CACF,CAjDSrB,EAAAe,GAAA,mBA2DT,SAASO,GAAQC,EAAUC,EAAM,CAC/B,GAAID,IAAa,GAAI,OAAOC,EAQ5B,QANIC,GAAQD,GAAQ,KAAK,MAAM,GAAG,EAAE,MAAM,EAAG,EAAE,EAAE,OAAOD,EAAS,MAAM,GAAG,CAAC,EACvEG,EAAID,EAAK,OACTE,EAAOF,EAAKC,EAAI,CAAC,EACjBE,EAAU,GACVC,EAAK,EAEFH,KACDD,EAAKC,CAAC,IAAM,IACdD,EAAK,OAAOC,EAAG,CAAC,EACPD,EAAKC,CAAC,IAAM,MACrBD,EAAK,OAAOC,EAAG,CAAC,EAChBG,KACSA,IACLH,IAAM,IAAGE,EAAU,IACvBH,EAAK,OAAOC,EAAG,CAAC,EAChBG,KAIJ,OAAID,GAASH,EAAK,QAAQ,EAAE,GACxBE,IAAS,KAAOA,IAAS,OAAMF,EAAK,KAAK,EAAE,EAExCA,EAAK,KAAK,GAAG,CACtB,CA1BSzB,EAAAsB,GAAA,WA0CT,SAAST,GAAIX,EAASO,EAAUqB,EAAQ,CAItC,GAHA5B,EAAUJ,GAASI,CAAO,EAC1BA,EAAUA,EAAQ,QAAQT,GAAQ,EAAE,EAEhC,EAAE,gBAAgBoB,IACpB,OAAO,IAAIA,GAAIX,EAASO,EAAUqB,CAAM,EAG1C,IAAIP,EAAUQ,EAAWC,EAAOC,EAAaC,EAAOtB,EAChDuB,EAAelC,GAAM,MAAM,EAC3BU,EAAO,OAAOF,EACdN,EAAM,KACNuB,EAAI,EA8CR,IAjCiBf,IAAb,UAAkCA,IAAb,WACvBmB,EAASrB,EACTA,EAAW,MAGTqB,GAAyB,OAAOA,GAAtB,aAA8BA,EAASvC,GAAG,OAExDkB,EAAWH,GAAUG,CAAQ,EAK7BsB,EAAYhB,GAAgBb,GAAW,GAAIO,CAAQ,EACnDc,EAAW,CAACQ,EAAU,UAAY,CAACA,EAAU,QAC7C5B,EAAI,QAAU4B,EAAU,SAAWR,GAAYd,EAAS,QACxDN,EAAI,SAAW4B,EAAU,UAAYtB,EAAS,UAAY,GAC1DP,EAAU6B,EAAU,MAOlBA,EAAU,WAAa,UACrBA,EAAU,eAAiB,GAAKlC,GAAmB,KAAKK,CAAO,IAChE,CAAC6B,EAAU,UACTA,EAAU,UACTA,EAAU,aAAe,GACzB,CAAC3B,GAAUD,EAAI,QAAQ,MAE3BgC,EAAa,CAAC,EAAI,CAAC,OAAQ,UAAU,GAGhCT,EAAIS,EAAa,OAAQT,IAAK,CAGnC,GAFAO,EAAcE,EAAaT,CAAC,EAExB,OAAOO,GAAgB,WAAY,CACrC/B,EAAU+B,EAAY/B,EAASC,CAAG,EAClC,QACF,CAEA6B,EAAQC,EAAY,CAAC,EACrBrB,EAAMqB,EAAY,CAAC,EAEfD,IAAUA,EACZ7B,EAAIS,CAAG,EAAIV,EACW,OAAO8B,GAApB,UACTE,EAAQF,IAAU,IACd9B,EAAQ,YAAY8B,CAAK,EACzB9B,EAAQ,QAAQ8B,CAAK,EAErB,CAACE,IACc,OAAOD,EAAY,CAAC,GAAjC,UACF9B,EAAIS,CAAG,EAAIV,EAAQ,MAAM,EAAGgC,CAAK,EACjChC,EAAUA,EAAQ,MAAMgC,EAAQD,EAAY,CAAC,CAAC,IAE9C9B,EAAIS,CAAG,EAAIV,EAAQ,MAAMgC,CAAK,EAC9BhC,EAAUA,EAAQ,MAAM,EAAGgC,CAAK,MAG1BA,EAAQF,EAAM,KAAK9B,CAAO,KACpCC,EAAIS,CAAG,EAAIsB,EAAM,CAAC,EAClBhC,EAAUA,EAAQ,MAAM,EAAGgC,EAAM,KAAK,GAGxC/B,EAAIS,CAAG,EAAIT,EAAIS,CAAG,GAChBW,GAAYU,EAAY,CAAC,GAAIxB,EAASG,CAAG,GAAK,GAO5CqB,EAAY,CAAC,IAAG9B,EAAIS,CAAG,EAAIT,EAAIS,CAAG,EAAE,YAAY,EACtD,CAOIkB,IAAQ3B,EAAI,MAAQ2B,EAAO3B,EAAI,KAAK,GAMpCoB,GACCd,EAAS,SACTN,EAAI,SAAS,OAAO,CAAC,IAAM,MAC1BA,EAAI,WAAa,IAAMM,EAAS,WAAa,MAEjDN,EAAI,SAAWmB,GAAQnB,EAAI,SAAUM,EAAS,QAAQ,GAOpDN,EAAI,SAAS,OAAO,CAAC,IAAM,KAAOC,GAAUD,EAAI,QAAQ,IAC1DA,EAAI,SAAW,IAAMA,EAAI,UAQtBb,GAASa,EAAI,KAAMA,EAAI,QAAQ,IAClCA,EAAI,KAAOA,EAAI,SACfA,EAAI,KAAO,IAMbA,EAAI,SAAWA,EAAI,SAAW,GAE1BA,EAAI,OACN+B,EAAQ/B,EAAI,KAAK,QAAQ,GAAG,EAExB,CAAC+B,GACH/B,EAAI,SAAWA,EAAI,KAAK,MAAM,EAAG+B,CAAK,EACtC/B,EAAI,SAAW,mBAAmB,mBAAmBA,EAAI,QAAQ,CAAC,EAElEA,EAAI,SAAWA,EAAI,KAAK,MAAM+B,EAAQ,CAAC,EACvC/B,EAAI,SAAW,mBAAmB,mBAAmBA,EAAI,QAAQ,CAAC,GAElEA,EAAI,SAAW,mBAAmB,mBAAmBA,EAAI,IAAI,CAAC,EAGhEA,EAAI,KAAOA,EAAI,SAAWA,EAAI,SAAU,IAAKA,EAAI,SAAWA,EAAI,UAGlEA,EAAI,OAASA,EAAI,WAAa,SAAWC,GAAUD,EAAI,QAAQ,GAAKA,EAAI,KACpEA,EAAI,SAAU,KAAMA,EAAI,KACxB,OAKJA,EAAI,KAAOA,EAAI,SAAS,CAC1B,CAvKSH,EAAAa,GAAA,OAsLT,SAASuB,GAAIC,EAAMC,EAAOC,EAAI,CAC5B,IAAIpC,EAAM,KAEV,OAAQkC,EAAM,CACZ,IAAK,QACc,OAAOC,GAApB,UAA6BA,EAAM,SACrCA,GAASC,GAAMhD,GAAG,OAAO+C,CAAK,GAGhCnC,EAAIkC,CAAI,EAAIC,EACZ,MAEF,IAAK,OACHnC,EAAIkC,CAAI,EAAIC,EAEPhD,GAASgD,EAAOnC,EAAI,QAAQ,EAGtBmC,IACTnC,EAAI,KAAOA,EAAI,SAAU,IAAKmC,IAH9BnC,EAAI,KAAOA,EAAI,SACfA,EAAIkC,CAAI,EAAI,IAKd,MAEF,IAAK,WACHlC,EAAIkC,CAAI,EAAIC,EAERnC,EAAI,OAAMmC,GAAS,IAAKnC,EAAI,MAChCA,EAAI,KAAOmC,EACX,MAEF,IAAK,OACHnC,EAAIkC,CAAI,EAAIC,EAER3C,GAAK,KAAK2C,CAAK,GACjBA,EAAQA,EAAM,MAAM,GAAG,EACvBnC,EAAI,KAAOmC,EAAM,IAAI,EACrBnC,EAAI,SAAWmC,EAAM,KAAK,GAAG,IAE7BnC,EAAI,SAAWmC,EACfnC,EAAI,KAAO,IAGb,MAEF,IAAK,WACHA,EAAI,SAAWmC,EAAM,YAAY,EACjCnC,EAAI,QAAU,CAACoC,EACf,MAEF,IAAK,WACL,IAAK,OACH,GAAID,EAAO,CACT,IAAIE,EAAOH,IAAS,WAAa,IAAM,IACvClC,EAAIkC,CAAI,EAAIC,EAAM,OAAO,CAAC,IAAME,EAAOA,EAAOF,EAAQA,CACxD,MACEnC,EAAIkC,CAAI,EAAIC,EAEd,MAEF,IAAK,WACL,IAAK,WACHnC,EAAIkC,CAAI,EAAI,mBAAmBC,CAAK,EACpC,MAEF,IAAK,OACH,IAAIJ,EAAQI,EAAM,QAAQ,GAAG,EAEzB,CAACJ,GACH/B,EAAI,SAAWmC,EAAM,MAAM,EAAGJ,CAAK,EACnC/B,EAAI,SAAW,mBAAmB,mBAAmBA,EAAI,QAAQ,CAAC,EAElEA,EAAI,SAAWmC,EAAM,MAAMJ,EAAQ,CAAC,EACpC/B,EAAI,SAAW,mBAAmB,mBAAmBA,EAAI,QAAQ,CAAC,GAElEA,EAAI,SAAW,mBAAmB,mBAAmBmC,CAAK,CAAC,CAEjE,CAEA,QAASZ,EAAI,EAAGA,EAAIzB,GAAM,OAAQyB,IAAK,CACrC,IAAIe,EAAMxC,GAAMyB,CAAC,EAEbe,EAAI,CAAC,IAAGtC,EAAIsC,EAAI,CAAC,CAAC,EAAItC,EAAIsC,EAAI,CAAC,CAAC,EAAE,YAAY,EACpD,CAEA,OAAAtC,EAAI,KAAOA,EAAI,SAAWA,EAAI,SAAU,IAAKA,EAAI,SAAWA,EAAI,SAEhEA,EAAI,OAASA,EAAI,WAAa,SAAWC,GAAUD,EAAI,QAAQ,GAAKA,EAAI,KACpEA,EAAI,SAAU,KAAMA,EAAI,KACxB,OAEJA,EAAI,KAAOA,EAAI,SAAS,EAEjBA,CACT,CA9FSH,EAAAoC,GAAA,OAuGT,SAASM,GAASC,EAAW,EACvB,CAACA,GAA4B,OAAOA,GAAtB,cAAiCA,EAAYpD,GAAG,WAElE,IAAIqD,EACAzC,EAAM,KACN0C,EAAO1C,EAAI,KACXc,EAAWd,EAAI,SAEfc,GAAYA,EAAS,OAAOA,EAAS,OAAS,CAAC,IAAM,MAAKA,GAAY,KAE1E,IAAI6B,EACF7B,GACEd,EAAI,UAAYA,EAAI,SAAYC,GAAUD,EAAI,QAAQ,EAAI,KAAO,IAErE,OAAIA,EAAI,UACN2C,GAAU3C,EAAI,SACVA,EAAI,WAAU2C,GAAU,IAAK3C,EAAI,UACrC2C,GAAU,KACD3C,EAAI,UACb2C,GAAU,IAAK3C,EAAI,SACnB2C,GAAU,KAEV3C,EAAI,WAAa,SACjBC,GAAUD,EAAI,QAAQ,GACtB,CAAC0C,GACD1C,EAAI,WAAa,MAMjB2C,GAAU,MAQRD,EAAKA,EAAK,OAAS,CAAC,IAAM,KAAQlD,GAAK,KAAKQ,EAAI,QAAQ,GAAK,CAACA,EAAI,QACpE0C,GAAQ,KAGVC,GAAUD,EAAO1C,EAAI,SAErByC,EAAqB,OAAOzC,EAAI,OAAxB,SAAgCwC,EAAUxC,EAAI,KAAK,EAAIA,EAAI,MAC/DyC,IAAOE,GAAkBF,EAAM,OAAO,CAAC,IAAtB,IAA0B,IAAKA,EAAQA,GAExDzC,EAAI,OAAM2C,GAAU3C,EAAI,MAErB2C,CACT,CAnDS9C,EAAA0C,GAAA,YAqDT7B,GAAI,UAAY,CAAE,IAAKuB,GAAK,SAAUM,EAAS,EAM/C7B,GAAI,gBAAkBE,GACtBF,GAAI,SAAWP,GACfO,GAAI,SAAWf,GACfe,GAAI,GAAKtB,GAETF,GAAO,QAAUwB,KC5kBjB,IAAAkC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,UAASC,GAAQC,EAAQ,CACxB,GAAIA,EACH,OAAOC,GAAMD,CAAM,EAGpB,KAAK,WAAa,IAAI,GACvB,CANSE,EAAAH,GAAA,WAQT,SAASE,GAAMD,EAAQ,CACtB,cAAO,OAAOA,EAAQD,GAAQ,SAAS,EACvCC,EAAO,WAAa,IAAI,IACjBA,CACR,CAJSE,EAAAD,GAAA,SAMTF,GAAQ,UAAU,GAAK,SAAUI,EAAOC,EAAU,CACjD,IAAMC,EAAY,KAAK,WAAW,IAAIF,CAAK,GAAK,CAAC,EACjD,OAAAE,EAAU,KAAKD,CAAQ,EACvB,KAAK,WAAW,IAAID,EAAOE,CAAS,EAC7B,IACR,EAEAN,GAAQ,UAAU,KAAO,SAAUI,EAAOC,EAAU,CACnD,IAAME,EAAKJ,EAAA,IAAIK,IAAe,CAC7B,KAAK,IAAIJ,EAAOG,CAAE,EAClBF,EAAS,MAAM,KAAMG,CAAU,CAChC,EAHW,MAKX,OAAAD,EAAG,GAAKF,EACR,KAAK,GAAGD,EAAOG,CAAE,EACV,IACR,EAEAP,GAAQ,UAAU,IAAM,SAAUI,EAAOC,EAAU,CAClD,GAAID,IAAU,QAAaC,IAAa,OACvC,YAAK,WAAW,MAAM,EACf,KAGR,GAAIA,IAAa,OAChB,YAAK,WAAW,OAAOD,CAAK,EACrB,KAGR,IAAME,EAAY,KAAK,WAAW,IAAIF,CAAK,EAC3C,GAAIE,EAAW,CACd,OAAW,CAACG,EAAOC,CAAQ,IAAKJ,EAAU,QAAQ,EACjD,GAAII,IAAaL,GAAYK,EAAS,KAAOL,EAAU,CACtDC,EAAU,OAAOG,EAAO,CAAC,EACzB,KACD,CAGGH,EAAU,SAAW,EACxB,KAAK,WAAW,OAAOF,CAAK,EAE5B,KAAK,WAAW,IAAIA,EAAOE,CAAS,CAEtC,CAEA,OAAO,IACR,EAEAN,GAAQ,UAAU,KAAO,SAAUI,KAAUI,EAAY,CACxD,IAAMF,EAAY,KAAK,WAAW,IAAIF,CAAK,EAC3C,GAAIE,EAAW,CAEd,IAAMK,EAAgB,CAAC,GAAGL,CAAS,EAEnC,QAAWI,KAAYC,EACtBD,EAAS,MAAM,KAAMF,CAAU,CAEjC,CAEA,OAAO,IACR,EAEAR,GAAQ,UAAU,UAAY,SAAUI,EAAO,CAC9C,OAAO,KAAK,WAAW,IAAIA,CAAK,GAAK,CAAC,CACvC,EAEAJ,GAAQ,UAAU,cAAgB,SAAUI,EAAO,CAClD,GAAIA,EACH,OAAO,KAAK,UAAUA,CAAK,EAAE,OAG9B,IAAIQ,EAAa,EACjB,QAAWN,KAAa,KAAK,WAAW,OAAO,EAC9CM,GAAcN,EAAU,OAGzB,OAAOM,CACR,EAEAZ,GAAQ,UAAU,aAAe,SAAUI,EAAO,CACjD,OAAO,KAAK,cAAcA,CAAK,EAAI,CACpC,EAGAJ,GAAQ,UAAU,iBAAmBA,GAAQ,UAAU,GACvDA,GAAQ,UAAU,eAAiBA,GAAQ,UAAU,IACrDA,GAAQ,UAAU,oBAAsBA,GAAQ,UAAU,IAC1DA,GAAQ,UAAU,mBAAqBA,GAAQ,UAAU,IAErD,OAAOD,GAAW,MACrBA,GAAO,QAAUC,MCxGlB,IAAAa,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAEAA,GAAO,QAAUC,GACjBD,GAAO,QAAQ,SAAWC,GAC1BD,GAAO,QAAQ,QAAUC,GAEzB,IAAMC,GAAW,gWACXC,GAAc,OAEdC,GAAW,8BAEjB,SAASH,GAAUI,EAAM,CAClBA,IAAMA,EAAO,CAAC,GACnB,IAAIC,EAAKD,EAAK,GAKd,GAJI,CAACC,GAAM,OAAO,UAAc,MAAaA,EAAK,UAAU,WACxDA,GAAMA,EAAG,SAAW,OAAOA,EAAG,QAAQ,YAAY,GAAM,WAC1DA,EAAKA,EAAG,QAAQ,YAAY,GAE1B,OAAOA,GAAO,SAAU,MAAO,GAEnC,IAAIC,EACDL,GAAS,KAAKI,CAAE,GAAK,CAACH,GAAY,KAAKG,CAAE,GACzC,CAAC,CAACD,EAAK,QAAUD,GAAS,KAAKE,CAAE,EAEpC,MACE,CAACC,GACDF,EAAK,QACLA,EAAK,eACL,WACA,UAAU,eAAiB,GAC3BC,EAAG,QAAQ,WAAW,IAAM,IAC5BA,EAAG,QAAQ,QAAQ,IAAM,KAEzBC,EAAS,IAGJA,CACT,CA1BSC,EAAAP,GAAA,cCXM,SAARQ,GAA6BC,EAAQC,EAAK,CAC7C,OAAO,OAAO,OAAOD,EAAQC,CAAG,CACpC,CAFwBC,EAAAH,GAAA,eCIjB,GAAM,CAAE,gBAAAI,EAAgB,EAAI,WACtB,CAAE,YAAAC,EAAY,EAAI,WAClBC,GAAmBC,EAAA,CAACC,EAAU,UAAWC,IAAY,CAC9D,IAAMC,EAAM,IAAI,aAAaF,EAAS,YAAY,EAClD,OAAIC,GAAW,MAAQE,GAAYF,EAAS,OAAO,GAC/C,OAAO,eAAeC,EAAK,QAAS,CAEhC,UAAW,KACX,aAAc,GACd,SAAU,GACV,MAAOD,EAAQ,KACnB,CAAC,EAEEC,CACX,EAZgC,oBCAjB,SAARE,GAA8BC,EAAQC,EAAMC,EAAS,CACxD,OAAO,IAAI,QAASC,GAAY,CAC5BH,EAAO,OAAOG,EAASF,EAAMC,CAAO,CACxC,CAAC,CACL,CAJwBE,EAAAL,GAAA,gBCNxB,IAAMM,GAAmB,uDACzB,SAASC,GAAcC,EAASC,EAAMC,EAAQ,CAE1C,IAAMC,EAAcL,GAAiB,KAAKE,CAAO,EAE3CI,EAAWH,EAAK,UAAYE,IAAc,CAAC,GAAK,aAClDE,EACJ,GAAIF,IAAc,CAAC,GAAK,KAAM,CAC1B,IAAMG,EAAS,KAAK,mBAAmBH,EAAY,CAAC,CAAC,CAAC,EAChDI,EAAQ,IAAI,WAAWD,EAAO,MAAM,EAC1C,QAASE,EAAI,EAAGA,EAAIF,EAAO,OAAQE,IAC/BD,EAAMC,CAAC,EAAIF,EAAO,WAAWE,CAAC,EAElCH,EAAO,CAACE,CAAK,CACjB,MACSJ,IAAc,CAAC,GAAK,OACzBE,EAAO,CAAC,mBAAmBF,EAAY,CAAC,CAAC,CAAC,GAG9C,OAAID,EACO,IAAI,KAAKG,EAAMJ,EAAK,MAAQ,GAAI,CAAE,KAAMG,CAAS,CAAC,EAEtD,IAAI,KAAKC,EAAM,CAAE,KAAMD,CAAS,CAAC,CAC5C,CAtBSK,EAAAV,GAAA,iBAuBT,IAAOW,GAAQX,GCvBf,IAAMY,GAAN,cAA6B,KAAM,CADnC,MACmC,CAAAC,EAAA,uBAC/B,eACA,MACA,YAAYC,EAASC,EAAS,CAC1B,MAAMD,CAAO,EACb,KAAK,MAAQC,GAAS,MAClB,KAAK,OAASC,GAAY,KAAK,MAAO,gBAAgB,EACtD,KAAK,eAAiB,KAAK,MAAM,eAGjC,KAAK,eAAiB,EAE9B,CACJ,EACOC,GAAQL,GCJA,SAARM,GAA2BC,EAAUC,EAAuBC,EAAUC,EAAI,CAC7E,OAAID,IAAa,GAAKF,IAAaC,EACxBD,EACPG,IAAO,EACAF,EACJD,GAAYC,EAAwBD,GAAY,IAAM,CAACG,EAAKD,EACvE,CANwBE,EAAAL,GAAA,aCXxB,IAAOM,GAAQ,CACX,+DACA,kEACA,wDACA,yDACA,2DACA,yDACA,8DACA,8DACA,6DACA,yEACA,iEACJ,ECZA,IAAMC,GAAN,cAA2B,KAAM,CAAjC,MAAiC,CAAAC,EAAA,qBAC7B,MACA,eACA,QACA,YAAYC,EAAOC,EAAM,KAAM,CAC3B,MAAM,uGAAuG,EAC7G,KAAK,MAAQD,EACb,KAAK,eAAiB,GACtB,KAAK,QAAUC,CACnB,CACJ,EACOC,GAAQJ,GCLf,IAAMK,GAAN,KAAsB,CANtB,MAMsB,CAAAC,EAAA,wBAClBC,GACAC,GAAU,GACVC,GACAC,GACA,YAAYC,EAASC,EAAgB,CACjC,KAAKF,GAAWC,EAChB,KAAKF,GAAc,IAAMG,EAAeD,CAAO,CACnD,CACA,UAAW,CAIH,KAAKH,IAEL,KAAKE,GAAW,IAChB,aAAa,KAAKH,EAAW,EAC7B,KAAKA,GAAc,WAAW,KAAKE,GAAa,KAAKC,EAAQ,EAErE,CACA,MAAO,CACE,KAAKF,KACN,aAAa,KAAKD,EAAW,EAC7B,KAAKA,GAAc,OACnB,KAAKC,GAAU,GAEvB,CACJ,EACOK,GAAQR,GChCf,IAAMS,GAAOC,EAAA,IAAM,CAAE,EAAR,QAON,SAASC,GAAQC,EAAKC,EAAU,CAAC,EAAG,CACvC,GAAM,CAAE,KAAAC,EAAO,KAAM,QAAAC,EAAU,CAAC,EAAG,OAAAC,EAAS,MAAO,gBAAAC,EAAkBR,GAAM,iBAAAS,EAAmBT,GAAM,YAAAU,EAAcT,EAAA,IAAM,GAAN,eAAY,gBAAAU,EAAkBX,GAAM,UAAAY,EAAYZ,GAAM,aAAAa,EAAc,QAAAC,EAAU,EAAG,OAAAC,EAAS,KAAM,QAAAC,EAAU,IAAQ,gBAAAC,EAAkB,EAAO,EAAIb,EAE3Pc,EAAQjB,EAACkB,GAAY,GAAM,IAAMA,EAAU,GAAK,IAAxC,SACRC,EAAQ,IAAIC,GAAgBL,EAASJ,CAAS,EACpD,SAASU,EAAiBC,EAAa,EAAG,CAEtC,OAAO,IAAI,QAAQ,MAAOC,EAASC,IAAW,CAC1C,IAAMC,EAAM,IAAI,eACVC,EAAU1B,EAAC2B,GAAU,CACnBlB,EAAYgB,CAAG,GAAKH,EAAaT,EACjC,WAAW,IAAM,CACbQ,EAAiBC,EAAa,CAAC,EAAE,KAAKC,EAASC,CAAM,CACzD,EAAGP,EAAMK,CAAU,CAAC,GAGpBH,EAAM,KAAK,EACXK,EAAOG,CAAK,EAEpB,EAVgB,WAWhBF,EAAI,KAAKnB,EAAQJ,EAAK,EAAI,EAC1BuB,EAAI,gBAAkBT,EAClBJ,IACAa,EAAI,aAAeb,GAEvBa,EAAI,OAAS,SAAY,CACrB,GAAI,CACA,MAAMf,EAAgBe,EAAKH,CAAU,CACzC,OACOM,EAAK,CAGRA,EAAI,QAAUH,EACdC,EAAQE,CAAG,EACX,MACJ,CACIH,EAAI,QAAU,KAAOA,EAAI,OAAS,KAClCN,EAAM,KAAK,EACXI,EAAQE,CAAG,GAENhB,EAAYgB,CAAG,GAAKH,EAAaT,EACtC,WAAW,IAAM,CACbQ,EAAiBC,EAAa,CAAC,EAAE,KAAKC,EAASC,CAAM,CACzD,EAAGP,EAAMK,CAAU,CAAC,GAGpBH,EAAM,KAAK,EACXK,EAAO,IAAIK,GAAaJ,EAAI,WAAYA,CAAG,CAAC,EAEpD,EACAA,EAAI,QAAU,IAAMC,EAAQ,IAAIG,GAAaJ,EAAI,WAAYA,CAAG,CAAC,EACjEA,EAAI,OAAO,WAAcK,GAAU,CAC/BX,EAAM,SAAS,EACfX,EAAiBsB,CAAK,CAC1B,EACIzB,GACA,OAAO,KAAKA,CAAO,EAAE,QAAS0B,GAAQ,CAClCN,EAAI,iBAAiBM,EAAK1B,EAAQ0B,CAAG,CAAC,CAC1C,CAAC,EAEL,SAASC,GAAQ,CACbP,EAAI,MAAM,EAGVD,EAAO,IAAI,aAAa,UAAW,YAAY,CAAC,CACpD,CAEA,GAPSxB,EAAAgC,EAAA,SAMTlB,GAAQ,iBAAiB,QAASkB,CAAK,EACnClB,GAAQ,QAAS,CAEjBkB,EAAM,EACN,MACJ,CACA,MAAMzB,EAAgBkB,EAAKH,CAAU,EACrCG,EAAI,KAAKrB,CAAI,CACjB,CAAC,CACL,CAtES,OAAAJ,EAAAqB,EAAA,oBAuEFA,EAAiB,CAC5B,CA7EgBrB,EAAAC,GAAA,WCLD,SAARgC,MAA0CC,EAAS,CACtD,OAAO,MAAM,GAAGA,CAAO,EAAE,MAAOC,GAAQ,CACpC,MAAIA,EAAI,OAAS,aACPA,EAGA,IAAIC,GAAaD,CAAG,CAElC,CAAC,CACL,CATwBE,EAAAJ,GAAA,yBCJxB,IAAMK,GAAWC,EAACC,GAAS,UAAWA,GAAQ,CAAC,CAACA,EAAK,MAApC,YAKXC,GAAcF,EAACC,GAASA,EAAK,SAAS,eAAxB,eACb,SAASE,GAAoBC,EAAO,CACvC,OAAOA,EAAM,OAAQH,GAAS,CAACF,GAASE,CAAI,GAAK,CAACC,GAAYD,CAAI,CAAC,CACvE,CAFgBD,EAAAG,GAAA,uBAIT,SAASE,GAA+BD,EAAO,CAClD,OAAOA,EAAM,OAAQH,GAAS,CAACA,EAAK,UAAU,eAAiB,CAACA,EAAK,UAAU,CACnF,CAFgBD,EAAAK,GAAA,kCCPD,SAARC,GAA8BC,EAAK,CAGtC,OAFI,OAAOA,GAAQ,UAAYA,IAAQ,MAEnC,EAAE,aAAcA,GACT,GACJA,EAAI,WAAa,KAAK,YACjC,CANwBC,EAAAF,GAAA,gBCCxB,SAASG,GAAmBC,EAAS,CACjC,GAAI,OAAOA,GAAY,SAAU,CAC7B,IAAMC,EAAW,SAAS,iBAAiBD,CAAO,EAClD,OAAOC,EAAS,SAAW,EAAI,KAAO,MAAM,KAAKA,CAAQ,CAC7D,CACA,OAAI,OAAOD,GAAY,UAAYE,GAAaF,CAAO,EAC5C,CAACA,CAAO,EAEZ,IACX,CATSG,EAAAJ,GAAA,sBAUT,IAAOK,GAAQL,GCbf,SAASM,GAAeC,EAASC,EAAU,SAAU,CACjD,OAAI,OAAOD,GAAY,SACZC,EAAQ,cAAcD,CAAO,EAEpCE,GAAaF,CAAO,EACbA,EAEJ,IACX,CARSG,EAAAJ,GAAA,kBAST,IAAOK,GAAQL,GCPA,SAARM,GAAyCC,EAAc,CAC1D,IAAMC,EAAUD,EAAa,YAAY,GAAG,EAE5C,OAAIC,IAAY,IAAMA,IAAYD,EAAa,OAAS,EAC7C,CACH,KAAMA,EACN,UAAW,MACf,EAEG,CACH,KAAMA,EAAa,MAAM,EAAGC,CAAO,EACnC,UAAWD,EAAa,MAAMC,EAAU,CAAC,CAC7C,CACJ,CAbwBC,EAAAH,GAAA,2BCCxB,IAAOI,GAAQ,CACX,UAAW,KACX,GAAI,gBACJ,SAAU,gBACV,IAAK,YACL,IAAK,YACL,IAAK,gBACL,IAAK,aACL,IAAK,YACL,KAAM,aACN,IAAK,YACL,KAAM,aACN,KAAM,aACN,KAAM,YACN,IAAK,YACL,IAAK,WACL,IAAK,4BACL,IAAK,4BACL,IAAK,kBACL,IAAK,mBACL,IAAK,mBACL,IAAK,kBACL,MAAO,oBACP,IAAK,qBACL,IAAK,6BACL,KAAM,mDACN,KAAM,0EACN,IAAK,qBACL,KAAM,mDACN,KAAM,0EACN,IAAK,2BACL,KAAM,iDACN,IAAK,2BACL,IAAK,0BACL,IAAK,2BACL,IAAK,2BACL,KAAM,wDACN,KAAM,iDACN,KAAM,oEACN,IAAK,2BACL,KAAM,oDACN,KAAM,uEACN,IAAK,2BACL,IAAK,aACL,KAAM,aACN,KAAM,aACN,IAAK,aACL,IAAK,kBACL,IAAK,kBACL,KAAM,8BACN,IAAK,+BACL,IAAK,oBACL,GAAI,mBACJ,IAAK,+BACT,ECxDe,SAARC,GAA6BC,EAAM,CACtC,GAAIA,EAAK,KACL,OAAOA,EAAK,KAChB,IAAMC,EAAgBD,EAAK,KACrBE,GAAwBF,EAAK,IAAI,EAAE,WAAW,YAAY,EAC1D,KACN,OAAIC,GAAiBA,KAAiBE,GAE3BA,GAAUF,CAAa,EAG3B,0BACX,CAZwBG,EAAAL,GAAA,eCDxB,SAASM,GAAgBC,EAAW,CAChC,OAAOA,EAAU,WAAW,CAAC,EAAE,SAAS,EAAE,CAC9C,CAFSC,EAAAF,GAAA,mBAGT,SAASG,GAAeC,EAAM,CAC1B,IAAIC,EAAS,GACb,OAAQD,EAAK,QAAQ,cAAgBH,IACjCI,GAAU,IAAIL,GAAgBC,CAAS,CAAC,GACjC,IACV,EAAII,CACT,CANSH,EAAAC,GAAA,kBAWM,SAARG,GAAgCC,EAAMC,EAAY,CAGrD,IAAIC,EAAKD,GAAc,OACvB,OAAI,OAAOD,EAAK,MAAS,WACrBE,GAAM,IAAIN,GAAeI,EAAK,KAAK,YAAY,CAAC,CAAC,IAEjDA,EAAK,OAAS,SACdE,GAAM,IAAIF,EAAK,IAAI,IAEnBA,EAAK,MAAQ,OAAOA,EAAK,KAAK,cAAiB,WAC/CE,GAAM,IAAIN,GAAeI,EAAK,KAAK,aAAa,YAAY,CAAC,CAAC,IAE9DA,EAAK,MAAM,OAAS,SACpBE,GAAM,IAAIF,EAAK,KAAK,IAAI,IAExBA,EAAK,KAAK,eAAiB,SAC3BE,GAAM,IAAIF,EAAK,KAAK,YAAY,IAE7BE,CACX,CApBwBP,EAAAI,GAAA,kBAuBxB,SAASI,GAAgBH,EAAM,CAC3B,MAAI,CAACA,EAAK,UAAY,CAACA,EAAK,OACjB,GAEe,IAAI,IAAI,CAC9B,MACA,UACA,QACA,WACA,UACJ,CAAC,EACwB,IAAIA,EAAK,OAAO,QAAQ,CACrD,CAZSL,EAAAQ,GAAA,mBAaF,SAASC,GAAcJ,EAAMC,EAAY,CAC5C,GAAIE,GAAgBH,CAAI,EACpB,OAAOA,EAAK,GAChB,IAAMK,EAAWC,GAAYN,CAAI,EACjC,OAAOD,GAAe,CAClB,GAAGC,EACH,KAAMK,CACV,EAAGJ,CAAU,CACjB,CARgBN,EAAAS,GAAA,iBCnDD,SAARG,GAAsCC,EAAQC,EAAM,CACvD,OAAID,IAAW,GACJ,OAAO,KAAKC,CAAI,EAEvB,MAAM,QAAQD,CAAM,EACbA,EAEJ,CAAC,CACZ,CARwBE,EAAAH,GAAA,wBCGxB,IAAOI,GAAQ,MAAM,KCDN,SAARC,GAA6BC,EAAc,CAC9C,IAAMC,EAAQC,GAAQF,EAAa,KAAK,EACxC,OAAO,QAAQ,QAAQC,CAAK,CAChC,CAHwBE,EAAAJ,GAAA,eCCT,SAARK,GAAqDC,EAAiBC,EAAYC,EAAc,CAAE,UAAAC,CAAU,EAAG,CAClHH,EAAgB,YAAaI,GAAY,CACrC,IAAMC,EAAa,CAAC,GAAGJ,EAAY,GAAGG,CAAO,EAGzCA,EAAQ,OACR,eAAe,IAAM,CACjBL,GAAoCC,EAAiBK,EAAYH,EAAc,CAAE,UAAAC,CAAU,CAAC,CAChG,CAAC,EAIDA,EAAUE,CAAU,CAE5B,EAECC,GAAU,CACPJ,EAAaI,CAAK,EAClBH,EAAUF,CAAU,CACxB,CAAC,CACL,CApBwBM,EAAAR,GAAA,uCCExB,SAASS,GAA+BC,EAAOC,EAAc,CACzD,OAAID,GAAS,KACFA,EACJ,CACH,KAAMA,EAAM,OACN,OACAA,EAAM,YACF,YACA,OACV,KAAMA,EAAM,KACZ,SAAU,CACN,OAAO,IAAI,QAAQ,CAACE,EAASC,IAAWH,EAAM,KAAKE,EAASC,CAAM,CAAC,CACvE,EACA,MAAO,QAAS,CAEZ,IAAMC,EAAkBJ,EAAM,aAAa,EAM3C,MALgB,MAAM,IAAI,QAASE,GAAY,CAC3CG,GAAoCD,EAAiB,CAAC,EAAGH,EAAc,CACnE,UAAWK,EAACC,GAAeL,EAAQK,EAAW,IAAKC,GAAST,GAA+BS,EAAMP,CAAY,CAAC,CAAC,EAApG,YACf,CAAC,CACL,CAAC,CAEL,EACA,YAAa,MACjB,CACJ,CAzBSK,EAAAP,GAAA,kCA0BT,eAAgBU,GAAuCT,EAAOU,EAAcC,EAAiB,OAAW,CACpG,IAAMC,EAAsBN,EAAA,IAAM,GAAGI,CAAY,IAAIV,EAAM,IAAI,GAAnC,uBAE5B,GAAIA,EAAM,OAAS,OAAQ,CACvB,IAAMQ,EAAO,MAAMR,EAAM,QAAQ,EAC7BQ,GAAQ,MAERA,EAAK,aAAeE,EAAeE,EAAoB,EAAI,KAC3D,MAAMJ,GAEDG,GAAkB,OACvB,MAAMA,EACd,SACSX,EAAM,OAAS,YACpB,cAAiBa,KAAUb,EAAM,OAAO,EAEpC,MAAOS,GAAuCI,EAAQH,EAAeE,EAAoB,EAAIZ,EAAM,IAAI,OAGtGW,GAAkB,OACvB,MAAMA,EACd,CArBgBL,EAAAG,GAAA,0CA6BhB,eAAOK,GAAiDC,EAAcd,EAAc,CAIhF,IAAMe,EAAoB,MAAM,QAAQ,IAAI,MAAM,KAAKD,EAAa,MAAO,MAAOE,GAAS,CAEvF,IAAIC,EAYJ,OAAAA,IAAqBnB,GAHFO,EAAA,IAAM,OAAOW,EAAK,YAAe,WAC9CA,EAAK,WAAW,EAChBA,EAAK,iBAAiB,EAFT,cAG4C,EAAGhB,CAAY,EACvE,CACH,iBAAAiB,EACA,eAAgBD,EAAK,UAAU,CACnC,CACJ,CAAC,CAAC,EACF,OAAW,CAAE,eAAAN,EAAgB,iBAAAO,CAAiB,IAAKF,EAE/C,GAAIE,GAAoB,KACpB,GAAI,CACA,MAAOT,GAAuCS,EAAkB,GAAIP,CAAc,CACtF,OACOQ,EAAK,CAIJR,GAAkB,KAClB,MAAMA,EAGNV,EAAakB,CAAG,CAExB,MAEKR,GAAkB,OACvB,MAAMA,EAElB,CA7C+BL,EAAAQ,GAAA,4BC3C/B,eAAOM,GAAuCC,EAAcC,EAAS,CAEjE,IAAMC,EAAeD,GAAS,cAAgB,SAAS,UACvD,GAAI,CACA,IAAME,EAAc,CAAC,EACrB,cAAiBC,KAAQC,GAAoBL,EAAcE,CAAY,EACnEC,EAAY,KAAKC,CAAI,EAEzB,OAAOD,CAEX,MACM,CACF,OAAOG,GAAYN,CAAY,CACnC,CACJ,CAd8BO,EAAAR,GAAA,mBCjB9B,IAAMS,GAAmB,CACrB,UAAW,KACX,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,OACd,YAAa,MACb,aAAc,OACd,aAAc,OACd,aAAc,MACd,aAAc,OACd,YAAa,MACb,gBAAiB,MACjB,YAAa,MACb,YAAa,MACb,kBAAmB,MACnB,aAAc,OACd,mBAAoB,MACpB,kBAAmB,KACvB,EACe,SAARC,GAAsCC,EAAU,CAGnD,OAACA,CAAQ,EAAIA,EAAS,MAAM,IAAK,CAAC,EAC3BF,GAAiBE,CAAQ,GAAK,IACzC,CALwBC,EAAAF,GAAA,wBCpBT,SAARG,GAA+BC,EAAK,CAGvC,IAAMC,EADQ,+CACK,KAAKD,CAAG,IAAI,CAAC,EAEhC,MAAO,GADgB,cAAc,KAAKA,CAAG,EAAI,KAAO,KAChC,MAAMC,CAAI,EACtC,CANwBC,EAAAH,GAAA,iBCGxB,SAASI,GAAiBC,EAAS,CAO/B,KAAOA,GAAW,CAACA,EAAQ,KACvBA,EAAUA,EAAQ,WAEtB,OAAOA,GAAS,GACpB,CAXSC,EAAAF,GAAA,oBAYT,IAAOG,GAAQH,GCZf,SAASI,GAAIC,EAAQ,CACjB,OAAOA,EAAS,GAAK,IAAIA,CAAM,GAAKA,EAAO,SAAS,CACxD,CAFSC,EAAAF,GAAA,OAMM,SAARG,IAAgC,CACnC,IAAMC,EAAO,IAAI,KACXC,EAAQL,GAAII,EAAK,SAAS,CAAC,EAC3BE,EAAUN,GAAII,EAAK,WAAW,CAAC,EAC/BG,EAAUP,GAAII,EAAK,WAAW,CAAC,EACrC,MAAO,GAAGC,CAAK,IAAIC,CAAO,IAAIC,CAAO,EACzC,CANwBL,EAAAC,GAAA,gBCNT,SAARK,IAAuC,CAC1C,GAAI,OAAO,OAAW,IAClB,MAAO,GAEX,IAAMC,EAAO,SAAS,KAatB,MAXI,EAAAA,GAAQ,MAAQ,QAAU,MAG1B,EAAE,cAAeA,IACjB,EAAE,gBAAiBA,IACnB,EAAE,WAAYA,IAGd,EAAE,aAAc,SAGhB,EAAE,eAAgB,QAI1B,CArBwBC,EAAAF,GAAA,uBCHxB,SAASG,GAAeC,EAAK,CACzB,OAAKA,EAGEA,EAAI,aAAe,GAAKA,EAAI,SAAW,EAFnC,EAGf,CALSC,EAAAF,GAAA,kBAMT,IAAOG,GAAQH,GCHA,SAARI,GAA6BC,EAAK,CACrC,OAAOA,EAAI,WAAW,OAAO,CACjC,CAFwBC,EAAAF,GAAA,eCHT,SAARG,GAAoCC,EAAU,CACjD,OAAKA,EAGE,sDAAsD,KAAKA,CAAQ,EAF/D,EAGf,CALwBC,EAAAF,GAAA,sBCAT,SAARG,GAA+BC,EAAY,CAC9C,IAAMC,EAAQ,KAAK,MAAMD,EAAa,IAAI,EAAI,GACxCE,EAAU,KAAK,MAAMF,EAAa,EAAE,EAAI,GACxCG,EAAU,KAAK,MAAMH,EAAa,EAAE,EAC1C,MAAO,CAAE,MAAAC,EAAO,QAAAC,EAAS,QAAAC,CAAQ,CACrC,CALwBC,EAAAL,GAAA,iBCCT,SAARM,GAA2BC,EAAS,CACvC,IAAMC,EAAOC,GAAcF,CAAO,EAI5BG,EAAWF,EAAK,QAAU,EAAI,GAAK,GAAGA,EAAK,KAAK,IAChDG,EAAaH,EAAK,UAAY,EAC9B,GACA,GAAGA,EAAK,QAAU,EACdA,EAAK,QACL,IAAIA,EAAK,QAAQ,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,IACpDI,EAAaJ,EAAK,QAAU,EAC5B,GACA,GAAGA,EAAK,UAAY,EAChBA,EAAK,QACL,IAAIA,EAAK,QAAQ,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,IAC1D,MAAO,GAAGE,CAAQ,GAAGC,CAAU,GAAGC,CAAU,EAChD,CAjBwBC,EAAAP,GAAA,aCDxB,SAASQ,GAAkBC,EAAO,CAC9B,OAAO,IAAI,MAAM,YAAa,CAAE,MAAAA,CAAM,CAAC,CAC3C,CAFSC,EAAAF,GAAA,qBAGT,SAASG,GAAQC,EAAQ,CACrB,GAAIA,GAAU,KAAM,CAChB,IAAMC,EAAeH,EAAA,IAAM,KAAK,MAAME,EAAO,MAAM,EAA9B,gBACrBA,EAAO,iBAAiB,QAASC,EAAc,CAAE,KAAM,EAAK,CAAC,EAC7D,IAAMC,EAAsBJ,EAAA,IAAM,CAC9BE,EAAO,oBAAoB,QAASC,CAAY,CACpD,EAF4B,uBAG5B,KAAK,OAAOC,EAAqBA,CAAmB,CACxD,CACA,OAAO,IACX,CAVSJ,EAAAC,GAAA,WAWF,IAAMI,GAAN,KAAuB,CAd9B,MAc8B,CAAAL,EAAA,yBAC1BM,GAAkB,EAClBC,GAAkB,CAAC,EACnBC,GAAU,GACVC,GACAC,GAAa,EACbC,GACAC,GACA,MACA,YAAYC,EAAO,CACX,OAAOA,GAAU,UAAYA,IAAU,EACvC,KAAK,MAAQ,IAGb,KAAK,MAAQA,CAErB,CACAC,GAAMC,EAAI,CACN,KAAKT,IAAmB,EACxB,IAAIU,EAAO,GACPC,EACJ,GAAI,CACAA,EAAeF,EAAG,CACtB,OACOG,EAAK,CACR,WAAKZ,IAAmB,EAClBY,CACV,CACA,MAAO,CACH,MAAOlB,EAACD,GAAU,CACViB,IAEJA,EAAO,GACP,KAAKV,IAAmB,EACxBW,IAAelB,CAAK,EACpB,KAAKoB,GAAW,EACpB,EAPO,SAQP,KAAMnB,EAAA,IAAM,CACJgB,IAEJA,EAAO,GACP,KAAKV,IAAmB,EACxB,KAAKa,GAAW,EACpB,EANM,OAOV,CACJ,CACAA,IAAa,CAIT,eAAe,IAAM,KAAKC,GAAM,CAAC,CACrC,CACAA,IAAQ,CAIJ,GAHI,KAAKZ,IAAW,KAAKF,IAAmB,KAAK,OAG7C,KAAKC,GAAgB,SAAW,EAChC,OAKJ,IAAMc,EAAO,KAAKd,GAAgB,MAAM,EACxC,GAAIc,GAAQ,KACR,MAAM,IAAI,MAAM,mCAAmC,EAEvD,IAAMC,EAAU,KAAKR,GAAMO,EAAK,EAAE,EAClCA,EAAK,MAAQC,EAAQ,MACrBD,EAAK,KAAOC,EAAQ,IACxB,CACAC,GAAOR,EAAIS,EAAS,CAChB,IAAMF,EAAU,CACZ,GAAAP,EACA,SAAUS,GAAS,UAAY,EAC/B,MAAOxB,EAAA,IAAM,CACT,KAAKyB,GAASH,CAAO,CACzB,EAFO,SAGP,KAAMtB,EAAA,IAAM,CACR,MAAM,IAAI,MAAM,4DAA4D,CAChF,EAFM,OAGV,EACM0B,EAAQ,KAAKnB,GAAgB,UAAWoB,GACnCL,EAAQ,SAAWK,EAAM,QACnC,EACD,OAAID,IAAU,GACV,KAAKnB,GAAgB,KAAKe,CAAO,EAGjC,KAAKf,GAAgB,OAAOmB,EAAO,EAAGJ,CAAO,EAE1CA,CACX,CACAG,GAASH,EAAS,CACd,IAAMI,EAAQ,KAAKnB,GAAgB,QAAQe,CAAO,EAC9CI,IAAU,IACV,KAAKnB,GAAgB,OAAOmB,EAAO,CAAC,CAE5C,CACA,IAAIX,EAAIa,EAAc,CAClB,MAAI,CAAC,KAAKpB,IAAW,KAAKF,GAAkB,KAAK,MACtC,KAAKQ,GAAMC,CAAE,EAEjB,KAAKQ,GAAOR,EAAIa,CAAY,CACvC,CACA,iBAAiBb,EAAIa,EAAc,CAC/B,MAAO,IAAIC,IAAS,CAChB,IAAMC,EAAgB,KAAK,IAAI,KAC3Bf,EAAG,GAAGc,CAAI,EACV,eAAe,IAAMC,EAAc,KAAK,CAAC,EAClC,IAAM,CAAE,GAChBF,CAAY,EACf,MAAO,CACH,QAAA3B,GACA,OAAQ,CACJ6B,EAAc,MAAM,CACxB,CACJ,CACJ,CACJ,CACA,oBAAoBf,EAAIa,EAAc,CAClC,MAAO,IAAIC,IAAS,CAChB,IAAIC,EACEC,EAAe,IAAI,QAAQ,CAACC,EAASC,IAAW,CAClDH,EAAgB,KAAK,IAAI,IAAM,CAC3B,IAAII,EACAC,EACJ,GAAI,CACAA,EAAe,QAAQ,QAAQpB,EAAG,GAAGc,CAAI,CAAC,CAC9C,OACOX,EAAK,CACRiB,EAAe,QAAQ,OAAOjB,CAAG,CACrC,CACA,OAAAiB,EAAa,KAAMC,GAAW,CACtBF,EACAD,EAAOC,CAAW,GAGlBJ,EAAc,KAAK,EACnBE,EAAQI,CAAM,EAEtB,EAAIlB,GAAQ,CACJgB,EACAD,EAAOC,CAAW,GAGlBJ,EAAc,KAAK,EACnBG,EAAOf,CAAG,EAElB,CAAC,EACOnB,GAAU,CACdmC,EAAcpC,GAAkBC,CAAK,CACzC,CACJ,EAAG6B,CAAY,CACnB,CAAC,EACD,OAAAG,EAAa,MAAShC,GAAU,CAC5B+B,EAAc,MAAM/B,CAAK,CAC7B,EACAgC,EAAa,QAAU9B,GAChB8B,CACX,CACJ,CACA,QAAS,CACL,KAAKvB,GAAU,GACf,aAAa,KAAKC,EAAW,EAC7B,QAAS4B,EAAI,EAAGA,EAAI,KAAK,MAAOA,IAC5B,KAAKlB,GAAW,CAExB,CACAmB,GAAUtC,EAAA,IAAM,KAAK,OAAO,EAAlB,WAOV,MAAMuC,EAAW,KAAM,CACnB,KAAK/B,GAAU,GACf,aAAa,KAAKC,EAAW,EACzB8B,GAAY,OACZ,KAAK9B,GAAc,WAAW,KAAK6B,GAASC,CAAQ,EAE5D,CAWA,UAAUA,EAAU,CAChB,aAAa,KAAK3B,EAAkB,EACpC,KAAK,MAAM2B,CAAQ,EACf,KAAK,MAAQ,GAAK,OAAO,SAAS,KAAK,KAAK,IAC5C,KAAK5B,GAAc,KAAK,MAAQ,EAChC,KAAK,MAAQ,KAAKD,GAClB,KAAKE,GAAqB,WAAW,KAAK4B,GAAgBD,CAAQ,EAE1E,CACAC,GAAiBxC,EAAA,IAAM,CACnB,GAAI,KAAKQ,GAAS,CACd,KAAKI,GAAqB,WAAW,KAAK4B,GAAgB,CAAC,EAC3D,MACJ,CACA,KAAK9B,GAAa,KAAK,MACvB,KAAK,MAAQ,KAAK,MAAM,KAAKC,GAAc,KAAKD,IAAc,CAAC,EAC/D,QAAS2B,EAAI,KAAK3B,GAAY2B,GAAK,KAAK,MAAOA,IAC3C,KAAKlB,GAAW,EAEhB,KAAKR,GAAc,KAAKD,GAAa,EACrC,KAAKE,GAAqB,WAAW,KAAK4B,GAAgB,GAAI,EAG9D,KAAK9B,GAAa,KAAK,MAAM,KAAKA,GAAa,CAAC,CAExD,EAhBiB,kBAiBjB,IAAI,UAAW,CACX,OAAO,KAAKF,EAChB,CACJ,EC1Oe,SAARiC,GAAsCC,EAAM,CAC/C,MAAO,CACH,GAAGA,EACH,KAAMA,EAAK,SACX,UAAWA,EAAK,KAAOC,GAAwBD,EAAK,IAAI,EAAE,UAAY,IAC1E,CACJ,CANwBE,EAAAH,GAAA,wBCkBjB,IAAMI,GAAN,KAAgB,CAnBvB,MAmBuB,CAAAC,EAAA,kBACnBC,GAAS,CAAC,EACVC,GAAW,EACXC,GACAC,GAAU,GACV,YAAYC,EAAS,CACjB,IAAMC,EAAQD,GAAS,YACvB,KAAKF,GACD,OAAOG,GAAU,UAAYA,IAAU,EAAI,IAAWA,CAC9D,CAOA,IAAIC,EAAM,CACN,IAAMC,EAAa,IAAI,gBACnBC,EACAC,EACEC,EAAU,IAAI,QAAQ,CAACC,EAAKC,IAAQ,CACtCJ,EAAUG,EACVF,EAASG,CACb,CAAC,EACKC,EAAa,CACf,IAAKd,EAAA,IAAMO,EAAKC,EAAW,MAAM,EAA5B,OACL,QAAAC,EACA,OAAAC,EACA,WAAAF,CACJ,EAEA,OAAAA,EAAW,OAAO,iBAAiB,QAAS,IAAM,CAC9C,IAAMO,EAAQ,KAAKd,GAAO,QAAQa,CAAU,EACxCC,IAAU,KACV,KAAKd,GAAO,OAAOc,EAAO,CAAC,EAC3BL,EAAOF,EAAW,OAAO,QACrB,IAAI,aAAa,UAAW,YAAY,CAAC,EAErD,EAAG,CAAE,KAAM,EAAK,CAAC,EACjBG,EAAQ,MAASK,GAAW,CACxBR,EAAW,MAAMQ,GAAU,IAAI,aAAa,UAAW,YAAY,CAAC,CACxE,EAEAL,EAAQ,QAAWM,GAAW,CAC1B,GAAIA,EAAQ,CACR,IAAMC,EAAUlB,EAAA,IAAMW,EAAQ,MAAMM,EAAO,MAAM,EAAjC,WAChBA,EAAO,iBAAiB,QAASC,EAAS,CAAE,KAAM,EAAK,CAAC,EACxDP,EAAQ,KAAK,IAAMM,EAAO,oBAAoB,QAASC,CAAO,EAAG,IAAMD,EAAO,oBAAoB,QAASC,CAAO,CAAC,CACvH,CACA,OAAOP,CACX,EAEI,CAAC,KAAKP,IAAW,KAAKF,GAAW,KAAKC,GACtC,KAAKgB,GAASL,CAAU,EAGxB,KAAKb,GAAO,KAAKa,CAAU,EAExBH,CACX,CACAQ,GAASZ,EAAM,CAGX,GAFA,KAAKL,KAEDK,EAAK,WAAW,OAAO,QAAS,CAChC,KAAKL,KACLK,EAAK,OAAOA,EAAK,WAAW,OAAO,QAC/B,IAAI,aAAa,UAAW,YAAY,CAAC,EAC7C,KAAKa,GAAS,EACd,MACJ,CACA,IAAIC,EACJ,GAAI,CACAA,EAAad,EAAK,IAAI,CAC1B,OACOe,EAAO,CACVD,EAAa,QAAQ,OAAOC,CAAK,CACrC,CACAD,EACK,KAAME,GAAW,CACdhB,EAAK,WAAW,OAAO,QACvBA,EAAK,OAAOA,EAAK,WAAW,OAAO,QAC/B,IAAI,aAAa,UAAW,YAAY,CAAC,EAG7CA,EAAK,QAAQgB,CAAM,CAE3B,EAAID,GAAU,CACVf,EAAK,OAAOe,CAAK,CACrB,CAAC,EACI,QAAQ,IAAM,CACf,KAAKpB,KACL,KAAKkB,GAAS,CAClB,CAAC,CACL,CACAA,IAAW,CAEP,eAAe,IAAM,CACjB,GAAI,OAAKhB,IAAW,KAAKF,IAAY,KAAKC,IAE1C,KAAO,KAAKF,GAAO,OAAS,GAAG,CAC3B,IAAMuB,EAAO,KAAKvB,GAAO,MAAM,EAC/B,GAAI,CAAAuB,EAAK,WAAW,OAAO,QAE3B,MAAKL,GAASK,CAAI,EAClB,OACJ,CACJ,CAAC,CACL,CAIA,OAAQ,CACJ,KAAKpB,GAAU,EACnB,CAIA,QAAS,CACL,KAAKA,GAAU,GAEf,IAAMqB,EAAY,KAAKtB,GAAe,KAAKD,GAC3C,QAASwB,EAAI,EAAGA,EAAID,EAAWC,IAC3B,KAAKN,GAAS,CAEtB,CAOA,MAAMJ,EAAQ,CACV,IAAMW,EAAQ,KAAK1B,GAAO,OAAO,CAAC,EAC5BqB,EAAQN,GAAU,IAAI,aAAa,UAAW,YAAY,EAChE,QAAWT,KAAQoB,EACfpB,EAAK,WAAW,MAAMe,CAAK,EAC3Bf,EAAK,OAAOe,CAAK,CAEzB,CACA,IAAI,aAAc,CACd,OAAO,KAAKnB,EAChB,CACA,IAAI,YAAYyB,EAAO,CAInB,GAHA,KAAKzB,GACD,OAAOyB,GAAU,UAAYA,IAAU,EAAI,IAAWA,EAEtD,CAAC,KAAKxB,GAAS,CACf,IAAMqB,EAAY,KAAKtB,GAAe,KAAKD,GAC3C,QAASwB,EAAI,EAAGA,EAAID,EAAWC,IAC3B,KAAKN,GAAS,CAEtB,CACJ,CACA,IAAI,SAAU,CACV,OAAO,KAAKnB,GAAO,MACvB,CACA,IAAI,SAAU,CACV,OAAO,KAAKC,EAChB,CACA,IAAI,UAAW,CACX,OAAO,KAAKE,EAChB,CASA,oBAAoByB,EAAI,CACpB,MAAO,IAAIC,IACA,KAAK,IAAKb,GAINY,EAAG,GAAGC,CAAI,CACpB,CAET,CACJ,ECvMA,SAASC,GAAkBC,EAAQC,EAAIC,EAAa,CAChD,IAAMC,EAAW,CAAC,EAClB,OAAAH,EAAO,QAASI,GAKR,OAAOA,GAAU,SACVD,EAAS,KAAKC,CAAK,EAEvBH,EAAG,OAAO,KAAK,EAAEG,CAAK,EAAE,QAAQ,CAACC,EAAKC,EAAGC,IAAS,CACjDF,IAAQ,IACRF,EAAS,KAAKE,CAAG,EAGjBC,EAAIC,EAAK,OAAS,GAClBJ,EAAS,KAAKD,CAAW,CAEjC,CAAC,CACJ,EACMC,CACX,CArBSK,EAAAT,GAAA,qBAgCT,SAASU,GAAYC,EAAQC,EAAS,CAClC,IAAMC,EAAc,MACdC,EAAkB,OACpBC,EAAe,CAACJ,CAAM,EAC1B,GAAIC,GAAW,KACX,OAAOG,EACX,QAAWC,KAAO,OAAO,KAAKJ,CAAO,EACjC,GAAII,IAAQ,IAAK,CAIb,IAAIb,EAAcS,EAAQI,CAAG,EACzB,OAAOb,GAAgB,WACvBA,EAAcU,EAAY,OAAO,OAAO,EAAEV,EAAaW,CAAe,GAK1EC,EAAef,GAAkBe,EAAc,IAAI,OAAO,OAAOC,CAAG,MAAO,GAAG,EAAGb,CAAW,CAChG,CAEJ,OAAOY,CACX,CAtBSN,EAAAC,GAAA,eAuBT,IAAMO,GAAsBR,EAACS,GAAQ,CACjC,MAAM,IAAI,MAAM,mBAAmBA,CAAG,EAAE,CAC5C,EAF4B,uBAcPC,GAArB,KAAgC,CArEhC,MAqEgC,CAAAV,EAAA,mBAC5B,OACA,YAAYW,EAAS,CAAE,aAAAC,EAAeJ,EAAoB,EAAI,CAAC,EAAG,CAC9D,KAAK,OAAS,CACV,QAAS,CAAC,EACV,UAAUK,EAAG,CACT,OAAIA,IAAM,EACC,EAEJ,CACX,CACJ,EACI,MAAM,QAAQF,CAAO,EACrBA,EAAQ,QAAQ,KAAKG,GAAQ,IAAI,EAGjC,KAAKA,GAAOH,CAAO,EAEvB,KAAKI,GAAgBH,CACzB,CACAG,GACAD,GAAOE,EAAQ,CACX,GAAI,CAACA,GAAQ,QACT,OAEJ,IAAMC,EAAa,KAAK,OACxB,OAAO,OAAO,KAAK,OAAQ,CACvB,QAAS,CAAE,GAAGA,EAAW,QAAS,GAAGD,EAAO,OAAQ,EACpD,UAAWA,EAAO,WAAaC,EAAW,SAC9C,CAAC,CACL,CAQA,UAAUR,EAAKN,EAAS,CACpB,OAAO,KAAK,eAAeM,EAAKN,CAAO,EAAE,KAAK,EAAE,CACpD,CAMA,eAAeM,EAAKN,EAAS,CACzB,IAAIe,EAAS,KAAK,OAAO,QAAQT,CAAG,EAMpC,GALIS,GAAU,OACV,KAAKH,GAAcN,CAAG,EACtBS,EAAST,GAEU,OAAOS,GAAW,SACrB,CAChB,GAAIf,GAAW,OAAOA,EAAQ,YAAgB,IAAa,CACvD,IAAMgB,EAAS,KAAK,OAAO,UAAUhB,EAAQ,WAAW,EACxD,OAAOF,GAAYiB,EAAOC,CAAM,EAAGhB,CAAO,CAC9C,CACA,MAAM,IAAI,MAAM,wFAAwF,CAC5G,CACA,GAAI,OAAOe,GAAW,SAClB,MAAM,IAAI,MAAM,yBAAyB,EAE7C,OAAOjB,GAAYiB,EAAQf,CAAO,CACtC,CACJ,ECjIe,SAARiB,GAAgCC,EAAQC,EAAW,CAEtD,GAAIA,IAAc,EACd,MAAO,GAEX,GAAID,EAAO,QAAUC,EACjB,OAAOD,EAEX,GAAIC,GAAa,EACb,MAAO,GAAGD,EAAO,MAAM,EAAGC,EAAY,CAAC,CAAC,SAC5C,IAAMC,EAAcD,EAAY,EAC1BE,EAAa,KAAK,KAAKD,EAAc,CAAC,EACtCE,EAAY,KAAK,MAAMF,EAAc,CAAC,EAC5C,OAAOF,EAAO,MAAM,EAAGG,CAAU,EAAI,MAAYH,EAAO,MAAM,CAACI,CAAS,CAC5E,CAdwBC,EAAAN,GAAA,kBCLxB,IAAMO,GAAN,cAAiC,KAAM,CAAvC,MAAuC,CAAAC,EAAA,2BACnC,KAAO,oBACX,EACOC,GAAQF,GCFR,IC0BMG,GChBPC,GCPFC,GA2FSC,GCoFTC,GAWAC,GAEEC,GA0BAC,GC3MAC,GAaFC,GA+IEC,GACAC,GCzKKC,GNeEC,GAAgC,CAAG,EACnCC,GAAY,CAAA,EACZC,GACZ,oECnBYC,GAAUC,MAAMD,QAStB,SAASE,GAAOC,EAAKC,EAAAA,CAE3B,QAASR,KAAKQ,EAAOD,EAAIP,CAAAA,EAAKQ,EAAMR,CAAAA,EACpC,OAA6BO,CAC9B,CAJgBD,EAAAA,GAAAA,KAYA,SAAAG,GAAWC,EAAAA,CACtBA,GAAQA,EAAKC,YAAYD,EAAKC,WAAWC,YAAYF,CAAAA,CAC1D,CAFgBD,EAAAA,GAAAA,KERA,SAAAI,GAAcC,EAAMN,EAAOO,EAAAA,CAC1C,IACCC,EACAC,EACAjB,EAHGkB,EAAkB,CAAA,EAItB,IAAKlB,KAAKQ,EACLR,GAAK,MAAOgB,EAAMR,EAAMR,CAAAA,EACnBA,GAAK,MAAOiB,EAAMT,EAAMR,CAAAA,EAC5BkB,EAAgBlB,CAAAA,EAAKQ,EAAMR,CAAAA,EAUjC,GAPImB,UAAUC,OAAS,IACtBF,EAAgBH,SACfI,UAAUC,OAAS,EAAIhC,GAAMiC,KAAKF,UAAW,CAAA,EAAKJ,GAKjC,OAARD,GAAQ,YAAcA,EAAKQ,cHjBnB,KGkBlB,IAAKtB,KAAKc,EAAKQ,aACVJ,EAAgBlB,CAAAA,IADNsB,SAEbJ,EAAgBlB,CAAAA,EAAKc,EAAKQ,aAAatB,CAAAA,GAK1C,OAAOuB,GAAYT,EAAMI,EAAiBF,EAAKC,EHzB5B,IAAA,CG0BpB,CA3BgBJ,EAAAA,GAAAA,KAyCA,SAAAU,GAAYT,EAAMN,EAAOQ,EAAKC,EAAKO,EAAAA,CAIlD,IAAMC,EAAQ,CACbX,KAAAA,EACAN,MAAAA,EACAQ,IAAAA,EACAC,IAAAA,EACAS,IHjDkB,KGkDlBC,GHlDkB,KGmDlBC,IAAQ,EACRC,IHpDkB,KGqDlBC,IHrDkB,KGsDlBC,YAAAA,OACAC,IAAWR,GAAAA,EAAqBlC,GAChC2C,IAAAA,GACAC,IAAQ,CAAA,EAMT,OAFIV,GH7De,MG6DKnC,GAAQoC,OH7Db,MG6D4BpC,GAAQoC,MAAMA,CAAAA,EAEtDA,CACR,CAxBgBF,EAAAA,GAAAA,KAwBhB,SAEgBY,IAAAA,CACf,MAAO,CAAEC,QHnEU,IAAA,CGoEpB,CAFgBD,EAAAA,GAAAA,KAIA,SAAAE,GAAS7B,EAAAA,CACxB,OAAOA,EAAMO,QACd,CAFgBsB,EAAAA,GAAAA,KCzET,SAASC,GAAc9B,EAAO+B,EAAAA,CACpCC,KAAKhC,MAAQA,EACbgC,KAAKD,QAAUA,CAChB,CAHgBD,EAAAA,GAAAA,KAGhB,SA0EgBG,GAAchB,EAAOiB,EAAAA,CACpC,GAAIA,GJ3Ee,KI6ElB,OAAOjB,EAAKE,GACTc,GAAchB,EAAKE,GAAUF,EAAKQ,IAAU,CAAA,EJ9E7B,KImFnB,QADIU,EACGD,EAAajB,EAAKC,IAAWN,OAAQsB,IAG3C,IAFAC,EAAUlB,EAAKC,IAAWgB,CAAAA,IJpFR,MIsFKC,EAAOd,KJtFZ,KI0FjB,OAAOc,EAAOd,IAShB,OAA4B,OAAdJ,EAAMX,MAAQ,WAAa2B,GAAchB,CAAAA,EJnGpC,IIoGpB,CA1BgBgB,EAAAA,GAAAA,KAsEhB,SAASG,GAAwBnB,EAAAA,CAAjC,IAGWzB,EACJ6C,EAHN,IAAKpB,EAAQA,EAAKE,KJjJC,MIiJoBF,EAAKK,KJjJzB,KIiJ8C,CAEhE,IADAL,EAAKI,IAAQJ,EAAKK,IAAYgB,KJlJZ,KImJT9C,EAAI,EAAGA,EAAIyB,EAAKC,IAAWN,OAAQpB,IAE3C,IADI6C,EAAQpB,EAAKC,IAAW1B,CAAAA,IJpJX,MIqJI6C,EAAKhB,KJrJT,KIqJwB,CACxCJ,EAAKI,IAAQJ,EAAKK,IAAYgB,KAAOD,EAAKhB,IAC1C,KACD,CAGD,OAAOe,GAAwBnB,CAAAA,CAChC,CACD,CAbSmB,EAAAA,GAAAA,KAyCF,SAASG,GAAcC,EAAAA,EAAAA,CAE1BA,EAACC,MACDD,EAACC,IAAAA,KACFzD,GAAc0D,KAAKF,CAAAA,GAAAA,CAClBG,GAAOC,OACT3D,IAAgBJ,GAAQgE,sBAExB5D,GAAeJ,GAAQgE,oBACN3D,IAAOyD,EAAAA,CAE1B,CAXgBJ,EAAAA,GAAAA,KAoBhB,SAASI,IAAAA,CAMR,QALIH,EApGoBM,EAOjBC,EANHC,EACHC,EACAC,EACAC,EAiGAC,EAAI,EAIEpE,GAAc4B,QAOhB5B,GAAc4B,OAASwC,GAC1BpE,GAAcqE,KAAKlE,EAAAA,EAGpBqD,EAAIxD,GAAcsE,MAAAA,EAClBF,EAAIpE,GAAc4B,OAEd4B,EAACC,MAhHCM,EAAAA,OANHC,EAAAA,OACHC,GADGD,GADoBF,EAwHNN,GAvHMhB,KACNH,IACjB6B,EAAc,CAAA,EACdC,EAAW,CAAA,EAERL,EAASS,OACNR,EAAWjD,GAAO,CAAE,EAAEkD,CAAAA,GACpBxB,IAAawB,EAAQxB,IAAa,EACtC3C,GAAQoC,OAAOpC,GAAQoC,MAAM8B,CAAAA,EAEjCS,GACCV,EAASS,IACTR,EACAC,EACAF,EAASW,IACTX,EAASS,IAAYG,aJzII,GI0IzBV,EAAQtB,IAAyB,CAACuB,CAAAA,EJ3HjB,KI4HjBC,EACAD,GAAiBhB,GAAce,CAAAA,EAAYC,CAAAA,EJ5IlB,GI6ItBD,EAAQtB,KACXyB,CAAAA,EAGDJ,EAAQvB,IAAawB,EAAQxB,IAC7BuB,EAAQ5B,GAAAD,IAAmB6B,EAAQtB,GAAAA,EAAWsB,EAC9CY,GAAWT,EAAaH,EAAUI,CAAAA,EAClCH,EAAQ3B,IAAQ2B,EAAQ7B,GAAW,KAE/B4B,EAAQ1B,KAAS4B,GACpBb,GAAwBW,CAAAA,IA6F1BJ,GAAOC,IAAkB,CAC1B,CAzBSD,EAAAA,GAAAA,KGnLO,SAAAiB,GACfC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAjB,EACAD,EACAmB,EACAjB,EAAAA,CAXe,IAaX3D,EAEHwD,EAEAqB,EAEAC,EAEAC,EAiCIC,EA8BAC,EA1DDC,EAAeV,GAAkBA,EAAc9C,KAAexB,GAE9DiF,EAAoBb,EAAalD,OAUrC,IARAqC,EAAS2B,GACRb,EACAD,EACAY,EACAzB,EACA0B,CAAAA,EAGInF,EAAI,EAAGA,EAAImF,EAAmBnF,KAClC6E,EAAaN,EAAc7C,IAAW1B,CAAAA,IPjEpB,OOuEjBwD,EADGqB,EAAU5C,KACbuB,GAAWvD,GAEAiF,EAAYL,EAAU5C,GAAAA,GAAYhC,GAI9C4E,EAAU5C,IAAUjC,EAGhBgF,EAAShB,GACZK,EACAQ,EACArB,EACAiB,EACAC,EACAC,EACAjB,EACAD,EACAmB,EACAjB,CAAAA,EAIDmB,EAASD,EAAUhD,IACfgD,EAAW5D,KAAOuC,EAASvC,KAAO4D,EAAW5D,MAC5CuC,EAASvC,KACZoE,GAAS7B,EAASvC,IPjGF,KOiGa4D,CAAAA,EAE9BlB,EAAST,KACR2B,EAAW5D,IACX4D,EAAU/C,KAAegD,EACzBD,CAAAA,GAIEE,GP1Gc,MO0GWD,GP1GX,OO2GjBC,EAAgBD,IAGbG,EAAAA,CAAAA,EPzHsB,EOyHLJ,EAAU3C,OACZsB,EAAQ9B,MAAemD,EAAUnD,IACnD+B,EAAS6B,GAAOT,EAAYpB,EAAQY,EAAWY,CAAAA,EACX,OAAnBJ,EAAW/D,MAAQ,YAAckE,IAAtBlE,OAC5B2C,EAASuB,EACCF,IACVrB,EAASqB,EAAOS,aAIjBV,EAAU3C,KAAAA,IAKX,OAFAqC,EAAc1C,IAAQkD,EAEftB,CACR,CApGgBW,EAAAA,GAAAA,KA2GhB,SAASgB,GACRb,EACAD,EACAY,EACAzB,EACA0B,EAAAA,CALD,IAQKnF,EAEA6E,EAEArB,EA8DGgC,EAOAC,EAnEHC,EAAoBR,EAAY9D,OACnCuE,EAAuBD,EAEpBE,EAAO,EAGX,IADArB,EAAc7C,IAAa,IAAIrB,MAAM8E,CAAAA,EAChCnF,EAAI,EAAGA,EAAImF,EAAmBnF,KAGlC6E,EAAaP,EAAatE,CAAAA,IP5JR,MOgKI,OAAd6E,GAAc,WACA,OAAdA,GAAc,YASA,OAAdA,GAAc,UACA,OAAdA,GAAc,UAEA,OAAdA,GAAc,UACrBA,EAAW9C,aAAe8D,OAE1BhB,EAAaN,EAAc7C,IAAW1B,CAAAA,EAAKuB,GPhL1B,KOkLhBsD,EPlLgB,KAAA,KAAA,IAAA,EOuLPzE,GAAQyE,CAAAA,EAClBA,EAAaN,EAAc7C,IAAW1B,CAAAA,EAAKuB,GAC1Cc,GACA,CAAEtB,SAAU8D,CAAAA,EP1LI,KAAA,KAAA,IAAA,EO+LPA,EAAW9C,cP/LJ,QO+LiC8C,EAAUjD,IAAU,EAKtEiD,EAAaN,EAAc7C,IAAW1B,CAAAA,EAAKuB,GAC1CsD,EAAW/D,KACX+D,EAAWrE,MACXqE,EAAW7D,IACX6D,EAAW5D,IAAM4D,EAAW5D,IPxMZ,KOyMhB4D,EAAU7C,GAAAA,EAGXuC,EAAc7C,IAAW1B,CAAAA,EAAK6E,EAGzBW,EAAcxF,EAAI4F,EACxBf,EAAUlD,GAAW4C,EACrBM,EAAUjD,IAAU2C,EAAc3C,IAAU,EAY5C4B,EP7NkB,MOsNZiC,EAAiBZ,EAAU5C,IAAU6D,GAC1CjB,EACAK,EACAM,EACAG,CAAAA,IP1NiB,KOgOjBA,KADAnC,EAAW0B,EAAYO,CAAAA,KAGtBjC,EAAQtB,KP3OW,IOkPFsB,GPzOD,MOyOqBA,EAAQxB,KPzO7B,MO4ObyD,GAH0CzD,KAkBzCmD,EAAoBO,EACvBE,IACUT,EAAoBO,GAC9BE,KAK4B,OAAnBf,EAAW/D,MAAQ,aAC7B+D,EAAU3C,KP/Qc,IOiRfuD,GAAiBD,IAiBvBC,GAAiBD,EAAc,EAClCI,IACUH,GAAiBD,EAAc,EACzCI,KAEIH,EAAgBD,EACnBI,IAEAA,IAMDf,EAAU3C,KPhTc,KO8KzBqC,EAAc7C,IAAW1B,CAAAA,EPnKR,KO8SnB,GAAI2F,EACH,IAAK3F,EAAI,EAAGA,EAAI0F,EAAmB1F,KAClCwD,EAAW0B,EAAYlF,CAAAA,IPhTN,OATG,EO0TKwD,EAAQtB,MAAsB,IAClDsB,EAAQ3B,KAAS4B,IACpBA,EAAShB,GAAce,CAAAA,GAGxBuC,GAAQvC,EAAUA,CAAAA,GAKrB,OAAOC,CACR,CAvLS2B,EAAAA,GAAAA,KAgMT,SAASE,GAAOU,EAAavC,EAAQY,EAAWY,EAAAA,CAAhD,IAIMlE,EACKf,EAFV,GAA+B,OAApBgG,EAAYlF,MAAQ,WAAY,CAE1C,IADIC,EAAWiF,EAAWtE,IACjB1B,EAAI,EAAGe,GAAYf,EAAIe,EAASK,OAAQpB,IAC5Ce,EAASf,CAAAA,IAKZe,EAASf,CAAAA,EAAE2B,GAAWqE,EACtBvC,EAAS6B,GAAOvE,EAASf,CAAAA,EAAIyD,EAAQY,EAAWY,CAAAA,GAIlD,OAAOxB,CACR,CAAWuC,EAAWnE,KAAS4B,IAC1BwB,IACCxB,GAAUuC,EAAYlF,MAAAA,CAAS2C,EAAO9C,aACzC8C,EAAShB,GAAcuD,CAAAA,GAExB3B,EAAU4B,aAAaD,EAAWnE,IAAO4B,GP3VxB,IAAA,GO6VlBA,EAASuC,EAAWnE,KAGrB,GACC4B,EAASA,GAAUA,EAAO8B,kBAClB9B,GPlWU,MOkWQA,EAAOyC,UAAY,GAE9C,OAAOzC,CACR,CAhCS6B,EAAAA,GAAAA,KAwCF,SAASa,GAAapF,EAAUqF,EAAAA,CAUtC,OATAA,EAAMA,GAAO,CAAA,EACTrF,GP/We,MO+WwB,OAAZA,GAAY,YAChCX,GAAQW,CAAAA,EAClBA,EAASsF,KAAK,SAAAxD,EAAAA,CACbsD,GAAatD,EAAOuD,CAAAA,CACrB,CAAA,EAEAA,EAAIlD,KAAKnC,CAAAA,GAEHqF,CACR,CAXgBD,EAAAA,GAAAA,KAoBhB,SAASL,GACRjB,EACAK,EACAM,EACAG,EAAAA,CAJD,IAgCMW,EACAC,EAEG7D,EA7BF1B,EAAM6D,EAAW7D,IACjBF,EAAO+D,EAAW/D,KACpB0C,EAAW0B,EAAYM,CAAAA,EACrBgB,EAAUhD,GP1YG,OATG,EOmZeA,EAAQtB,MAAsB,EAiBnE,GACEsB,IP5ZiB,MO4ZIxC,GAAO,MAC5BwF,GAAWxF,GAAOwC,EAASxC,KAAOF,GAAQ0C,EAAS1C,KAEpD,OAAO0E,EACD,GAPNG,GAAwBa,EAAU,EAAI,IAUtC,IAFIF,EAAId,EAAc,EAClBe,EAAIf,EAAc,EACfc,GAAK,GAAKC,EAAIrB,EAAY9D,QAGhC,IADAoC,EAAW0B,EADLxC,EAAa4D,GAAK,EAAIA,IAAMC,GAAAA,IPpajB,OATG,EOiblB/C,EAAQtB,MAAsB,GAC/BlB,GAAOwC,EAASxC,KAChBF,GAAQ0C,EAAS1C,KAEjB,OAAO4B,EAKV,MAAA,EACD,CAjDSoD,EAAAA,GAAAA,KF9YT,SAASW,GAASC,EAAO1F,EAAK2F,EAAAA,CACzB3F,EAAI,CAAA,GAAM,IACb0F,EAAME,YAAY5F,EAAK2F,GAAgB,EAAKA,EAE5CD,EAAM1F,CAAAA,EADI2F,GLUQ,KKTL,GACa,OAATA,GAAS,UAAYxG,GAAmB0G,KAAK7F,CAAAA,EACjD2F,EAEAA,EAAQ,IAEvB,CAVSF,EAAAA,GAAAA,KAmCO,SAAAG,GAAYE,EAAKC,EAAMJ,EAAOK,EAAUtC,EAAAA,CAAxC,IACXuC,EA8BGC,EA5BPC,EAAG,GAAIJ,GAAQ,QACd,GAAoB,OAATJ,GAAS,SACnBG,EAAIJ,MAAMU,QAAUT,MACd,CAKN,GAJuB,OAAZK,GAAY,WACtBF,EAAIJ,MAAMU,QAAUJ,EAAW,IAG5BA,EACH,IAAKD,KAAQC,EACNL,GAASI,KAAQJ,GACtBF,GAASK,EAAIJ,MAAOK,EAAM,EAAA,EAK7B,GAAIJ,EACH,IAAKI,KAAQJ,EACPK,GAAYL,EAAMI,CAAAA,GAASC,EAASD,CAAAA,GACxCN,GAASK,EAAIJ,MAAOK,EAAMJ,EAAMI,CAAAA,CAAAA,CAIpC,SAGQA,EAAK,CAAA,GAAM,KAAOA,EAAK,CAAA,GAAM,IACrCE,EAAaF,IAASA,EAAOA,EAAKM,QAAQzH,GAAe,IAAA,GACnDsH,EAAgBH,EAAKO,YAAAA,EAI1BP,EADGG,KAAiBJ,GAAOC,GAAQ,cAAgBA,GAAQ,YACpDG,EAAc9H,MAAM,CAAA,EAChB2H,EAAK3H,MAAM,CAAA,EAElB0H,EAAGlD,IAAakD,EAAGlD,EAAc,CAAE,GACxCkD,EAAGlD,EAAYmD,EAAOE,CAAAA,EAAcN,EAEhCA,EACEK,EAQJL,EAAMY,EAAYP,EAASO,GAP3BZ,EAAMY,EAAY1H,GAClBiH,EAAIU,iBACHT,EACAE,EAAalH,GAAoBD,GACjCmH,CAAAA,GAMFH,EAAIW,oBACHV,EACAE,EAAalH,GAAoBD,GACjCmH,CAAAA,MAGI,CACN,GAAIvC,GLtFuB,6BK0F1BqC,EAAOA,EAAKM,QAAQ,cAAe,GAAA,EAAKA,QAAQ,SAAU,GAAA,UAE1DN,GAAQ,SACRA,GAAQ,UACRA,GAAQ,QACRA,GAAQ,QACRA,GAAQ,QAGRA,GAAQ,YACRA,GAAQ,YACRA,GAAQ,WACRA,GAAQ,WACRA,GAAQ,QACRA,GAAQ,WACRA,KAAQD,EAER,GAAA,CACCA,EAAIC,CAAAA,EAAQJ,GAAgB,GAE5B,MAAMQ,CAER,MADUO,CACV,CASoB,OAATf,GAAS,aAETA,GLvHO,MKuHWA,IAAlBA,IAAqCI,EAAK,CAAA,GAAM,IAG1DD,EAAIa,gBAAgBZ,CAAAA,EAFpBD,EAAIc,aAAab,EAAMA,GAAQ,WAAaJ,GAAS,EAAO,GAAKA,CAAAA,EAInE,CACD,CAvGgBC,EAAAA,GAAAA,KA8GhB,SAASiB,GAAiBZ,EAAAA,CAMzB,OAAA,SAAiBS,EAAAA,CAChB,GAAIlF,KAAIoB,EAAa,CACpB,IAAMkE,EAAetF,KAAIoB,EAAY8D,EAAE5G,KAAOmG,CAAAA,EAC9C,GAAIS,EAAEK,GL7IW,KK8IhBL,EAAEK,EAAclI,aAKN6H,EAAEK,EAAcD,EAAaP,EACvC,OAED,OAAOO,EAAazI,GAAQ2I,MAAQ3I,GAAQ2I,MAAMN,CAAAA,EAAKA,CAAAA,CACxD,CACD,CACD,CArBSG,EAAAA,GAAAA,KAqBT,SGzHgB7D,GACfK,EACAd,EACAC,EACAiB,EACAC,EACAC,EACAjB,EACAD,EACAmB,EACAjB,EAAAA,CAAAA,IAGIsE,EAkBEjF,EAAGkF,EAAOC,EAAUC,EAAUC,EAAUC,EACxCC,EACEC,EAMFC,EACAC,EAuGO1I,EA4BP2I,EACHC,EASS5I,EA6BNsE,EAgDOtE,GApPZ6I,GAAUtF,EAASzC,KAIpB,GAAIyC,EAASxB,cAAb,OAAwC,ORlDrB,KAbU,IQkEzByB,EAAQtB,MACX0C,EAAAA,CAAAA,ERrE0B,GQqETpB,EAAQtB,KAEzByC,EAAoB,CADpBlB,EAASF,EAAQ1B,IAAQ2B,EAAQ3B,GAAAA,IAI7BoG,EAAM5I,GAAOuC,MAASqG,EAAI1E,CAAAA,EAE/BuF,EAAO,GAAsB,OAAXD,IAAW,WAC5B,GAAA,CAgEC,GA9DIN,EAAWhF,EAAS/C,MAClBgI,EACL,cAAeK,IAAWA,GAAQE,UAAUC,OAKzCP,GADJR,EAAMY,GAAQI,cACQxE,EAAcwD,EAAGnG,GAAAA,EACnC4G,EAAmBT,EACpBQ,EACCA,EAASjI,MAAMmG,MACfsB,EAAGtG,GACJ8C,EAGCjB,EAAQ1B,IAEXwG,GADAtF,EAAIO,EAAQzB,IAAc0B,EAAQ1B,KACNH,GAAwBqB,EAACkG,KAGjDV,EAEHjF,EAAQzB,IAAckB,EAAI,IAAI6F,GAAQN,EAAUG,CAAAA,GAGhDnF,EAAQzB,IAAckB,EAAI,IAAIV,GAC7BiG,EACAG,CAAAA,EAED1F,EAAEjB,YAAc8G,GAChB7F,EAAEgG,OAASG,IAERV,GAAUA,EAASW,IAAIpG,CAAAA,EAEtBA,EAAEqG,QAAOrG,EAAEqG,MAAQ,CAAE,GAC1BrG,EAACiB,IAAkBQ,EACnByD,EAAQlF,EAACC,IAAAA,GACTD,EAACsG,IAAoB,CAAA,EACrBtG,EAACuG,IAAmB,CAAA,GAIjBf,GAAoBxF,EAACwG,KR1GR,OQ2GhBxG,EAACwG,IAAcxG,EAAEqG,OAGdb,GAAoBK,GAAQY,0BR9Gf,OQ+GZzG,EAACwG,KAAexG,EAAEqG,QACrBrG,EAACwG,IAAclJ,GAAO,CAAE,EAAE0C,EAACwG,GAAAA,GAG5BlJ,GACC0C,EAACwG,IACDX,GAAQY,yBAAyBlB,EAAUvF,EAACwG,GAAAA,CAAAA,GAI9CrB,EAAWnF,EAAExC,MACb4H,EAAWpF,EAAEqG,MACbrG,EAAChB,IAAUuB,EAGP2E,EAEFM,GACAK,GAAQY,0BRjIO,MQkIfzG,EAAE0G,oBRlIa,MQoIf1G,EAAE0G,mBAAAA,EAGClB,GAAoBxF,EAAE2G,mBRvIV,MQwIf3G,EAACsG,IAAkBpG,KAAKF,EAAE2G,iBAAAA,MAErB,CAUN,GARCnB,GACAK,GAAQY,0BR7IO,MQ8IflB,IAAaJ,GACbnF,EAAE4G,2BR/Ia,MQiJf5G,EAAE4G,0BAA0BrB,EAAUG,CAAAA,EAItCnF,EAAQvB,KAAcwB,EAAQxB,KAAAA,CAC5BgB,EAACnB,KACFmB,EAAE6G,uBRvJY,MQwJd7G,EAAE6G,sBACDtB,EACAvF,EAACwG,IACDd,CAAAA,IAJCmB,GAMF,CAkBD,IAhBItG,EAAQvB,KAAcwB,EAAQxB,MAKjCgB,EAAExC,MAAQ+H,EACVvF,EAAEqG,MAAQrG,EAACwG,IACXxG,EAACC,IAAAA,IAGFM,EAAQ1B,IAAQ2B,EAAQ3B,IACxB0B,EAAQ7B,IAAa8B,EAAQ9B,IAC7B6B,EAAQ7B,IAAW2E,KAAK,SAAA5E,GAAAA,CACnBA,KAAOA,GAAKE,GAAW4B,EAC5B,CAAA,EAESvD,EAAI,EAAGA,EAAIgD,EAACuG,IAAiBnI,OAAQpB,IAC7CgD,EAACsG,IAAkBpG,KAAKF,EAACuG,IAAiBvJ,CAAAA,CAAAA,EAE3CgD,EAACuG,IAAmB,CAAA,EAEhBvG,EAACsG,IAAkBlI,QACtBsC,EAAYR,KAAKF,CAAAA,EAGlB,MAAM8F,CACP,CAEI9F,EAAE8G,qBR3LU,MQ4Lf9G,EAAE8G,oBAAoBvB,EAAUvF,EAACwG,IAAad,CAAAA,EAG3CF,GAAoBxF,EAAE+G,oBR/LV,MQgMf/G,EAACsG,IAAkBpG,KAAK,UAAA,CACvBF,EAAE+G,mBAAmB5B,EAAUC,EAAUC,CAAAA,CAC1C,CAAA,CAEF,CASA,GAPArF,EAAET,QAAUmG,EACZ1F,EAAExC,MAAQ+H,EACVvF,EAACe,IAAcM,EACfrB,EAACnB,IAAAA,GAEG8G,EAAatJ,GAAO+D,IACvBwF,EAAQ,EACLJ,EAAkB,CAQrB,IAPAxF,EAAEqG,MAAQrG,EAACwG,IACXxG,EAACC,IAAAA,GAEG0F,GAAYA,EAAWpF,CAAAA,EAE3B0E,EAAMjF,EAAEgG,OAAOhG,EAAExC,MAAOwC,EAAEqG,MAAOrG,EAAET,OAAAA,EAE1BvC,EAAI,EAAGA,EAAIgD,EAACuG,IAAiBnI,OAAQpB,IAC7CgD,EAACsG,IAAkBpG,KAAKF,EAACuG,IAAiBvJ,CAAAA,CAAAA,EAE3CgD,EAACuG,IAAmB,CAAA,CACrB,KACC,IACCvG,EAACC,IAAAA,GACG0F,GAAYA,EAAWpF,CAAAA,EAE3B0E,EAAMjF,EAAEgG,OAAOhG,EAAExC,MAAOwC,EAAEqG,MAAOrG,EAAET,OAAAA,EAGnCS,EAAEqG,MAAQrG,EAACwG,UACHxG,EAACC,KAAAA,EAAa2F,EAAQ,IAIhC5F,EAAEqG,MAAQrG,EAACwG,IAEPxG,EAAEgH,iBRxOW,OQyOhBvF,EAAgBnE,GAAOA,GAAO,CAAE,EAAEmE,CAAAA,EAAgBzB,EAAEgH,gBAAAA,CAAAA,GAGjDxB,GAAAA,CAAqBN,GAASlF,EAAEiH,yBR5OnB,OQ6OhB5B,EAAWrF,EAAEiH,wBAAwB9B,EAAUC,CAAAA,GAK5C9D,EAAe2D,EADlBA,GRjPgB,MQiPDA,EAAInH,OAASuB,IAAY4F,EAAIjH,KRjP5B,OQqPhBsD,EAAe4F,GAAUjC,EAAIzH,MAAMO,QAAAA,GAGpC0C,EAASW,GACRC,EACAjE,GAAQkE,CAAAA,EAAgBA,EAAe,CAACA,CAAAA,EACxCf,EACAC,EACAiB,EACAC,EACAC,EACAjB,EACAD,EACAmB,EACAjB,CAAAA,EAGDX,EAAEF,KAAOS,EAAQ1B,IAGjB0B,EAAQrB,KAAAA,KAEJc,EAACsG,IAAkBlI,QACtBsC,EAAYR,KAAKF,CAAAA,EAGdsF,IACHtF,EAACkG,IAAiBlG,EAACrB,GRhRH,KQ6SlB,OA3BS+F,GAAAA,CAGR,GAFAnE,EAAQvB,IRnRS,KQqRb4C,GAAeD,GRrRF,KQsRhB,GAAI+C,GAAEyC,KAAM,CAKX,IAJA5G,EAAQrB,KAAW0C,EAChBwF,IRrSsB,IQwSlB3G,GAAUA,EAAOyC,UAAY,GAAKzC,EAAO8B,aAC/C9B,EAASA,EAAO8B,YAGjBZ,EAAkBA,EAAkB0F,QAAQ5G,CAAAA,CAAAA,ER/R7B,KQgSfF,EAAQ1B,IAAQ4B,CACjB,KAAO,CACN,IAASzD,GAAI2E,EAAkBvD,OAAQpB,MACtCS,GAAWkE,EAAkB3E,EAAAA,CAAAA,EAE9BsK,GAAY/G,CAAAA,CACb,MAEAA,EAAQ1B,IAAQ2B,EAAQ3B,IACxB0B,EAAQ7B,IAAa8B,EAAQ9B,IACxBgG,GAAEyC,MAAMG,GAAY/G,CAAAA,EAE1BlE,GAAOwC,IAAa6F,GAAGnE,EAAUC,CAAAA,CAClC,MAEAmB,GR/SkB,MQgTlBpB,EAAQvB,KAAcwB,EAAQxB,KAE9BuB,EAAQ7B,IAAa8B,EAAQ9B,IAC7B6B,EAAQ1B,IAAQ2B,EAAQ3B,KAExB4B,EAASF,EAAQ1B,IAAQ0I,GACxB/G,EAAQ3B,IACR0B,EACAC,EACAiB,EACAC,EACAC,EACAjB,EACAkB,EACAjB,CAAAA,EAMF,OAFKsE,EAAM5I,GAAQmL,SAASvC,EAAI1E,CAAAA,ER/UH,IQiVtBA,EAAQrB,IAAAA,OAAuCuB,CACvD,CArSgBO,EAAAA,GAAAA,KAuShB,SAASsG,GAAY7I,EAAAA,CAChBA,GAASA,EAAKK,MAAaL,EAAKK,IAAAD,IAAAA,IAChCJ,GAASA,EAAKC,KAAYD,EAAKC,IAAW+I,QAAQH,EAAAA,CACvD,CAHSA,EAAAA,GAAAA,KAUF,SAASnG,GAAWT,EAAagH,EAAM/G,EAAAA,CAC7C,QAAS3D,EAAI,EAAGA,EAAI2D,EAASvC,OAAQpB,IACpCqF,GAAS1B,EAAS3D,CAAAA,EAAI2D,EAAAA,EAAW3D,CAAAA,EAAI2D,EAAAA,EAAW3D,CAAAA,CAAAA,EAG7CX,GAAOyC,KAAUzC,GAAOyC,IAAS4I,EAAMhH,CAAAA,EAE3CA,EAAY2C,KAAK,SAAArD,EAAAA,CAChB,GAAA,CAECU,EAAcV,EAACsG,IACftG,EAACsG,IAAoB,CAAA,EACrB5F,EAAY2C,KAAK,SAAAsE,EAAAA,CAEhBA,EAAGtJ,KAAK2B,CAAAA,CACT,CAAA,CAGD,OAFS0E,EAAAA,CACRrI,GAAOwC,IAAa6F,EAAG1E,EAAChB,GAAAA,CACzB,CACD,CAAA,CACD,CApBgBmC,EAAAA,GAAAA,KAsBhB,SAAS+F,GAAUxJ,EAAAA,CAClB,OACgB,OAARA,GAAQ,UACfA,GR1WkB,MQ2WjBA,EAAIkB,KAAWlB,EAAIkB,IAAU,EAEvBlB,EAGJN,GAAQM,CAAAA,EACJA,EAAKkK,IAAIV,EAAAA,EAGV5J,GAAO,CAAA,EAAII,CAAAA,CACnB,CAdSwJ,EAAAA,GAAAA,KA+BT,SAASK,GACRzD,EACAvD,EACAC,EACAiB,EACAC,EACAC,EACAjB,EACAkB,EACAjB,EAAAA,CATD,IAeK3D,EAEA6K,EAEAC,EAEAC,EACApE,EACAqE,EACAC,EAbA9C,EAAW3E,EAAShD,OAASP,GAC7BsI,EAAWhF,EAAS/C,MACpB0F,EAAkC3C,EAASzC,KAkB/C,GAJIoF,GAAY,MAAOxB,ERraK,6BQsanBwB,GAAY,OAAQxB,ERpaA,qCQqanBA,IAAWA,ERtaS,gCQwa1BC,GRrae,MQsalB,IAAK3E,EAAI,EAAGA,EAAI2E,EAAkBvD,OAAQpB,IAMzC,IALA2G,EAAQhC,EAAkB3E,CAAAA,IAOzB,iBAAkB2G,GAAAA,CAAAA,CAAWT,IAC5BA,EAAWS,EAAMuE,WAAahF,EAAWS,EAAMT,UAAY,GAC3D,CACDY,EAAMH,EACNhC,EAAkB3E,CAAAA,ERlbF,KQmbhB,KACD,EAIF,GAAI8G,GRxbe,KQwbF,CAChB,GAAIZ,GRzbc,KQ0bjB,OAAOiF,SAASC,eAAe7C,CAAAA,EAGhCzB,EAAMqE,SAASE,gBACd3G,EACAwB,EACAqC,EAAS+C,IAAM/C,CAAAA,EAKZ3D,IACCvF,GAAOkM,KACVlM,GAAOkM,IAAoBhI,EAAUoB,CAAAA,EACtCC,EAAAA,IAGDD,ER3ckB,IQ4cnB,CAEA,GAAIuB,GR9ce,KQgddiC,IAAaI,GAAc3D,GAAekC,EAAI0E,MAAQjD,IACzDzB,EAAI0E,KAAOjD,OAEN,CAON,GALA5D,EAAoBA,GAAqBvF,GAAMiC,KAAKyF,EAAI2E,UAAAA,EAAAA,CAKnD7G,GAAeD,GR1dF,KQ4djB,IADAwD,EAAW,CAAA,EACNnI,EAAI,EAAGA,EAAI8G,EAAI4E,WAAWtK,OAAQpB,IAEtCmI,GADAxB,EAAQG,EAAI4E,WAAW1L,CAAAA,GACR+G,IAAAA,EAAQJ,EAAMA,MAI/B,IAAK3G,KAAKmI,EAET,GADAxB,EAAQwB,EAASnI,CAAAA,EACbA,GAAK,YACEA,GAAAA,GAAK,0BACf8K,EAAUnE,UACA,EAAE3G,KAAKuI,GAAW,CAC5B,GACEvI,GAAK,SAAW,iBAAkBuI,GAClCvI,GAAK,WAAa,mBAAoBuI,EAEvC,SAED3B,GAAYE,EAAK9G,ER9eD,KQ8eU2G,EAAOjC,CAAAA,CAClC,EAKD,IAAK1E,KAAKuI,EACT5B,EAAQ4B,EAASvI,CAAAA,EACbA,GAAK,WACR+K,EAAcpE,EACJ3G,GAAK,0BACf6K,EAAUlE,EACA3G,GAAK,QACfgL,EAAarE,EACH3G,GAAK,UACfiL,EAAUtE,EAER/B,GAA+B,OAAT+B,GAAS,YACjCwB,EAASnI,CAAAA,IAAO2G,GAEhBC,GAAYE,EAAK9G,EAAG2G,EAAOwB,EAASnI,CAAAA,EAAI0E,CAAAA,EAK1C,GAAImG,EAGDjG,GACCkG,IACAD,EAAOc,QAAWb,EAAOa,QAAWd,EAAOc,QAAW7E,EAAI8E,aAE5D9E,EAAI8E,UAAYf,EAAOc,QAGxBpI,EAAQ7B,IAAa,CAAA,UAEjBoJ,IAAShE,EAAI8E,UAAY,IAE7BxH,GAECb,EAASzC,MAAQ,WAAagG,EAAI+E,QAAU/E,EAC5C1G,GAAQ2K,CAAAA,EAAeA,EAAc,CAACA,CAAAA,EACtCxH,EACAC,EACAiB,EACAyB,GAAY,gBR/hBe,+BQ+hBqBxB,EAChDC,EACAjB,EACAiB,EACGA,EAAkB,CAAA,EAClBnB,EAAQ9B,KAAce,GAAce,EAAU,CAAA,EACjDoB,EACAjB,CAAAA,EAIGgB,GRviBa,KQwiBhB,IAAK3E,EAAI2E,EAAkBvD,OAAQpB,KAClCS,GAAWkE,EAAkB3E,CAAAA,CAAAA,EAM3B4E,IACJ5E,EAAI,QACAkG,GAAY,YAAc8E,GRjjBb,KQkjBhBlE,EAAIa,gBAAgB,OAAA,EAEpBqD,GRnjBqBc,OQwjBpBd,IAAelE,EAAI9G,CAAAA,GAClBkG,GAAY,YAAZA,CAA2B8E,GAI3B9E,GAAY,UAAY8E,GAAc7C,EAASnI,CAAAA,IAEjD4G,GAAYE,EAAK9G,EAAGgL,EAAY7C,EAASnI,CAAAA,EAAI0E,CAAAA,EAG9C1E,EAAI,UACAiL,GRnkBkBa,MQmkBMb,GAAWnE,EAAI9G,CAAAA,GAC1C4G,GAAYE,EAAK9G,EAAGiL,EAAS9C,EAASnI,CAAAA,EAAI0E,CAAAA,EAG7C,CAEA,OAAOoC,CACR,CArMSyD,EAAAA,GAAAA,KA6MO,SAAAlF,GAASpE,EAAK0F,EAAOlF,EAAAA,CACpC,GAAA,CACC,GAAkB,OAAPR,GAAO,WAAY,CAC7B,IAAI8K,EAAuC,OAAhB9K,EAAGiB,KAAa,WACvC6J,GAEH9K,EAAGiB,IAAAA,EAGC6J,GAAiBpF,GR5lBL,OQgmBhB1F,EAAGiB,IAAYjB,EAAI0F,CAAAA,EAErB,MAAO1F,EAAImB,QAAUuE,CAGtB,OAFSe,EAAAA,CACRrI,GAAOwC,IAAa6F,EAAGjG,CAAAA,CACxB,CACD,CAnBgB4D,EAAAA,GAAAA,KA4BA,SAAAU,GAAQtE,EAAOuE,EAAagG,EAAAA,CAA5B,IACXC,EAsBMjM,EAbV,GARIX,GAAQ0G,SAAS1G,GAAQ0G,QAAQtE,CAAAA,GAEhCwK,EAAIxK,EAAMR,OACTgL,EAAE7J,SAAW6J,EAAE7J,SAAWX,EAAKI,KACnCwD,GAAS4G,ERrnBQ,KQqnBCjG,CAAAA,IAIfiG,EAAIxK,EAAKK,MRznBK,KQynBiB,CACnC,GAAImK,EAAEC,qBACL,GAAA,CACCD,EAAEC,qBAAAA,CAGH,OAFSxE,EAAAA,CACRrI,GAAOwC,IAAa6F,EAAG1B,CAAAA,CACxB,CAGDiG,EAAEnJ,KAAOmJ,EAAClI,IRloBQ,IQmoBnB,CAEA,GAAKkI,EAAIxK,EAAKC,IACb,IAAS1B,EAAI,EAAGA,EAAIiM,EAAE7K,OAAQpB,IACzBiM,EAAEjM,CAAAA,GACL+F,GACCkG,EAAEjM,CAAAA,EACFgG,EACAgG,GAAmC,OAAdvK,EAAMX,MAAQ,UAARA,EAM1BkL,GACJvL,GAAWgB,EAAKI,GAAAA,EAGjBJ,EAAKK,IAAcL,EAAKE,GAAWF,EAAKI,IAAAA,MACzC,CAvCgBkE,EAAAA,GAAAA,KA0ChB,SAASoD,GAAS3I,EAAO6I,EAAO9G,EAAAA,CAC/B,OAAA,KAAYR,YAAYvB,EAAO+B,CAAAA,CAChC,CAFS4G,EAAAA,GAAAA,KC5pBF,SAASH,GAAOvH,EAAO4C,EAAW8H,EAAAA,CAAlC,IAWFvH,EAOApB,EAQAE,EACHC,EAzBGU,GAAa8G,WAChB9G,EAAY8G,SAASiB,iBAGlB/M,GAAOsC,IAAQtC,GAAOsC,GAAOF,EAAO4C,CAAAA,EAYpCb,GAPAoB,EAAoC,OAAfuH,GAAe,YTRrB,KSiBfA,GAAeA,EAAWzK,KAAe2C,EAAS3C,IAMlDgC,EAAc,CAAA,EACjBC,EAAW,CAAA,EACZK,GACCK,EAPD5C,GAAAA,CAAWmD,GAAeuH,GAAgB9H,GAAS3C,IAClDb,GAAcwB,GTpBI,KSoBY,CAACZ,CAAAA,CAAAA,EAU/B+B,GAAYvD,GACZA,GACAoE,EAAUH,aAAAA,CACTU,GAAeuH,EACb,CAACA,CAAAA,EACD3I,ETnCe,KSqCda,EAAUgI,WACTjN,GAAMiC,KAAKgD,EAAUoH,UAAAA,ETtCR,KSwClB/H,EAAAA,CACCkB,GAAeuH,EACbA,EACA3I,EACCA,EAAQ3B,IACRwC,EAAUgI,WACdzH,EACAjB,CAAAA,EAIDQ,GAAWT,EAAajC,EAAOkC,CAAAA,CAChC,CAvDgBqF,EAAAA,GAAAA,KAgEhB,SChEgBsD,GAAaC,EAAOC,EAAOC,EAAAA,CAAAA,IAEzCC,EACAC,EACAC,EAEGC,EALAC,EAAkBC,GAAO,CAAE,EAAER,EAAMC,KAAAA,EAWvC,IAAKI,KAJDL,EAAMS,MAAQT,EAAMS,KAAKH,eAC5BA,EAAeN,EAAMS,KAAKH,cAGjBL,EACLI,GAAK,MAAOF,EAAMF,EAAMI,CAAAA,EACnBA,GAAK,MAAOD,EAAMH,EAAMI,CAAAA,EAEhCE,EAAgBF,CAAAA,EADRJ,EAAMI,CAAAA,IACEA,QADkBC,GVXZI,KUYDJ,EAAaD,CAAAA,EAEbJ,EAAMI,CAAAA,EAS7B,OALIM,UAAUC,OAAS,IACtBL,EAAgBL,SACfS,UAAUC,OAAS,EAAIC,GAAMC,KAAKH,UAAW,CAAA,EAAKT,GAG7Ca,GACNf,EAAMS,KACNF,EACAJ,GAAOH,EAAMG,IACbC,GAAOJ,EAAMI,IV5BK,IAAA,CU+BpB,CAlCgBL,EAAAA,GAAAA,KTcHiB,GAAQC,GAAUD,MChBzBE,GAAU,CACfC,ISDMC,EAAA,SAAqBC,EAAOC,EAAOC,EAAUC,EAAAA,CAQnD,QANIC,EAEHC,EAEAC,EAEOL,EAAQA,EAAKM,IACpB,IAAKH,EAAYH,EAAKO,MAAAA,CAAiBJ,EAASG,GAC/C,GAAA,CAcC,IAbAF,EAAOD,EAAUK,cAELJ,EAAKK,0BXRD,OWSfN,EAAUO,SAASN,EAAKK,yBAAyBV,CAAAA,CAAAA,EACjDM,EAAUF,EAASQ,KAGhBR,EAAUS,mBXbE,OWcfT,EAAUS,kBAAkBb,EAAOG,GAAa,CAAE,CAAA,EAClDG,EAAUF,EAASQ,KAIhBN,EACH,OAAQF,EAASU,IAAiBV,CAIpC,OAFSW,EAAAA,CACRf,EAAQe,CACT,CAIF,MAAMf,CACP,EAlCO,MAkCP,ERzCIgB,GAAU,EA2FDC,GAAiBlB,EAAA,SAAAE,EAAAA,CAAK,OAClCA,GHhFmB,MGgFFA,EAAMQ,cAAvBR,MAAgD,EADnB,KCpE9BiB,GAAcC,UAAUR,SAAW,SAAUS,EAAQC,EAAAA,CAEpD,IAAIC,EAEHA,EADGC,KAAIC,KJdW,MIcYD,KAAIC,KAAeD,KAAKE,MAClDF,KAAIC,IAEJD,KAAIC,IAAcE,GAAO,CAAA,EAAIH,KAAKE,KAAAA,EAGlB,OAAVL,GAAU,aAGpBA,EAASA,EAAOM,GAAO,CAAA,EAAIJ,CAAAA,EAAIC,KAAKI,KAAAA,GAGjCP,GACHM,GAAOJ,EAAGF,CAAAA,EAIPA,GJ/Be,MIiCfG,KAAIK,MACHP,GACHE,KAAIM,IAAiBC,KAAKT,CAAAA,EAE3BU,GAAcR,IAAAA,EAEhB,EAQAL,GAAcC,UAAUa,YAAc,SAAUX,EAAAA,CAC3CE,KAAIK,MAIPL,KAAIzB,IAAAA,GACAuB,GAAUE,KAAIU,IAAkBH,KAAKT,CAAAA,EACzCU,GAAcR,IAAAA,EAEhB,EAYAL,GAAcC,UAAUe,OAASC,GA+F7BC,GAAgB,CAAA,EAadC,GACa,OAAXC,SAAW,WACfA,QAAQnB,UAAUoB,KAAKC,KAAKF,QAAQG,QAAAA,CAAAA,EACpCC,WAuBEC,GAAY5C,EAAA,SAAC6C,EAAGC,EAAAA,CAAM,OAAAD,EAAChB,IAAAkB,IAAiBD,EAACjB,IAAAkB,GAAc,EAA3C,KA8BlBC,GAAOC,IAAkB,ECzOnBC,GAAgB,8BAalBC,GAAa,EA+IXC,GAAaC,GAAAA,EAAiB,EAC9BC,GAAoBD,GAAAA,EAAiB,ECzKhCE,GAAI,EOiBF,IChBTC,GAAU,EAwBd,SAASC,EAAYC,EAAMC,EAAOC,EAAKC,EAAkBC,EAAUC,EAAAA,CAC7DJ,IAAOA,EAAQ,CAAA,GAIpB,IACCK,EACAC,EAFGC,EAAkBP,EAItB,GAAI,QAASO,EAEZ,IAAKD,KADLC,EAAkB,CAAA,EACRP,EACLM,GAAK,MACRD,EAAML,EAAMM,CAAAA,EAEZC,EAAgBD,CAAAA,EAAKN,EAAMM,CAAAA,EAM9B,IAAME,EAAQ,CACbT,KAAAA,EACAC,MAAOO,EACPN,IAAAA,EACAI,IAAAA,EACAI,IAAW,KACXC,GAAS,KACTC,IAAQ,EACRC,IAAM,KACNC,IAAY,KACZC,YAAAA,OACAC,IAAAA,EAAaC,GACbC,IAAAA,GACAC,IAAQ,EACRf,SAAAA,EACAC,OAAAA,CAAAA,EAKD,GAAoB,OAATL,GAAS,aAAeM,EAAMN,EAAKoB,cAC7C,IAAKb,KAAKD,EACLE,EAAgBD,CAAAA,IADXD,SAERE,EAAgBD,CAAAA,EAAKD,EAAIC,CAAAA,GAK5B,OADIc,GAAQZ,OAAOY,GAAQZ,MAAMA,CAAAA,EAC1BA,CACR,CAlDSV,EAAAA,EAAAA,KCzBT,IAAIuB,GAGAC,GAGAC,GAsBAC,GAnBAC,GAAc,EAGdC,GAAoB,CAAA,EAGlBC,GAAuDC,GAEzDC,GAAgBF,GAAOG,IACvBC,GAAkBJ,GAAOK,IACzBC,GAAeN,GAAQO,OACvBC,GAAYR,GAAOS,IACnBC,GAAmBV,GAAQW,QAC3BC,GAAUZ,GAAOa,GAiHrB,SAASC,GAAaC,EAAOC,EAAAA,CACxBhB,GAAOiB,KACVjB,GAAOiB,IAAOtB,GAAkBoB,EAAOjB,IAAekB,CAAAA,EAEvDlB,GAAc,EAOd,IAAMoB,EACLvB,GAAgBwB,MACfxB,GAAgBwB,IAAW,CAC3BN,GAAO,CAAA,EACPI,IAAiB,CAAA,CAAA,GAOnB,OAJIF,GAASG,EAAKL,GAAOO,QACxBF,EAAKL,GAAOQ,KAAK,CAAE,CAAA,EAGbH,EAAKL,GAAOE,CAAAA,CACpB,CAvBSD,EAAAA,GAAAA,KA8BF,SAASQ,GAASC,EAAAA,CAExB,OADAzB,GAAc,EACP0B,GAAWC,GAAgBF,CAAAA,CACnC,CAHgBD,EAAAA,GAAAA,KAaA,SAAAE,GAAWE,EAASH,EAAcI,EAAAA,CAEjD,IAAMC,EAAYd,GAAapB,KAAgB,CAAA,EAE/C,GADAkC,EAAUC,EAAWH,EAAAA,CAChBE,EAASnB,MACbmB,EAASf,GAAU,CACjBc,EAAiDA,EAAKJ,CAAAA,EAA/CE,GAAAA,OAA0BF,CAAAA,EAElC,SAAAO,EAAAA,CACC,IAAMC,EAAeH,EAASI,IAC3BJ,EAASI,IAAY,CAAA,EACrBJ,EAASf,GAAQ,CAAA,EACdoB,EAAYL,EAAUC,EAASE,EAAcD,CAAAA,EAE/CC,IAAiBE,IACpBL,EAASI,IAAc,CAACC,EAAWL,EAASf,GAAQ,CAAA,CAAA,EACpDe,EAASnB,IAAYyB,SAAS,CAAE,CAAA,EAElC,CAAA,EAGDN,EAASnB,IAAcd,GAAAA,CAElBA,GAAgBwC,KAAmB,CAAA,IAgC9BC,EAATC,EAAA,SAAyBC,EAAGC,EAAGC,EAAAA,CAC9B,GAAA,CAAKZ,EAASnB,IAAAU,IAAqB,MAAA,GAGnC,IACMsB,EACLb,EAASnB,IAAAU,IAAAN,GAA0B6B,OAFhB,SAAAC,EAAAA,CAAC,MAAA,CAAA,CAAMA,EAAClC,GAAW,CAAA,EAOvC,GAHsBgC,EAAWG,MAAM,SAAAD,EAAAA,CAAC,MAAA,CAAKA,EAACX,GAAW,CAAA,EAIxD,MAAA,CAAOa,GAAUA,EAAQC,KAAKC,KAAMT,EAAGC,EAAGC,CAAAA,EAM3C,IAAIQ,EAAepB,EAASnB,IAAYwC,QAAUX,EAUlD,OATAG,EAAWS,QAAQ,SAAAC,EAAAA,CAClB,GAAIA,EAAQnB,IAAa,CACxB,IAAMD,EAAeoB,EAAQtC,GAAQ,CAAA,EACrCsC,EAAQtC,GAAUsC,EAAQnB,IAC1BmB,EAAQnB,IAAAA,OACJD,IAAiBoB,EAAQtC,GAAQ,CAAA,IAAImC,EAAAA,GAC1C,CACD,CAAA,EAEOH,GACJA,EAAQC,KAAKC,KAAMT,EAAGC,EAAGC,CAAAA,GACzBQ,CACJ,EA/BA,KA/BArD,GAAgBwC,IAAAA,GAChB,IAAIU,EAAUlD,GAAiByD,sBACzBC,EAAU1D,GAAiB2D,oBAKjC3D,GAAiB2D,oBAAsB,SAAUhB,EAAGC,EAAGC,EAAAA,CACtD,GAAIO,KAAIQ,IAAS,CAChB,IAAIC,EAAMX,EAEVA,EAAAA,OACAT,EAAgBE,EAAGC,EAAGC,CAAAA,EACtBK,EAAUW,CACX,CAEIH,GAASA,EAAQP,KAAKC,KAAMT,EAAGC,EAAGC,CAAAA,CACvC,EA+CA7C,GAAiByD,sBAAwBhB,CAC1C,CAGD,OAAOR,EAASI,KAAeJ,EAASf,EACzC,CA7FgBW,EAAAA,GAAAA,KAoGT,SAASiC,GAAUC,EAAUC,EAAAA,CAEnC,IAAMC,EAAQ9C,GAAapB,KAAgB,CAAA,EAAA,CACtCM,GAAO6D,KAAiBC,GAAYF,EAAKzC,IAAQwC,CAAAA,IACrDC,EAAK/C,GAAU6C,EACfE,EAAMG,EAAeJ,EAErBhE,GAAgBwB,IAAAF,IAAyBI,KAAKuC,CAAAA,EAEhD,CATgBH,EAAAA,GAAAA,KA4BT,SAASO,GAAOC,EAAAA,CAEtB,OADAC,GAAc,EACPC,GAAQ,UAAA,CAAO,MAAA,CAAEC,QAASH,CAAAA,CAAc,EAAG,CAAA,CAAA,CACnD,CAHgBD,EAAAA,GAAAA,KAoCA,SAAAK,GAAQC,EAASC,EAAAA,CAEhC,IAAMC,EAAQC,GAAaC,KAAgB,CAAA,EAO3C,OANIC,GAAYH,EAAKI,IAAQL,CAAAA,IAC5BC,EAAKK,GAAUP,EAAAA,EACfE,EAAKI,IAASL,EACdC,EAAKM,IAAYR,GAGXE,EAAKK,EACb,CAVgBR,EAAAA,GAAAA,KAiBT,SAASU,GAAYC,EAAUT,EAAAA,CAErC,OADAU,GAAc,EACPZ,GAAQ,UAAA,CAAA,OAAMW,CAAQ,EAAET,CAAAA,CAChC,CAHgBQ,EAAAA,GAAAA,KAqFhB,SAASG,IAAAA,CAER,QADIC,EACIA,EAAYC,GAAkBC,MAAAA,GACrC,GAAKF,EAASG,KAAgBH,EAASI,IACvC,GAAA,CACCJ,EAASI,IAAAC,IAAyBC,QAAQC,EAAAA,EAC1CP,EAASI,IAAAC,IAAyBC,QAAQE,EAAAA,EAC1CR,EAASI,IAAAC,IAA2B,CAAA,CAIrC,OAHSI,EAAAA,CACRT,EAASI,IAAAC,IAA2B,CAAA,EACpCK,GAAOC,IAAaF,EAAGT,EAASY,GAAAA,CACjC,CAEF,CAbSb,EAAAA,GAAAA,KA7ZTW,GAAOG,IAAS,SAAAC,EAAAA,CACfC,GAAmB,KACfC,IAAeA,GAAcF,CAAAA,CAClC,EAEAJ,GAAOO,GAAS,SAACH,EAAOI,EAAAA,CACnBJ,GAASI,EAASC,KAAcD,EAASC,IAAAC,MAC5CN,EAAKM,IAASF,EAASC,IAAAC,KAGpBC,IAASA,GAAQP,EAAOI,CAAAA,CAC7B,EAGAR,GAAOY,IAAW,SAAAR,EAAAA,CACbS,IAAiBA,GAAgBT,CAAAA,EAGrCU,GAAe,EAEf,IAAMC,GAHNV,GAAmBD,EAAKY,KAGMtB,IAC1BqB,IACCE,KAAsBZ,IACzBU,EAAKpB,IAAmB,CAAA,EACxBU,GAAgBV,IAAoB,CAAA,EACpCoB,EAAKR,GAAOX,QAAQ,SAAAsB,EAAAA,CACfA,EAAQC,MACXD,EAAQX,GAAUW,EAAQC,KAE3BD,EAASE,EAAeF,EAAQC,IAAAA,MACjC,CAAA,IAEAJ,EAAKpB,IAAiBC,QAAQC,EAAAA,EAC9BkB,EAAKpB,IAAiBC,QAAQE,EAAAA,EAC9BiB,EAAKpB,IAAmB,CAAA,EACxBmB,GAAe,IAGjBG,GAAoBZ,EACrB,EAGAL,GAAQqB,OAAS,SAAAjB,EAAAA,CACZkB,IAAcA,GAAalB,CAAAA,EAE/B,IAAMmB,EAAInB,EAAKY,IACXO,GAAKA,EAAC7B,MACL6B,EAAC7B,IAAAC,IAAyB6B,SAAmBjC,GAAkBkC,KAAKF,CAAAA,IAgalD,GAAKG,KAAY1B,GAAQ2B,yBAC/CD,GAAU1B,GAAQ2B,wBACNC,IAAgBvC,EAAAA,GAja5BkC,EAAC7B,IAAAa,GAAeX,QAAQ,SAAAsB,EAAAA,CACnBA,EAASE,IACZF,EAAQxB,IAASwB,EAASE,GAE3BF,EAASE,EAAAA,MACV,CAAA,GAEDH,GAAoBZ,GAAmB,IACxC,EAIAL,GAAOgB,IAAW,SAACZ,EAAOyB,EAAAA,CACzBA,EAAYC,KAAK,SAAAxC,EAAAA,CAChB,GAAA,CACCA,EAASK,IAAkBC,QAAQC,EAAAA,EACnCP,EAASK,IAAoBL,EAASK,IAAkBoC,OAAO,SAAAC,EAAAA,CAAE,MAAA,CAChEA,EAAEzB,IAAUT,GAAakC,CAAAA,CAAU,CAAA,CAQrC,OANSjC,EAAAA,CACR8B,EAAYC,KAAK,SAAAP,EAAAA,CACZA,EAAC5B,MAAmB4B,EAAC5B,IAAoB,CAAA,EAC9C,CAAA,EACAkC,EAAc,CAAA,EACd7B,GAAOC,IAAaF,EAAGT,EAASY,GAAAA,CACjC,CACD,CAAA,EAEI+B,IAAWA,GAAU7B,EAAOyB,CAAAA,CACjC,EAGA7B,GAAQkC,QAAU,SAAA9B,EAAAA,CACb+B,IAAkBA,GAAiB/B,CAAAA,EAEvC,IAEKgC,EAFCb,EAAInB,EAAKY,IACXO,GAAKA,EAAC7B,MAET6B,EAAC7B,IAAAa,GAAeX,QAAQ,SAAAyC,EAAAA,CACvB,GAAA,CACCxC,GAAcwC,CAAAA,CAGf,OAFStC,EAAAA,CACRqC,EAAarC,CACd,CACD,CAAA,EACAwB,EAAC7B,IAAAA,OACG0C,GAAYpC,GAAOC,IAAamC,EAAYb,EAACrB,GAAAA,EAEnD,EA4UA,IAAIoC,GAA0C,OAAzBX,uBAAyB,WAY9C,SAASC,GAAeW,EAAAA,CACvB,IAOIC,EAPEC,EAAOC,EAAA,UAAA,CACZC,aAAaC,CAAAA,EACTN,IAASO,qBAAqBL,CAAAA,EAClCM,WAAWP,CAAAA,CACZ,EAJa,KAKPK,EAAUE,WAAWL,EAlcR,EAAA,EAqcfH,KACHE,EAAMb,sBAAsBc,CAAAA,EAE9B,CAZSb,EAAAA,GAAAA,KAiCT,SAAS/B,GAAckD,EAAAA,CAGtB,IAAMC,EAAO3C,GACT4C,EAAUF,EAAI/B,IACI,OAAXiC,GAAW,aACrBF,EAAI/B,IAAAA,OACJiC,EAAAA,GAGD5C,GAAmB2C,CACpB,CAXSnD,EAAAA,GAAAA,KAkBT,SAASC,GAAaiD,EAAAA,CAGrB,IAAMC,EAAO3C,GACb0C,EAAI/B,IAAY+B,EAAIxC,GAAAA,EACpBF,GAAmB2C,CACpB,CANSlD,EAAAA,GAAAA,KAaT,SAASoD,GAAYC,EAASC,EAAAA,CAC7B,MAAA,CACED,GACDA,EAAQ3B,SAAW4B,EAAQ5B,QAC3B4B,EAAQtB,KAAK,SAACuB,EAAKC,EAAAA,CAAU,OAAAD,IAAQF,EAAQG,CAAAA,CAAM,CAAA,CAErD,CANSJ,EAAAA,GAAAA,KAcT,SAASK,GAAeF,EAAKG,EAAAA,CAC5B,OAAmB,OAALA,GAAK,WAAaA,EAAEH,CAAAA,EAAOG,CAC1C,CAFSD,EAAAA,GAAAA,KCtiBT,IAAME,GAAc,CAChB,SAAU,WAKV,MAAO,OACP,UAAW,MACf,EACMC,GAAgB,CAClB,SAAU,WACV,IAAK,EACL,KAAM,EAMN,MAAO,OACP,SAAU,SACd,EACe,SAARC,GAA6B,CAAE,KAAAC,EAAM,UAAAC,EAAW,UAAAC,EAAW,cAAAC,EAAgB,GAAI,QAAAC,EAAU,EAAG,GAAGC,CAAM,EAAG,CAC3G,IAAMC,EAAcC,GAAO,IAAI,EACzB,CAACC,EAAQC,CAAS,EAAIC,GAAS,CAAC,EAChC,CAACC,EAAQC,CAAS,EAAIF,GAAS,CAAC,EACtCG,GAAU,IAAM,CACZ,SAASC,GAAS,CACVR,EAAY,SAAW,MACvBK,IAAWL,EAAY,QAAQ,cAC/BM,EAAUN,EAAY,QAAQ,YAAY,CAElD,CALS,OAAAS,EAAAD,EAAA,UAMTA,EAAO,EACP,OAAO,iBAAiB,SAAUA,CAAM,EACjC,IAAM,CACT,OAAO,oBAAoB,SAAUA,CAAM,CAC/C,CACJ,EAAG,CAACH,CAAM,CAAC,EACX,IAAMK,EAAeC,GAAY,IAAM,CAC/BX,EAAY,SACZG,EAAUH,EAAY,QAAQ,SAAS,CAC/C,EAAG,CAAC,CAAC,EAEDY,EAAQ,KAAK,MAAMV,EAASP,CAAS,EAErCkB,EAAkB,KAAK,MAAMR,EAASV,CAAS,EAG/CE,IACAe,EAAQ,KAAK,IAAI,EAAGA,EAASA,EAAQf,CAAc,EACnDgB,GAAmBhB,GAEvB,IAAMiB,EAAMF,EAAQC,EAAkBf,EAEhCiB,EAAYrB,EAAK,MAAMkB,EAAOE,CAAG,EACjCE,EAAa,CAAE,GAAGzB,GAAa,OAAQG,EAAK,OAASC,CAAU,EAC/DsB,EAAe,CAAE,GAAGzB,GAAe,IAAKoB,EAAQjB,CAAU,EAGhE,OAAQuB,EAAK,MAAO,CAAE,SAAUR,EAAc,IAAKV,EAAa,GAAGD,EAAO,SAAUmB,EAAK,MAAO,CAAE,KAAM,eAAgB,MAAOF,EAAY,SAAUE,EAAK,MAAO,CAAE,KAAM,eAAgB,MAAOD,EAAc,SAAUF,EAAU,IAAInB,CAAS,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CAC5P,CAvCwBa,EAAAhB,GAAA,eCdxB,IAAqB0B,GAArB,KAAgC,CAThC,MASgC,CAAAC,EAAA,mBAC5B,KACA,KACA,GACA,cACA,KACA,UACA,KACA,QACA,YAAYC,EAAMC,EAAM,CACpB,KAAK,KAAOD,EACZ,KAAK,KAAOC,GAAQ,CAAC,CACzB,CACA,gBAAiB,CACb,GAAM,CAAE,QAAAC,CAAQ,EAAI,KAAK,KAAK,SAAS,EACvC,OAAQA,IAAU,KAAK,EAAE,GAAK,CAAC,CACnC,CACA,eAAeC,EAAQ,CACnB,GAAM,CAAE,QAAAD,CAAQ,EAAI,KAAK,KAAK,SAAS,EACvC,KAAK,KAAK,SAAS,CACf,QAAS,CACL,GAAGA,EACH,CAAC,KAAK,EAAE,EAAG,CACP,GAAGA,EAAQ,KAAK,EAAE,EAClB,GAAGC,CACP,CACJ,CACJ,CAAC,CACL,CACA,WAAWC,EAAS,CAChB,KAAK,KAAO,CAAE,GAAG,KAAK,KAAM,GAAGA,CAAQ,EACvC,KAAK,eAAe,MAAS,EAC7B,KAAK,SAAS,CAClB,CACA,UAAW,CACP,IAAMC,EAAa,IAAIC,GAAW,CAC9B,KAAK,cACL,KAAK,KAAK,OACV,KAAK,KAAK,MACd,CAAC,EACD,KAAK,KAAOD,EAAW,UAAU,KAAKA,CAAU,EAChD,KAAK,UAAYA,EAAW,eAAe,KAAKA,CAAU,EAC1D,KAAK,eAAe,MAAS,CACjC,CAOA,UAAUE,EAAQ,CACd,MAAM,IAAI,MAAM,2EAA2E,CAC/F,CACA,SAAU,CAAE,CACZ,WAAY,CAAE,CACd,OAAOC,EAAO,CAAE,CAEhB,aAAc,CAAE,CACpB,EC/DA,IAAqBC,GAArB,KAAkC,CAJlC,MAIkC,CAAAC,EAAA,qBAC9BC,GACAC,GAAU,CAAC,EACX,YAAYC,EAAM,CACd,KAAKF,GAAQE,CACjB,CACA,GAAGC,EAAOC,EAAI,CACV,YAAKH,GAAQ,KAAK,CAACE,EAAOC,CAAE,CAAC,EACtB,KAAKJ,GAAM,GAAGG,EAAOC,CAAE,CAClC,CACA,QAAS,CACL,OAAW,CAACD,EAAOC,CAAE,IAAK,KAAKH,GAAQ,OAAO,CAAC,EAC3C,KAAKD,GAAM,IAAIG,EAAOC,CAAE,CAEhC,CACA,YAAYC,EAAQC,EAAI,CACpB,KAAK,GAAG,eAAgB,CAACC,EAAMC,IAAa,CACpCH,IAAWE,GAAM,IACjBD,EAAGE,CAAQ,CAEnB,CAAC,CACL,CACA,aAAaH,EAAQC,EAAI,CACrB,KAAK,GAAG,eAAiBC,GAAS,CAC1BF,IAAWE,EAAK,IAChBD,EAAGC,EAAK,EAAE,CAClB,CAAC,CACL,CACA,QAAQF,EAAQC,EAAI,CAChB,KAAK,GAAG,eAAgB,CAACC,EAAMC,IAAa,CACpCH,IAAWE,GAAM,IAEjBD,EAAGE,CAAQ,CAEnB,CAAC,CACL,CACA,QAAQH,EAAQC,EAAI,CAChB,KAAK,GAAG,eAAiBC,GAAS,CAC1BF,IAAWE,GAAM,IACjBD,EAAG,CAEX,CAAC,CACL,CACA,WAAWD,EAAQC,EAAI,CACnB,KAAK,GAAG,YAAa,IAAM,CAClB,KAAKN,GAAM,QAAQK,CAAM,GAE9BC,EAAG,CACP,CAAC,CACL,CACA,WAAWD,EAAQC,EAAI,CACnB,KAAK,GAAG,YAAa,IAAM,CAClB,KAAKN,GAAM,QAAQK,CAAM,GAE9BC,EAAG,CACP,CAAC,CACL,CACA,YAAYD,EAAQI,EAAc,CAC9B,KAAK,GAAG,aAAc,IAAIC,IAAS,CAC1B,KAAKV,GAAM,QAAQK,CAAM,GAE9BI,EAAa,GAAGC,CAAI,CACxB,CAAC,CACL,CACA,YAAYL,EAAQC,EAAI,CACpB,KAAK,GAAG,aAAc,IAAM,CACnB,KAAKN,GAAM,QAAQK,CAAM,GAE9BC,EAAG,CACP,CAAC,CACL,CACJ,ECxEA,IAAMK,GAAmB,CACrB,MAAOC,EAAA,IAAM,CAAE,EAAR,SACP,KAAMA,EAAA,IAAM,CAAE,EAAR,QACN,MAAOA,EAAA,IAAIC,IAAS,QAAQ,MAAM,WAAWC,GAAa,CAAC,IAAK,GAAGD,CAAI,EAAhE,QACX,EAGME,GAAc,CAChB,MAAOH,EAAA,IAAIC,IAAS,QAAQ,MAAM,WAAWC,GAAa,CAAC,IAAK,GAAGD,CAAI,EAAhE,SACP,KAAMD,EAAA,IAAIC,IAAS,QAAQ,KAAK,WAAWC,GAAa,CAAC,IAAK,GAAGD,CAAI,EAA/D,QACN,MAAOD,EAAA,IAAIC,IAAS,QAAQ,MAAM,WAAWC,GAAa,CAAC,IAAK,GAAGD,CAAI,EAAhE,QACX,ECdA,IAAAG,GAA0B,WAE1BC,GAAkB,WAClB,IAAMC,GAAiB,CACnB,YAAa,KACb,YAAa,KACb,iBAAkB,KAClB,iBAAkB,KAClB,iBAAkB,KAClB,iBAAkB,KAClB,mBAAoB,CAAC,CACzB,EACMC,GAAN,cAA+B,KAAM,CAZrC,MAYqC,CAAAC,EAAA,yBACjC,aACA,KACA,YAAYC,EAASC,EAAM,CACvB,MAAMD,CAAO,EACb,KAAK,aAAeC,GAAM,cAAgB,GACtCA,GAAM,OACN,KAAK,KAAOA,EAAK,KAEzB,CACA,cAAgB,EACpB,EACMC,GAAN,KAAiB,CAxBjB,MAwBiB,CAAAH,EAAA,mBACb,QACA,QACA,YAAYI,EAASC,EAAS,CAC1B,KAAK,QAAUA,EACf,KAAK,QAAU,IAAM,CACjB,IAAMH,EAAOE,EAAQ,EACrB,GAAIF,EAAK,cAAc,kBAAoB,MACvC,CAAC,MAAM,QAAQA,EAAK,aAAa,gBAAgB,EACjD,MAAM,IAAI,UAAU,kDAAkD,EAE1E,OAAOA,CACX,CACJ,CAEA,8BAA8BI,EAAeC,EAAa,CACtD,GAAM,CAAE,iBAAAC,EAAkB,iBAAAC,CAAiB,EAAI,KAAK,QAAQ,EAAE,aAC9D,GAAIA,GACsBH,EAAc,OAAQI,GAAM,CAACA,EAAE,OAAO,EAC1C,OAASH,EAAY,OAASE,EAC5C,MAAM,IAAIV,GAAiB,GAAG,KAAK,QAAQ,EAAE,oBAAqB,CAC9D,YAAaU,CACjB,CAAC,CAAC,EAAE,EAGZ,GAAID,EAAkB,CAClB,IAAMG,EAAiB,CAAC,GAAGL,EAAe,GAAGC,CAAW,EAAE,OAAO,CAACK,EAAOF,IAAME,GAASF,EAAE,MAAQ,GAAI,CAAC,EACvG,GAAIC,EAAiBH,EACjB,MAAM,IAAIT,GAAiB,KAAK,QAAQ,EAAE,uBAAwB,CAC9D,eAAa,GAAAc,SAAcL,CAAgB,EAC3C,QAAM,GAAAK,SAAcF,CAAc,CACtC,CAAC,CAAC,CAEV,CACJ,CACA,mBAAmBG,EAAM,CACrB,GAAM,CAAE,YAAAC,EAAa,YAAAC,EAAa,iBAAAC,CAAiB,EAAI,KAAK,QAAQ,EAAE,aACtE,GAAIA,GAcI,CAbsBA,EAAiB,KAAMC,GAEzCA,EAAK,SAAS,GAAG,EACZJ,EAAK,QAEH,GAAAK,SAAML,EAAK,KAAK,QAAQ,QAAS,EAAE,EAAGI,CAAI,EADtC,GAIXA,EAAK,CAAC,IAAM,KAAOJ,EAAK,UACjBA,EAAK,UAAU,YAAY,IAAMI,EAAK,MAAM,CAAC,EAAE,YAAY,EAE/D,EACV,EACuB,CACpB,IAAME,EAAyBH,EAAiB,KAAK,IAAI,EACzD,MAAM,IAAIlB,GAAiB,KAAK,QAAQ,EAAE,4BAA6B,CACnE,MAAOqB,CACX,CAAC,EAAG,CAAE,KAAAN,CAAK,CAAC,CAChB,CAGJ,GAAIC,GAAeD,EAAK,MAAQ,MAAQA,EAAK,KAAOC,EAChD,MAAM,IAAIhB,GAAiB,KAAK,QAAQ,EAAE,cAAe,CACrD,QAAM,GAAAc,SAAcE,CAAW,EAC/B,KAAMD,EAAK,MAAQ,KAAK,QAAQ,EAAE,SAAS,CAC/C,CAAC,EAAG,CAAE,KAAAA,CAAK,CAAC,EAGhB,GAAIE,GAAeF,EAAK,MAAQ,MAAQA,EAAK,KAAOE,EAChD,MAAM,IAAIjB,GAAiB,KAAK,QAAQ,EAAE,eAAgB,CACtD,QAAM,GAAAc,SAAcG,CAAW,CACnC,CAAC,EAAG,CAAE,KAAAF,CAAK,CAAC,CAEpB,CACA,SAASR,EAAeC,EAAa,CACjCA,EAAY,QAASc,GAAe,CAChC,KAAK,mBAAmBA,CAAU,CACtC,CAAC,EACD,KAAK,8BAA8Bf,EAAeC,CAAW,CACjE,CACA,yBAAyBe,EAAO,CAC5B,GAAM,CAAE,iBAAAC,CAAiB,EAAI,KAAK,QAAQ,EAAE,aAC5C,GAAIA,GAAoB,OAAO,KAAKD,CAAK,EAAE,OAASC,EAChD,MAAM,IAAIxB,GAAiB,KAAK,QAAQ,EAAE,0BAA2B,CACjE,YAAawB,CACjB,CAAC,CAAC,CAEV,CACA,6BAA6BT,EAAM,CAC/B,IAAMU,EAAQ,IAAIzB,GAAiB,KAAK,QAAQ,EAAE,iCAAkC,CAChF,SAAUe,EAAK,MAAQ,KAAK,QAAQ,EAAE,SAAS,CACnD,CAAC,CAAC,EACI,CAAE,mBAAAW,CAAmB,EAAI,KAAK,QAAQ,EAAE,aACxCC,EAAgB,CAAC,EACvB,QAAWC,KAASF,GACZ,CAAC,OAAO,OAAOX,EAAK,KAAMa,CAAK,GAAKb,EAAK,KAAKa,CAAK,IAAM,KACzDD,EAAc,KAAKC,CAAK,EAGhC,MAAO,CAAE,cAAAD,EAAe,MAAAF,CAAM,CAClC,CACJ,ECrHA,SAASI,GAASC,EAAI,CAClB,IAAIC,EAAU,KACVC,EACJ,MAAO,IAAIC,KACPD,EAAaC,EACRF,IACDA,EAAU,QAAQ,QAAQ,EAAE,KAAK,KAC7BA,EAAU,KAKHD,EAAG,GAAGE,CAAU,EAC1B,GAEED,EAEf,CAjBSG,EAAAL,GAAA,YAwBT,IAAMM,GAAN,MAAMC,UAAiBC,EAAW,CA9BlC,MA8BkC,CAAAH,EAAA,iBAC9BI,GACA,cACA,GACA,OACA,MACA,gBAAgBC,EAAQ,CACpB,IAAIC,EACJ,GAAI,OAAOD,GAAQ,WAAc,WAE7BC,EAAeD,EACTC,aAAwBJ,GAC1B,QAAQ,KAAK,IAAI,MAAM,mHAAoH,CAAE,MAAO,CAAE,aAAAI,EAAc,SAAAJ,CAAS,CAAE,CAAC,CAAC,UAGhL,OAAOG,GAAW,WAAY,CAEnC,IAAME,EAASF,EAEf,KAAK,KAAK,eAAgBG,GAAM,CACxBA,aAAaD,IACbD,EAAeE,EAEvB,CAAC,CACL,CACA,OAAOF,CACX,CAMA,MAAMD,EAAQI,EAAQ,CAClB,IAAMC,EAAmBD,EAAO,GAC1BE,EAAgBC,GAAeP,CAAM,EAC3C,GAAIM,EAAe,CACf,KAAK,cAAgB,GAIrB,IAAME,EAAkB,SAAS,cAAc,KAAK,EACpD,OAAAA,EAAgB,UAAU,IAAI,WAAW,EAEzC,KAAKT,GAAYT,GAAUmB,GAAU,CAI5B,KAAK,KAAK,UAAU,KAAK,EAAE,IAEhCC,GAAO,KAAK,OAAOD,EAAOD,CAAe,EAAGA,CAAe,EAC3D,KAAK,YAAY,EACrB,CAAC,EACD,KAAK,KAAK,IAAI,cAAcH,CAAgB,sBAAsBL,CAAM,GAAG,EACvE,KAAK,KAAK,uBAIVM,EAAc,UAAY,IAE9BI,GAAO,KAAK,OAAO,KAAK,KAAK,SAAS,EAAGF,CAAe,EAAGA,CAAe,EAC1E,KAAK,GAAKA,EACVF,EAAc,YAAYE,CAAe,EAEzCA,EAAgB,IACZ,KAAK,KAAK,WAAaG,GAAiBH,CAAe,GAAK,MAChE,KAAK,QAAQ,EACN,KAAK,EAChB,CACA,IAAMP,EAAe,KAAK,gBAAgBD,CAAM,EAChD,GAAIC,EACA,YAAK,KAAK,IAAI,cAAcI,CAAgB,OAAOJ,EAAa,EAAE,EAAE,EACpE,KAAK,OAASA,EACd,KAAK,GAAKA,EAAa,UAAUG,CAAM,EACvC,KAAK,QAAQ,EACN,KAAK,GAEhB,KAAK,KAAK,IAAI,kBAAkBC,CAAgB,EAAE,EAClD,IAAIO,EAAU,kCAAkCP,CAAgB,IAChE,MAAI,OAAOL,GAAW,WAClBY,GACI,+UAMJA,GACI,yWAKF,IAAI,MAAMA,CAAO,CAC3B,CAOA,OAAOH,EAAOI,EAAW,CACrB,MAAM,IAAI,MAAM,8DAA8D,CAClF,CACA,OAAOJ,EAAO,CACN,KAAK,IAAM,MACX,KAAKV,KAAYU,CAAK,CAE9B,CACA,SAAU,CACF,KAAK,eACL,KAAK,IAAI,OAAO,EAEpB,KAAK,UAAU,CACnB,CACA,SAAU,CAAE,CACZ,WAAY,CAAE,CAClB,EACOK,GAAQlB,GCnJf,IAAAmB,GAAA,CACE,KAAQ,sBACR,YAAe,kDACf,QAAW,QACX,QAAW,MACX,KAAQ,eACR,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,cACb,KAAQ,uDACV,EACA,SAAY,CACV,gBACA,OACA,YACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,gBAAmB,CACjB,MAAS,UACT,WAAc,SACd,OAAU,QACZ,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,CACF,ECrCA,IAAMC,GAAN,KAAmB,CAJnB,MAImB,CAAAC,EAAA,qBACf,OAAO,QAAUC,GAAY,QAC7B,MAAQ,CAAC,EACTC,GAAa,IAAI,IACjB,UAAW,CACP,OAAO,KAAK,KAChB,CACA,SAASC,EAAO,CACZ,IAAMC,EAAY,CAAE,GAAG,KAAK,KAAM,EAC5BC,EAAY,CAAE,GAAG,KAAK,MAAO,GAAGF,CAAM,EAC5C,KAAK,MAAQE,EACb,KAAKC,GAASF,EAAWC,EAAWF,CAAK,CAC7C,CACA,UAAUI,EAAU,CAChB,YAAKL,GAAW,IAAIK,CAAQ,EACrB,IAAM,CACT,KAAKL,GAAW,OAAOK,CAAQ,CACnC,CACJ,CACAD,MAAYE,EAAM,CACd,KAAKN,GAAW,QAASK,GAAa,CAClCA,EAAS,GAAGC,CAAI,CACpB,CAAC,CACL,CACJ,EACOC,GAAQV,GC1Bf,IAAAW,GAAqB,WAErBC,GAAe,WCLf,IAAIC,GACF,mEAWK,IAAIC,GAASC,EAAA,CAACC,EAAO,KAAO,CACjC,IAAIC,EAAK,GACLC,EAAIF,EAAO,EACf,KAAOE,KACLD,GAAME,GAAa,KAAK,OAAO,EAAI,GAAM,CAAC,EAE5C,OAAOF,CACT,EAPoB,UCZpB,IAAAG,GAAA,CACE,KAAQ,aACR,YAAe,0OACf,QAAW,QACX,QAAW,MACX,MAAS,qBACT,KAAQ,SACR,YAAe,CACb,OACF,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,cACb,KAAQ,uDACV,EACA,SAAY,CACV,gBACA,OACA,aACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,sBAAuB,uBACvB,kBAAmB,mBACnB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,8BAA+B,SAC/B,sBAAuB,cACvB,cAAe,cACf,OAAU,WACV,aAAc,SACd,oBAAqB,SACrB,OAAU,SACV,OAAU,WACZ,EACA,gBAAmB,CACjB,qBAAsB,KACtB,QAAW,SACX,cAAe,SACf,MAAS,UACT,QAAW,SACX,cAAe,UACf,KAAQ,UACR,WAAc,SACd,OAAU,QACZ,CACF,EC/De,SAARC,GAA6BC,EAAUC,EAAgB,CAC1D,OAAIA,EAAe,KACRA,EAAe,KAEtBD,EAAS,MAAM,GAAG,EAAE,CAAC,IAAM,QACpB,GAAGA,EAAS,MAAM,GAAG,EAAE,CAAC,CAAC,IAAIA,EAAS,MAAM,GAAG,EAAE,CAAC,CAAC,GAEvD,QACX,CARwBE,EAAAH,GAAA,eCAxB,IAAOI,GAAQ,CACX,QAAS,CACL,mBAAoB,CAChB,EAAG,6DACH,EAAG,2DACP,EACA,kBAAmB,CACf,EAAG,0CACH,EAAG,0CACP,EACA,wBAAyB,CACrB,EAAG,kDACH,EAAG,kDACP,EACA,qBAAsB,4EACtB,YAAa,kDACb,yBAA0B,+BAC1B,+BAAgC,8CAChC,aAAc,wDACd,0BAA2B,gCAC3B,mBAAoB,wBACpB,aAAc,iEACd,eAAgB,mCAChB,YAAa,yBACb,yBAA0B,kEAC1B,eAAgB,2BAChB,qBAAsB,yBACtB,oBAAqB,4BAErB,aAAc,oCACd,gBAAiB,sDACjB,QAAS,CACL,EAAG,wBACH,EAAG,uBACP,EACA,wBAAyB,gCACzB,gBAAiB,sBACjB,OAAQ,SACR,OAAQ,UACR,MAAO,SACP,UAAW,aACX,WAAY,cACZ,OAAQ,SACR,YAAa,eACb,QAAS,aACT,aAAc,2BACd,sBAAuB,yDACvB,iBAAkB,2BAClB,iBAAkB,sBAClB,aAAc,oBACd,kBAAmB,kCACnB,OAAQ,SACR,YAAa,eACb,iBAAkB,wCAClB,cAAe,4BACf,mBAAoB,2CACpB,YAAa,CACT,EAAG,2CACH,EAAG,2CACP,EACA,6BAA8B,sDAC9B,QAAS,UACT,WAAY,aAChB,CACJ,EC7De,SAARC,GAAwCC,EAAW,CAMtD,GAJIA,GAAa,MAAQ,OAAO,UAAc,MAC1CA,EAAY,UAAU,WAGtB,CAACA,EACD,MAAO,GACX,IAAMC,EAAI,mBAAmB,KAAKD,CAAS,EAC3C,GAAI,CAACC,EACD,MAAO,GAEX,IAAMC,EADcD,EAAE,CAAC,EACK,MAAM,IAAK,CAAC,EAClCE,EAAQ,SAASD,EAAQ,CAAC,EAAG,EAAE,EAC/BE,EAAQ,SAASF,EAAQ,CAAC,EAAG,EAAE,EASrC,OALIC,EAAQ,IAAOA,IAAU,IAAMC,EAAQ,OAKvCD,EAAQ,IAAOA,IAAU,IAAMC,GAAS,KAKhD,CA5BwBC,EAAAN,GAAA,0BLUxB,IAAMO,GAAqB,CACvB,cAAe,EACf,eAAgB,GAChB,MAAO,KACP,eAAgB,IACpB,EAMaC,GAAN,MAAMC,CAAK,CAxBlB,MAwBkB,CAAAC,EAAA,aACd,OAAO,QAAUC,GAAY,QAC7BC,GAAW,OAAO,OAAO,IAAI,EAC7BC,GACAC,GACAC,MAAW,GAAAC,SAAG,EACdC,GAAiB,IAAI,IACrBC,GAAa,IAAI,IACjBC,GAAkB,IAAI,IACtB,cACA,OAGA,KACA,MAEA,KACA,UACA,qBAAuB,KACvB,WAAa,GAIb,YAAYC,EAAM,CACd,KAAK,cAAgBC,GACrB,IAAMC,EAAiB,CACnB,GAAI,OACJ,YAAa,GACb,2BAA4B,GAC5B,MAAO,GACP,aAAcA,GACd,KAAM,CAAC,EACP,kBAAmBZ,EAAA,CAACa,EAAMC,IAAU,CAAC,OAAO,OAAOA,EAAOD,EAAK,EAAE,EAA9C,qBACnB,eAAgBb,EAACc,GAAUA,EAAX,kBAChB,MAAO,IAAIC,GACX,OAAQC,GACR,YAAa,GACjB,EACMC,EAAS,CAAE,GAAGL,EAAgB,GAAGF,CAAK,EAG5C,KAAK,KAAO,CACR,GAAGO,EACH,aAAc,CACV,GAAGL,EAAe,aAClB,GAAGF,GAAM,YACb,CACJ,EAGIA,GAAM,QAAUA,EAAK,MACrB,KAAK,IAAI,4KAA6K,SAAS,EAE1LA,GAAM,QACX,KAAK,KAAK,OAASQ,IAEvB,KAAK,IAAI,eAAenB,EAAK,OAAO,EAAE,EACtC,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,MACvB,KAAK,SAAS,CACV,GAAGF,GACH,QAAS,CAAC,EACV,MAAO,CAAC,EACR,eAAgB,CAAC,EACjB,aAAc,CACV,eAAgBsB,GAAuB,EACvC,uBAAwB,GACxB,iBAAkB,EACtB,EACA,KAAM,CAAE,GAAG,KAAK,KAAK,IAAK,EAC1B,KAAM,CAAC,CACX,CAAC,EACD,KAAKhB,GAAc,IAAIiB,GAAW,IAAM,KAAK,KAAM,IAAM,KAAK,IAAI,EAClE,KAAKhB,GAAoB,KAAK,MAAM,UAAU,CAACiB,EAAWC,EAAWC,IAAU,CAC3E,KAAK,KAAK,eAAgBF,EAAWC,EAAWC,CAAK,EACrD,KAAK,UAAUD,CAAS,CAC5B,CAAC,EAEG,KAAK,KAAK,OAAS,OAAO,OAAW,MAErC,OAAO,KAAK,KAAK,EAAE,EAAI,MAE3B,KAAKE,GAAc,CACvB,CACA,KAAKC,KAAUC,EAAM,CACjB,KAAKrB,GAAS,KAAKoB,EAAO,GAAGC,CAAI,CACrC,CACA,GAAGD,EAAOE,EAAU,CAChB,YAAKtB,GAAS,GAAGoB,EAAOE,CAAQ,EACzB,IACX,CACA,KAAKF,EAAOE,EAAU,CAClB,YAAKtB,GAAS,KAAKoB,EAAOE,CAAQ,EAC3B,IACX,CACA,IAAIF,EAAOE,EAAU,CACjB,YAAKtB,GAAS,IAAIoB,EAAOE,CAAQ,EAC1B,IACX,CAMA,UAAUC,EAAO,CACb,KAAK,eAAgBC,GAAW,CAC5BA,EAAO,OAAOD,CAAK,CACvB,CAAC,CACL,CAIA,SAASL,EAAO,CACZ,KAAK,MAAM,SAASA,CAAK,CAC7B,CAIA,UAAW,CACP,OAAO,KAAK,MAAM,SAAS,CAC/B,CACA,gBAAgBO,EAAmB,CAC/B,IAAMC,EAAqB,KAAK,SAAS,EAAE,MAC3C,KAAK,SAAS,CACV,MAAO,CACH,GAAGA,EACH,GAAG,OAAO,YAAY,OAAO,QAAQD,CAAiB,EAAE,IAAI,CAAC,CAACE,EAAQC,CAAY,IAAM,CACpFD,EACA,CACI,GAAGD,EAAmBC,CAAM,EAC5B,GAAGC,CACP,CACJ,CAAC,CAAC,CACN,CACJ,CAAC,CACL,CAIA,aAAaD,EAAQJ,EAAO,CACxB,GAAI,CAAC,KAAK,SAAS,EAAE,MAAMI,CAAM,EAC7B,MAAM,IAAI,MAAM,4BAAuBA,CAAM,qCAAqC,EAEtF,KAAK,gBAAgB,CAAE,CAACA,CAAM,EAAGJ,CAAM,CAAC,CAC5C,CACA,UAAW,CACP,IAAMM,EAAelC,EAACmC,GAAQ,KAAK,IAAI,wBAAwBA,CAAG,GAAI,OAAO,EAAxD,gBACfC,EAAa,IAAIC,GAAW,CAAC,KAAK,cAAe,KAAK,KAAK,MAAM,EAAG,CACtE,aAAAH,CACJ,CAAC,EACD,KAAK,KAAOE,EAAW,UAAU,KAAKA,CAAU,EAChD,KAAK,UAAYA,EAAW,eAAe,KAAKA,CAAU,EAC1D,KAAK,OAASA,EAAW,MAC7B,CACA,WAAWE,EAAS,CAChB,KAAK,KAAO,CACR,GAAG,KAAK,KACR,GAAGA,EACH,aAAc,CACV,GAAG,KAAK,KAAK,aACb,GAAGA,GAAS,YAChB,CACJ,EACIA,EAAQ,MACR,KAAK,QAAQA,EAAQ,IAAI,EAE7B,KAAK,SAAS,EACVA,EAAQ,QACR,KAAK,eAAgBT,GAAW,CAC5BA,EAAO,WAAWS,CAAO,CAC7B,CAAC,EAGL,KAAK,SAAS,MAAS,CAC3B,CACA,eAAgB,CACZ,IAAMC,EAAkB,CACpB,WAAY,EACZ,cAAe,GACf,eAAgB,GAChB,cAAe,IACnB,EACMzB,EAAQ,CAAE,GAAG,KAAK,SAAS,EAAE,KAAM,EACnC0B,EAAe,OAAO,OAAO,IAAI,EACvC,OAAO,KAAK1B,CAAK,EAAE,QAASkB,GAAW,CACnCQ,EAAaR,CAAM,EAAI,CACnB,GAAGlB,EAAMkB,CAAM,EACf,SAAU,CACN,GAAGlB,EAAMkB,CAAM,EAAE,SACjB,GAAGO,CACP,EAIA,IAAK,OACL,YAAa,MACjB,CACJ,CAAC,EACD,KAAK,SAAS,CAAE,MAAOC,EAAc,GAAG3C,EAAmB,CAAC,CAChE,CACA,OAAQ,CACJ,GAAM,CAAE,aAAA4C,EAAc,eAAAC,CAAe,EAAI,KAAK,SAAS,EACvD,GAAI,OAAO,KAAKA,CAAc,EAAE,OAAS,GACrC,CAACD,EAAa,uBACd,MAAM,IAAI,MAAM,+EAA+E,EAEnG,KAAK,SAAS,CAAE,GAAG5C,GAAoB,MAAO,CAAC,CAAE,CAAC,CACtD,CACA,gBAAgB8C,EAAI,CAChB,KAAKpC,GAAe,IAAIoC,CAAE,CAC9B,CACA,mBAAmBA,EAAI,CACnB,OAAO,KAAKpC,GAAe,OAAOoC,CAAE,CACxC,CACA,iBAAiBA,EAAI,CACjB,KAAKlC,GAAgB,IAAIkC,CAAE,CAC/B,CACA,oBAAoBA,EAAI,CACpB,OAAO,KAAKlC,GAAgB,OAAOkC,CAAE,CACzC,CACA,YAAYA,EAAI,CACZ,KAAKnC,GAAW,IAAImC,CAAE,CAC1B,CACA,eAAeA,EAAI,CACf,OAAO,KAAKnC,GAAW,OAAOmC,CAAE,CACpC,CACA,QAAQC,EAAM,CACV,IAAMC,EAAc,CAAE,GAAG,KAAK,SAAS,EAAE,KAAM,GAAGD,CAAK,EACjDJ,EAAe,CAAE,GAAG,KAAK,SAAS,EAAE,KAAM,EAChD,OAAO,KAAKA,CAAY,EAAE,QAASR,GAAW,CAC1CQ,EAAaR,CAAM,EAAI,CACnB,GAAGQ,EAAaR,CAAM,EACtB,KAAM,CAAE,GAAGQ,EAAaR,CAAM,EAAE,KAAM,GAAGY,CAAK,CAClD,CACJ,CAAC,EACD,KAAK,IAAI,kBAAkB,EAC3B,KAAK,IAAIA,CAAI,EACb,KAAK,SAAS,CACV,KAAMC,EACN,MAAOL,CACX,CAAC,CACL,CACA,YAAYR,EAAQY,EAAM,CACtB,IAAMJ,EAAe,CAAE,GAAG,KAAK,SAAS,EAAE,KAAM,EAChD,GAAI,CAACA,EAAaR,CAAM,EAAG,CACvB,KAAK,IAAI,gEAAgEA,CAAM,EAAE,EACjF,MACJ,CACA,IAAMc,EAAU,CAAE,GAAGN,EAAaR,CAAM,EAAE,KAAM,GAAGY,CAAK,EACxDJ,EAAaR,CAAM,EAAI,CAAE,GAAGQ,EAAaR,CAAM,EAAG,KAAMc,CAAQ,EAChE,KAAK,SAAS,CAAE,MAAON,CAAa,CAAC,CACzC,CAIA,QAAQR,EAAQ,CACZ,OAAO,KAAK,SAAS,EAAE,MAAMA,CAAM,CACvC,CAIA,UAAW,CACP,GAAM,CAAE,MAAAlB,CAAM,EAAI,KAAK,SAAS,EAChC,OAAO,OAAO,OAAOA,CAAK,CAC9B,CACA,cAAciC,EAAK,CACf,OAAOA,EAAI,IAAKC,GAAO,KAAK,QAAQA,CAAE,CAAC,CAC3C,CACA,0BAA2B,CACvB,GAAM,CAAE,MAAOC,EAAa,cAAAC,EAAe,MAAAC,CAAM,EAAI,KAAK,SAAS,EAC7DrC,EAAQ,OAAO,OAAOmC,CAAW,EACjCG,EAAkB,CAAC,EACnBC,EAAW,CAAC,EACZC,EAAe,CAAC,EAChBC,EAAqB,CAAC,EACtBC,EAAc,CAAC,EACfC,EAAgB,CAAC,EACjBC,EAAe,CAAC,EAChBC,EAA2B,CAAC,EAC5BC,EAAkB,CAAC,EACzB,QAAW/C,KAAQC,EAAO,CACtB,GAAM,CAAE,SAAA+C,CAAS,EAAIhD,EACjB,CAACgD,EAAS,gBAAkBA,EAAS,gBACrCT,EAAgB,KAAKvC,CAAI,EACpBA,EAAK,UACN8C,EAAyB,KAAK9C,CAAI,GAGrCgD,EAAS,eACVR,EAAS,KAAKxC,CAAI,GAElBgD,EAAS,eACTA,EAAS,YACTA,EAAS,cACTP,EAAa,KAAKzC,CAAI,EAEtBgD,EAAS,eACTN,EAAmB,KAAK1C,CAAI,EAE5BA,EAAK,UACL2C,EAAY,KAAK3C,CAAI,EAErBgD,EAAS,gBACTJ,EAAc,KAAK5C,CAAI,EAEvBA,EAAK,OACL6C,EAAa,KAAK7C,CAAI,GAEtBgD,EAAS,YAAcA,EAAS,cAChCD,EAAgB,KAAK/C,CAAI,CAEjC,CACA,MAAO,CACH,SAAAwC,EACA,aAAAC,EACA,mBAAAC,EACA,YAAAC,EACA,cAAAC,EACA,aAAAC,EACA,gBAAAN,EACA,yBAAAO,EACA,gBAAAC,EACA,gBAAiBL,EAAmB,OAAS,EAC7C,cAAeL,IAAkB,KAC7BO,EAAc,SAAW3C,EAAM,QAC/B8C,EAAgB,SAAW,EAC/B,aAAc,CAAC,CAACT,GAASO,EAAa,SAAW5C,EAAM,OACvD,YAAasC,EAAgB,SAAW,GACpCI,EAAY,SAAWJ,EAAgB,OAC3C,mBAAoBA,EAAgB,OAAS,EAC7C,YAAatC,EAAM,KAAMD,GAASA,EAAK,OAAO,CAClD,CACJ,CACAiD,GAAeC,EAAQ,CACnB,QAAWZ,KAASY,EACZZ,EAAM,cACN,KAAK,KAAK,qBAAsBA,EAAM,KAAMA,CAAK,EAGjD,KAAK,KAAK,QAASA,EAAOA,EAAM,IAAI,EAExC,KAAK,IAAIA,EAAO,SAAS,EAE7B,IAAMa,EAAmBD,EAAO,OAAQZ,GAAUA,EAAM,YAAY,EAE9Dc,EAAe,EACfC,EAAcF,EAAiB,MAAM,EAAGC,CAAY,EACpDE,EAAmBH,EAAiB,MAAMC,CAAY,EAC5DC,EAAY,QAAQ,CAAC,CAAE,QAAAE,EAAS,QAAAC,EAAU,EAAG,IAAM,CAC/C,KAAK,KAAK,CAAE,QAAAD,EAAS,QAAAC,CAAQ,EAAG,QAAS,KAAK,KAAK,WAAW,CAClE,CAAC,EACGF,EAAiB,OAAS,GAC1B,KAAK,KAAK,CACN,QAAS,KAAK,KAAK,+BAAgC,CAC/C,MAAOA,EAAiB,MAC5B,CAAC,CACL,CAAC,CAET,CACA,qBAAqBtD,EAAMC,EAAQ,KAAK,SAAS,EAAG,CAChD,GAAI,CACA,KAAKX,GAAY,SAASW,EAAO,CAACD,CAAI,CAAC,CAC3C,OACOyD,EAAK,CACR,OAAOA,CACX,CACA,OAAO,IACX,CACA,mBAAmBzD,EAAM,CACrB,GAAI,CACA,KAAKV,GAAY,mBAAmBU,CAAI,CAC5C,OACOyD,EAAK,CACR,OAAOA,EAAI,OACf,CACA,OAAO,IACX,CACA,8BAA8BxD,EAAO,CACjC,IAAMyD,EAAgB,KAAK,SAAS,EACpC,GAAI,CACA,KAAKpE,GAAY,8BAA8BoE,EAAezD,CAAK,CACvE,OACOwD,EAAK,CACR,OAAOA,EAAI,OACf,CACA,OAAO,IACX,CACAE,GAA+B3D,EAAM,CACjC,GAAM,CAAE,cAAA4D,EAAe,MAAAtB,CAAM,EAAI,KAAKhD,GAAY,6BAA6BU,CAAI,EACnF,OAAI4D,EAAc,OAAS,GACvB,KAAK,aAAa5D,EAAK,GAAI,CACvB,0BAA2B4D,EAC3B,MAAOtB,EAAM,OACjB,CAAC,EACD,KAAK,IAAIA,EAAM,OAAO,EACtB,KAAK,KAAK,qBAAsBtC,EAAMsC,CAAK,EACpC,KAEPsB,EAAc,SAAW,GAAK5D,EAAK,2BACnC,KAAK,aAAaA,EAAK,GAAI,CACvB,0BAA2B,CAAC,CAChC,CAAC,EAEE,GACX,CACA6D,GAAyB5D,EAAO,CAC5B,IAAI6D,EAAU,GACd,QAAW9D,KAAQ,OAAO,OAAOC,CAAK,EAC7B,KAAK0D,GAA+B3D,CAAI,IACzC8D,EAAU,IAGlB,OAAOA,CACX,CACAC,GAAwB/D,EAAM,CAC1B,GAAM,CAAE,eAAAgE,CAAe,EAAI,KAAK,SAAS,EACzC,GAAIA,IAAmB,GAAO,CAC1B,IAAM1B,EAAQ,IAAI2B,GAAiB,KAAK,KAAK,oBAAoB,EAAG,CAChE,KAAAjE,CACJ,CAAC,EACD,WAAKiD,GAAe,CAACX,CAAK,CAAC,EACrBA,CACV,CACJ,CACA,yBAAyBnB,EAAQ,CAC7B,GAAM,CAAE,MAAAlB,CAAM,EAAI,KAAK,SAAS,EAChC,MAAI,GAAAA,EAAMkB,CAAM,GAAK,CAAClB,EAAMkB,CAAM,EAAE,QAIxC,CAIA+C,GAAeC,EAAsB,CAIjC,IAAMnE,EAAOmE,aAAgC,KACvC,CACE,KAAMA,EAAqB,KAC3B,KAAMA,EAAqB,KAC3B,KAAMA,EAAqB,KAC3B,KAAMA,EACN,KAAM,CAAC,EACP,SAAU,GACV,OAAQ,OACR,QAAS,MACb,EACEA,EACAC,EAAWC,GAAYrE,CAAI,EAC3BsE,EAAWC,GAAYH,EAAUpE,CAAI,EACrCwE,EAAgBC,GAAwBH,CAAQ,EAAE,UAClDnC,EAAKuC,GAAc1E,EAAM,KAAK,MAAM,CAAC,EACrC2E,EAAO,CACT,GAAG3E,EAAK,KACR,KAAMsE,EACN,KAAMF,CACV,EAEMQ,EAAO,OAAO,SAAS5E,EAAK,KAAK,IAAI,EAAIA,EAAK,KAAK,KAAO,KAChE,MAAO,CACH,OAAQA,EAAK,QAAU,GACvB,GAAAmC,EACA,KAAMmC,EACN,UAAWE,GAAiB,GAC5B,KAAM,CACF,GAAG,KAAK,SAAS,EAAE,KACnB,GAAGG,CACP,EACA,KAAMP,EACN,SAAU,CACN,WAAY,EACZ,cAAe,GACf,WAAYQ,EACZ,eAAgB,GAChB,cAAe,IACnB,EACA,KAAAA,EACA,QAAS,GACT,GAAI5E,EAAK,SACH,CACE,SAAU,GACV,OAAQA,EAAK,OACb,KAAMA,EAAK,IACf,EACE,CACE,SAAU,GACV,KAAMA,EAAK,IACf,EACJ,QAASA,EAAK,OAClB,CACJ,CAEA6E,IAAsB,CACd,KAAK,KAAK,aAAe,CAAC,KAAK,uBAC/B,KAAK,qBAAuB,WAAW,IAAM,CACzC,KAAK,qBAAuB,KAC5B,KAAK,OAAO,EAAE,MAAOpB,GAAQ,CACpBA,EAAI,eACL,KAAK,IAAIA,EAAI,OAASA,EAAI,SAAWA,CAAG,CAEhD,CAAC,CACL,EAAG,CAAC,EAEZ,CACAqB,GAAyBC,EAAY,CACjC,GAAI,CAAE,MAAOrB,CAAc,EAAI,KAAK,SAAS,EAEzCsB,EAAiB,CAAE,GAAGtB,CAAc,EAClCuB,EAAkB,CAAC,EACnB/B,EAAS,CAAC,EAChB,QAAWgC,KAAaH,EACpB,GAAI,CACA,IAAII,EAAU,KAAKjB,GAAegB,CAAS,EAC3C,KAAKnB,GAAwBoB,CAAO,EAKpC,IAAMC,EAAe1B,EAAcyB,EAAQ,EAAE,EACvCE,EAAUD,GAAc,QAC9B,GAAIC,GAAW,CAACF,EAAQ,SAAU,CAC9B,GAAIA,EAAQ,MAAQ,KAChB,MAAM,IAAI,MAAM,sBAAsB,EAC1CA,EAAU,CACN,GAAGC,EACH,QAAS,GACT,KAAMD,EAAQ,IAClB,EACA,KAAK,IAAI,iDAAiDA,EAAQ,IAAI,KAAKA,EAAQ,EAAE,EAAE,CAC3F,CACA,IAAMG,EAA0B,KAAK,KAAK,kBAAkBH,EAASH,CAAc,EAInF,GAFAtB,EAAgB,KAAK,SAAS,EAAE,MAChCsB,EAAiB,CAAE,GAAGtB,EAAe,GAAGsB,CAAe,EACnD,CAACM,GACD,KAAK,yBAAyBH,EAAQ,EAAE,EACxC,MAAM,IAAIlB,GAAiB,KAAK,KAAK,eAAgB,CACjD,SAAUkB,EAAQ,MAAQ,KAAK,KAAK,SAAS,CACjD,CAAC,EAAG,CAAE,KAAMA,CAAQ,CAAC,EAGzB,GAAIG,IAA4B,IAAS,CAACD,EAEtC,MAAM,IAAIpB,GAAiB,gEAAiE,CAAE,aAAc,GAAO,KAAMkB,CAAQ,CAAC,EAE7H,OAAOG,GAA4B,UACxCA,IAA4B,OAC5BH,EAAUG,GAEd,KAAKhG,GAAY,mBAAmB6F,CAAO,EAE3CH,EAAeG,EAAQ,EAAE,EAAIA,EAC7BF,EAAgB,KAAKE,CAAO,CAChC,OACO1B,EAAK,CACRP,EAAO,KAAKO,CAAG,CACnB,CAEJ,GAAI,CAGA,KAAKnE,GAAY,8BAA8B,OAAO,OAAOoE,CAAa,EAAGuB,CAAe,CAChG,OACOxB,EAAK,CACR,OAAAP,EAAO,KAAKO,CAAG,EAER,CACH,eAAgBC,EAChB,gBAAiB,CAAC,EAClB,OAAAR,CACJ,CACJ,CACA,MAAO,CACH,eAAA8B,EACA,gBAAAC,EACA,OAAA/B,CACJ,CACJ,CAMA,QAAQlD,EAAM,CACV,GAAM,CAAE,eAAAgF,EAAgB,gBAAAC,EAAiB,OAAA/B,CAAO,EAAI,KAAK4B,GAAyB,CAAC9E,CAAI,CAAC,EAClFuF,EAAoBrC,EAAO,OAAQZ,GAAUA,EAAM,aAAa,EAEtE,GADA,KAAKW,GAAesC,CAAiB,EACjCrC,EAAO,OAAS,EAChB,MAAMA,EAAO,CAAC,EAClB,KAAK,SAAS,CAAE,MAAO8B,CAAe,CAAC,EACvC,GAAM,CAACQ,CAAmB,EAAIP,EAC9B,YAAK,KAAK,aAAcO,CAAmB,EAC3C,KAAK,KAAK,cAAeP,CAAe,EACxC,KAAK,IAAI,eAAeO,EAAoB,IAAI,KAAKA,EAAoB,EAAE,gBAAgBA,EAAoB,IAAI,EAAE,EACrH,KAAKX,GAAoB,EAClBW,EAAoB,EAC/B,CAQA,SAASC,EAAiB,CACtB,GAAM,CAAE,eAAAT,EAAgB,gBAAAC,EAAiB,OAAA/B,CAAO,EAAI,KAAK4B,GAAyBW,CAAe,EAC3FF,EAAoBrC,EAAO,OAAQZ,GAAUA,EAAM,aAAa,EACtE,KAAKW,GAAesC,CAAiB,EACrC,IAAMG,EAAuBxC,EAAO,OAAQZ,GAAU,CAACA,EAAM,aAAa,EAC1E,GAAIoD,EAAqB,OAAS,EAAG,CACjC,IAAInC,EAAU;AAAA,EAUd,GATAmC,EAAqB,QAASC,GAAa,CACvCpC,GAAW;AAAA,KAAQoC,EAAS,OAAO,EACvC,CAAC,EACD,KAAK,KAAK,CACN,QAAS,KAAK,KAAK,qBAAsB,CACrC,YAAaD,EAAqB,MACtC,CAAC,EACD,QAASnC,CACb,EAAG,QAAS,KAAK,KAAK,WAAW,EAC7B,OAAO,gBAAmB,WAC1B,MAAM,IAAI,eAAemC,EAAsBnC,CAAO,EAErD,CACD,IAAME,EAAM,IAAI,MAAMF,CAAO,EAE7B,MAAAE,EAAI,OAASiC,EACPjC,CACV,CACJ,CAEA,KAAK,SAAS,CAAE,MAAOuB,CAAe,CAAC,EACvCC,EAAgB,QAASjF,GAAS,CAC9B,KAAK,KAAK,aAAcA,CAAI,CAChC,CAAC,EACD,KAAK,KAAK,cAAeiF,CAAe,EACpCA,EAAgB,OAAS,EACzB,KAAK,IAAI,kBAAkBA,EAAgB,MAAM,QAAQ,EAGzD,OAAO,OAAOA,CAAe,EAAE,QAASjF,GAAS,CAC7C,KAAK,IAAI,eAAeA,EAAK,IAAI;AAAA,OAAUA,EAAK,EAAE;AAAA,SAAYA,EAAK,IAAI,EAAE,CAC7E,CAAC,EAEDiF,EAAgB,OAAS,GACzB,KAAKJ,GAAoB,CAEjC,CACA,YAAYe,EAAS,CACjB,GAAM,CAAE,MAAA3F,EAAO,eAAA4B,CAAe,EAAI,KAAK,SAAS,EAC1CF,EAAe,CAAE,GAAG1B,CAAM,EAC1B4F,EAAiB,CAAE,GAAGhE,CAAe,EACrCiE,EAAe,OAAO,OAAO,IAAI,EACvCF,EAAQ,QAASzE,GAAW,CACpBlB,EAAMkB,CAAM,IACZ2E,EAAa3E,CAAM,EAAIlB,EAAMkB,CAAM,EACnC,OAAOQ,EAAaR,CAAM,EAElC,CAAC,EAED,SAAS4E,EAAiBC,EAAc,CACpC,OAAOF,EAAaE,CAAY,IAAM,MAC1C,CAFS7G,EAAA4G,EAAA,oBAGT,OAAO,KAAKF,CAAc,EAAE,QAASI,GAAa,CAC9C,IAAMC,EAAarE,EAAeoE,CAAQ,EAAE,QAAQ,OAAOF,CAAgB,EAE3E,GAAIG,EAAW,SAAW,EAAG,CACzB,OAAOL,EAAeI,CAAQ,EAC9B,MACJ,CACA,GAAM,CAAE,aAAArE,CAAa,EAAI,KAAK,SAAS,EACvC,GAAIsE,EAAW,SAAWrE,EAAeoE,CAAQ,EAAE,QAAQ,QACvD,CAACrE,EAAa,uBACd,MAAM,IAAI,MAAM,+EAA+E,EAEnGiE,EAAeI,CAAQ,EAAI,CACvB,GAAGpE,EAAeoE,CAAQ,EAC1B,QAASC,CACb,CACJ,CAAC,EACD,IAAMC,EAAc,CAChB,eAAgBN,EAChB,MAAOlE,CACX,EAGI,OAAO,KAAKA,CAAY,EAAE,SAAW,IACrCwE,EAAY,eAAiB,GAC7BA,EAAY,MAAQ,KACpBA,EAAY,eAAiB,MAEjC,KAAK,SAASA,CAAW,EACzB,KAAKC,GAA8B,EACnC,IAAMC,EAAiB,OAAO,KAAKP,CAAY,EAC/CO,EAAe,QAASlF,GAAW,CAC/B,KAAK,KAAK,eAAgB2E,EAAa3E,CAAM,CAAC,CAClD,CAAC,EACGkF,EAAe,OAAS,EACxB,KAAK,IAAI,WAAWA,EAAe,MAAM,QAAQ,EAGjD,KAAK,IAAI,kBAAkBA,EAAe,KAAK,IAAI,CAAC,EAAE,CAE9D,CACA,WAAWlF,EAAQ,CACf,KAAK,YAAY,CAACA,CAAM,CAAC,CAC7B,CACA,YAAYA,EAAQ,CAChB,GAAI,CAAC,KAAK,SAAS,EAAE,aAAa,kBAC9B,KAAK,QAAQA,CAAM,EAAE,SAAS,eAC9B,OAEJ,IAAMnB,EAAO,KAAK,QAAQmB,CAAM,EAE1BmF,EAAW,EADCtG,EAAK,UAAY,IAEnC,YAAK,aAAamB,EAAQ,CACtB,SAAAmF,CACJ,CAAC,EACD,KAAK,KAAK,eAAgBtG,EAAMsG,CAAQ,EACjCA,CACX,CACA,UAAW,CACP,IAAM3E,EAAe,CAAE,GAAG,KAAK,SAAS,EAAE,KAAM,EACjB,OAAO,KAAKA,CAAY,EAAE,OAAQ3B,GACrD,CAAC2B,EAAa3B,CAAI,EAAE,SAAS,gBACjC2B,EAAa3B,CAAI,EAAE,SAAS,aACnC,EACsB,QAASA,GAAS,CACrC,IAAMuG,EAAc,CAAE,GAAG5E,EAAa3B,CAAI,EAAG,SAAU,EAAK,EAC5D2B,EAAa3B,CAAI,EAAIuG,CACzB,CAAC,EACD,KAAK,SAAS,CAAE,MAAO5E,CAAa,CAAC,EACrC,KAAK,KAAK,WAAW,CACzB,CACA,WAAY,CACR,IAAMA,EAAe,CAAE,GAAG,KAAK,SAAS,EAAE,KAAM,EACjB,OAAO,KAAKA,CAAY,EAAE,OAAQ3B,GACrD,CAAC2B,EAAa3B,CAAI,EAAE,SAAS,gBACjC2B,EAAa3B,CAAI,EAAE,SAAS,aACnC,EACsB,QAASA,GAAS,CACrC,IAAMuG,EAAc,CAChB,GAAG5E,EAAa3B,CAAI,EACpB,SAAU,GACV,MAAO,IACX,EACA2B,EAAa3B,CAAI,EAAIuG,CACzB,CAAC,EACD,KAAK,SAAS,CAAE,MAAO5E,CAAa,CAAC,EACrC,KAAK,KAAK,YAAY,CAC1B,CACA6E,IAAmB,CACf,GAAM,CAAE,MAAAvG,CAAM,EAAI,KAAK,SAAS,EAChC,OAAO,OAAO,KAAKA,CAAK,EAAE,OAAQwG,GAAW,CACzC,IAAMzG,EAAOC,EAAMwG,CAAM,EAEzB,OAAQzG,EAAK,QACR,CAACA,EAAK,2BACHA,EAAK,0BAA0B,SAAW,EACtD,CAAC,CACL,CACA,KAAM0G,IAAc,CAChB,IAAMC,EAAe,KAAKH,GAAiB,EACrC7E,EAAe,CAAE,GAAG,KAAK,SAAS,EAAE,KAAM,EAahD,GAZAgF,EAAa,QAASxF,GAAW,CAC7BQ,EAAaR,CAAM,EAAI,CACnB,GAAGQ,EAAaR,CAAM,EACtB,SAAU,GACV,MAAO,IACX,CACJ,CAAC,EACD,KAAK,SAAS,CACV,MAAOQ,EACP,MAAO,IACX,CAAC,EACD,KAAK,KAAK,YAAa,KAAK,cAAcgF,CAAY,CAAC,EACnDA,EAAa,SAAW,EACxB,MAAO,CACH,WAAY,CAAC,EACb,OAAQ,CAAC,CACb,EAEJ,IAAMV,EAAW,KAAKW,GAAcD,EAAc,CAC9C,oBAAqB,EACzB,CAAC,EACD,OAAO,KAAKE,GAAWZ,CAAQ,CACnC,CACA,MAAM,UAAW,CACb,IAAMa,EAAS,MAAM,KAAKJ,GAAY,EACtC,YAAK,KAAK,WAAYI,CAAM,EACrBA,CACX,CACA,WAAY,CACR,KAAK,KAAK,YAAY,EACtB,GAAM,CAAE,MAAA7G,CAAM,EAAI,KAAK,SAAS,EAC1B2F,EAAU,OAAO,KAAK3F,CAAK,EAC7B2F,EAAQ,QACR,KAAK,YAAYA,CAAO,EAE5B,KAAK,SAAS5G,EAAkB,CACpC,CAIA,YAAYmC,EAAQ,CAChB,KAAK,aAAaA,EAAQ,CACtB,MAAO,KACP,SAAU,EACd,CAAC,EACD,KAAK,KAAK,eAAgB,KAAK,QAAQA,CAAM,CAAC,EAC9C,IAAM8E,EAAW,KAAKW,GAAc,CAACzF,CAAM,EAAG,CAC1C,oBAAqB,EACzB,CAAC,EACD,OAAO,KAAK0F,GAAWZ,CAAQ,CACnC,CACA,QAAS,CACL,KAAK,eAAgBjF,GAAW,CAE5BA,EAAO,UAAU,SAAS,CAC9B,CAAC,CACL,CACA+F,GAAwB5H,EAAA,CAACa,EAAMgD,IAAa,CACxC,IAAMgE,EAAchH,EAAO,KAAK,QAAQA,EAAK,EAAE,EAAI,OACnD,GAAIA,GAAQ,MAAQ,CAACgH,EAAa,CAC9B,KAAK,IAAI,0DAA0DhH,GAAM,EAAE,EAAE,EAC7E,MACJ,CACA,GAAIgH,EAAY,SAAS,aAAe,IAAK,CACzC,KAAK,IAAI,mEAAmEhH,EAAK,EAAE,EAAE,EACrF,MACJ,CACA,IAAMiH,EAAc,CAChB,WAAYjE,EAAS,WAErB,WAAYA,EAAS,YAAc,MAC/B,OAAO,SAASA,EAAS,UAAU,GACnCA,EAAS,WAAa,EACpB,KAAK,MAAOA,EAAS,cAAgBA,EAAS,WAAc,GAAG,EAC/D,MACV,EACIgE,EAAY,SAAS,eAAiB,KACtC,KAAK,aAAahH,EAAK,GAAI,CACvB,SAAU,CACN,GAAGgH,EAAY,SACf,GAAGC,EACH,cAAejE,EAAS,aAC5B,CACJ,CAAC,EAGD,KAAK,aAAahD,EAAK,GAAI,CACvB,SAAU,CACN,GAAGgH,EAAY,SACf,GAAGC,CACP,CACJ,CAAC,EAEL,KAAKb,GAA8B,CACvC,EArCwB,yBAsCxBc,IAAuB,CACnB,IAAM7E,EAAgB,KAAK8E,GAAwB,EAC/CC,EAAuB,KACvB/E,GAAiB,OACjB+E,EAAuB,KAAK,MAAM/E,EAAgB,GAAG,EACjD+E,EAAuB,IACvBA,EAAuB,IAClBA,EAAuB,IAC5BA,EAAuB,IAE/B,KAAK,KAAK,WAAYA,GAAwB,CAAC,EAC/C,KAAK,SAAS,CACV,cAAeA,GAAwB,CAC3C,CAAC,CACL,CAQAhB,MAAgC,GAAAiB,SAAS,IAAM,KAAKH,GAAqB,EAAG,IAAK,CAAE,QAAS,GAAM,SAAU,EAAK,CAAC,EAClH,CAAC,OAAO,IAAI,gCAAgC,CAAC,GAAI,CAC7C,OAAO,KAAKA,GAAqB,CACrC,CACAC,IAA0B,CAKtB,IAAMG,EAFQ,KAAK,SAAS,EAEE,OAAQtH,GAC1BA,EAAK,SAAS,eAClBA,EAAK,SAAS,YACdA,EAAK,SAAS,WACrB,EACD,GAAIsH,EAAgB,SAAW,EAC3B,MAAO,GAEX,GAAIA,EAAgB,MAAOtH,GAASA,EAAK,SAAS,cAAc,EAI5D,MAAO,GAEX,IAAMuH,EAAcpI,EAACa,GAASA,EAAK,SAAS,YAAc,MAAQA,EAAK,SAAS,aAAe,EAA3E,eACdwH,EAAuBF,EAAgB,OAAOC,CAAW,EACzDE,EAAyBH,EAAgB,OAAQtH,GAAS,CAACuH,EAAYvH,CAAI,CAAC,EAClF,GAAIwH,EAAqB,MAAOxH,GAASA,EAAK,SAAS,cAAc,GACjEyH,EAAuB,OAAS,GAChC,CAACA,EAAuB,MAAOzH,GAASA,EAAK,SAAS,cAAc,EAKpE,OAAO,KAEX,IAAM0H,EAAiBF,EAAqB,OAAO,CAACG,EAAK3H,IAAS2H,GAAO3H,EAAK,SAAS,YAAc,GAAI,CAAC,EACpG4H,EAAoBJ,EAAqB,OAAO,CAACG,EAAK3H,IAAS2H,GAAO3H,EAAK,SAAS,eAAiB,GAAI,CAAC,EAChH,OAAO0H,IAAmB,EAAI,EAAIE,EAAoBF,CAC1D,CAKA/G,IAAgB,CAEZ,IAAMkH,EAAe1I,EAAA,CAACmD,EAAOtC,EAAM8H,IAAa,CAC5C,IAAIC,EAAWzF,EAAM,SAAW,gBAC5BA,EAAM,UACNyF,GAAY,IAAIzF,EAAM,OAAO,IAEjC,KAAK,SAAS,CAAE,MAAOyF,CAAS,CAAC,EAC7B/H,GAAQ,MAAQA,EAAK,MAAM,KAAK,SAAS,EAAE,OAC3C,KAAK,aAAaA,EAAK,GAAI,CACvB,MAAO+H,EACP,SAAAD,CACJ,CAAC,CAET,EAZqB,gBAarB,KAAK,GAAG,QAASD,CAAY,EAC7B,KAAK,GAAG,eAAgB,CAAC7H,EAAMsC,EAAOwF,IAAa,CAE/C,GADAD,EAAavF,EAAOtC,EAAM8H,CAAQ,EAC9B,OAAOxF,GAAU,UAAYA,EAAM,QAAS,CAC5C,KAAK,IAAIA,EAAM,QAAS,OAAO,EAC/B,IAAM0F,EAAW,IAAI,MAAM,KAAK,KAAK,iBAAkB,CAAE,KAAMhI,GAAM,MAAQ,EAAG,CAAC,CAAC,EAClFgI,EAAS,aAAe,GACxBA,EAAS,QAAU1F,EAAM,QACrBA,EAAM,UACN0F,EAAS,SAAW,IAAI1F,EAAM,OAAO,IAEzC,KAAKW,GAAe,CAAC+E,CAAQ,CAAC,CAClC,MAEI,KAAK/E,GAAe,CAACX,CAAK,CAAC,CAEnC,CAAC,EACD,IAAI2F,EAAsC,KAC1C,KAAK,GAAG,iBAAkB,CAAC3F,EAAOrC,IAAU,CACxC,GAAM,CAAE,QAAAsD,CAAQ,EAAIjB,EACdkB,EAAUvD,EAAM,IAAKD,GAASA,EAAK,KAAK,IAAI,EAAE,KAAK,IAAI,EACxDiI,IACD,KAAK,KAAK,CAAE,QAAA1E,EAAS,QAAAC,CAAQ,EAAG,UAAW,KAAK,KAAK,WAAW,EAChEyE,EAAsC,WAAW,IAAM,CACnDA,EAAsC,IAC1C,EAAG,KAAK,KAAK,WAAW,GAE5B,KAAK,IAAI,GAAG1E,CAAO,IAAIC,CAAO,GAAG,KAAK,EAAG,SAAS,CACtD,CAAC,EACD,KAAK,GAAG,SAAU,IAAM,CACpB,KAAK,SAAS,CAAE,MAAO,IAAK,CAAC,CACjC,CAAC,EACD,IAAM0E,EAAkB/I,EAACc,GAAU,CAC/B,IAAMkI,EAAgBlI,EAAM,OAAQD,GAAS,CACzC,IAAMoI,EAASpI,GAAQ,MAAQ,KAAK,QAAQA,EAAK,EAAE,EACnD,OAAKoI,GACD,KAAK,IAAI,0DAA0DpI,GAAM,EAAE,EAAE,EAC1EoI,CACX,CAAC,EACKC,EAAa,OAAO,YAAYF,EAAc,IAAKnI,GAAS,CAC9DA,EAAK,GACL,CACI,SAAU,CACN,cAAe,KAAK,IAAI,EACxB,eAAgB,GAChB,cAAe,EACf,WAAYA,EAAK,IACrB,CACJ,CACJ,CAAC,CAAC,EACF,KAAK,gBAAgBqI,CAAU,CACnC,EAnBwB,mBAoBxB,KAAK,GAAG,eAAgBH,CAAe,EACvC,KAAK,GAAG,kBAAmB,KAAKnB,EAAqB,EACrD,KAAK,GAAG,iBAAkB,CAAC/G,EAAMsI,IAAe,CAC5C,GAAItI,GAAQ,MAAQ,CAAC,KAAK,QAAQA,EAAK,EAAE,EAAG,CACxC,KAAK,IAAI,0DAA0DA,GAAM,EAAE,EAAE,EAC7E,MACJ,CACA,IAAMuI,EAAkB,KAAK,QAAQvI,EAAK,EAAE,EAAE,SACxCwI,EAAsB,KAAK5I,GAAgB,KAAO,EACxD,KAAK,aAAaI,EAAK,GAAI,CACvB,SAAU,CACN,GAAGuI,EACH,YAAaC,EACP,CACE,KAAM,eACV,EACE,OACN,eAAgB,GAChB,GAAI,CAACA,GAAuB,CAAE,SAAU,EAAK,EAC7C,WAAY,IACZ,cAAeD,EAAgB,UACnC,EACA,SAAUD,EACV,UAAWA,EAAW,UACtB,SAAU,EACd,CAAC,EAGGtI,EAAK,MAAQ,MACb,KAAK,aAAaA,EAAK,GAAI,CACvB,KAAMsI,EAAW,eAAiBC,EAAgB,UACtD,CAAC,EAEL,KAAKnC,GAA8B,CACvC,CAAC,EACD,KAAK,GAAG,sBAAuB,CAACpG,EAAMgD,IAAa,CAC/C,GAAIhD,GAAQ,MAAQ,CAAC,KAAK,QAAQA,EAAK,EAAE,EAAG,CACxC,KAAK,IAAI,0DAA0DA,GAAM,EAAE,EAAE,EAC7E,MACJ,CACA,KAAK,aAAaA,EAAK,GAAI,CACvB,SAAU,CAAE,GAAG,KAAK,QAAQA,EAAK,EAAE,EAAE,SAAU,WAAYgD,CAAS,CACxE,CAAC,CACL,CAAC,EACD,KAAK,GAAG,sBAAwBhD,GAAS,CACrC,GAAIA,GAAQ,MAAQ,CAAC,KAAK,QAAQA,EAAK,EAAE,EAAG,CACxC,KAAK,IAAI,0DAA0DA,GAAM,EAAE,EAAE,EAC7E,MACJ,CACA,IAAMC,EAAQ,CAAE,GAAG,KAAK,SAAS,EAAE,KAAM,EACzCA,EAAMD,EAAK,EAAE,EAAI,CACb,GAAGC,EAAMD,EAAK,EAAE,EAChB,SAAU,CAAE,GAAGC,EAAMD,EAAK,EAAE,EAAE,QAAS,CAC3C,EACA,OAAOC,EAAMD,EAAK,EAAE,EAAE,SAAS,WAC/B,KAAK,SAAS,CAAE,MAAAC,CAAM,CAAC,CAC3B,CAAC,EACD,KAAK,GAAG,uBAAwB,CAACD,EAAMgD,IAAa,CAChD,GAAIhD,GAAQ,MAAQ,CAAC,KAAK,QAAQA,EAAK,EAAE,EAAG,CACxC,KAAK,IAAI,0DAA0DA,GAAM,EAAE,EAAE,EAC7E,MACJ,CACA,KAAK,aAAaA,EAAK,GAAI,CACvB,SAAU,CACN,GAAG,KAAK,SAAS,EAAE,MAAMA,EAAK,EAAE,EAAE,SAClC,YAAagD,CACjB,CACJ,CAAC,CACL,CAAC,EACD,KAAK,GAAG,uBAAyByF,GAAW,CACxC,IAAMzI,EAAOyI,GAAU,KAAK,QAAQA,EAAO,EAAE,EAC7C,GAAIzI,GAAQ,KAAM,CACd,KAAK,IAAI,0DAA0DyI,GAAQ,EAAE,EAAE,EAC/E,MACJ,CACA,GAAM,CAAE,YAAaC,EAAU,GAAGzB,CAAY,EAAIjH,EAAK,SACvD,KAAK,gBAAgB,CACjB,CAACA,EAAK,EAAE,EAAG,CACP,SAAU,CACN,GAAGiH,EACH,SAAU,EACd,CACJ,CACJ,CAAC,CACL,CAAC,EACD,KAAK,GAAG,WAAY,IAAM,CAEtB,KAAKb,GAA8B,CACvC,CAAC,EAED,KAAK,GAAG,+BAAiCpG,GAAS,CAC1CA,GACA,KAAK2D,GAA+B3D,CAAI,CAEhD,CAAC,EAEG,OAAO,OAAW,KAAe,OAAO,mBACxC,OAAO,iBAAiB,SAAU,KAAK2I,EAAmB,EAC1D,OAAO,iBAAiB,UAAW,KAAKA,EAAmB,EAC3D,WAAW,KAAKA,GAAqB,GAAI,EAEjD,CACA,oBAAqB,CACF,OAAO,UAAU,QAAU,IAOtC,KAAK,KAAK,WAAW,EACjB,KAAK,aACL,KAAK,KAAK,aAAa,EACvB,KAAK,KAAK,KAAK,KAAK,qBAAqB,EAAG,UAAW,GAAI,EAC3D,KAAK,WAAa,MATtB,KAAK,KAAK,YAAY,EACtB,KAAK,KAAK,KAAK,KAAK,sBAAsB,EAAG,QAAS,CAAC,EACvD,KAAK,WAAa,GAU1B,CACAA,GAAsB,KAAK,mBAAmB,KAAK,IAAI,EACvD,OAAQ,CACJ,OAAO,KAAK,KAAK,EACrB,CAIA,IAAIC,KAGD/H,EAAM,CACL,GAAI,OAAO+H,GAAW,WAAY,CAC9B,IAAMC,EAAM,oCAAoCD,IAAW,KAAO,OAAS,OAAOA,CAAM,sEAExF,MAAM,IAAI,UAAUC,CAAG,CAC3B,CAEA,IAAM7H,EAAS,IAAI4H,EAAO,KAAM,GAAG/H,CAAI,EACjCiI,EAAW9H,EAAO,GACxB,GAAI,CAAC8H,EACD,MAAM,IAAI,MAAM,6BAA6B,EAEjD,GAAI,CAAC9H,EAAO,KACR,MAAM,IAAI,MAAM,8BAA8B,EAElD,IAAM+H,EAAsB,KAAK,UAAUD,CAAQ,EACnD,GAAIC,EAAqB,CACrB,IAAMF,EAAM,iCAAiCE,EAAoB,EAAE,qBAC7CD,CAAQ;AAAA,+CAE9B,MAAM,IAAI,MAAMD,CAAG,CACvB,CAEA,OAAID,EAAO,SAEP,KAAK,IAAI,SAASE,CAAQ,KAAKF,EAAO,OAAO,EAAE,EAE/C5H,EAAO,QAAQ,KAAK3B,GACpB,KAAKA,GAAS2B,EAAO,IAAI,EAAE,KAAKA,CAAM,EAGtC,KAAK3B,GAAS2B,EAAO,IAAI,EAAI,CAACA,CAAM,EAExCA,EAAO,QAAQ,EACf,KAAK,KAAK,eAAgBA,CAAM,EACzB,IACX,CACA,UAAUmB,EAAI,CACV,QAAW6G,KAAW,OAAO,OAAO,KAAK3J,EAAQ,EAAG,CAChD,IAAM4J,EAAcD,EAAQ,KAAMhI,GAAWA,EAAO,KAAOmB,CAAE,EAC7D,GAAI8G,GAAe,KACf,OAAOA,CAEf,CAEJ,CACA,CAAC,OAAO,IAAI,uBAAuB,CAAC,EAAEC,EAAM,CACxC,OAAO,KAAK7J,GAAS6J,CAAI,CAC7B,CAKA,eAAeC,EAAQ,CACnB,OAAO,OAAO,KAAK9J,EAAQ,EAAE,KAAK,CAAC,EAAE,QAAQ8J,CAAM,CACvD,CAMA,aAAaC,EAAU,CACnB,KAAK,IAAI,mBAAmBA,EAAS,EAAE,EAAE,EACzC,KAAK,KAAK,gBAAiBA,CAAQ,EAC/BA,EAAS,WACTA,EAAS,UAAU,EAEvB,IAAMC,EAAO,KAAKhK,GAAS+J,EAAS,IAAI,EAIlCE,EAAQD,EAAK,UAAWE,GAASA,EAAK,KAAOH,EAAS,EAAE,EAC1DE,IAAU,IACVD,EAAK,OAAOC,EAAO,CAAC,EAGxB,IAAME,EAAe,CACjB,QAAS,CACL,GAHM,KAAK,SAAS,EAGX,QACT,CAACJ,EAAS,EAAE,EAAG,MACnB,CACJ,EACA,KAAK,SAASI,CAAY,CAC9B,CAIA,SAAU,CACN,KAAK,IAAI,yBAAyB,KAAK,KAAK,EAAE,+CAA+C,EAC7F,KAAK,UAAU,EACf,KAAKjK,GAAkB,EACvB,KAAK,eAAgByB,GAAW,CAC5B,KAAK,aAAaA,CAAM,CAC5B,CAAC,EACG,OAAO,OAAW,KAAe,OAAO,sBACxC,OAAO,oBAAoB,SAAU,KAAK2H,EAAmB,EAC7D,OAAO,oBAAoB,UAAW,KAAKA,EAAmB,EAEtE,CACA,UAAW,CACP,GAAM,CAAE,KAAAc,CAAK,EAAI,KAAK,SAAS,EAC/B,KAAK,SAAS,CAAE,KAAMA,EAAK,MAAM,CAAC,CAAE,CAAC,EACrC,KAAK,KAAK,aAAa,CAC3B,CAKA,KAAKlG,EAAS2F,EAAO,OAAQQ,EAAW,IAAM,CAC1C,IAAMC,EAAmB,OAAOpG,GAAY,SAC5C,KAAK,SAAS,CACV,KAAM,CACF,GAAG,KAAK,SAAS,EAAE,KACnB,CACI,KAAA2F,EACA,QAASS,EAAmBpG,EAAQ,QAAUA,EAC9C,QAASoG,EAAmBpG,EAAQ,QAAU,IAClD,CACJ,CACJ,CAAC,EACD,WAAW,IAAM,KAAK,SAAS,EAAGmG,CAAQ,EAC1C,KAAK,KAAK,cAAc,CAC5B,CAKA,IAAInG,EAAS2F,EAAM,CACf,GAAM,CAAE,OAAAU,CAAO,EAAI,KAAK,KACxB,OAAQV,EAAM,CACV,IAAK,QACDU,EAAO,MAAMrG,CAAO,EACpB,MACJ,IAAK,UACDqG,EAAO,KAAKrG,CAAO,EACnB,MACJ,QACIqG,EAAO,MAAMrG,CAAO,EACpB,KACR,CACJ,CAWAsG,GAAqB,IAAI,IACzB,sBAAsB1H,EAAI2H,EAAQ,CAC9B,KAAKD,GAAmB,IAAI1H,EAAI2H,CAAM,CAC1C,CAEA,wBAAwB9J,EAAM,CAC1B,GAAI,EAAE,WAAYA,GAAQA,EAAK,QAC3B,MAAM,IAAI,MAAM,oDAAoDA,EAAK,EAAE,EAAE,EACjF,IAAM+J,EAAgB,KAAKF,GAAmB,IAAI7J,EAAK,OAAO,eAAe,EAC7E,GAAI+J,GAAiB,KACjB,MAAM,IAAI,MAAM,oBAAoB/J,EAAK,OAAO,eAAe,8BAA8BA,EAAK,EAAE,GAAG,EAC3G,OAAO+J,CACX,CAIA,MAAM,QAAQ9D,EAAU,CACpB,KAAK,IAAI,kCAAkCA,CAAQ,GAAG,EACtD,IAAMa,EAAS,MAAM,KAAKD,GAAWZ,CAAQ,EAC7C,YAAK,KAAK,WAAYa,CAAM,EACrBA,CACX,CAKAF,GAAchB,EAAS/F,EAAO,CAAC,EAAG,CAE9B,GAAM,CAAE,oBAAAmK,EAAsB,EAAM,EAAInK,EAClC,CAAE,eAAAmE,EAAgB,eAAAnC,CAAe,EAAI,KAAK,SAAS,EACzD,GAAI,CAACmC,GAAkB,CAACgG,EACpB,MAAM,IAAI,MAAM,gDAAgD,EAEpE,IAAM/D,EAAWgE,GAAO,EACxB,YAAK,KAAK,SAAUhE,EAAU,KAAK,cAAcL,CAAO,CAAC,EACzD,KAAK,SAAS,CACV,eAAgB,KAAK,KAAK,6BAA+B,IACrD,KAAK,KAAK,uBAAyB,GACvC,eAAgB,CACZ,GAAG/D,EACH,CAACoE,CAAQ,EAAG,CACR,QAAAL,EACA,KAAM,EACN,OAAQ,CAAC,CACb,CACJ,CACJ,CAAC,EACMK,CACX,CACA,CAAC,OAAO,IAAI,yBAAyB,CAAC,KAAKpF,EAAM,CAE7C,OAAO,KAAK+F,GAAc,GAAG/F,CAAI,CACrC,CACAqJ,GAAWjE,EAAU,CACjB,GAAM,CAAE,eAAApE,CAAe,EAAI,KAAK,SAAS,EACzC,OAAOA,EAAeoE,CAAQ,CAClC,CAIA,cAAcA,EAAUlE,EAAM,CAC1B,GAAI,CAAC,KAAKmI,GAAWjE,CAAQ,EAAG,CAC5B,KAAK,IAAI,2DAA2DA,CAAQ,EAAE,EAC9E,MACJ,CACA,GAAM,CAAE,eAAApE,CAAe,EAAI,KAAK,SAAS,EACnCsI,EAAgB,CAClB,GAAGtI,EAAeoE,CAAQ,EAC1B,OAAQ,CAAE,GAAGpE,EAAeoE,CAAQ,EAAE,OAAQ,GAAGlE,CAAK,CAC1D,EACA,KAAK,SAAS,CACV,eAAgB,CAAE,GAAGF,EAAgB,CAACoE,CAAQ,EAAGkE,CAAc,CACnE,CAAC,CACL,CAKAC,GAAcnE,EAAU,CACpB,GAAM,CAAE,CAACA,CAAQ,EAAGyC,EAAU,GAAG7G,CAAe,EAAI,KAAK,SAAS,EAAE,eACpE,KAAK,SAAS,CACV,eAAAA,CACJ,CAAC,CACL,CAIA,KAAMgF,GAAWZ,EAAU,CACvB,IAAMoE,EAAmBlL,EAAA,IAAM,CAC3B,GAAM,CAAE,eAAA0C,CAAe,EAAI,KAAK,SAAS,EACzC,OAAOA,EAAeoE,CAAQ,CAClC,EAHyB,oBAIrBkE,EAAgBE,EAAiB,EACrC,GAAI,CAACF,EACD,MAAM,IAAI,MAAM,oBAAoB,EAExC,IAAMG,EAAQ,CACV,GAAG,KAAK5K,GACR,GAAG,KAAKC,GACR,GAAG,KAAKC,EACZ,EACA,GAAI,CACA,QAAS2K,EAAOJ,EAAc,MAAQ,EAAGI,EAAOD,EAAM,OAAQC,IAAQ,CAClE,IAAMzI,EAAKwI,EAAMC,CAAI,EACrB,KAAK,SAAS,CACV,eAAgB,CACZ,GAAG,KAAK,SAAS,EAAE,eACnB,CAACtE,CAAQ,EAAG,CACR,GAAGkE,EACH,KAAAI,CACJ,CACJ,CACJ,CAAC,EACD,GAAM,CAAE,QAAA3E,CAAQ,EAAIuE,EAMpB,GAHA,MAAMrI,EAAG8D,EAASK,CAAQ,EAE1BkE,EAAgBE,EAAiB,EAC7B,CAACF,EACD,KAER,CACJ,OACO1G,EAAK,CACR,WAAK2G,GAAcnE,CAAQ,EACrBxC,CACV,CAEA,GAAI0G,EAAe,CAWfA,EAAc,QAAQ,QAAShJ,GAAW,CACtC,IAAMnB,EAAO,KAAK,QAAQmB,CAAM,EAC5BnB,GAAM,SAAS,aACf,KAAK,KAAK,uBAAwBA,CAAI,CAE9C,CAAC,EACD,IAAMC,EAAQkK,EAAc,QAAQ,IAAKhJ,GAAW,KAAK,QAAQA,CAAM,CAAC,EAClEqJ,EAAavK,EAAM,OAAQD,GAAS,CAACA,EAAK,KAAK,EAC/CyK,EAASxK,EAAM,OAAQD,GAASA,EAAK,KAAK,EAChD,KAAK,cAAciG,EAAU,CAAE,WAAAuE,EAAY,OAAAC,EAAQ,SAAAxE,CAAS,CAAC,EAE7DkE,EAAgBE,EAAiB,CACrC,CAKA,IAAIvD,EACJ,OAAIqD,IACArD,EAASqD,EAAc,OACvB,KAAKC,GAAcnE,CAAQ,GAE3Ba,GAAU,OACV,KAAK,IAAI,2DAA2Db,CAAQ,EAAE,EAC9Ea,EAAS,CACL,WAAY,CAAC,EACb,OAAQ,CAAC,EACT,SAAAb,CACJ,GAEGa,CACX,CAIA,MAAM,QAAS,CACN,KAAKzH,GAAS,UAAU,QACzB,KAAK,IAAI,oCAAqC,SAAS,EAE3D,GAAI,CAAE,MAAAY,CAAM,EAAI,KAAK,SAAS,EAG9B,GADqB,KAAKuG,GAAiB,EAC1B,OAAS,EAAG,CACzB,IAAMkE,EAAc,MAAM,KAAKhE,GAAY,EAI3C,GAAI,EAHgB,KAAK,SAAS,EAAE,OAAQ1G,GAASA,EAAK,SAAS,eAAiB,IAAI,EACnF,OAAS,GAGV,YAAK,KAAK,WAAY0K,CAAW,EAC1BA,GAIV,CAAE,MAAAzK,CAAM,EAAI,KAAK,SAAS,EAC/B,CAEA,IAAM0K,EAAuB,KAAK,KAAK,eAAe1K,CAAK,EAC3D,GAAI0K,IAAyB,GACzB,MAAM,IAAI,MAAM,+DAA+D,EAE/EA,GAAwB,OAAOA,GAAyB,WACxD1K,EAAQ0K,EAGR,KAAK,SAAS,CACV,MAAA1K,CACJ,CAAC,GAEL,GAAI,CAEA,GADA,KAAKX,GAAY,yBAAyBW,CAAK,EAC3C,CAAC,KAAK4D,GAAyB5D,CAAK,EACpC,MAAM,IAAIgE,GAAiB,KAAK,KAAK,0BAA0B,CAAC,EAEpE,GAAM,CAAE,eAAApC,CAAe,EAAI,KAAK,SAAS,EAEnC+I,EAA0B,OAAO,OAAO/I,CAAc,EAAE,QAASgJ,GAASA,EAAK,OAAO,EACtFC,EAAiB,OAAO,KAAK7K,CAAK,EAAE,OAAQkB,GAAW,CACzD,IAAMnB,EAAO,KAAK,QAAQmB,CAAM,EAEhC,OAAQnB,GACJ,CAACA,EAAK,SAAS,eACf,CAAC4K,EAAwB,SAASzJ,CAAM,CAChD,CAAC,EACK8E,EAAW,KAAKW,GAAckE,CAAc,EAC5ChE,EAAS,MAAM,KAAKD,GAAWZ,CAAQ,EAC7C,YAAK,KAAK,WAAYa,CAAM,EACrBA,CACX,OACOrD,EAAK,CACR,WAAKR,GAAe,CAACQ,CAAG,CAAC,EACnBA,CACV,CACJ,CACJ,EACOsH,GAAQ9L,GM1/Cf,IAAA+L,GAAA,GAAAC,GAAAD,GAAA,cAAAE,GAAA,kBAAAC,GAAA,mBAAAC,GAAA,oBAAAC,GAAA,iBAAAC,KCCA,SAASC,GAAYC,EAAQ,CACzB,OAAOA,EAAO,QAAQ,yBAA0B,MAAM,CAC1D,CAFSC,EAAAF,GAAA,eAGT,SAASG,GAAYC,EAAO,CACxB,GAAI,OAAOA,GAAU,SACjB,OAAO,IAAI,OAAOA,CAAK,EAE3B,GAAIA,aAAiB,OACjB,OAAOA,CAGf,CARSF,EAAAC,GAAA,eASM,SAARE,GAAiCC,EAAuBC,EAAc,CACzE,GAAID,EAAuB,CACvB,IAAME,EAAWN,EAACE,GAAU,CACxB,GAAI,EAAE,OAAOA,GAAU,UAAYD,GAAYC,CAAK,IAChD,EAAEA,aAAiB,QACnB,MAAM,IAAI,UAAU,yEAAyE,CAErG,EALiB,YAMjB,OAAI,MAAM,QAAQE,CAAqB,EACnCA,EAAsB,MAAME,CAAQ,EAGpCA,EAASF,CAAqB,EAE3BA,CACX,CAEA,IAAIG,EAAMF,EACV,MAAI,uBAAuB,KAAKE,CAAG,IAC/BA,EAAM,WAAWF,EAAa,QAAQ,QAAS,EAAE,CAAC,IAEtDE,EAAM,IAAI,IAAIA,CAAG,EAAE,OACnBA,EAAMT,GAAYS,CAAG,EACdA,CACX,CAxBwBP,EAAAG,GAAA,mBAyBjB,SAASK,GAAgBC,EAAQC,EAAe,CAInD,OAHiB,MAAM,QAAQA,CAAa,EACtCA,EAAc,IAAIT,EAAW,EAC7B,CAACA,GAAYS,CAAa,CAAC,GACjB,KAAMC,GAAYA,GAAS,KAAKF,CAAM,GAAKE,GAAS,KAAK,GAAGF,CAAM,GAAG,CAAC,CAC1F,CALgBT,EAAAQ,GAAA,mBCtChB,IAAAI,GAAkB,WCAlB,IAAMC,GAAiB,OAAO,UAAU,SAElCC,GAAUC,EAAAC,GAASH,GAAe,KAAKG,CAAK,IAAM,iBAAxC,WAEVC,GAAgB,IAAI,IAAI,CAC7B,gBACA,kBACA,kDACA,iDACA,cACA,yBACA,eACA,YACD,CAAC,EAEc,SAARC,GAAgCC,EAAO,CAM7C,OALgBA,GACZL,GAAQK,CAAK,GACbA,EAAM,OAAS,aACf,OAAOA,EAAM,SAAY,SAQzBA,EAAM,UAAY,cACdA,EAAM,QAAU,OAGjBF,GAAc,IAAIE,EAAM,OAAO,EAT9B,EAUT,CAjBwBJ,EAAAG,GAAA,kBDZjB,IAAME,GAAN,cAAyB,KAAM,CAHtC,MAGsC,CAAAC,EAAA,mBACrC,YAAYC,EAAS,CACpB,MAAM,EAEFA,aAAmB,OACtB,KAAK,cAAgBA,EACpB,CAAC,QAAAA,CAAO,EAAIA,IAEb,KAAK,cAAgB,IAAI,MAAMA,CAAO,EACtC,KAAK,cAAc,MAAQ,KAAK,OAGjC,KAAK,KAAO,aACZ,KAAK,QAAUA,CAChB,CACD,EAEMC,GAA0BF,EAAA,CAACG,EAAOC,EAAeC,IAAY,CAElE,IAAMC,EAAcD,EAAQ,SAAWD,EAAgB,GAEvD,OAAAD,EAAM,cAAgBC,EACtBD,EAAM,YAAcG,EACbH,CACR,EAPgC,2BAShC,eAAOI,GAA8BC,EAAOH,EAAS,CACpD,OAAO,IAAI,QAAQ,CAACI,EAASC,IAAW,CACvCL,EAAU,CACT,iBAAkB,CAAC,EACnB,QAAS,GACT,YAAaL,EAAA,IAAM,GAAN,eACb,GAAGK,CACJ,EAEA,IAAMM,EAAY,GAAAC,QAAM,UAAUP,CAAO,EAEnCQ,EAAeb,EAAA,IAAM,CAC1BW,EAAU,KAAK,EACfD,EAAOL,EAAQ,QAAQ,MAAM,CAC9B,EAHqB,gBAKjBA,EAAQ,QAAU,CAACA,EAAQ,OAAO,SACrCA,EAAQ,OAAO,iBAAiB,QAASQ,EAAc,CAAC,KAAM,EAAI,CAAC,EAGpE,IAAMC,EAAUd,EAAA,IAAM,CACrBK,EAAQ,QAAQ,oBAAoB,QAASQ,CAAY,EACzDF,EAAU,KAAK,CAChB,EAHgB,WAKhBA,EAAU,QAAQ,MAAMP,GAAiB,CACxC,GAAI,CACH,IAAMW,EAAS,MAAMP,EAAMJ,CAAa,EACxCU,EAAQ,EACRL,EAAQM,CAAM,CACf,OAASZ,EAAO,CACf,GAAI,CACH,GAAI,EAAEA,aAAiB,OACtB,MAAM,IAAI,UAAU,0BAA0BA,CAAK,kCAAkC,EAGtF,GAAIA,aAAiBJ,GACpB,MAAMI,EAAM,cAGb,GAAIA,aAAiB,WAAa,CAACa,GAAeb,CAAK,EACtD,MAAMA,EAYP,GATAD,GAAwBC,EAAOC,EAAeC,CAAO,EAE/C,MAAMA,EAAQ,YAAYF,CAAK,IACpCQ,EAAU,KAAK,EACfD,EAAOP,CAAK,GAGb,MAAME,EAAQ,gBAAgBF,CAAK,EAE/B,CAACQ,EAAU,MAAMR,CAAK,EACzB,MAAMQ,EAAU,UAAU,CAE5B,OAASM,EAAY,CACpBf,GAAwBe,EAAYb,EAAeC,CAAO,EAC1DS,EAAQ,EACRJ,EAAOO,CAAU,CAClB,CACD,CACD,CAAC,CACF,CAAC,CACF,CAhE8BjB,EAAAO,GAAA,UE7B9B,IAAAW,GAAA,CACE,KAAQ,yBACR,YAAe,qFACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,cACb,KAAQ,uDACV,EACA,SAAY,CACV,gBACA,OACA,cACA,YACA,UACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,cACf,oBAAqB,SACrB,UAAW,QACb,EACA,gBAAmB,CACjB,MAAS,UACT,WAAc,SACd,OAAU,QACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,CACF,EClDA,IAAMC,GAAN,cAAwB,KAAM,CAA9B,MAA8B,CAAAC,EAAA,kBAC1B,YACA,aAAc,CACV,MAAM,wBAAwB,EAC9B,KAAK,KAAO,YAGZ,KAAK,YAAc,EACvB,CACJ,EACOC,GAAQF,GCLf,SAASG,GAAWC,EAAK,CACrB,OAAOA,EAAI,QAAQ,MAAO,EAAE,CAChC,CAFSC,EAAAF,GAAA,cAGT,IAAMG,GAAa,GACbC,GAA0B,IAAS,IAC5BC,GAAsB,IAC7BC,GAAN,cAAwB,KAAM,CAX9B,MAW8B,CAAAJ,EAAA,kBAC1B,WACA,YAAY,CAAE,WAAAK,EAAY,QAAAC,CAAS,EAAG,CAClC,MAAMA,CAAO,EACb,KAAK,KAAO,YACZ,KAAK,WAAaD,CACtB,CACJ,EACA,eAAeE,GAAmBC,EAAK,CACnC,GAAIA,EAAI,SAAWL,GACf,MAAM,IAAIM,GAEd,GAAID,EAAI,GACJ,OAAOA,EAAI,KAAK,EAEpB,IAAIE,EAAS,+BAA+BF,EAAI,MAAM,KAAKA,EAAI,UAAU,GACrEG,EACJ,GAAI,CACAA,EAAU,MAAMH,EAAI,KAAK,EACrBG,EAAQ,UACRD,EAAS,GAAGA,CAAM,aAAaC,EAAQ,OAAO,IAC9CA,EAAQ,YACRD,EAAS,GAAGA,CAAM,gBAAgBC,EAAQ,SAAS,GAC3D,OACOC,EAAO,CAEV,MAAM,IAAI,MAAMF,EAAQ,CAAE,MAAAE,CAAM,CAAC,CACrC,CACA,MAAIJ,EAAI,QAAU,KAAOA,EAAI,QAAU,KAAOG,EAAQ,QAC5C,IAAIE,GAAmBF,EAAQ,OAAO,EAE1C,IAAIP,GAAU,CAAE,WAAYI,EAAI,OAAQ,QAASE,CAAO,CAAC,CACnE,CAxBeV,EAAAO,GAAA,sBAyBf,SAASO,GAAmBC,EAAUC,EAAcC,EAAM,CACtD,GAAM,CAAE,SAAAC,EAAU,cAAAC,EAAe,WAAAC,CAAW,EAAIJ,EAC5CE,IACAH,EAAS,KAAK,IAAI,oBAAoBG,CAAQ,EAAE,EAChDH,EAAS,KAAK,KAAK,kBAAmBE,EAAM,CACxC,cAAeA,EAAK,SAAS,eAAiB,EAC9C,cAAAE,EACA,WAAAC,CACJ,CAAC,EAET,CAVSpB,EAAAc,GAAA,sBAWT,IAAqBO,GAArB,KAAmC,CAvDnC,MAuDmC,CAAArB,EAAA,sBAC/B,OAAO,QAAUsB,GAAY,QAC7BC,GACA,KACA,KACA,YAAYC,EAAMC,EAAM,CACpB,KAAK,KAAOD,EACZ,KAAK,KAAOC,EACZ,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAKF,GAAoBE,EAAK,gBAClC,CACA,oBAAoBC,EAAS,CACzB,KAAKH,GAAoBG,CAC7B,CACA,CAAC,OAAO,IAAI,gCAAgC,CAAC,GAAI,CAC7C,OAAO,KAAKH,EAChB,CACA,IAAI,UAAW,CACX,GAAM,CAAE,UAAAI,CAAU,EAAI,KAAK,KAAK,SAAS,EACnCC,EAAO,KAAK,KAAK,aACvB,OAAO9B,GAAW6B,IAAYC,CAAI,EAAID,EAAUC,CAAI,EAAIA,CAAI,CAChE,CACA,MAAM,QAAQC,EAAY,GAAO,CAU7B,MAAO,CACH,GAVmB,CACnB,OAAQ,mBACR,GAAIA,EACE,OACA,CAEE,eAAgB,kBACpB,CACR,EAGI,GAAG,KAAKN,EACZ,CACJ,CACA,kBAAkBf,EAAK,CACnB,GAAM,CAAE,QAAAkB,CAAQ,EAAIlB,EAEdmB,EADQ,KAAK,KAAK,SAAS,EACT,WAAa,CAAC,EAChCC,EAAO,KAAK,KAAK,aAEnBF,EAAQ,IAAI,MAAM,GAAKA,EAAQ,IAAI,MAAM,IAAMC,EAAUC,CAAI,GAC7D,KAAK,KAAK,SAAS,CACf,UAAW,CAAE,GAAGD,EAAW,CAACC,CAAI,EAAGF,EAAQ,IAAI,MAAM,CAAE,CAC3D,CAAC,CAET,CACAI,GAAQ/B,EAAK,CACT,MAAI,kBAAkB,KAAKA,CAAG,EACnBA,EAEJ,GAAG,KAAK,QAAQ,IAAIA,CAAG,EAClC,CACA,MAAM,QAAQ,CAAE,KAAAgC,EAAM,OAAAC,EAAS,MAAO,KAAAC,EAAM,iBAAAC,EAAkB,OAAAC,CAAQ,EAAG,CACrE,GAAI,CACA,IAAMT,EAAU,MAAM,KAAK,QAAQ,CAACO,CAAI,EAClCG,EAAW,MAAMC,GAAsB,KAAKP,GAAQC,CAAI,EAAG,CAC7D,OAAAC,EACA,OAAAG,EACA,QAAAT,EACA,YAAa,KAAK,KAAK,sBAAwB,cAC/C,KAAMO,EAAO,KAAK,UAAUA,CAAI,EAAI,IACxC,CAAC,EACD,OAAKC,GACD,KAAK,kBAAkBE,CAAQ,EAC5B,MAAM7B,GAAmB6B,CAAQ,CAC5C,OACOE,EAAK,CAER,MAAIA,EAAI,aACJA,EAAI,OAAS,sBACbA,EAAI,OAAS,aACPA,EACJ,IAAIC,GAAe,aAAaP,CAAM,IAAI,KAAKF,GAAQC,CAAI,CAAC,GAAI,CAClE,MAAOO,CACX,CAAC,CACL,CACJ,CACA,MAAM,IAAIP,EAAMS,EAAS,CACrB,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,KAAAT,CAAK,CAAC,CAC5C,CACA,MAAM,KAAKA,EAAME,EAAMO,EAAS,CAC5B,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,KAAAT,EAAM,OAAQ,OAAQ,KAAAE,CAAK,CAAC,CAClE,CACA,MAAM,OAAOF,EAAME,EAAMO,EAAS,CAC9B,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,KAAAT,EAAM,OAAQ,SAAU,KAAAE,CAAK,CAAC,CACpE,CASA,MAAM,iBAAiBhB,EAAMwB,EAASD,EAAS,CAC3C,GAAI,CACA,GAAM,CAAE,OAAAL,EAAQ,SAAAO,CAAS,EAAIF,GAAW,CAAC,EACzC,OAAO,MAAMG,GAAO,SAAY,CAE5B,IAAMC,EAAsB,KAAK,KAAK,QAAQ3B,EAAK,EAAE,GAAG,YACxD,GAAI2B,GAAuB,KACvB,YAAK,KAAK,IAAI,mCAAmCA,CAAmB,EAAE,EAC/D,KAAKC,GAAuB,CAC/B,KAAA5B,EACA,MAAOyB,EAAS,EAChB,OAAAP,CACJ,CAAC,EAwBL,IAAMW,EAAc,MAtBYJ,EAAS,EAAE,oBAAoB,SAAUK,IAAS,CAC9E,GAAI,CACA,OAAO,MAAM,KAAKC,GAAoB,GAAGD,CAAI,CACjD,OACOE,EAAU,CAEb,GAAIA,EAAS,YACT,MAAM,IAAIC,GAAWD,CAAQ,EACjC,GAAIA,EAAS,OAAS,KAClB,MAAMA,EACV,IAAMX,EAAMW,EAAS,MACfE,EAAuBnD,EAAA,IAAM,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,EAAE,SAASsC,EAAI,UAAU,GAC/EA,EAAI,YAAc,KACfA,EAAI,YAAc,KAClB,CAAC,CAAC,IAAK,GAAG,EAAE,SAASA,EAAI,UAAU,EAHd,wBAI7B,MAAIA,EAAI,OAAS,aAAe,CAACa,EAAqB,EAC5C,IAAID,GAAWZ,CAAG,EAGtBA,CACV,CACJ,EAAG,CAAE,SAAU,EAAG,CAAC,EAC+B,CAC9C,KAAArB,EACA,SAAUwB,EACV,OAAAN,CACJ,CAAC,EAAE,QAAQA,CAAM,EACjB,GAAK,KAAK,KAAK,QAAQlB,EAAK,EAAE,EAE9B,YAAK,KAAK,aAAaA,EAAK,GAAI,CAAE,YAAA6B,CAAY,CAAC,EACxC,KAAKD,GAAuB,CAC/B,KAAM,KAAK,KAAK,QAAQ5B,EAAK,EAAE,EAC/B,MAAOyB,EAAS,EAChB,OAAAP,CACJ,CAAC,CACL,EAAG,CACC,QAASlC,GACT,OAAAkC,EACA,gBAAiBnC,EAACsC,GAAQ,KAAK,KAAK,IAAI,2BAA2BA,EAAI,OAAO,GAAI,SAAS,EAA1E,kBACrB,CAAC,CACL,OACOA,EAAK,CAGR,GAAIA,EAAI,OAAS,aAEb,OAEJ,WAAK,KAAK,KAAK,eAAgBrB,EAAMqB,CAAG,EAClCA,CACV,CACJ,CACAU,GAAsBhD,EAAA,MAAO,CAAE,KAAAiB,EAAM,SAAAmC,EAAU,OAAAjB,CAAQ,IAAM,CACzD,GAAIlB,EAAK,QAAQ,KAAO,KACpB,MAAM,IAAI,MAAM,oCAAoC,EAMxD,OAJY,MAAM,KAAK,KAAKA,EAAK,OAAO,IAAK,CACzC,GAAGA,EAAK,OAAO,KACf,GAAGmC,CACP,EAAG,CAAE,OAAAjB,CAAO,CAAC,GACF,KACf,EATsB,uBAetB,KAAMU,GAAuB,CAAE,KAAA5B,EAAM,MAAAoC,EAAO,OAAAlB,CAAQ,EAAG,CACnD,IAAImB,EACE,CAAE,aAAAC,CAAa,EAAI,KAAK,KAAK,SAAS,EAC5C,GAAI,CACA,OAAO,MAAM,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC1C,IAAMC,EAAQzC,EAAK,YACbW,EAAO+B,GAAc1C,EAAK,OAAO,YAAY,EAC/C2C,EACAC,EACAC,EACA,CAAE,SAAAC,CAAS,EAAI9C,EACb+C,EAAahE,EAAA,CAACiE,EAAQC,IAAY,CACpC,GAAIN,GAAU,MAAQA,EAAO,aAAeA,EAAO,KAAM,CACrD,KAAK,KAAK,IAAI,gBAAgBK,CAAM,eAAehD,EAAK,EAAE,iCAAiC,OAAO2C,GAAQ,UAAU,CAAC,GAAI,SAAS,EAClI,MACJ,CACAA,EAAO,KAAK,KAAK,UAAU,CACvB,OAAAK,EACA,QAASC,GAAW,CAAC,CACzB,CAAC,CAAC,CACN,EATmB,cAUnB,SAASC,GAAY,CACZZ,EAAa,kBAGdS,EADAD,EACW,QAEA,QAFO,CAG1B,CAPS/D,EAAAmE,EAAA,aAQT,IAAMC,EAAkBpE,EAAA,SAAY,CAC5B6D,GACAA,EAAsB,MAAM,EAChCA,EAAwB,IAAI,gBAC5B,IAAMQ,EAAerE,EAACsC,GAAQ,CAE1B,KAAK,KAAK,aAAarB,EAAK,GAAI,CAAE,YAAa,IAAK,CAAC,EACrD4C,GAAuB,QAAQ,EAC/BJ,EAAOnB,CAAG,CACd,EALqB,gBAOrB,SAASgC,GAAuB,CAC5B,aAAaR,CAAe,EACxB,CAAAC,IAEJD,EAAkB,WAAW,IAAMO,EAAa,IAAI,MAAM,mDAAmD,CAAC,EAAGnE,EAAuB,EAC5I,CALSF,EAAAsE,EAAA,wBAMT,GAAI,CACA,MAAMjB,EACD,oBAAoB,SAAY,CAoEjC,MAAMV,GAnEqB3C,EAAA,SAAY,IAAI,QAAQ,CAACuE,GAAGC,KAAiB,CACpEZ,EAAS,IAAI,UAAU,GAAGhC,CAAI,QAAQ8B,CAAK,EAAE,EAC7CY,EAAqB,EACrBV,EAAO,iBAAiB,QAAS,IAAM,CACnCA,EAAS,OACTY,GAAa,IAAI,MAAM,4BAA4B,CAAC,CACxD,CAAC,EACDZ,EAAO,iBAAiB,QAAUa,IAAU,CACxC,KAAK,KAAK,IAAI,0BAA0B,KAAK,UAAUA,EAAK,CAAC,mBAAoB,SAAS,EAC1Fb,GAAQ,MAAM,CAClB,CAAC,EACDA,EAAO,iBAAiB,OAAQ,IAAM,CAClCO,EAAU,CACd,CAAC,EACDP,EAAO,iBAAiB,UAAYc,IAAM,CACtCJ,EAAqB,EACrB,GAAI,CACA,GAAM,CAAE,OAAAL,GAAQ,QAAAC,EAAQ,EAAI,KAAK,MAAMQ,GAAE,IAAI,EAC7C,OAAQT,GAAQ,CACZ,IAAK,WAAY,CACbnD,GAAmB,KAAMoD,GAAS,KAAK,KAAK,QAAQjD,EAAK,EAAE,CAAC,EAC5D,KACJ,CACA,IAAK,UAAW,CAOZ,IAAM0D,EAAOT,GAAQ,UAAU,aAC/B,KAAK,KAAK,KAAK,iBAAkB,KAAK,KAAK,QAAQjD,EAAK,EAAE,EAAG,CACzD,UAAWiD,GAAQ,IACnB,OAAQA,GAAQ,UAAU,QAAU,IACpC,KAAMS,EACA,KAAK,MAAMA,CAAI,EACf,MACV,CAAC,EACDd,GAAuB,QAAQ,EAC/BL,EAAQ,EACR,KACJ,CACA,IAAK,QAAS,CACV,GAAM,CAAE,QAAAlD,CAAQ,EAAI4D,GAAQ,MAC5B,MAAM,OAAO,OAAO,IAAI,MAAM5D,CAAO,EAAG,CACpC,MAAO4D,GAAQ,KACnB,CAAC,CACL,CACA,QACI,KAAK,KAAK,IAAI,mCAAmCD,EAAM,GAAI,SAAS,CAC5E,CACJ,OACO3B,GAAK,CACR+B,EAAa/B,EAAG,CACpB,CACJ,CAAC,EACD,IAAMsC,GAAc5E,EAAA,IAAM,CACtB,KAAK,KAAK,IAAI,kBAAkBiB,EAAK,EAAE,EAAE,EACzC,aAAa6C,CAAe,EACxBF,GACAA,EAAO,MAAM,EACjBA,EAAS,MACb,EANoB,eAOpBC,EAAsB,OAAO,iBAAiB,QAAS,IAAM,CACzDe,GAAY,CAChB,CAAC,CACL,CAAC,EAlE0B,sBAmEM,CAC7B,QAAS3E,GACT,OAAQ4D,EAAsB,OAC9B,gBAAiB7D,EAAA,IAAM,CACf6D,EAAsB,OAAO,SAEjC,KAAK,KAAK,IAAI,sBAAsB5C,EAAK,EAAE,EAAE,CACjD,EAJiB,kBAKrB,CAAC,CACL,CAAC,EAAE,EACE,QAAQ4C,EAAsB,MAAM,CAC7C,OACOvB,EAAK,CACR,GAAIuB,EAAsB,OAAO,QAC7B,OACJQ,EAAa/B,CAAG,CACpB,CACJ,EAxGwB,mBAyGlBuC,EAAQ7E,EAAC8E,GAAmB,CACzBvB,EAAa,mBAElBQ,EAAWe,EACPlB,GACAO,EAAU,EAClB,EANc,SAORY,EAAe/E,EAACgF,GAAe,CAC5BzB,EAAa,wBAEdyB,EAAW,KAAO/D,EAAK,KAE3B+C,EAAW,QAAQ,EACnBH,GAAuB,QAAQ,EAC/B,KAAK,KAAK,IAAI,UAAU5C,EAAK,EAAE,cAAc,EAC7CuC,EAAQ,EACZ,EATqB,gBAUfyB,EAAcjF,EAAA,IAAM,CACtBgE,EAAW,QAAQ,EACnBH,GAAuB,QAAQ,EAC/B,KAAK,KAAK,IAAI,UAAU5C,EAAK,EAAE,eAAe,EAC9CuC,EAAQ,CACZ,EALoB,eAMd0B,EAAqBlF,EAAA,CAACgF,EAAYF,IAAmB,CACnDE,GAAY,KAAO/D,EAAK,IAE5B4D,EAAMC,CAAc,CACxB,EAJ2B,sBAKrBK,EAAanF,EAAA,IAAM6E,EAAM,EAAI,EAAhB,cACbO,EAAcpF,EAAA,IAAM6E,EAAM,EAAK,EAAjB,eACpB,KAAK,KAAK,GAAG,eAAgBE,CAAY,EACzC,KAAK,KAAK,GAAG,aAAcE,CAAW,EACtC,KAAK,KAAK,GAAG,eAAgBC,CAAkB,EAC/C,KAAK,KAAK,GAAG,YAAaC,CAAU,EACpC,KAAK,KAAK,GAAG,aAAcC,CAAW,EACtC9B,EAAsBtD,EAAA,IAAM,CACxB,KAAK,KAAK,IAAI,eAAgB+E,CAAY,EAC1C,KAAK,KAAK,IAAI,aAAcE,CAAW,EACvC,KAAK,KAAK,IAAI,eAAgBC,CAAkB,EAChD,KAAK,KAAK,IAAI,YAAaC,CAAU,EACrC,KAAK,KAAK,IAAI,aAAcC,CAAW,CAC3C,EANsB,uBAOtBjD,EAAO,iBAAiB,QAAS,IAAM,CACnC0B,GAAuB,MAAM,CACjC,CAAC,EACDO,EAAgB,CACpB,CAAC,CACL,QACA,CAEId,IAAsB,CAC1B,CACJ,CACJ,EClaA,IAAM+B,GAAUC,EAACC,GACNA,EACF,MAAM,GAAG,EACT,IAAKC,GAAMA,EAAE,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAE,MAAM,CAAC,CAAC,EACjD,KAAK,GAAG,EAJD,WAMhB,SAASC,IAAY,CACjB,OAAO,SAAS,MACpB,CAFSH,EAAAG,GAAA,aAGT,IAAqBC,GAArB,cAAsCC,EAAc,CAXpD,MAWoD,CAAAL,EAAA,iBAChDM,GACA,SACA,GACA,KACA,SACA,SACA,oBACA,aACA,qBACA,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,SAAWA,EAAK,SACrB,KAAK,GAAK,KAAK,SACf,KAAK,KAAO,KAAK,KAAK,MAAQT,GAAQ,KAAK,EAAE,EAC7C,KAAK,SAAW,KAAK,KAAK,SAC1B,KAAK,SAAW,aAAa,KAAK,QAAQ,cAC1C,KAAK,oBAAsB,KAAK,KAAK,oBACrC,KAAK,aAAe,KACpB,KAAK,qBAAuB,CAAC,CAACS,EAAK,oBACvC,CACA,MAAM,SAAU,CACZ,GAAM,CAACC,EAASC,CAAK,EAAI,MAAM,QAAQ,IAAI,CACvC,MAAM,QAAQ,EACd,KAAKC,GAAc,CACvB,CAAC,EACKC,EAAc,CAAC,EACrB,OAAIF,IACAE,EAAY,iBAAiB,EAAIF,GAEjC,KAAK,sBACLE,EAAY,yBAAyB,EAAI,KAAK,KAAK,UAAU,CAAE,OAAQ,KAAK,mBAAoB,CAAC,CAAC,GAE/F,CAAE,GAAGH,EAAS,GAAGG,CAAY,CACxC,CACA,kBAAkBC,EAAU,CACxB,MAAM,kBAAkBA,CAAQ,EAChC,IAAMC,EAAS,KAAKC,GAAW,EAEzBC,EADmBF,EAAO,eAAe,EAAE,cAE3CD,EAAS,SAAWI,GACpBJ,EAAS,OAAS,IACxB,OAAAC,EAAO,eAAe,CAAE,cAAAE,CAAc,CAAC,EAChCH,CACX,CACA,MAAM,aAAaH,EAAO,CACtB,OAAO,KAAKK,GAAW,EAAE,QAAQ,QAAQ,KAAK,SAAUL,CAAK,CACjE,CACA,KAAMC,IAAgB,CAClB,OAAO,KAAKI,GAAW,EAAE,QAAQ,QAAQ,KAAK,QAAQ,CAC1D,CACA,MAAM,iBAAkB,CACpB,OAAO,KAAKA,GAAW,EAAE,QAAQ,WAAW,KAAK,QAAQ,CAC7D,CACAA,IAAa,CACT,IAAMD,EAAS,KAAK,KAAK,UAAU,KAAK,QAAQ,EAChD,GAAIA,GAAU,KACV,MAAM,IAAI,MAAM,oBAAoB,EACxC,OAAOA,CACX,CAKA,MAAM,eAAgB,CAClB,GAAI,KAAK,qBAAuB,CAAC,KAAK,eAClC,MAAM,KAAK,kBAAkB,EACzB,CAAC,KAAK,cACN,MAAM,IAAI,MAAM,4FAA4F,CAGxH,CACA,UAAUI,EAAM,CACZ,MAAO,CAAC,CACZ,CACA,QAAQ,CAAE,aAAAC,EAAc,MAAAC,CAAO,EAAG,CAC9B,IAAMC,EAAS,IAAI,gBAAgB,CAC/B,GAAGD,EAEH,MAAO,KAAK,KAAK,UAAU,CAAE,OAAQjB,GAAU,CAAE,CAAC,CAAC,EACnD,GAAG,KAAK,UAAU,CAAE,aAAAgB,CAAa,CAAC,CACtC,CAAC,EACD,OAAI,KAAK,cACLE,EAAO,IAAI,mBAAoB,KAAK,YAAY,EAE7C,GAAG,KAAK,QAAQ,IAAI,KAAK,EAAE,YAAYA,CAAM,EACxD,CACA,MAAM,gBAAgB,CAAE,aAAAC,EAAc,aAAAH,EAAc,OAAAI,CAAQ,EAAG,CAC3D,IAAMV,EAAW,MAAM,KAAK,KAAK,GAAG,KAAK,EAAE,eAAgB,CAAE,KAAMM,CAAa,EAAG,CAAE,GAAI,CAAE,aAAAG,CAAa,EAAG,OAAAC,CAAO,CAAC,EACnH,KAAK,aAAaV,EAAS,aAAa,CAC5C,CACA,MAAM,WAAW,CAAE,aAAAS,EAAc,aAAAH,EAAc,OAAAI,CAAQ,EAAG,CACtD,MAAM,KAAK,cAAc,EACzBA,EAAO,eAAe,EACtB,IAAMC,EAAO,KAAK,QAAQ,CAAE,MAAO,CAAE,aAAAF,CAAa,EAAG,aAAAH,CAAa,CAAC,EAC7DM,EAAa,OAAO,KAAKD,EAAM,QAAQ,EACzCE,EACAC,EACJ,GAAI,CACA,OAAO,MAAM,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC1CF,EAAgB3B,EAAC8B,GAAM,CACnB,GAAIA,EAAE,SAAWL,EAAY,CACzB,IAAIM,EAAW,GACf,GAAI,CAKAA,EAAW,KAAK,UAAUD,EAAE,IAAI,CACpC,MACa,CAEb,CACA,KAAK,KAAK,IAAI,sCAAsCC,CAAQ,GAAI,SAAS,EACzE,MACJ,CACA,GAAM,CAAE,sBAAAC,CAAsB,EAAI,KAAKjB,GAAW,EAAE,KACpD,GAAI,CAACkB,GAAgBH,EAAE,OAAQE,CAAqB,EAAG,CACnD,KAAK,KAAK,IAAI,uBAAuBF,EAAE,MAAM,uBAAuBE,CAAqB,GAAI,SAAS,EAKtG,MACJ,CAGA,IAAMd,EAAO,OAAOY,EAAE,MAAS,SAAW,KAAK,MAAMA,EAAE,IAAI,EAAIA,EAAE,KACjE,GAAIZ,EAAK,MAAO,CACZ,GAAM,CAAE,KAAAX,CAAK,EAAI,KACX2B,EAAU3B,EAAK,KAAK,aAAa,EACvCA,EAAK,KAAK,CAAE,QAAA2B,CAAQ,EAAG,UAAW,GAAI,EACtCL,EAAO,IAAI,MAAM,cAAc,CAAC,EAChC,MACJ,CACA,GAAI,CAACX,EAAK,MAAO,CACbW,EAAO,IAAI,MAAM,wCAAwC,CAAC,EAC1D,MACJ,CACAD,EAAQ,KAAK,aAAaV,EAAK,KAAK,CAAC,CACzC,EAxCgB,iBA0CZO,IACAC,EAAW,OAAO,YAAY,IAAM,CAC5BD,EAAW,QACXI,EAAO,IAAI,MAAM,oCAAoC,CAAC,CAE9D,EAAG,GAAG,GAEVN,EAAO,iBAAiB,QAAS,IAAMM,EAAO,IAAI,MAAM,SAAS,CAAC,CAAC,EACnE,OAAO,iBAAiB,UAAWF,CAAa,CACpD,CAAC,CACL,QACA,CAEIF,GAAY,MAAM,EAClB,OAAO,cAAcC,CAAQ,EACzBC,GACA,OAAO,oBAAoB,UAAWA,CAAa,CAC3D,CACJ,CACA,MAAM,MAAM,CAAE,aAAAL,EAAc,aAAAH,EAAc,OAAAI,CAAQ,EAAG,CACjD,OAAO,KAAK,WAAW,CAAE,aAAAD,EAAc,aAAAH,EAAc,OAAAI,CAAO,CAAC,CACjE,CACA,iBAAkB,CACd,MAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,EAAE,gBACtC,CACA,QAAQtB,EAAI,CACR,MAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,EAAE,QAAQA,CAAE,EAChD,CACA,MAAM,WAAWkC,EAAM,CACnB,MAAM,KAAK7B,GACX,GAAI,CAMA,OAAO,MAAM,MAAM,QAAQ,GAAG6B,CAAI,CACtC,OACOC,EAAK,CACR,GAAI,CAAC,KAAK,qBACN,MAAMA,EAEV,IAAMC,EAAiB,MAAM,KAAK1B,GAAc,EAChD,GAAI,CAACyB,EAAI,aAAe,CAACC,EACrB,MAAMD,EACV,OAAI,KAAK9B,IAA2B,OAGhC,KAAKA,IAA2B,SAAY,CACxC,GAAI,CACA,KAAK,KAAK,IAAI,iDAAiD,EAC/D,IAAMO,EAAW,MAAM,MAAM,QAAQ,CACjC,KAAM,KAAK,gBAAgB,EAC3B,OAAQ,MACZ,CAAC,EACD,MAAM,KAAK,aAAaA,EAAS,aAAa,CAClD,OACOyB,EAAiB,CACpB,MAAIA,EAAgB,aAEhB,MAAM,KAAK,gBAAgB,EAEzBF,CACV,QACA,CACI,KAAK9B,GAA0B,MACnC,CACJ,GAAG,GAEP,MAAM,KAAKA,GAEJ,MAAM,QAAQ,GAAG6B,CAAI,CAChC,CACJ,CACA,MAAM,mBAAoB,CACtB,GAAK,KAAK,oBAGV,GAAI,CACA,IAAMI,EAAM,MAAM,KAAK,KAAK,GAAG,KAAK,EAAE,YAAa,CAC/C,OAAQ,KAAK,mBACjB,CAAC,EACD,KAAK,aAAeA,EAAI,KAC5B,OACOH,EAAK,CACR,KAAK,KAAK,IAAI,kDAAkDA,CAAG,GAAI,SAAS,CACpF,CACJ,CACA,KAAKI,EAAWC,EAAS,CACrB,OAAO,KAAK,IAAI,GAAG,KAAK,EAAE,SAASD,GAAa,EAAE,GAAIC,CAAO,CACjE,CACA,OAAOC,EAAMD,EAAU,CAAC,EAAG,CACvB,IAAME,EAAK,IAAI,gBACfA,EAAG,IAAI,IAAKD,CAAI,EACZD,EAAQ,MACRE,EAAG,IAAI,OAAQF,EAAQ,IAAI,EAC3BA,EAAQ,QACRE,EAAG,IAAI,SAAUF,EAAQ,MAAM,EAEnC,IAAMG,EAAO,GADA,GAAG,KAAK,EAAE,SACH,IAAID,EAAG,SAAS,CAAC,GACrC,OAAO,KAAK,IAAIC,EAAMH,CAAO,CACjC,CACA,MAAM,OAAOA,EAAS,CAClB,IAAM5B,EAAW,MAAM,KAAK,IAAI,GAAG,KAAK,EAAE,UAAW4B,CAAO,EAC5D,aAAM,KAAK,gBAAgB,EACpB5B,CACX,CACJ,ECnQA,IAAMgC,GAAUC,EAACC,GACNA,EACF,MAAM,GAAG,EACT,IAAKC,GAAMA,EAAE,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAE,MAAM,CAAC,CAAC,EACjD,KAAK,GAAG,EAJD,WAMKC,GAArB,cAA4CC,EAAc,CAP1D,MAO0D,CAAAJ,EAAA,uBACtD,SACA,GACA,KACA,SACA,YAAYK,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,SAAWA,EAAK,SACrB,KAAK,GAAK,KAAK,SACf,KAAK,KAAO,KAAK,KAAK,MAAQP,GAAQ,KAAK,EAAE,EAC7C,KAAK,SAAW,KAAK,KAAK,QAC9B,CACA,QAAQE,EAAI,CACR,MAAO,GAAG,KAAK,QAAQ,WAAW,KAAK,EAAE,QAAQA,CAAE,EACvD,CACA,OAAOM,EAAMC,EAAS,CAClB,OAAO,KAAK,IAAI,UAAU,KAAK,EAAE,WAAW,mBAAmBD,CAAI,CAAC,GAAGC,EAAU,IAAIA,CAAO,GAAK,EAAE,EAAE,CACzG,CACJ,ECzBA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,aAAAE,GAAA,eAAAC,GAAA,YAAAC,KAIA,eAAsBC,GAAQC,EAAKC,EAAO,CACtC,aAAa,QAAQD,EAAKC,CAAK,CACnC,CAFsBC,EAAAH,GAAA,WAGtB,eAAsBI,GAAQH,EAAK,CAC/B,OAAO,aAAa,QAAQA,CAAG,CACnC,CAFsBE,EAAAC,GAAA,WAGtB,eAAsBC,GAAWJ,EAAK,CAClC,aAAa,WAAWA,CAAG,CAC/B,CAFsBE,EAAAE,GAAA,cCVtB,IAAAC,GAAA,GAAAC,GAAAD,GAAA,iBAAAE,GAAA,oBAAAC,GAAA,qBAAAC,GAAA,qBAAAC,GAAA,kBAAAC,GAAA,wBAAAC,GAAA,eAAAC,GAAA,cAAAC,GAAA,sBAAAC,GAAA,0BAAAC,GAAA,WAAAC,GAAA,uBAAAC,GAAA,oBAAAC,GAAA,qBAAAC,GAAA,kBAAAC,KCYO,SAASC,GAAcC,EAAU,CACpC,IAAMC,EAASC,GAAaC,GAAO,CAC/BA,EAAG,eAAe,EAClBH,EAAS,CACb,EAAG,CAACA,CAAQ,CAAC,EAGP,CAACI,CAAI,EAAIC,GAAS,IAAM,CAC1B,IAAMC,EAAS,SAAS,cAAc,MAAM,EAC5C,OAAAA,EAAO,aAAa,WAAY,IAAI,EACpCA,EAAO,GAAKC,GAAO,EACZD,CACX,CAAC,EACD,OAAAE,GAAU,KACN,SAAS,KAAK,YAAYJ,CAAI,EAC9BA,EAAK,iBAAiB,SAAUH,CAAM,EAC/B,IAAM,CACTG,EAAK,oBAAoB,SAAUH,CAAM,EACzC,SAAS,KAAK,YAAYG,CAAI,CAClC,GACD,CAACA,EAAMH,CAAM,CAAC,EACV,CAAE,OAAQG,EAAK,EAAG,CAC7B,CAtBgBK,EAAAV,GAAA,iBCNhB,SAASW,GAAY,CAAE,MAAAC,EAAO,SAAAC,EAAU,SAAAC,EAAU,WAAAC,EAAY,KAAAC,CAAM,EAAG,CACnE,GAAM,CAAE,OAAAC,CAAO,EAAIC,GAAcJ,CAAQ,EACzC,OAAQK,EAAM,UAAW,CAAE,UAAW,oCAAqC,SAAU,CAACA,EAAK,QAAS,CAAE,UAAW,sDAAuD,KAAM,SAAU,aAAcJ,EAAY,YAAaA,EAAY,MAAOH,EAAO,QAASQ,EAACC,GAAMR,EAASQ,EAAE,OAAO,KAAK,EAA9B,WAAiC,KAAMJ,EAAQ,4BAA6B,EAAK,CAAC,EAAGE,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,oDAAqD,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,0UAA2U,CAAC,CAAE,CAAC,EAAGP,GAAUO,EAAK,SAAU,CAAE,UAAW,sDAAuD,KAAM,SAAU,aAAcH,EAAK,aAAa,EAAG,QAASI,EAAA,IAAMP,EAAS,EAAE,EAAjB,WAAoB,SAAUM,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,2eAA4e,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAE,CAAC,CACvqD,CAHSC,EAAAT,GAAA,eAIT,IAAOW,GAAQX,GCRf,SAASY,IAAa,CAClB,OAAQC,EAAK,MAAO,CAAE,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,MAAO,6BAA8B,SAAUA,EAAM,IAAK,CAAE,KAAM,OAAQ,YAAa,UAAW,SAAU,CAACA,EAAK,SAAU,CAAE,KAAM,OAAQ,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,wIAAyI,KAAM,UAAW,YAAa,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,iJAAkJ,KAAM,UAAW,YAAa,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,yIAA0I,KAAM,UAAW,YAAa,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,wJAAyJ,KAAM,UAAW,YAAa,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,eAAgB,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CACvlC,CAFSC,EAAAF,GAAA,cAGT,SAASG,GAAY,CAAE,WAAAC,EAAY,KAAAC,EAAM,OAAAC,CAAQ,EAAG,CAGhD,IAAMC,EAAgBH,IAAe,eAC/BI,EAAWC,GAAaC,GAAM,CAChCA,EAAE,eAAe,EACjBJ,EAAO,CACX,EAAG,CAACA,CAAM,CAAC,EACX,OAAQL,EAAK,OAAQ,CAAE,SAAUO,EAAU,SAAUD,EAAiBN,EAAM,SAAU,CAAE,KAAM,SAAU,UAAW,4FAA6F,4BAA6B,GAAM,SAAU,CAACA,EAAKD,GAAY,CAAC,CAAC,EAAGK,EAAK,kBAAkB,CAAC,CAAE,CAAC,EAAMJ,EAAK,SAAU,CAAE,KAAM,SAAU,UAAW,mEAAoE,4BAA6B,GAAM,SAAUI,EAAK,mBAAoB,CAAE,WAAAD,CAAW,CAAC,CAAE,CAAC,CAAG,CAAC,CACpgB,CATSF,EAAAC,GAAA,eAUT,IAAMQ,GAAoBT,EAAA,CAAC,CAAE,WAAAE,EAAY,KAAAC,EAAM,OAAAC,CAAQ,IAAML,EAAKE,GAAa,CAAE,WAAYC,EAAY,KAAMC,EAAM,OAAQC,CAAO,CAAC,EAA3G,qBACX,SAARM,GAA0B,CAAE,QAAAC,EAAS,WAAAT,EAAY,WAAAU,EAAY,KAAAT,EAAM,WAAAU,EAAY,WAAAC,EAAaL,EAAmB,EAAG,CACrH,OAAQV,EAAM,MAAO,CAAE,UAAW,qBAAsB,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,yBAA0B,SAAUa,EAAW,CAAE,CAAC,EAAGb,EAAK,MAAO,CAAE,UAAW,0BAA2B,SAAUI,EAAK,wBAAyB,CAC7N,WAAAD,CACJ,CAAC,CAAE,CAAC,EAAGY,EAAW,CAAE,WAAAZ,EAAY,KAAAC,EAAM,QAAAQ,EAAS,OAAQE,CAAW,CAAC,CAAC,CAAE,CAAC,CACvF,CAJwBb,EAAAU,GAAA,YChBxB,IAAMK,GAAgBC,EAACC,IAAW,CAC9B,cAAe,UAAUA,CAAK,EAClC,GAFsB,iBAGhBC,GAAkB,IAAI,IACxBC,GAAiB,GAErB,eAAeC,GAAaC,EAAK,CACzBH,GAAgB,IAAIG,CAAG,IAE3B,MAAM,IAAI,QAAQ,CAACC,EAASC,IAAW,CACnC,IAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAMH,EACbG,EAAO,iBAAiB,OAAQ,IAAMF,EAAQ,CAAC,EAC/CE,EAAO,iBAAiB,QAAUC,GAAMF,EAAOE,EAAE,KAAK,CAAC,EACvD,SAAS,KAAK,YAAYD,CAAM,CACpC,CAAC,EACDN,GAAgB,IAAIG,CAAG,EAC3B,CAXeL,EAAAI,GAAA,gBAYf,eAAsBM,GAAsBC,EAAY,CACpD,MAAM,QAAQ,IAAI,CACdP,GAAa,wCAAwC,GACpD,SAAY,CACT,MAAMA,GAAa,mCAAmC,EAClDO,IAAe,SAAW,CAACR,KAC3B,MAAM,IAAI,QAASG,GAAY,KAAK,KAAK,gBAAiB,IAAMA,EAAQ,CAAC,CAAC,EAC1E,MAAM,KAAK,OAAO,KAAK,4DAA4D,EACnFH,GAAiB,GAEzB,GAAG,CACP,CAAC,CACL,CAZsBH,EAAAU,GAAA,yBAatB,eAAeE,GAAaC,EAAaC,EAAQ,CAE7C,MAAI,GADa,MAAM,MAAM,+DAA+D,mBAAmBD,CAAW,CAAC,GAAI,CAAE,OAAAC,CAAO,CAAC,GAC5H,EAMjB,CARed,EAAAY,GAAA,gBASf,eAAsBG,GAAU,CAAE,WAAAJ,EAAY,SAAAK,EAAU,YAAAH,CAAa,EAAG,CACpE,IAAMI,EAAW,MAAM,IAAI,QAAQ,CAACX,EAASC,IAAW,CACpD,IAAMW,EAASP,IAAe,QACxB,CAAC,4CAA4C,EAC7C,CAAC,kEAAkE,EACnEQ,EAAc,OAAO,SAAS,OAAO,gBAAgB,CACvD,UAAWH,EAEX,MAAOE,EAAO,KAAK,GAAG,EACtB,SAAUZ,EACV,eAAgBC,CACpB,CAAC,EACGM,IAAgB,KAGhBM,EAAY,mBAAmB,CAAE,OAAQ,SAAU,CAAC,EAIpDA,EAAY,mBAAmB,CAAE,OAAQ,EAAG,CAAC,CAErD,CAAC,EACD,GAAIF,EAAS,MACT,MAAM,IAAI,MAAM,iBAAiBA,EAAS,KAAK,EAAE,EAErD,OAAOA,EAAS,YACpB,CA1BsBjB,EAAAe,GAAA,aA2BtB,eAAsBK,GAAOP,EAAa,CACtC,MAAM,IAAI,QAASP,GAAY,OAAO,SAAS,OAAO,OAAOO,EAAaP,CAAO,CAAC,CACtF,CAFsBN,EAAAoB,GAAA,UAGf,IAAMC,GAAN,cAAgC,KAAM,CAtE7C,MAsE6C,CAAArB,EAAA,0BACzC,aAAc,CACV,MAAM,0BAA0B,EAChC,KAAK,KAAO,mBAChB,CACJ,EACA,eAAsBsB,GAAgB,CAAE,MAAArB,EAAO,OAAAsB,EAAQ,MAAAC,EAAO,cAAAC,EAAe,OAAAX,EAAQ,gBAAAY,EAAiB,QAAAC,CAAS,EAAG,CAG9G,GAAI,CAAE,MAAMf,GAAaX,EAAOa,CAAM,EAClC,MAAM,IAAIO,GAEd,eAAeO,EAA2B,CAAE,IAAAC,EAAK,MAAA5B,EAAO,OAAAa,CAAQ,EAAG,CAC/D,GAAIe,EAAI,WAAa,uCACjB,OAAIA,EAAI,iBAAiB,iBACrB,qCAGO,CAAC,EAGL,CACH,CACI,SAAU,QACV,GAAIA,EAAI,GACR,KAAMA,EAAI,KACV,SAAUA,EAAI,QAClB,CACJ,EAEJ,GAAIA,EAAI,WAAa,qCACjB,MAAO,CACH,CACI,SAAU,QACV,GAAIA,EAAI,GACR,KAAMA,EAAI,KACV,SAAUA,EAAI,QAClB,CACJ,EAEJ,IAAMC,EAAU/B,GAAcE,CAAK,EAC7B8B,EAAQ,CAAC,EACXC,EACJ,EAAG,CACC,IAAMC,EAAS,IAAI,gBAAgB,CAC/B,EAAG,IAAIJ,EAAI,GAAG,QAAQ,KAAM,KAAK,CAAC,mCAClC,OAAQ,4EACR,0BAA2B,OAC3B,kBAAmB,OACnB,SAAU,OACV,GAAIG,GAAa,CAAE,UAAAA,CAAU,CACjC,CAAC,EACKE,EAAM,MAAM,MAAM,6CAA6CD,EAAO,SAAS,CAAC,GAAI,CAAE,QAAAH,EAAS,OAAAhB,CAAO,CAAC,EAC7G,GAAI,CAACoB,EAAI,GACL,MAAM,IAAI,MAAM,uCAAuCL,EAAI,IAAI,MAAMA,EAAI,EAAE,MAAMK,EAAI,MAAM,IAAIA,EAAI,UAAU,EAAE,EAEnH,IAAMC,EAAO,MAAMD,EAAI,KAAK,EAC5BF,EAAYG,EAAK,cACjB,QAAWC,KAAQD,EAAK,MACpBJ,EAAM,KAAK,GAAI,MAAMH,EAA2B,CAAE,IAAKQ,EAAM,MAAAnC,EAAO,OAAAa,CAAO,CAAC,CAAE,CAEtF,OAASkB,GACT,OAAOD,CACX,CAnDe/B,EAAA4B,EAAA,8BAoDf,IAAMS,EAAWrC,EAAA,MAAOsC,GAAW,CAC/B,GAAIA,EAAO,SAAW,OAAO,OAAO,OAAO,OAE3C,GAAI,CACAZ,EAAgB,EAAI,EACpB,IAAMa,EAAU,CAAC,EACjB,QAAWV,KAAOS,EAAO,KACrBC,EAAQ,KAAK,GAAI,MAAMX,EAA2B,CAAE,IAAAC,EAAK,MAAA5B,EAAO,OAAAa,CAAO,CAAC,CAAE,EAE9EW,EAAcc,EAAStC,CAAK,CAChC,OACOuC,EAAK,CACRb,EAAQa,CAAG,CACf,QACA,CACId,EAAgB,EAAK,CACzB,CACJ,EAjBiB,YAkBXe,EAAS,IAAI,OAAO,OAAO,cAAc,EAC1C,cAAc,OAAO,OAAO,QAAQ,UAAU,EAC9C,cAAc,OAAO,OAAO,QAAQ,mBAAmB,EACvD,gBAAgBlB,CAAM,EACtB,SAASC,CAAK,EACd,cAAcvB,CAAK,EACnB,QAAQ,IAAI,OAAO,OAAO,SAAS,OAAO,OAAO,OAAO,IAAI,EAC5D,kBAAkB,EAAI,EAGtB,uBAAuB,EAAI,EAC3B,QAAQ,OAAO,OAAO,aAAa,IAAI,CAAC,EAIxC,YAAYoC,CAAQ,EACpB,MAAM,EACXI,EAAO,WAAW,EAAI,EACtB3B,GAAQ,iBAAiB,QAAS,IAAM2B,EAAO,QAAQ,CAAC,CAC5D,CA/FsBzC,EAAAsB,GAAA,mBAgGtB,eAAsBoB,GAAiB,CAAE,MAAAzC,EAAO,eAAA0C,EAAgB,uBAAAC,EAAwB,OAAA9B,CAAQ,EAAG,CAE/F,IAAMgB,EAAU/B,GAAcE,CAAK,EAC/B4C,EAAoBF,EACxB,GAAIE,GAAqB,KAAM,CAC3B,IAAMC,EAAwB,MAAM,MAAM,kDAAmD,CAAE,OAAQ,OAAQ,QAAAhB,EAAS,OAAAhB,CAAO,CAAC,EAChI,GAAIgC,EAAsB,SAAW,MACpB,MAAMA,EAAsB,KAAK,GACrC,OAAO,SAAW,kBACvB,MAAM,IAAIzB,GAGlB,GAAI,CAACyB,EAAsB,GACvB,MAAM,IAAI,MAAM,4BAA4B,EAEhDD,EAAqB,MAAMC,EAAsB,KAAK,EACtDF,EAAuBC,CAAiB,CAC5C,CACA,IAAME,EAAI,OAAO,KAAKF,EAAkB,SAAS,EACjD/B,GAAQ,iBAAiB,QAAS,IAAMiC,GAAG,MAAM,CAAC,CACtD,CApBsB/C,EAAA0C,GAAA,oBAqBtB,eAAeM,GAAoB,CAAE,YAAAnC,EAAa,eAAA8B,EAAgB,OAAA7B,CAAQ,EAAG,CACzE,IAAMgB,EAAU/B,GAAcc,CAAW,EACrCmB,EACAiB,EAAa,CAAC,EAClB,EAAG,CAEC,IAAMhC,EAAW,MAAM,MAAM,qDAAqD,IAAI,gBAAgB,CAAE,UAAW0B,EAAe,GAAI,SAAU,OAAO,GAAQ,EAAG,GAAIX,GAAa,CAAE,UAAAA,CAAU,CAAG,CAAC,EAAE,SAAS,CAAC,GAAI,CAAE,QAAAF,EAAS,OAAAhB,CAAO,CAAC,EACtO,GAAI,CAACG,EAAS,GACV,MAAM,IAAI,MAAM,6BAA6B,EACjD,GAAM,CAAE,WAAYiC,EAAiB,cAAAC,CAAe,EAAI,MAAMlC,EAAS,KAAK,EAC5Ee,EAAYmB,EACZF,EAAW,KAAK,GAAGC,CAAe,CACtC,OAASlB,GAET,OAAAiB,EAAaA,EAAW,QAASG,GAAMA,EAAE,OAAS,SAC7CA,EAAE,OAAS,SACRA,EAAE,UAAU,kBAAkB,cAAc,mBAAqB,QACnE,CAACA,CAAC,EACF,CAAC,CAAC,EAEDH,EAAW,IAAKI,GAAc,CACjC,GAAM,CAAE,GAAAC,EAAI,KAAAC,EAAM,UAAW,CAAE,SAAAC,EAAU,SAAAC,EAAU,QAAAC,CAAQ,CAAG,EAAIL,EAClE,MAAO,CACH,SAAU,SACV,GAAAC,EACA,SAAAE,EAGA,IAAKD,IAAS,QAAU,GAAGG,CAAO,MAAQ,GAAGA,CAAO,KACpD,KAAMD,EACN,SAAU,CAGN,qBAAsBJ,EAAU,KAChC,WAAYA,EAAU,WACtB,MAAOA,EAAU,UAAU,kBAAkB,MAC7C,OAAQA,EAAU,UAAU,kBAAkB,OAC9C,GAAIA,EAAU,OAAS,SAAW,CAC9B,WAAYA,EAAU,UAAU,kBAAkB,eAAe,WACjE,YAAaA,EAAU,UAAU,kBAAkB,eAAe,YAClE,YAAaA,EAAU,UAAU,kBAAkB,eAAe,YAClE,gBAAiBA,EAAU,UAAU,kBAAkB,eACjD,gBACN,cAAeA,EAAU,UAAU,kBAAkB,eAAe,cACpE,aAAcA,EAAU,UAAU,kBAAkB,eAAe,YACvE,EACA,GAAIA,EAAU,OAAS,SAAW,CAC9B,WAAYA,EAAU,UAAU,kBAAkB,cAAc,WAChE,YAAaA,EAAU,UAAU,kBAAkB,cAAc,YACjE,IAAKA,EAAU,UAAU,kBAAkB,cAAc,IACzD,iBAAkBA,EAAU,UAAU,kBAAkB,cACnD,gBACT,CACJ,CACJ,CACJ,CAAC,CACL,CAxDerD,EAAAgD,GAAA,uBAyDf,eAAsBW,GAAmB,CAAE,kBAAAC,EAAmB,eAAAC,EAAgB,OAAA/C,EAAQ,cAAAW,EAAe,QAAAE,CAAS,EAAG,CAK7G,QAASmC,EAAW,IAChB,GAAI,CACIF,EAAkB,SAAW,KAC7BE,EAAW,WAAWF,EAAkB,QAAQ,cAAc,YAAY,EAG1EE,EAAW,EAEf,MAAM,QAAQ,KAAK,CACf,IAAI,QAASxD,GAAY,WAAWA,EAASwD,EAAW,GAAI,CAAC,EAC7D,IAAI,QAAQ,CAACC,EAAUxD,IAAW,CAC9BO,EAAO,iBAAiB,QAASP,CAAM,CAC3C,CAAC,CACL,CAAC,EACDO,EAAO,eAAe,EACtB,IAAMD,EAAcgD,EAAe,QAC7BlB,EAAiBiB,EAAkB,QACzC,GAAIjB,GAAkB,MAAQ9B,GAAe,KAAM,CAC/C,IAAMiB,EAAU/B,GAAcc,CAAW,EAEnCI,EAAW,MAAM,MAAM,mDAAmD,mBAAmB0B,EAAe,EAAE,CAAC,GAAI,CAAE,QAAAb,EAAS,OAAAhB,CAAO,CAAC,EAC5I,GAAI,CAACG,EAAS,GACV,MAAM,IAAI,MAAM,uBAAuB,EAE3C,IADa,MAAMA,EAAS,KAAK,GACxB,cAAe,CAEpB,IAAM+C,EAAiB,MAAMhB,GAAoB,CAC7C,YAAAnC,EACA,eAAA8B,EACA,OAAA7B,CACJ,CAAC,EACD8C,EAAkB,QAAU,OAC5BnC,EAAcuC,EAAgBnD,CAAW,CAC7C,CACI8B,EAAe,cAAc,YAAc,OAC3CiB,EAAkB,QAAU,OAEpC,CACJ,OACOpB,EAAK,CACR,GAAIA,aAAe,OAASA,EAAI,OAAS,aACrC,OAGJb,EAAQa,CAAG,CACf,CAER,CApDsBxC,EAAA2D,GAAA,sBCzPf,IAAMM,GAAmBC,EAAA,IAAOC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,cAAe,SAAUA,EAAM,IAAK,CAAE,KAAM,OAAQ,YAAa,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,iBAAkB,CAAC,EAAGA,EAAM,IAAK,CAAE,YAAa,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,KAAM,UAAW,EAAG,2FAA4F,CAAC,EAAGA,EAAK,OAAQ,CAAE,KAAM,UAAW,EAAG,0FAA2F,CAAC,EAAGA,EAAK,OAAQ,CAAE,KAAM,UAAW,EAAG,6FAA8F,CAAC,EAAGA,EAAK,OAAQ,CAAE,KAAM,UAAW,EAAG,4FAA6F,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAAzyB,oBACnBC,GAAkBF,EAAA,IAAOC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,SAAU,UAAW,KAAM,OAAQ,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,mGAAoG,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,oGAAqG,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,2HAA4H,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,4FAA6F,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,0GAA2G,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,wHAAyH,KAAM,SAAU,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAApiC,mBCG/B,SAASE,GAASC,EAAOC,EAAK,CAC1B,GAAM,CAACC,EAAOC,CAAa,EAAIC,GAAS,EACxCC,GAAU,IAAM,EAEX,SACGF,EAAc,MAAMH,EAAM,QAAQC,CAAG,CAAC,IAE9C,EAAG,CAACA,EAAKD,CAAK,CAAC,EACf,IAAMM,EAAWC,GAAY,MAAOC,IAChCL,EAAcK,CAAC,EACXA,GAAK,KACER,EAAM,WAAWC,CAAG,EAExBD,EAAM,QAAQC,EAAKO,CAAC,GAC5B,CAACP,EAAKD,CAAK,CAAC,EACf,MAAO,CAACE,EAAOI,CAAQ,CAC3B,CAhBSG,EAAAV,GAAA,YAiBM,SAARW,GAAkC,CAAE,KAAAC,EAAM,KAAAC,EAAM,SAAAC,EAAU,cAAAC,EAAe,WAAAC,EAAY,OAAAC,EAAQ,MAAAC,EAAO,QAAAC,CAAS,EAAG,CACnH,GAAM,CAACC,EAASC,CAAU,EAAIhB,GAAS,EAAK,EACtC,CAACiB,EAAaC,CAAoB,EAAIvB,GAASmB,EAAS,eAAeH,CAAU,qBAAqB,EACtGQ,EAAoBC,GAAO,EAC3BC,EAAiBD,GAAOH,CAAW,EACnCK,EAAiBF,GAAO,EAAK,EAC7BG,EAAiBpB,GAAaqB,GAAM,CACtCjB,EAAK,IAAI,sBAAsB,EAC/BW,EAAqBM,CAAC,EACtBH,EAAe,QAAUG,CAC7B,EAAG,CAACN,EAAsBX,CAAI,CAAC,EAE/BN,GAAU,IAAM,CACZoB,EAAe,QAAUJ,CAC7B,EAAG,CAACA,CAAW,CAAC,EAChB,IAAMQ,EAAatB,GAAY,MAAOuB,GAAW,CAC7C,IAAIC,EAAiBV,EACfW,EAAevB,EAAA,MAAOwB,GAAU,CAClC,GAAIlB,IAAe,QACf,MAAMmB,GAAgB,CAClB,MAAAD,EACA,OAAAjB,EACA,MAAAC,EACA,cAAAH,EACA,OAAAgB,EACA,gBAAiBrB,EAAC0B,GAAcf,EAAWe,CAAS,EAAnC,mBACjB,QAAS1B,EAAC2B,GAAQ,CACdzB,EAAK,IAAIyB,CAAG,EACZzB,EAAK,KAAKC,EAAK,kBAAkB,EAAG,OAAO,CAC/C,EAHS,UAIb,CAAC,MAEA,CAED,IAAMyB,EAAyB5B,EAAC6B,GAAsB,CAClDf,EAAkB,QAAUe,CAChC,EAF+B,0BAG/B,MAAMC,GAAiB,CACnB,MAAAN,EACA,eAAgBV,EAAkB,QAClC,uBAAAc,EACA,OAAAP,CACJ,CAAC,CACL,CACJ,EA3BqB,gBA4BrBV,EAAW,EAAI,EACf,GAAI,CACA,GAAI,CAKA,GAJA,MAAMoB,GAAsBzB,CAAU,EAClCgB,GAAkB,OAClBA,EAAiB,MAAMU,GAAU,CAAE,SAAA5B,EAAU,WAAAE,CAAW,CAAC,GAEzDgB,GAAkB,KAClB,MAAM,IAAI,MACd,MAAMC,EAAaD,CAAc,EACjCL,EAAe,QAAU,GACzBC,EAAeI,CAAc,CACjC,OACOK,EAAK,CACR,GAAIA,aAAeM,GACf/B,EAAK,IAAI,+CAA+C,EACxDoB,EAAiB,MAAMU,GAAU,CAC7B,WAAA1B,EACA,YAAagB,EACb,SAAAlB,CACJ,CAAC,EAED,MAAMmB,EAAaD,CAAc,EACjCL,EAAe,QAAU,GACzBC,EAAeI,CAAc,MAG7B,OAAMK,CAEd,CACJ,OACOA,EAAK,CACJA,aAAe,OACf,SAAUA,GACVA,EAAI,OAAS,iBAIbT,EAAe,IAAI,EACnBhB,EAAK,IAAIyB,CAAG,EAEpB,QACA,CACIhB,EAAW,EAAK,CACpB,CACJ,EAAG,CACCC,EACAL,EACAC,EACAJ,EACAC,EACAC,EACAY,EACAhB,EACAC,CACJ,CAAC,EACDP,GAAU,IAAM,CACZ,IAAMsC,EAAkB,IAAI,gBAC5B,OAAAC,GAAmB,CACf,kBAAArB,EACA,eAAAE,EACA,OAAQkB,EAAgB,OACxB,cAAA7B,EACA,QAASL,EAAC2B,GAAQzB,EAAK,IAAIyB,CAAG,EAArB,UACb,CAAC,EACM,IAAMO,EAAgB,MAAM,CACvC,EAAG,CAAC7B,EAAeH,CAAI,CAAC,EACxBN,GAAU,IAAM,CAGZ,GAAIgB,IAAgB,QAAaK,EAAe,QAC5C,OAEJ,IAAMiB,EAAkB,IAAI,gBAC5B,OAAAd,EAAWc,EAAgB,MAAM,EAC1B,IAAM,CAEJjB,EAAe,SAChBiB,EAAgB,MAAM,CAC9B,CACJ,EAAG,CAACtB,EAAaQ,CAAU,CAAC,EAC5B,IAAMgB,EAAoBtC,GAAY,SAAY,CAC1Cc,IACA,MAAMyB,GAAOzB,CAAW,EACxBM,EAAe,IAAI,EACnBJ,EAAkB,QAAU,OAEpC,EAAG,CAACF,EAAaM,CAAc,CAAC,EAChC,OAAIR,EACO4B,EAAM,MAAO,CAAE,SAAU,CAACnC,EAAK,YAAY,EAAG,KAAK,CAAE,CAAC,EAE7DS,GAAe,KACP0B,EAAKC,GAAU,CAAE,WACfpC,EAD2BG,IAAe,QACrC,8BACA,8BAD6B,EACI,WAAYA,IAAe,QAAUkC,GAAkBC,GAAkB,WAAYrB,EAAY,KAAMjB,EAAM,QAASO,CAAQ,CAAC,EAE3K4B,EAAM,MAAO,CAAE,MAAO,CAAE,UAAW,QAAS,EAAG,SAAU,CAACA,EAAK,SAAU,CAAE,KAAM,SAAU,UAAW,6CAA8C,MAAO,CAAE,QAAS,QAAS,aAAc,KAAM,EAAG,SAAU5B,EAAS,QAASV,EAAA,IAAMoB,EAAW,EAAjB,WAAoB,SAAmCjB,EAAzBG,IAAe,QAAe,YAAoB,YAAT,CAAuB,CAAC,EAAGgC,EAAK,SAAU,CAAE,KAAM,SAAU,UAAW,0BAA2B,SAAU5B,EAAS,QAAS0B,EAAmB,SAAUjC,EAAK,QAAQ,CAAE,CAAC,CAAC,CAAE,CAAC,CACpe,CA9IwBH,EAAAC,GAAA,oBCpBxB,IAAAyC,GAAuB,WACvBC,GAAqB,WCHrB,IAAAC,GAAA,CACE,KAAQ,uBACR,YAAe,iDACf,QAAW,QACX,QAAW,MACX,MAAS,qBACT,KAAQ,SACR,YAAe,CACb,OACF,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,cACb,KAAQ,uDACV,EACA,SAAY,CACV,gBACA,MACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,sBAAuB,uBACvB,kBAAmB,mBACnB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,cACf,WAAc,SACd,OAAU,WACV,OAAU,SACV,UAAW,SACX,OAAU,WACZ,EACA,gBAAmB,CACjB,cAAe,UACf,yBAA0B,UAC1B,uBAAwB,UACxB,QAAW,SACX,MAAS,UACT,QAAW,SACX,cAAe,UACf,KAAQ,UACR,WAAc,SACd,OAAU,QACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,CACF,EC/DA,IAAAC,GAAuB,WCAvB,SAASC,IAAW,CAChB,OAAQC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,GAAI,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,mrBAAorB,CAAC,CAAE,CAAC,CACl2B,CAFSC,EAAAF,GAAA,YAGT,SAASG,IAAa,CAClB,OAAQF,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,CAAE,SAAU,GAAI,YAAa,CAAE,EAAG,QAAS,sBAAuB,SAAUA,EAAK,OAAQ,CAAE,EAAG,uhCAAwhC,CAAC,CAAE,CAAC,CAChuC,CAFSC,EAAAC,GAAA,cAGT,SAASC,IAAY,CACjB,OAAQH,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,CAAE,MAAO,GAAI,YAAa,CAAE,EAAG,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,sKAAuK,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,0NAA2N,CAAC,CAAC,CAAE,CAAC,CAC5jB,CAFSC,EAAAE,GAAA,aAGM,SAARC,GAA0B,CAAE,eAAAC,EAAgB,IAAAC,EAAM,MAAW,EAAG,CACnE,GAAID,IAAmB,KACnB,OAAO,KACX,OAAQA,EAAgB,CACpB,IAAK,OACD,OAAOL,EAAKD,GAAU,CAAC,CAAC,EAC5B,IAAK,SACD,OAAOC,EAAKE,GAAY,CAAC,CAAC,EAC9B,IAAK,QACD,OAAOF,EAAKG,GAAW,CAAC,CAAC,EAC7B,QACI,OAAQH,EAAK,MAAO,CAAE,IAAKK,EAAgB,IAAKC,EAAK,eAAgB,cAAe,QAAS,OAAQ,MAAO,GAAI,OAAQ,EAAG,CAAC,CAEpI,CACJ,CAdwBL,EAAAG,GAAA,YCRxB,SAASG,GAAS,CAAE,KAAAC,EAAM,eAAAC,EAAgB,UAAAC,EAAW,WAAAC,EAAY,iBAAAC,EAAkB,WAAAC,EAAY,SAAAC,EAAW,KAAM,KAAAC,CAAM,EAAG,CACrH,OAAQC,EAAM,KAAM,CAAE,UAAWN,EAAW,MAAOC,GAAcC,EAAmBA,EAAmB,OAAW,SAAU,CAACI,EAAK,QAAS,CAAE,KAAM,WAAY,UAAW,yFAA0F,SAAUP,EAAgB,KAAM,WAAY,GAAID,EAAK,GAAI,QAASA,EAAK,SAAW,UAAW,SAAUG,EAAY,4BAA6B,EAAK,CAAC,EAAGK,EAAM,QAAS,CAAE,QAASR,EAAK,GAAI,aAAcA,EAAK,KAAK,MAAQO,EAAK,SAAS,EAAG,UAAW,8CAA+C,SAAU,CAACC,EAAKC,GAAU,CAAE,eAAgBT,EAAK,KAAK,WAAaA,EAAK,KAAK,IAAK,CAAC,EAAGK,IAAeL,EAAK,KAAK,MAAQO,EAAK,SAAS,GAAID,CAAQ,CAAE,CAAC,CAAC,CAAE,CAAC,CACvsB,CAFSI,EAAAX,GAAA,YAGT,IAAOY,GAAQZ,GCHA,SAARa,GAA0B,CAAE,KAAAC,EAAM,WAAAC,EAAY,UAAAC,EAAW,WAAAC,EAAY,iBAAAC,EAAkB,eAAAC,EAAgB,WAAAC,EAAY,KAAAC,CAAM,EAAG,CAC/H,OAAQC,EAAM,KAAM,CAAE,UAAWN,EAAW,MAAOF,EAAK,SAAW,WAAaI,EACtEA,EACA,OAAW,SAAU,CAACI,EAAK,QAAS,CAAE,KAAM,WAAY,UAAW,iDAAkD,SAAUH,EAE7H,KAAM,WAAY,GAAIL,EAAK,GAAI,QAASA,EAAK,SAAW,UAAW,aAAcA,EAAK,KAAK,SACrFO,EAAK,0BAA2B,CAC9B,KAAMP,EAAK,KAAK,MAAQO,EAAK,SAAS,CAC1C,CAAC,EACC,KAAM,SAAUJ,EAAY,4BAA6B,EAAK,CAAC,EAAGH,EAAK,KAAK,SAEtFQ,EAAM,SAAU,CAAE,KAAM,SAAU,UAAW,yDAA0D,QAASC,EAAA,IAAMR,EAAWD,EAAK,EAAE,EAAxB,WAA2B,aAAcO,EAAK,kBAAmB,CACzK,KAAMP,EAAK,KAAK,MAAQO,EAAK,SAAS,CAC1C,CAAC,EAAG,SAAU,CAACC,EAAK,MAAO,CAAE,UAAW,oCAAqC,SAAUA,EAAKE,GAAU,CAAE,eAAgBV,EAAK,KAAK,IAAK,CAAC,CAAE,CAAC,EAAGM,GAAcN,EAAK,KAAK,KAAQQ,EAAK,OAAQ,CAAE,UAAW,qBAAsB,SAAUR,EAAK,KAAK,IAAK,CAAC,EAAMO,EAAK,SAAS,CAAE,CAAE,CAAC,EAErRC,EAAM,QAAS,CAAE,QAASR,EAAK,GAAI,UAAW,8CAA+C,SAAU,CAACQ,EAAK,MAAO,CAAE,UAAW,oCAAqC,SAAUA,EAAKE,GAAU,CAAE,eAAgBV,EAAK,KAAK,IAAK,CAAC,CAAE,CAAC,EAAGM,GAAeE,EAAK,OAAQ,CAAE,UAAW,qBAAsB,SAAUR,EAAK,KAAK,MAAQO,EAAK,SAAS,CAAE,CAAC,CAAE,CAAE,CAAC,CAAE,CAAE,CAAC,CACzW,CAhBwBE,EAAAV,GAAA,YHET,SAARY,GAAsBC,EAAO,CAChC,GAAM,CAAE,SAAAC,EAAU,eAAAC,EAAgB,WAAAC,EAAY,KAAAC,EAAM,WAAAC,EAAY,KAAAC,EAAM,UAAAC,CAAW,EAAIP,EAC/EQ,EAAmBF,EAAK,OAAS,SAAW,KAAOA,EAAK,iBACxDG,EAAa,CAAC,CAACD,GAAoBF,EAAK,SAAW,UACnDI,EAAW,CACb,KAAAJ,EACA,WAAAD,EACA,eAAAH,EACA,UAAAK,EACA,KAAAH,EACA,SAAAH,EACA,WAAAE,EACA,aAAW,GAAAQ,SAAW,2BAA4B,CAAE,qCAAsCF,CAAW,EAAG,CAAE,sCAAuCH,EAAK,KAAK,OAAS,OAAQ,EAAG,CAAE,uCAAwCA,EAAK,SAAW,SAAU,EAAG,CAAE,uCAAwCA,EAAK,SAAW,SAAU,CAAC,EAC3T,WAAAG,EACA,iBAAAD,CACJ,EACA,OAAQP,EAAU,CACd,IAAK,OACD,OAAOW,EAAKC,GAAU,CAAE,GAAGH,CAAS,CAAC,EACzC,IAAK,OACD,OAAOE,EAAKE,GAAU,CAAE,GAAGJ,CAAS,CAAC,EACzC,IAAK,WACD,OAAQE,EAAKC,GAAU,CAAE,GAAGH,EAAU,SAAUE,EAAK,IAAK,CAAE,KAAM,GAAGN,EAAK,KAAK,OAAO,GAAG,eAAeC,CAAS,uBAAwB,OAAQ,SAAU,IAAK,sBAAuB,UAAW,kCAAmC,SAAU,GAAI,SAAUD,EAAK,KAAK,OAAO,IAAK,CAAC,CAAE,CAAC,EAC3R,QACI,MAAM,IAAI,MAAM,yBAAyBL,CAAQ,EAAE,CAC3D,CACJ,CA1BwBc,EAAAhB,GAAA,QIAxB,SAASiB,GAAQC,EAAO,CACpB,GAAM,CAAE,qBAAAC,EAAsB,SAAAC,EAAU,eAAAC,EAAgB,aAAAC,EAAc,WAAAC,EAAY,KAAAC,EAAM,UAAAC,EAAW,WAAAC,EAAY,eAAAC,EAAgB,YAAAC,EAAa,UAAAC,CAAW,EAAIX,EACrJ,CAACY,EAAmBC,CAAoB,EAAIC,GAAS,EAAK,EAqBhE,GAhBAC,GAAU,IAAM,CACZ,IAAMC,EAAcC,EAACC,GAAM,CACnBA,EAAE,MAAQ,SACVL,EAAqB,EAAK,CAClC,EAHoB,eAIdM,EAAgBF,EAACC,GAAM,CACrBA,EAAE,MAAQ,SACVL,EAAqB,EAAI,CACjC,EAHsB,iBAItB,gBAAS,iBAAiB,QAASG,CAAW,EAC9C,SAAS,iBAAiB,UAAWG,CAAa,EAC3C,IAAM,CACT,SAAS,oBAAoB,QAASH,CAAW,EACjD,SAAS,oBAAoB,UAAWG,CAAa,CACzD,CACJ,EAAG,CAAC,CAAC,EACDZ,EACA,OAAQa,EAAK,MAAO,CAAE,UAAW,wBAAyB,SAAU,OAAOb,GAAc,SAAWA,EAAYD,EAAK,SAAS,CAAE,CAAC,EAErI,GAAIL,EAAqB,SAAW,EAChC,OAAOmB,EAAK,MAAO,CAAE,UAAW,sBAAuB,SAAUX,CAAe,CAAC,EAErF,IAAMY,EAAaJ,EAACK,GAAUF,EAAKG,GAAM,CAAE,SAAUrB,EAAU,eAAgBe,EAACO,GAAU,CAClFA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EAGrB,SAAS,aAAa,GAAG,gBAAgB,EACzCrB,EAAemB,EAAMV,CAAiB,CAC1C,EAP2E,kBAOxE,WAAYP,EAAY,KAAMC,EAAM,WAAYE,EAAY,KAAMc,EAAM,UAAWX,CAAU,EAAGW,EAAK,EAAE,EAP3F,cASnB,OAAIZ,EACQU,EAAK,MAAO,CAAE,UAAW,4BAA6B,SAAUA,EAAKK,GAAa,CAAE,UAAW,4BAA6B,KAAMxB,EAAsB,UAAWoB,EAAY,UAAW,IAAK,CAAC,CAAE,CAAC,EAEvMD,EAAK,MAAO,CAAE,UAAW,4BAA6B,SAAUA,EAAK,KAAM,CAAE,UAAW,4BAA6B,SAAUhB,EAE/H,SAAU,GAAI,SAAUH,EAAqB,IAAIoB,CAAU,CAAE,CAAC,CAAE,CAAC,CAC7E,CA5CSJ,EAAAlB,GAAA,WA6CT,IAAO2B,GAAQ3B,GChDf,IAAA4B,GAAuB,WCKvB,IAAMC,GAA2BC,EAACC,GACRA,EAAY,OAAQC,GAClCA,EAAK,OAAS,QAAUA,EAAK,SAAW,UACjC,GAEPA,EAAK,OAAS,UAAYA,EAAK,SAAW,UAEnC,CADoBD,EAAY,KAAME,GAAMA,EAAE,OAAS,QAAUA,EAAE,WAAaD,EAAK,EAAE,EAG3F,EACV,EACoB,OAXQ,4BAa1BE,GAAQL,GDfA,SAARM,GAA+B,CAAE,gBAAAC,EAAiB,YAAAC,EAAa,KAAAC,EAAM,YAAAC,EAAa,8BAAAC,CAA+B,EAAG,CACvH,IAAMC,EAA4BC,GAAQ,IAC/BF,EAA8BD,CAAW,EACjD,CAACA,EAAaC,CAA6B,CAAC,EACzCG,EAAmBD,GAAQ,IACtBE,GAAyBL,CAAW,EAC5C,CAACA,CAAW,CAAC,EAChB,OAAII,IAAqB,EACd,KAEHE,EAAM,MAAO,CAAE,UAAW,8BAA+B,SAAU,CAACA,EAAM,MAAO,CAAE,UAAW,sCAAuC,SAAU,CAACA,EAAK,SAAU,CAAE,aAAW,GAAAC,SAAW,6CAA8C,CACrN,uBAAwBL,CAC5B,CAAC,EAAG,SAAU,CAAC,CAACA,EAA2B,QAASJ,EAAa,KAAM,SAAU,SAAUC,EAAK,UAAW,CACvG,YAAaK,CACjB,CAAC,CAAE,CAAC,EAAGE,EAAK,SAAU,CAAE,UAAW,0CAA2C,QAAST,EAAiB,KAAM,SAAU,SAAUE,EAAK,QAAQ,CAAE,CAAC,CAAC,CAAE,CAAC,EAAGG,GAA8BI,EAAK,MAAO,CAAE,UAAW,oCAAqC,SAAUJ,CAA0B,CAAC,CAAE,CAAE,CAAC,CACvT,CAfwBM,EAAAZ,GAAA,iBEJxB,IAAMa,GAA0BC,EAAA,CAACC,EAAMC,EAAQC,IAAa,CACxD,IAAMC,EAAOH,EAAK,MAAQA,EAAK,GAC/B,MAAO,CACH,GAAIA,EAAK,GACT,OAAQC,EAAO,GACf,KAAAE,EACA,KAAMH,EAAK,SACX,SAAU,GACV,KAAMA,EACN,QAASA,EAAK,WAAa,OAE3B,KAAM,CAEF,WAAYA,EAAK,QAAQ,KACzB,UAAWA,EAAK,QAAQ,IAIxB,aAAcA,EAAK,YAAc,KACjC,aAAcA,EAAK,UACvB,EACA,KAAM,CACF,OAAQA,EAAK,EACjB,EACA,OAAQ,CACJ,aAAcC,EAAO,KAAK,aAC1B,IAAK,GAAGC,EAAS,QAAQF,EAAK,WAAW,CAAC,GAC1C,KAAM,CACF,OAAQA,EAAK,EACjB,EACA,aAAcE,EAAS,KACvB,SAAUA,EAAS,SACnB,gBAAiBA,EAAS,QAC9B,CACJ,CACJ,EAnCgC,2BAoCzBE,GAAQN,GClCf,IAAMO,GAAWC,EAAA,CAACC,EAAgBC,EAAQC,IAAa,CACnD,IAAMC,EAAYH,EAAe,IAAKI,GAAMC,GAAwBD,EAAGH,EAAQC,CAAQ,CAAC,EAClFI,EAAa,CAAC,EACdC,EAAoB,CAAC,EAC3BJ,EAAU,QAASK,GAAS,CACpBP,EAAO,KAAK,yBAAyBQ,GAAcD,EAAMP,EAAO,KAAK,MAAM,CAAC,CAAC,EAC7EM,EAAkB,KAAKC,CAAI,EAG3BF,EAAW,KAAKE,CAAI,CAE5B,CAAC,EACGF,EAAW,OAAS,GACpBL,EAAO,KAAK,KAAKA,EAAO,KAAK,KAAK,gBAAiB,CAAE,SAAUK,EAAW,MAAO,CAAC,CAAC,EAEnFC,EAAkB,OAAS,GAC3BN,EAAO,KAAK,KAAK,cAAcM,EAAkB,MAAM,mCAAmC,EAE9FN,EAAO,KAAK,SAASK,CAAU,CACnC,EAnBiB,YAoBVI,GAAQZ,GCpBf,IAAMa,GAAkBC,EAAA,CAACC,EAAWC,EAAsBC,EAAmBC,IAAqB,CAC9F,IAAMC,EAAwBH,EAAqB,UAAWI,GAASA,EAAK,KAAOF,CAAgB,EACnG,GAAIC,IAA0B,IAAMF,EAAmB,CACnD,IAAMI,EAAmBL,EAAqB,UAAWI,GAASA,EAAK,KAAOL,CAAS,EAEvF,OADqBC,EAAqB,MAAM,KAAK,IAAIG,EAAuBE,CAAgB,EAAG,KAAK,IAAIF,EAAuBE,CAAgB,EAAI,CAAC,EACpI,IAAKD,GAASA,EAAK,EAAE,CAC7C,CACA,MAAO,CAACL,CAAS,CACrB,EARwB,mBASjBO,GAAQT,GCXf,IAAMU,GAAcC,EAACC,GAAUC,GAAU,CAErC,GAAI,CAAAA,EAAM,YAIV,IAAIA,EAAM,OAAS,aAAc,CAC7BD,EAAK,IAAI,mBAAoB,SAAS,EACtC,MACJ,CACAA,EAAK,IAAIC,EAAO,OAAO,EACnBA,EAAM,OAAS,sBACfD,EAAK,KAAK,CACN,QAASA,EAAK,KAAK,gBAAgB,EACnC,QAASA,EAAK,KAAKC,EAAM,OAAO,CACpC,EAAG,UAAW,GAAI,EAE1B,EAjBoB,eAkBbC,GAAQJ,GClBf,IAAMK,GAAiBC,EAAA,CAACC,EAAaC,IAAoB,CACrD,IAAIC,EAASF,EAAY,KAAMG,GAAMA,EAAE,KAAOF,CAAe,EACzDG,EAAc,CAAC,EACnB,KACIA,EAAc,CAACF,EAAQ,GAAGE,CAAW,EACjCF,EAAO,OAAS,QAFX,CAIT,IAAMG,EAAkBH,EAAO,SAC/BA,EAASF,EAAY,KAAMG,GAAMA,EAAE,KAAOE,CAAe,CAC7D,CACA,OAAOD,CACX,EAXuB,kBAYhBE,GAAQR,GCZf,IAAMS,GAAUC,EAAA,CAACC,EAAaC,EAAIC,IAAU,CACxC,IAAMC,EAAMF,IAAO,KAAO,OAASA,EACnC,GAAIC,EAAMC,CAAG,EACT,OAAOD,EAAMC,CAAG,EACpB,IAAMC,EAAOJ,EAAY,KAAMK,GAAMA,EAAE,KAAOJ,CAAE,EAChD,GAAIG,EAAK,OAAS,OACd,MAAO,CAAC,EACZ,IAAME,EAAkB,CAAC,GAAGR,GAAQE,EAAaI,EAAK,SAAUF,CAAK,EAAGE,CAAI,EAC5E,OAAAF,EAAMC,CAAG,EAAIG,EACNA,CACX,EAVgB,WAaVC,GAA2BR,EAACC,GAAgB,CAE9C,IAAME,EAAQ,OAAO,OAAO,IAAI,EAmBhC,OAjBqBF,EAAY,OAAQQ,GAASA,EAAK,OAAS,QAAUA,EAAK,SAAW,SAAS,EAC9C,IAAKJ,GAAS,CAC/D,IAAMK,EAAaX,GAAQE,EAAaI,EAAK,GAAIF,CAAK,EAChDQ,EAA0BD,EAAW,UAAWE,GAAMA,EAAE,OAAS,UAAYA,EAAE,SAAW,SAAS,EACnGC,EAAaH,EAAW,MAAMC,CAAuB,EACrDG,EAAa,IAAIJ,EAAW,IAAKE,GAAMA,EAAE,KAAK,IAAI,EAAE,KAAK,GAAG,CAAC,GAC7DG,EAAaF,EAAW,SAAW,EAGjC,OACFA,EAAW,IAAKD,GAAMA,EAAE,KAAK,IAAI,EAAE,KAAK,GAAG,EACjD,MAAO,CACH,GAAGP,EAAK,KACR,WAAAS,EACA,WAAAC,CACJ,CACJ,CAAC,CAEL,EAtBiC,4BAuB1BC,GAAQR,GCpCf,IAAAS,GAAyB,WCAlB,IAAMC,GAAN,cAA2B,KAAM,CAAxC,MAAwC,CAAAC,EAAA,qBACvC,YAAYC,EAAS,CACpB,MAAMA,CAAO,EACb,KAAK,KAAO,cACb,CACD,EAMaC,GAAN,cAAyB,KAAM,CAXtC,MAWsC,CAAAF,EAAA,mBACrC,YAAYC,EAAS,CACpB,MAAM,EACN,KAAK,KAAO,aACZ,KAAK,QAAUA,CAChB,CACD,EAKME,GAAkBH,EAAAI,GAAgB,WAAW,eAAiB,OACjE,IAAIF,GAAWE,CAAY,EAC3B,IAAI,aAAaA,CAAY,EAFR,mBAOlBC,GAAmBL,EAAAM,GAAU,CAClC,IAAMC,EAASD,EAAO,SAAW,OAC9BH,GAAgB,6BAA6B,EAC7CG,EAAO,OAEV,OAAOC,aAAkB,MAAQA,EAASJ,GAAgBI,CAAM,CACjE,EANyB,oBAQV,SAARC,GAA0BC,EAASC,EAAS,CAClD,GAAM,CACL,aAAAC,EACA,SAAAC,EACA,QAAAX,EACA,aAAAY,EAAe,CAAC,WAAY,YAAY,CACzC,EAAIH,EAEAI,EA4DEC,EA1DiB,IAAI,QAAQ,CAACC,EAASC,IAAW,CACvD,GAAI,OAAON,GAAiB,UAAY,KAAK,KAAKA,CAAY,IAAM,EACnE,MAAM,IAAI,UAAU,4DAA4DA,CAAY,IAAI,EAGjG,GAAID,EAAQ,OAAQ,CACnB,GAAM,CAAC,OAAAJ,CAAM,EAAII,EACbJ,EAAO,SACVW,EAAOZ,GAAiBC,CAAM,CAAC,EAGhCA,EAAO,iBAAiB,QAAS,IAAM,CACtCW,EAAOZ,GAAiBC,CAAM,CAAC,CAChC,CAAC,CACF,CAEA,GAAIK,IAAiB,OAAO,kBAAmB,CAC9CF,EAAQ,KAAKO,EAASC,CAAM,EAC5B,MACD,CAGA,IAAMC,EAAe,IAAInB,GAEzBe,EAAQD,EAAa,WAAW,KAAK,OAAW,IAAM,CACrD,GAAID,EAAU,CACb,GAAI,CACHI,EAAQJ,EAAS,CAAC,CACnB,OAASO,EAAO,CACfF,EAAOE,CAAK,CACb,CAEA,MACD,CAEI,OAAOV,EAAQ,QAAW,YAC7BA,EAAQ,OAAO,EAGZR,IAAY,GACfe,EAAQ,EACEf,aAAmB,MAC7BgB,EAAOhB,CAAO,GAEdiB,EAAa,QAAUjB,GAAW,2BAA2BU,CAAY,gBACzEM,EAAOC,CAAY,EAErB,EAAGP,CAAY,GAEd,SAAY,CACZ,GAAI,CACHK,EAAQ,MAAMP,CAAO,CACtB,OAASU,EAAO,CACfF,EAAOE,CAAK,CACb,CACD,GAAG,CACJ,CAAC,EAEwC,QAAQ,IAAM,CACtDJ,EAAkB,MAAM,CACzB,CAAC,EAED,OAAAA,EAAkB,MAAQ,IAAM,CAC/BF,EAAa,aAAa,KAAK,OAAWC,CAAK,EAC/CA,EAAQ,MACT,EAEOC,CACR,CA9EwBf,EAAAQ,GAAA,YCnCT,SAARY,GAA4BC,EAAOC,EAAOC,EAAY,CACzD,IAAIC,EAAQ,EACRC,EAAQJ,EAAM,OAClB,KAAOI,EAAQ,GAAG,CACd,IAAMC,EAAO,KAAK,MAAMD,EAAQ,CAAC,EAC7BE,EAAKH,EAAQE,EACbH,EAAWF,EAAMM,CAAE,EAAGL,CAAK,GAAK,GAChCE,EAAQ,EAAEG,EACVF,GAASC,EAAO,GAGhBD,EAAQC,CAEhB,CACA,OAAOF,CACX,CAfwBI,EAAAR,GAAA,cCDxB,IAAqBS,GAArB,KAAmC,CADnC,MACmC,CAAAC,EAAA,sBAC/BC,GAAS,CAAC,EACV,QAAQC,EAAKC,EAAS,CAClBA,EAAU,CACN,SAAU,EACV,GAAGA,CACP,EACA,IAAMC,EAAU,CACZ,SAAUD,EAAQ,SAClB,GAAIA,EAAQ,GACZ,IAAAD,CACJ,EACA,GAAI,KAAK,OAAS,GAAK,KAAKD,GAAO,KAAK,KAAO,CAAC,EAAE,UAAYE,EAAQ,SAAU,CAC5E,KAAKF,GAAO,KAAKG,CAAO,EACxB,MACJ,CACA,IAAMC,EAAQC,GAAW,KAAKL,GAAQG,EAAS,CAACG,EAAGC,IAAMA,EAAE,SAAWD,EAAE,QAAQ,EAChF,KAAKN,GAAO,OAAOI,EAAO,EAAGD,CAAO,CACxC,CACA,YAAYK,EAAIC,EAAU,CACtB,IAAML,EAAQ,KAAKJ,GAAO,UAAWG,GAAYA,EAAQ,KAAOK,CAAE,EAClE,GAAIJ,IAAU,GACV,MAAM,IAAI,eAAe,oCAAoCI,CAAE,wBAAwB,EAE3F,GAAM,CAACE,CAAI,EAAI,KAAKV,GAAO,OAAOI,EAAO,CAAC,EAC1C,KAAK,QAAQM,EAAK,IAAK,CAAE,SAAAD,EAAU,GAAAD,CAAG,CAAC,CAC3C,CACA,SAAU,CAEN,OADa,KAAKR,GAAO,MAAM,GAClB,GACjB,CACA,OAAOE,EAAS,CACZ,OAAO,KAAKF,GAAO,OAAQG,GAAYA,EAAQ,WAAaD,EAAQ,QAAQ,EAAE,IAAKC,GAAYA,EAAQ,GAAG,CAC9G,CACA,IAAI,MAAO,CACP,OAAO,KAAKH,GAAO,MACvB,CACJ,EChCA,IAAqBW,GAArB,cAAoC,GAAAC,OAAa,CANjD,MAMiD,CAAAC,EAAA,eAC7CC,GACAC,GACAC,GAAiB,EACjBC,GACAC,GACAC,GAAe,EACfC,GACAC,GACAC,GACAC,GACAC,GAAW,EAEXC,GACAC,GACAC,GAEAC,GAAc,GAMd,QAEA,YAAYC,EAAS,CAYjB,GAXA,MAAM,EAENA,EAAU,CACN,0BAA2B,GAC3B,YAAa,OAAO,kBACpB,SAAU,EACV,YAAa,OAAO,kBACpB,UAAW,GACX,WAAYC,GACZ,GAAGD,CACP,EACI,EAAE,OAAOA,EAAQ,aAAgB,UAAYA,EAAQ,aAAe,GACpE,MAAM,IAAI,UAAU,gEAAgEA,EAAQ,aAAa,SAAS,GAAK,EAAE,OAAO,OAAOA,EAAQ,WAAW,GAAG,EAEjK,GAAIA,EAAQ,WAAa,QAAa,EAAE,OAAO,SAASA,EAAQ,QAAQ,GAAKA,EAAQ,UAAY,GAC7F,MAAM,IAAI,UAAU,2DAA2DA,EAAQ,UAAU,SAAS,GAAK,EAAE,OAAO,OAAOA,EAAQ,QAAQ,GAAG,EAEtJ,KAAKf,GAA6Be,EAAQ,0BAC1C,KAAKd,GAAqBc,EAAQ,cAAgB,OAAO,mBAAqBA,EAAQ,WAAa,EACnG,KAAKZ,GAAeY,EAAQ,YAC5B,KAAKX,GAAYW,EAAQ,SACzB,KAAKP,GAAS,IAAIO,EAAQ,WAC1B,KAAKN,GAAcM,EAAQ,WAC3B,KAAK,YAAcA,EAAQ,YAC3B,KAAK,QAAUA,EAAQ,QACvB,KAAKF,GAAkBE,EAAQ,iBAAmB,GAClD,KAAKH,GAAYG,EAAQ,YAAc,EAC3C,CACA,GAAIE,IAA4B,CAC5B,OAAO,KAAKhB,IAAsB,KAAKC,GAAiB,KAAKC,EACjE,CACA,GAAIe,IAA8B,CAC9B,OAAO,KAAKR,GAAW,KAAKC,EAChC,CACAQ,IAAQ,CACJ,KAAKT,KACL,KAAKU,GAAmB,EACxB,KAAK,KAAK,MAAM,CACpB,CACAC,IAAoB,CAChB,KAAKC,GAAY,EACjB,KAAKC,GAA4B,EACjC,KAAKhB,GAAa,MACtB,CACA,GAAIiB,IAAoB,CACpB,IAAMC,EAAM,KAAK,IAAI,EACrB,GAAI,KAAKnB,KAAgB,OAAW,CAChC,IAAMoB,EAAQ,KAAKrB,GAAeoB,EAClC,GAAIC,EAAQ,EAGR,KAAKxB,GAAkB,KAAKF,GAA8B,KAAKU,GAAW,MAI1E,QAAI,KAAKH,KAAe,SACpB,KAAKA,GAAa,WAAW,IAAM,CAC/B,KAAKc,GAAkB,CAC3B,EAAGK,CAAK,GAEL,EAEf,CACA,MAAO,EACX,CACAN,IAAqB,CACjB,GAAI,KAAKZ,GAAO,OAAS,EAGrB,OAAI,KAAKF,IACL,cAAc,KAAKA,EAAW,EAElC,KAAKA,GAAc,OACnB,KAAK,KAAK,OAAO,EACb,KAAKI,KAAa,GAClB,KAAK,KAAK,MAAM,EAEb,GAEX,GAAI,CAAC,KAAKE,GAAW,CACjB,IAAMe,EAAwB,CAAC,KAAKH,GACpC,GAAI,KAAKP,IAA6B,KAAKC,GAA6B,CACpE,IAAMU,EAAM,KAAKpB,GAAO,QAAQ,EAChC,OAAKoB,GAGL,KAAK,KAAK,QAAQ,EAClBA,EAAI,EACAD,GACA,KAAKJ,GAA4B,EAE9B,IAPI,EAQf,CACJ,CACA,MAAO,EACX,CACAA,IAA8B,CACtB,KAAKtB,IAAsB,KAAKK,KAAgB,SAGpD,KAAKA,GAAc,YAAY,IAAM,CACjC,KAAKgB,GAAY,CACrB,EAAG,KAAKlB,EAAS,EACjB,KAAKC,GAAe,KAAK,IAAI,EAAI,KAAKD,GAC1C,CACAkB,IAAc,CACN,KAAKpB,KAAmB,GAAK,KAAKQ,KAAa,GAAK,KAAKJ,KACzD,cAAc,KAAKA,EAAW,EAC9B,KAAKA,GAAc,QAEvB,KAAKJ,GAAiB,KAAKF,GAA6B,KAAKU,GAAW,EACxE,KAAKmB,GAAc,CACvB,CAIAA,IAAgB,CAEZ,KAAO,KAAKT,GAAmB,GAAG,CACtC,CACA,IAAI,aAAc,CACd,OAAO,KAAKT,EAChB,CACA,IAAI,YAAYmB,EAAgB,CAC5B,GAAI,EAAE,OAAOA,GAAmB,UAAYA,GAAkB,GAC1D,MAAM,IAAI,UAAU,gEAAgEA,CAAc,OAAO,OAAOA,CAAc,GAAG,EAErI,KAAKnB,GAAemB,EACpB,KAAKD,GAAc,CACvB,CACA,KAAME,GAAcC,EAAQ,CACxB,OAAO,IAAI,QAAQ,CAACC,EAAUC,IAAW,CACrCF,EAAO,iBAAiB,QAAS,IAAM,CACnCE,EAAOF,EAAO,MAAM,CACxB,EAAG,CAAE,KAAM,EAAK,CAAC,CACrB,CAAC,CACL,CAqCA,YAAYG,EAAIC,EAAU,CACtB,KAAK5B,GAAO,YAAY2B,EAAIC,CAAQ,CACxC,CACA,MAAM,IAAIC,EAAWtB,EAAU,CAAC,EAAG,CAE/B,OAAAA,EAAQ,MAAQ,KAAKD,MAAe,SAAS,EAC7CC,EAAU,CACN,QAAS,KAAK,QACd,eAAgB,KAAKF,GACrB,GAAGE,CACP,EACO,IAAI,QAAQ,CAACuB,EAASJ,IAAW,CACpC,KAAK1B,GAAO,QAAQ,SAAY,CAC5B,KAAKE,KACL,KAAKR,KACL,GAAI,CACAa,EAAQ,QAAQ,eAAe,EAC/B,IAAIwB,EAAYF,EAAU,CAAE,OAAQtB,EAAQ,MAAO,CAAC,EAChDA,EAAQ,UACRwB,EAAYC,GAAS,QAAQ,QAAQD,CAAS,EAAG,CAAE,aAAcxB,EAAQ,OAAQ,CAAC,GAElFA,EAAQ,SACRwB,EAAY,QAAQ,KAAK,CAACA,EAAW,KAAKR,GAAchB,EAAQ,MAAM,CAAC,CAAC,GAE5E,IAAM0B,EAAS,MAAMF,EACrBD,EAAQG,CAAM,EACd,KAAK,KAAK,YAAaA,CAAM,CACjC,OACOC,EAAO,CACV,GAAIA,aAAiBC,IAAgB,CAAC5B,EAAQ,eAAgB,CAC1DuB,EAAQ,EACR,MACJ,CACAJ,EAAOQ,CAAK,EACZ,KAAK,KAAK,QAASA,CAAK,CAC5B,QACA,CACI,KAAKvB,GAAM,CACf,CACJ,EAAGJ,CAAO,EACV,KAAK,KAAK,KAAK,EACf,KAAKK,GAAmB,CAC5B,CAAC,CACL,CACA,MAAM,OAAOwB,EAAW7B,EAAS,CAC7B,OAAO,QAAQ,IAAI6B,EAAU,IAAI,MAAOP,GAAc,KAAK,IAAIA,EAAWtB,CAAO,CAAC,CAAC,CACvF,CAIA,OAAQ,CACJ,OAAK,KAAKH,IAGV,KAAKA,GAAY,GACjB,KAAKiB,GAAc,EACZ,MAJI,IAKf,CAIA,OAAQ,CACJ,KAAKjB,GAAY,EACrB,CAIA,OAAQ,CACJ,KAAKJ,GAAS,IAAI,KAAKC,EAC3B,CAMA,MAAM,SAAU,CAER,KAAKD,GAAO,OAAS,GAGzB,MAAM,KAAKqC,GAAS,OAAO,CAC/B,CAQA,MAAM,eAAeC,EAAO,CAEpB,KAAKtC,GAAO,KAAOsC,GAGvB,MAAM,KAAKD,GAAS,OAAQ,IAAM,KAAKrC,GAAO,KAAOsC,CAAK,CAC9D,CAMA,MAAM,QAAS,CAEP,KAAKpC,KAAa,GAAK,KAAKF,GAAO,OAAS,GAGhD,MAAM,KAAKqC,GAAS,MAAM,CAC9B,CACA,KAAMA,GAASE,EAAOC,EAAQ,CAC1B,OAAO,IAAI,QAAQV,GAAW,CAC1B,IAAMW,EAAWlD,EAAA,IAAM,CACfiD,GAAU,CAACA,EAAO,IAGtB,KAAK,IAAID,EAAOE,CAAQ,EACxBX,EAAQ,EACZ,EANiB,YAOjB,KAAK,GAAGS,EAAOE,CAAQ,CAC3B,CAAC,CACL,CAIA,IAAI,MAAO,CACP,OAAO,KAAKzC,GAAO,IACvB,CAMA,OAAOO,EAAS,CAEZ,OAAO,KAAKP,GAAO,OAAOO,CAAO,EAAE,MACvC,CAIA,IAAI,SAAU,CACV,OAAO,KAAKL,EAChB,CAIA,IAAI,UAAW,CACX,OAAO,KAAKE,EAChB,CACJ,EC5VA,IAAMsC,GAAeC,EAACC,GACXA,EAAY,IAAKC,IAAU,CAAE,GAAGA,CAAK,EAAE,EAD7B,gBAGdC,GAAQJ,GCHf,IAAMK,GAAmBC,EAAA,MAAOC,EAAOC,EAAUC,EAAYC,EAASC,IAAuB,CACzF,IAAIC,EAAQ,CAAC,EACTC,EAAcJ,EAAW,OACvBA,EAAW,aACXA,EAAW,GACjB,KAAOI,GAAa,CAChB,IAAMC,EAAW,MAAMJ,EAAQG,CAAW,EAC1CD,EAAQA,EAAM,OAAOE,EAAS,KAAK,EACnCD,EAAcC,EAAS,YAC3B,CACA,IAAMC,EAAaH,EAAM,OAAQI,GAAMA,EAAE,WAAa,EAAI,EACpDC,EAAWL,EAAM,OAAQI,GAAMA,EAAE,WAAa,EAAK,EACnDE,EAAUH,EAAW,IAAKI,IAAY,CACxC,KAAM,SACN,GAAIA,EAAO,YACX,OAAQ,GACR,aAAc,KACd,OAAQ,UACR,SAAUV,EAAW,GACrB,KAAMU,CACV,EAAE,EACIC,EAAQH,EAAS,IAAKI,GAAS,CACjC,IAAMC,EAAmBX,EAAmBU,CAAI,EAChD,MAAO,CACH,KAAM,OACN,GAAIA,EAAK,YACT,iBAAAC,EACA,OAAQA,EAAmB,YAAc,UACzC,SAAUb,EAAW,GACrB,KAAMY,CACV,CACJ,CAAC,EACDZ,EAAW,OAAS,GACpBA,EAAW,aAAe,KAC1BD,EAAS,KAAK,GAAGY,EAAO,GAAGF,CAAO,EAClCA,EAAQ,QAAQ,MAAOC,GAAW,CAC9BZ,EAAM,IAAI,IAAMF,GAAiBE,EAAOC,EAAUW,EAAQT,EAASC,CAAkB,CAAC,CAC1F,CAAC,CACL,EAtCyB,oBAuCnBY,GAAYjB,EAAA,MAAOkB,EAAad,EAASC,EAAoBc,IAAmB,CAClF,IAAMlB,EAAQ,IAAImB,GAAO,CAAE,YAAa,CAAE,CAAC,EAErClB,EAAWmB,GAAaH,CAAW,EAMzC,OALoBhB,EAAS,OAAQoB,GAASA,EAAK,OAAS,UACxDA,EAAK,SAAW,YAEfA,EAAK,SAAW,IAASA,EAAK,aAAa,EAEpC,QAASnB,GAAe,CAChCF,EAAM,IAAI,IAAMF,GAAiBE,EAAOC,EAAUC,EAAYC,EAASC,CAAkB,CAAC,CAC9F,CAAC,EACDJ,EAAM,GAAG,YAAa,IAAM,CACxB,IAAMsB,EAAkBrB,EAAS,OAAQQ,GAAMA,EAAE,OAAS,QAAUA,EAAE,SAAW,SAAS,EAAE,OAC5FS,EAAeI,CAAe,CAClC,CAAC,EACD,MAAMtB,EAAM,OAAO,EACZC,CACX,EAlBkB,aAmBXsB,GAAQP,GC9Df,IAAMQ,GAAkBC,EAAA,CAACC,EAAgBC,EAAiBC,EAAeC,EAAiBC,IAAuB,CAI7G,IAAMC,EAAwBJ,EAAgB,OAAQK,GAAM,CAACN,EAAe,KAAMO,GAAMA,EAAE,KAAOD,EAAE,WAAW,CAAC,EACzGE,EAAoBH,EAAsB,OAAQC,GAAMA,EAAE,WAAa,EAAI,EAC3EG,EAAkBJ,EAAsB,OAAQC,GAAMA,EAAE,WAAa,EAAK,EAC1EI,EAAwBR,EAAc,OAAS,UAAYA,EAAc,SAAW,UACpFS,EAAUH,EAAkB,IAAKI,IAAY,CAC/C,KAAM,SACN,GAAIA,EAAO,YACX,OAAQ,GACR,aAAc,KACd,OAAQF,EAAwB,UAAY,YAC5C,SAAUR,EAAc,GACxB,KAAMU,CACV,EAAE,EACIC,EAAQJ,EAAgB,IAAKK,GAAS,CACxC,IAAMC,EAAmBX,EAAmBU,CAAI,EAChD,MAAO,CACH,KAAM,OACN,GAAIA,EAAK,YACT,iBAAAC,EACA,OAAQL,GAAyB,CAACK,EAAmB,UAAY,YACjE,SAAUb,EAAc,GACxB,KAAMY,CACV,CACJ,CAAC,EAEKE,EAAuB,CACzB,GAAGd,EACH,OAAQ,GACR,aAAcC,CAClB,EAOA,MALuB,CACnB,GAFwCH,EAAe,IAAKY,GAAWA,EAAO,KAAOI,EAAqB,GAAKA,EAAuBJ,CAAM,EAG5I,GAAGD,EACH,GAAGE,CACP,CAEJ,EAzCwB,mBA0CjBI,GAAQnB,GC1Cf,IAAMoB,GAAoBC,EAAA,CAACC,EAAgBC,EAAiBC,EAAOC,EAAcC,IAAuB,CACpG,IAAMC,EAAgBL,EAAe,KAAMM,GAAMA,EAAE,KAAOL,CAAe,EACnEM,EAAaL,EAAM,OAAQI,GAAMA,EAAE,WAAa,EAAI,EACpDE,EAAWN,EAAM,OAAQI,GAAMA,EAAE,WAAa,EAAK,EAEnDG,EAAiB,CAAE,GAAGJ,EAAe,aAAAF,CAAa,EAClDO,EAAuCV,EAAe,IAAKW,GAAWA,EAAO,KAAOF,EAAe,GAAKA,EAAiBE,CAAM,EAC/HC,EAAwBH,EAAe,OAAS,UAAYA,EAAe,SAAW,UACtFI,EAAUN,EAAW,IAAKI,IAAY,CACxC,KAAM,SACN,GAAIA,EAAO,YACX,OAAQ,GACR,aAAc,KACd,OAAQC,EAAwB,UAAY,YAC5C,SAAUH,EAAe,GACzB,KAAME,CACV,EAAE,EACIG,EAAQN,EAAS,IAAKO,GAAS,CACjC,IAAMC,EAAmBZ,EAAmBW,CAAI,EAChD,MAAO,CACH,KAAM,OACN,GAAIA,EAAK,YACT,iBAAAC,EACA,OAAQJ,GAAyB,CAACI,EAAmB,UAAY,YACjE,SAAUP,EAAe,GACzB,KAAMM,CACV,CACJ,CAAC,EAMD,MALuB,CACnB,GAAGL,EACH,GAAGG,EACH,GAAGC,CACP,CAEJ,EAlC0B,qBAmCnBG,GAAQnB,GCrBf,IAAMoB,GAAgBC,EAAA,CAACC,EAAMC,EAAIC,IAAwB,CACpCF,EAAK,OAAQG,GAASA,EAAK,OAAS,QAAUA,EAAK,WAAaF,CAAE,EAC1E,QAASE,GAAS,CACvBA,EAAK,OACDD,GAAuB,EAAEC,EAAK,OAAS,QAAUA,EAAK,kBAChD,UACA,YACVL,GAAcE,EAAMG,EAAK,GAAID,CAAmB,CACpD,CAAC,CACL,EATsB,iBAsBhBE,GAAcL,EAAA,CAACC,EAAMC,IAAO,CAC9B,IAAMI,EAASL,EAAK,KAAMG,GAASA,EAAK,KAAOF,CAAE,EACjD,GAAII,EAAO,OAAS,OAChB,OACJ,IAAMC,EAAgBN,EAAK,OAAQG,GAEnCA,EAAK,OAAS,QACVA,EAAK,WAAaE,EAAO,IAEzB,EAAEF,EAAK,OAAS,QAAUA,EAAK,iBAAiB,EAC9CI,EAAwBD,EAAc,MAAOH,GAASA,EAAK,SAAW,SAAS,EAC/EK,EAA0BF,EAAc,MAAOH,GAASA,EAAK,SAAW,WAAW,EAgBrFI,GAAyBF,EAAO,OAChCA,EAAO,OAAS,UAEXG,EACLH,EAAO,OAAS,YAGhBA,EAAO,OAAS,UAEpBD,GAAYJ,EAAMK,EAAO,QAAQ,CACrC,EArCoB,eAsCdI,GAAsBV,EAAA,CAACW,EAASC,IAAe,CACjD,IAAMX,EAAOY,GAAaF,CAAO,EAC3BG,EAAoBb,EAAK,OAAQG,GAASA,EAAK,OAAS,QAAUQ,EAAW,SAASR,EAAK,EAAE,CAAC,EACpG,OAAAU,EAAkB,QAASV,GAAS,CAEhC,IAAMW,EAAYX,EAAK,SAAW,UAAY,YAAc,UAExDA,EAAK,OAAS,OACdA,EAAK,OAASA,EAAK,iBAAmB,YAAcW,EAGpDX,EAAK,OAASW,EAElBhB,GAAcE,EAAMG,EAAK,GAAIA,EAAK,SAAW,SAAS,CAC1D,CAAC,EAEDC,GAAYJ,EAAMa,EAAkB,CAAC,EAAE,QAAQ,EACxCb,CACX,EAlB4B,uBAmBrBe,GAAQN,GCzFf,IAAOO,GAAQ,CACX,gBAAAC,GACA,kBAAAC,GACA,oBAAAC,GACA,UAAAC,EACJ,ECTA,IAAMC,GAAqBC,EAACC,GAAU,CAClC,GAAM,CAAE,aAAAC,EAAc,UAAAC,EAAW,aAAAC,CAAa,EAAIH,EAAM,OAExD,OADuBC,GAAgBC,EAAYC,GAC3B,EAC5B,EAJ2B,sBAKpBC,GAAQN,GCJf,IAAAO,GAAuB,WAEvB,IAAMC,GAAmBC,EAAA,CAAC,CAAE,KAAAC,EAAM,KAAAC,EAAM,eAAAC,EAAgB,WAAAC,CAAY,IAAM,CACtE,IAAMC,EAAa,qBAAsBH,GACrCA,EAAK,kBAAoB,MACzBA,EAAK,SAAW,UACpB,OAAQI,EAAM,KAAM,CAAE,aAAW,GAAAC,SAAW,2BAA4B,CAAE,qCAAsCF,CAAW,EAAG,CAAE,sCAAuCH,EAAK,KAAK,OAAS,OAAQ,EAAG,CAAE,uCAAwCA,EAAK,SAAW,SAAU,EAAG,CAAE,uCAAwCA,EAAK,SAAW,SAAU,CAAC,EAAG,OAAQ,qBAAsBA,EAAOA,EAAK,iBAAmB,SACzY,OAAW,SAAU,CAACI,EAAK,QAAS,CAAE,KAAM,WAAY,UAAW,iDAAkD,SAAUN,EAAA,IAAMG,EAAeD,EAAM,EAAK,EAAhC,YAAmC,QAASA,EAAK,SAAW,UAAW,aAAcA,EAAK,KAAK,MAAQD,EAAK,SAAS,EAAG,SAAUI,EAAY,4BAA6B,EAAK,CAAC,EAAGC,EAAM,SAAU,CAAE,KAAM,SAAU,UAAW,yDAA0D,SAAUD,EAAY,aAAcH,EAAK,KAAK,KAAM,QAASF,EAAA,IAAM,CACjdE,EAAK,KAAK,UACVE,EAAWF,EAAK,EAAE,CAE1B,EAJmd,WAIhd,SAAU,CAACI,EAAK,MAAO,CAAE,UAAW,oCAAqC,SAAUA,EAAKE,GAAU,CAAE,eAAgBN,EAAK,KAAK,IAAK,CAAC,CAAE,CAAC,EAAGA,EAAK,KAAK,MAAQD,EAAK,SAAS,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CACrM,EAVyB,oBAWlBQ,GAAQV,GCZf,IAAMW,GAAmBC,EAAA,CAAC,CAAE,cAAAC,EAAe,eAAAC,EAAgB,WAAAC,EAAY,KAAAC,CAAM,IACrEH,EAAc,SAAW,EAClBI,EAAK,MAAO,CAAE,UAAW,sBAAuB,SAAUD,EAAK,cAAc,CAAE,CAAC,EAEnFC,EAAK,MAAO,CAAE,UAAW,4BAA6B,SAAUA,EAAK,KAAM,CAAE,UAAW,4BAA6B,SAAUJ,EAAc,IAAKK,GAAUD,EAAKE,GAAkB,CAAE,KAAMH,EAAM,KAAME,EAAM,eAAgBJ,EAAgB,WAAYC,CAAW,EAAGG,EAAK,EAAE,CAAE,CAAE,CAAC,CAAE,CAAC,EAJzQ,oBAMlBE,GAAQT,GCPf,IAAAU,GAAuB,WCCR,SAARC,GAA6BC,EAAO,CACvC,GAAM,CAAE,WAAAC,EAAY,MAAAC,EAAO,gBAAAC,EAAiB,YAAAC,EAAa,KAAAC,CAAK,EAAIL,EAClE,OAAQM,EAAM,MAAO,CAAE,UAAW,4BAA6B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,gCAAiC,SAAUH,CAAgB,CAAC,EAAGC,EAAY,IAAI,CAACG,EAAQC,IAAWF,EAAMG,GAAU,CAAE,SAAU,CAACH,EAAK,SAAU,CAAE,KAAM,SAAU,UAAW,0BAA2B,QAASI,EAAA,IAAMT,EAAWM,EAAO,EAAE,EAA1B,WAA6B,SAAUA,EAAO,OAAS,OAChVL,EACCK,EAAO,KAAK,MAAQF,EAAK,SAAS,CAAG,EAAGE,EAAO,EAAE,EAAGH,EAAY,SAAWI,EAAQ,EAAI,GAAK,KAAK,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CACzI,CALwBE,EAAAX,GAAA,eCAT,SAARY,GAAsB,CAAE,KAAAC,EAAM,OAAAC,EAAQ,SAAAC,CAAS,EAAG,CACrD,OAAQC,EAAMC,GAAU,CAAE,SAAU,CAACF,GAAaC,EAAK,OAAQ,CAAE,UAAW,4BAA6B,SAAUD,CAAS,EAAG,UAAU,EAAIC,EAAK,SAAU,CAAE,KAAM,SAAU,QAASF,EAAQ,UAAW,0DAA2D,SAAUD,EAAK,QAAQ,CAAE,EAAG,QAAQ,CAAC,CAAE,CAAC,CACjT,CAFwBK,EAAAN,GAAA,QFET,SAARO,GAAwBC,EAAO,CAClC,OAAQC,EAAK,MAAO,CAAE,UAAW,8BAA+B,SAAUA,EAAM,MAAO,CAAE,aAAW,GAAAC,SAAW,iCAAkC,CAACF,EAAM,iBAAmB,wCAAwC,EAAG,SAAU,CAACA,EAAM,iBAAoBC,EAAKE,GAAa,CAAE,WAAYH,EAAM,WAAY,YAAaA,EAAM,YAAa,gBAAiBA,EAAM,aAAa,EAAG,MAAOA,EAAM,MAAO,KAAMA,EAAM,IAAK,CAAC,EAAIC,EAAKG,GAAM,CAAE,OAAQJ,EAAM,OAAQ,SAAUA,EAAM,SAAU,KAAMA,EAAM,IAAK,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CACxf,CAFwBK,EAAAN,GAAA,U7BejB,SAASO,IAAoB,CAChC,OAAQC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,yKAA0K,CAAC,CAAE,CAAC,CAChU,CAFgBC,EAAAF,GAAA,qBAGhB,IAAMG,GAAkBD,EAACE,IAAkB,CACvC,cAAe,OACf,YAAa,CACT,CACI,KAAM,OACN,GAAIA,EACJ,OAAQ,GACR,aAAc,IAClB,CACJ,EACA,gBAAiBA,EACjB,aAAc,GACd,eAAgB,GAChB,SAAU,KACV,QAAS,EACb,GAfwB,mBA2BHC,GAArB,MAAqBC,CAAa,CAjDlC,MAiDkC,CAAAJ,EAAA,qBAC9B,OAAO,QAAUK,GAAY,QAG7B,OAAQ,OAAO,IAAI,6BAA6B,CAAC,EACjD,OACA,SACA,KACA,iBAAmB,GACnB,iBAAmB,KACnBC,GACA,YAAYC,EAAQC,EAAM,CACtB,KAAK,OAASD,EACd,KAAK,SAAWC,EAAK,SACrB,IAAMC,EAAiB,CACnB,SAAU,OACV,WAAY,GACZ,WAAY,GACZ,gBAAiB,GACjB,aAAc,GACd,YAAa,EACjB,EACA,KAAK,KAAO,CAAE,GAAGA,EAAgB,GAAGD,CAAK,EACzC,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EAEvD,KAAK,iBAAiB,EAGtB,KAAK,OAAO,KAAK,GAAG,wBAAyB,KAAK,gBAAgB,EAClE,KAAK,OAAO,KAAK,sBAAsB,KAAK,SAAS,SAAU,KAAK,QAAQ,EAG5E,IAAME,EAAWN,EADM,OAAO,IAAI,6BAA6B,CACnB,EACtCO,EAAOD,GAAY,IACnBE,EAAeF,IAAa,EAAI,CAAE,QAAS,GAAM,SAAU,EAAK,EAAI,OAC1E,KAAKJ,MAAmB,GAAAO,SAAS,KAAKC,GAASH,EAAMC,CAAY,CACrE,CACA,kBAAmB,CACf,KAAK,OAAO,eAAeX,GAAgB,KAAK,OAAO,YAAY,CAAC,CACxE,CACA,UAAW,CAEX,CACA,WAAWc,EAAS,CAChB,KAAK,OAAO,eAAe,CAAE,QAAAA,CAAQ,CAAC,CAC1C,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,OAAO,eAAe,EAAE,OACxC,CACA,iBAAkB,CACd,GAAM,CAAE,YAAAC,CAAY,EAAI,KAAK,OAAO,eAAe,EAC7CC,EAAiBD,EAAY,IAAKE,GAASA,EAAK,OAAS,OAASA,EAAO,CAAE,GAAGA,EAAM,OAAQ,WAAY,CAAC,EAC/G,KAAK,OAAO,eAAe,CAAE,YAAaD,CAAe,CAAC,CAC9D,CACA,kBAAmB,CACf,KAAK,OAAO,eAAe,CACvB,cAAe,MACnB,CAAC,CACL,CACAE,GACA,KAAMC,GAAWC,EAAI,CAEjB,KAAKF,IAAkB,MAAM,EAC7B,IAAMG,EAAkB,IAAI,gBAC5B,KAAKH,GAAmBG,EACxB,IAAMC,EAAgBvB,EAAA,IAAM,CACxBsB,EAAgB,MAAM,CAC1B,EAFsB,iBAGtB,GAAI,CAIA,KAAK,OAAO,KAAK,GAAG,wBAAyBC,CAAa,EAC1D,KAAK,OAAO,KAAK,GAAG,aAAcA,CAAa,EAC/C,MAAMF,EAAGC,EAAgB,MAAM,CACnC,QACA,CAII,KAAK,OAAO,KAAK,IAAI,wBAAyBC,CAAa,EAC3D,KAAK,OAAO,KAAK,IAAI,aAAcA,CAAa,EAChD,KAAKJ,GAAmB,MAC5B,CACJ,CACA,KAAML,IAAU,CACZ,GAAM,CAAE,YAAAE,EAAa,gBAAAQ,EAAiB,aAAAC,CAAa,EAAI,KAAK,OAAO,eAAe,EAC5EC,EAAgBV,EAAY,KAAMW,GAAMA,EAAE,KAAOH,CAAe,EACtE,GAAIC,EAAa,KAAK,IAAM,GAAI,CAC5B,KAAKN,IAAkB,MAAM,EAC7B,KAAK,iBAAiB,EACtB,MACJ,CACA,KAAK,WAAW,EAAI,EACpB,MAAM,KAAKC,GAAW,MAAOQ,GAAW,CACpC,IAAMC,EAAYH,EAAc,OAAS,OAAS,OAAYF,EACxD,CAAE,MAAAM,CAAM,EAAI,MAAM,KAAK,SAAS,OAAOL,EAAc,CACvD,OAAAG,EACA,KAAMC,CACV,CAAC,EAKK,CAAE,YAAAb,CAAY,EAAI,KAAK,OAAO,eAAe,EAC7CC,EAAiB,CAAC,GAAGD,CAAW,EACtC,QAAWe,KAAQD,EAAO,CAGtB,IAAME,EADc,mBAAmBD,EAAK,WAAW,EAC1B,MAAM,GAAG,EAAE,OAAQE,GAAMA,EAAE,OAAS,CAAC,EAE9DC,EAAW,KAAK,OAAO,aACvBC,EAEJH,EAAS,QAAQ,CAACI,EAASC,EAAOC,IAAQ,CACtC,IAAMC,EAAeP,EAAS,MAAM,EAAGK,EAAQ,CAAC,EAC1CG,EAAc,mBAAmB,IAAID,EAAa,KAAK,GAAG,CAAC,EAAE,EAE7DE,EAAexB,EAAe,KAAMyB,GAAMA,EAAE,KAAOF,GAAeE,EAAE,OAAS,MAAM,EACzF,GAAID,EAAc,CACdP,EAAWM,EACXL,EAAwBM,EAAa,SAAW,UAChD,MACJ,CACA,IAAME,EAAaN,IAAUC,EAAI,OAAS,EACtCM,EAIEC,EAASV,EAAwB,UAAY,YAGnD,GAAIQ,EACA,GAAIZ,EAAK,SACLa,EAAO,CACH,KAAM,SACN,GAAIJ,EACJ,OAAQ,GACR,aAAc,KACd,OAAAK,EACA,SAAAX,EACA,KAAMH,CACV,MAEC,CACD,IAAMe,EAAmB,KAAK,mBAAmBf,CAAI,EACrDa,EAAO,CACH,KAAM,OACN,GAAIJ,EACJ,iBAAAM,EACA,OAASA,EAA4B,YAATD,EAC5B,SAAAX,EACA,KAAMH,CACV,CACJ,MAIAa,EAAO,CACH,KAAM,SACN,GAAIJ,EACJ,OAAQ,GACR,aAAc,KACd,OAAAK,EACA,SAAAX,EACA,KAAM,CAEF,KAAM,mBAAmBE,CAAO,EAChC,KAAM,SACN,SAAU,EACd,CACJ,EAEJnB,EAAe,KAAK2B,CAAI,EACxBV,EAAWM,EACXL,EAAwBU,IAAW,SACvC,CAAC,CACL,CACA,KAAK,OAAO,eAAe,CACvB,YAAa5B,EACb,cAAea,EAAM,IAAKZ,GAASA,EAAK,WAAW,CACvD,CAAC,CACL,CAAC,EAAE,MAAM6B,GAAY,KAAK,OAAO,IAAI,CAAC,EACtC,KAAK,WAAW,EAAK,CACzB,CAEA,cAAgB/C,EAACiC,GAAM,CACnB,KAAK,OAAO,eAAe,CAAE,aAAcA,CAAE,CAAC,EAC1C,KAAK,KAAK,gBACV,KAAK3B,GAAiB,CAE9B,EALgB,iBAMhB,MAAM,uBAAuB0C,EAAU,CAEnC,KAAK,OAAO,eAAe,CAAE,aAAc,EAAG,CAAC,EAE/C,MAAM,KAAK,WAAWA,CAAQ,CAClC,CACA,MAAM,WAAWA,EAAU,CAEvB,KAAK,iBAAiB,EACtB,KAAK,iBAAmB,KAExB,GAAM,CAAE,YAAAhC,CAAY,EAAI,KAAK,OAAO,eAAe,EAC7CiC,EAAgBjC,EAAY,KAAMkC,GAAWA,EAAO,KAAOF,CAAQ,EACzE,GAAIC,EAAc,OAAQ,CACtB,KAAK,OAAO,eAAe,CACvB,gBAAiBD,EACjB,aAAc,EAClB,CAAC,EACD,MACJ,CACA,KAAK,WAAW,EAAI,EACpB,MAAM,KAAK5B,GAAW,MAAOQ,GAAW,CACpC,IAAIuB,EAAkBH,EAClBI,EAAe,CAAC,EACpB,EAAG,CACC,GAAM,CAAE,SAAAC,EAAU,aAAAC,EAAc,MAAAxB,CAAM,EAAI,MAAM,KAAK,SAAS,KAAKqB,EAAiB,CAAE,OAAAvB,CAAO,CAAC,EAE9F,KAAK,OAAO,eAAe,CAAE,SAAAyB,CAAS,CAAC,EACvCF,EAAkBG,EAClBF,EAAeA,EAAa,OAAOtB,CAAK,EACxC,KAAK,WAAW,KAAK,OAAO,KAAK,KAAK,eAAgB,CAClD,SAAUsB,EAAa,MAC3B,CAAC,CAAC,CACN,OAAS,KAAK,KAAK,cAAgBD,GACnC,IAAMlC,EAAiBsC,GAAiB,gBAAgBvC,EAAaoC,EAAcH,EAAeE,EAAiB,KAAK,kBAAkB,EAC1I,KAAK,OAAO,eAAe,CACvB,YAAalC,EACb,gBAAiB+B,EACjB,aAAc,EAClB,CAAC,CACL,CAAC,EAAE,MAAMD,GAAY,KAAK,OAAO,IAAI,CAAC,EACtC,KAAK,WAAW,EAAK,CACzB,CAIA,MAAM,QAAS,CACX,MAAM,KAAK3B,GAAW,MAAOQ,GAAW,CACpC,IAAM4B,EAAM,MAAM,KAAK,SAAS,OAAO,CACnC,OAAA5B,CACJ,CAAC,EAED,GAAI4B,EAAI,GAAI,CACR,GAAI,CAACA,EAAI,QAAS,CACd,IAAMC,EAAU,KAAK,OAAO,KAAK,KAAK,2BAA4B,CAC9D,SAAU,KAAK,OAAO,MACtB,IAAKD,EAAI,iBACb,CAAC,EACD,KAAK,OAAO,KAAK,KAAKC,EAAS,OAAQ,GAAI,CAC/C,CACA,KAAK,OAAO,eAAe,CACvB,GAAGxD,GAAgB,KAAK,OAAO,YAAY,EAC3C,cAAe,EACnB,CAAC,CACL,CACJ,CAAC,EAAE,MAAM8C,GAAY,KAAK,OAAO,IAAI,CAAC,CAC1C,CACA,MAAM,WAAWW,EAAc,CAC3B,MAAM,KAAKtC,GAAW,MAAOQ,GAAW,CACpC,KAAK,WAAW,EAAI,EACpB,MAAM,KAAK,SAAS,MAAM,CAAE,aAAA8B,EAAc,OAAA9B,CAAO,CAAC,EAClD,KAAK,OAAO,eAAe,CAAE,cAAe,EAAK,CAAC,EAClD,MAAM,QAAQ,IAAI,CACd,KAAK,SAAS,kBAAkB,EAChC,KAAK,WAAW,KAAK,OAAO,YAAY,CAC5C,CAAC,CACL,CAAC,EAAE,MAAMmB,GAAY,KAAK,OAAO,IAAI,CAAC,EACtC,KAAK,WAAW,EAAK,CACzB,CACA,MAAM,aAAaY,EAAO,CACtB,GAAM,CAAE,YAAA3C,EAAa,gBAAAQ,CAAgB,EAAI,KAAK,OAAO,eAAe,EAC9DE,EAAgBV,EAAY,KAAMW,GAAMA,EAAE,KAAOH,CAAe,EAClEoC,GAAmBD,CAAK,GACxB,CAAC,KAAK,kBACNjC,EAAc,eACd,KAAK,iBAAmB,GACxB,MAAM,KAAKN,GAAW,MAAOQ,GAAW,CACpC,GAAM,CAAE,aAAA0B,EAAc,MAAAxB,CAAM,EAAI,MAAM,KAAK,SAAS,KAAKJ,EAAc,aAAc,CAAE,OAAAE,CAAO,CAAC,EACzFX,EAAiBsC,GAAiB,kBAAkBvC,EAAaQ,EAAiBM,EAAOwB,EAAc,KAAK,kBAAkB,EACpI,KAAK,OAAO,eAAe,CAAE,YAAarC,CAAe,CAAC,CAC9D,CAAC,EAAE,MAAM8B,GAAY,KAAK,OAAO,IAAI,CAAC,EACtC,KAAK,iBAAmB,GAEhC,CACA,mBAAqB/C,EAAC+B,GAAS,CAC3B,IAAM8B,EAAgBC,GAAqB/B,CAAI,EAE/C,OADe,KAAK,OAAO,KAAK,mBAAmB8B,CAAa,CAEpE,EAJqB,sBAKrB,MAAM,aAAc,CAChB,GAAM,CAAE,YAAA7C,CAAY,EAAI,KAAK,OAAO,eAAe,EAC/C,KAAK,YAET,KAAK,WAAW,EAAI,EACpB,MAAM,KAAKI,GAAW,MAAOQ,GAAW,CAEpC,IAAMmC,EAAe,MAAMR,GAAiB,UAAUvC,EAAcgD,GAAS,KAAK,SAAS,KAAKA,EAAM,CAAE,OAAApC,CAAO,CAAC,EAAG,KAAK,mBAAqBc,GAAM,CAC/I,KAAK,WAAW,KAAK,OAAO,KAAK,KAAK,gBAAiB,CAAE,SAAUA,CAAE,CAAC,CAAC,CAC3E,CAAC,EAGD,GADkC,KAAK,8BAA8BqB,CAAY,EAClD,CAC3B,KAAK,OAAO,eAAe,CAAE,YAAaA,CAAa,CAAC,EACxD,MACJ,CAEA,IAAME,EAAiBC,GAAyBH,CAAY,EAC5DI,GAASF,EAAgB,KAAK,OAAQ,KAAK,QAAQ,EAEnD,KAAK,iBAAiB,CAC1B,CAAC,EAAE,MAAMlB,GAAY,KAAK,OAAO,IAAI,CAAC,EACtC,KAAK,WAAW,EAAK,EACzB,CACA,eAAeqB,EAASC,EAAmB,CACvC,GAAM,CAAE,YAAArD,CAAY,EAAI,KAAK,OAAO,eAAe,EAC7CsD,EAAeC,GAAgBH,EAAQ,GAAI,KAAK,wBAAwB,EAAGC,EAAmB,KAAK,gBAAgB,EACnHpD,EAAiBsC,GAAiB,oBAAoBvC,EAAasD,CAAY,EACrF,KAAK,OAAO,eAAe,CAAE,YAAarD,CAAe,CAAC,EAC1D,KAAK,iBAAmBmD,EAAQ,EACpC,CACA,wBAA0BpE,EAAA,IAAM,CAC5B,GAAM,CAAE,YAAAgB,EAAa,gBAAAQ,EAAiB,aAAAC,CAAa,EAAI,KAAK,OAAO,eAAe,EAC5E+C,EAAexD,EAAY,OAAQE,GAASA,EAAK,OAAS,QAAUA,EAAK,WAAaM,CAAe,EAO3G,OALiB,KAAK,KAAK,gBAAkBC,EAAa,KAAK,IAAM,GAC/D+C,EACAA,EAAa,OAAQtD,IAAUA,EAAK,KAAK,MAAQ,KAAK,OAAO,KAAK,KAAK,SAAS,GAC7E,YAAY,EACZ,QAAQO,EAAa,KAAK,EAAE,YAAY,CAAC,IAAM,EAAE,CAE9D,EAV0B,2BAW1B,eAAiBzB,EAAA,IAAM,CACnB,GAAM,CAAE,YAAAgB,EAAa,gBAAAQ,CAAgB,EAAI,KAAK,OAAO,eAAe,EACpE,OAAOiD,GAAezD,EAAaQ,CAAe,CACtD,EAHiB,kBAIjB,kBAAoBxB,EAAA,IAAM,CACtB,GAAM,CAAE,YAAAgB,CAAY,EAAI,KAAK,OAAO,eAAe,EACnD,OAAO0D,GAAyB1D,CAAW,CAC/C,EAHoB,qBAIpB,8BAAgChB,EAACgB,GAAgB,CAE7C,IAAM2D,EADe3D,EAAY,OAAQE,GAASA,EAAK,OAAS,QAAUA,EAAK,SAAW,SAAS,EACpE,IAAKa,GAASA,EAAK,IAAI,EACtD,OAAO,KAAK,OAAO,KAAK,8BAA8B4C,CAAS,CACnE,EAJgC,iCAKhCC,IAAuB,CACnB,GAAM,CAAE,KAAAC,CAAK,EAAI,KAAK,OAAO,KACvB,CAAE,cAAeC,EAAK,YAAA9D,CAAY,EAAI,KAAK,OAAO,eAAe,EAEjE+D,EAAY,IAAI,IACtB/D,EAAY,QAASE,GAAS,CACtBA,EAAK,OAAS,QACd6D,EAAU,IAAI7D,EAAK,GAAIA,CAAI,CAEnC,CAAC,EAED,IAAM8D,EAAgBF,EAAI,IAAKG,GAAO,CAClC,IAAMC,EAAkBH,EAAU,IAAIE,CAAE,EACxC,GAAIC,GAAmB,KACnB,MAAM,IAAI,MAAM,2BAA2B,EAC/C,OAAOA,CACX,CAAC,EACD,OAAQnF,EAAKoF,GAAkB,CAAE,cAAeH,EAAe,WAAY,KAAK,uBAAwB,eAAgB,KAAK,eAAgB,KAAMH,CAAK,CAAC,CAC7J,CACA,OAAOO,EAAOC,EAAc,CAAC,EAAG,CAC5B,GAAM,CAAE,eAAAC,CAAe,EAAI,KAAK,OAAO,eAAe,EAChD,CAAE,KAAAT,CAAK,EAAI,KAAK,OAAO,KACxBS,IACD,KAAK,OAAO,eAAe,CAAE,eAAgB,EAAK,CAAC,EACnD,KAAK,SAAS,kBAAkB,EAChC,KAAK,WAAW,KAAK,OAAO,YAAY,GAE5C,IAAM9E,EAAO,CAAE,GAAG,KAAK,KAAM,GAAG6E,CAAY,EACtC,CAAE,cAAAE,EAAe,QAAAxE,CAAQ,EAAI,KAAK,OAAO,eAAe,EACxDyE,EAAa,KAAK,OAAO,MAAQ1F,GACvC,GAAIyF,IAAkB,GAClB,OAAQxF,EAAK0F,GAAU,CAAE,WAAY,KAAK,OAAO,MAAO,WAAYD,EAAY,WAAY,KAAK,WAAY,KAAM,KAAK,OAAO,KAAK,KAAM,WAAYhF,EAAK,eAAgB,QAASO,CAAQ,CAAC,EAEjM,GAAM,CAAE,YAAAC,EAAa,SAAAqC,EAAU,aAAA5B,EAAc,cAAAuD,CAAc,EAAI,KAAK,OAAO,eAAe,EACpFU,EAAc,KAAK,eAAe,EACxC,OAAQ3F,EAAM,MAAO,CAAE,aAAW,GAAA4F,SAAW,uBAAwB,kCAAkCnF,EAAK,QAAQ,EAAE,EAAG,SAAU,CAACT,EAAK6F,GAAQ,CAAE,gBAAiBpF,EAAK,gBAAiB,WAAY,KAAK,WAAY,YAAakF,EAAa,WAAYF,EAAY,MAAO,KAAK,OAAO,MAAO,OAAQ,KAAK,OAAQ,SAAUnC,EAAU,KAAMwB,CAAK,CAAC,EAAGrE,EAAK,YAAeT,EAAK8F,GAAa,CAAE,MAAOpE,EAAc,SAAUzB,EAACiC,GAAM,KAAK,cAAcA,CAAC,EAA3B,YAA8B,SAAUjC,EAAA,IAAM,CAAE,EAAR,YAAW,WAAY6E,EAAK,QAAQ,EAAG,KAAMA,CAAK,CAAC,EAAIG,EAAiB,KAAKJ,GAAqB,EAAM7E,EAAK+F,GAAS,CAAE,eAAgB,KAAK,eAAgB,qBAAsB,KAAK,wBAAwB,EAAG,WAAY,KAAK,WAAY,YAAatF,EAAK,YAAa,eAAgBqE,EAAK,cAAc,EAAG,aAAc,KAAK,aAAc,SAAUrE,EAAK,SAAU,WAAYA,EAAK,WAAY,KAAM,KAAK,OAAO,KAAK,KAAM,UAAWO,EAAS,UAAW,WAAY,CAAC,EAAIhB,EAAKgG,GAAe,CAAE,YAAa/E,EAAa,YAAa,KAAK,YAAa,gBAAiB,KAAK,gBAAiB,KAAM6D,EAAM,8BAA+B,KAAK,6BAA8B,CAAC,CAAC,CAAE,CAAC,CAChnC,CACJ,EgCxbA,IAAAmB,GAAuB,WCKvB,SAASC,GAAW,CAAE,MAAAC,EAAO,SAAAC,EAAU,SAAAC,EAAU,WAAAC,EAAY,QAAAC,EAAU,GAAO,SAAAC,CAAU,EAAG,CACvF,GAAM,CAAE,OAAAC,CAAO,EAAIC,GAAcL,CAAQ,EACzC,OAAQM,EAAM,UAAW,CAAE,UAAW,sBAAuB,SAAU,CAACA,EAAK,QAAS,CAAE,UAAW,0DAA2D,KAAM,SAAU,aAAcL,EAAY,YAAaA,EAAY,MAAOH,EAAO,QAASS,EAACC,GAAMT,EAASS,EAAE,OAAO,KAAK,EAA9B,WAAiC,KAAMJ,EAAQ,SAAUF,EAAS,4BAA6B,EAAK,CAAC,EAAGI,EAAK,SAAU,CAAE,SAAUJ,EAAS,UAAW,8EAA+E,KAAM,SAAU,KAAME,EAAQ,SAAUD,CAAS,CAAC,CAAC,CAAE,CAAC,CACxhB,CAHSI,EAAAV,GAAA,cAIT,IAAOY,GAAQZ,GDGf,IAAMa,GAAe,CACjB,QAAS,GACT,aAAc,GACd,YAAa,CACT,CACI,KAAM,OACN,GAAI,KACJ,OAAQ,GACR,aAAc,IAClB,CACJ,EACA,gBAAiB,KACjB,YAAa,EACjB,EACMC,GAAiB,CACnB,SAAU,OACV,WAAY,GACZ,WAAY,GACZ,UAAW,WACf,EAKqBC,GAArB,KAAwC,CAtCxC,MAsCwC,CAAAC,EAAA,2BACpC,OAAO,QAAUC,GAAY,QAC7B,OACA,SACA,KACA,iBAAmB,GACnB,aAAe,KACf,YAAYC,EAAQC,EAAM,CACtB,KAAK,OAASD,EACd,KAAK,SAAWC,EAAK,SACrB,KAAK,KAAO,CAAE,GAAGL,GAAgB,GAAGK,CAAK,EACzC,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EAEnC,KAAK,iBAAiB,EAEtB,KAAK,OAAO,KAAK,GAAG,wBAAyB,KAAK,gBAAgB,EAClE,KAAK,OAAO,KAAK,sBAAsB,KAAK,SAAS,SAAU,KAAK,QAAQ,CAChF,CACA,UAAW,CAEX,CACA,WAAWC,EAAS,CAChB,KAAK,OAAO,eAAe,CAAE,QAAAA,CAAQ,CAAC,CAC1C,CACA,kBAAmB,CACf,KAAK,OAAO,eAAeP,EAAY,CAC3C,CACA,iBAAkB,CACd,GAAM,CAAE,YAAAQ,CAAY,EAAI,KAAK,OAAO,eAAe,EAC7CC,EAAiBD,EAAY,IAAKE,GAASA,EAAK,OAAS,OAASA,EAAO,CAAE,GAAGA,EAAM,OAAQ,WAAY,CAAC,EAC/G,KAAK,OAAO,eAAe,CAAE,YAAaD,CAAe,CAAC,CAC9D,CACA,MAAM,QAAS,CACX,GAAM,CAAE,aAAAE,CAAa,EAAI,KAAK,OAAO,eAAe,EACpD,GAAIA,IAAiB,GAErB,MAAK,WAAW,EAAI,EACpB,GAAI,CACA,IAAMC,EAAW,MAAM,KAAK,SAAS,OAAOD,CAAY,EAClDF,EAAiB,CACnB,CACI,KAAM,OACN,GAAI,KACJ,OAAQ,GACR,aAAcG,EAAS,aAC3B,EACA,GAAGA,EAAS,MAAM,IAAKF,IAAU,CAC7B,KAAM,OACN,GAAIA,EAAK,YACT,OAAQ,YACR,SAAU,KACV,KAAMA,CACV,EAAE,CACN,EACA,KAAK,OAAO,eAAe,CACvB,YAAaD,EACb,YAAa,EACjB,CAAC,CACL,OACOI,EAAO,CACVC,GAAY,KAAK,OAAO,IAAI,EAAED,CAAK,CACvC,CACA,KAAK,WAAW,EAAK,EACzB,CACA,MAAM,aAAaE,EAAO,CACtB,GAAM,CAAE,YAAAP,EAAa,aAAAG,CAAa,EAAI,KAAK,OAAO,eAAe,EAC3DK,EAAOR,EAAY,KAAMS,GAAMA,EAAE,OAAS,MAAM,EACtD,GAAIC,GAAmBH,CAAK,GACxB,CAAC,KAAK,kBACNC,EAAK,aAAc,CACnB,KAAK,iBAAmB,GACxB,GAAI,CACA,IAAMJ,EAAW,MAAM,KAAK,SAAS,OAAOD,EAAcK,EAAK,YAAY,EACrEG,EAAU,CACZ,GAAGH,EACH,aAAcJ,EAAS,aAC3B,EACMQ,EAAWZ,EAAY,OAAQS,GAAMA,EAAE,OAAS,MAAM,EACtDR,EAAiB,CACnBU,EACA,GAAGC,EACH,GAAGR,EAAS,MAAM,IAAKF,IAAU,CAC7B,KAAM,OACN,GAAIA,EAAK,YACT,OAAQ,YACR,SAAU,KACV,KAAMA,CACV,EAAE,CACN,EACA,KAAK,OAAO,eAAe,CAAE,YAAaD,CAAe,CAAC,CAC9D,OACOI,EAAO,CACVC,GAAY,KAAK,OAAO,IAAI,EAAED,CAAK,CACvC,CACA,KAAK,iBAAmB,EAC5B,CACJ,CACA,MAAM,aAAc,CAChB,GAAM,CAAE,YAAAL,CAAY,EAAI,KAAK,OAAO,eAAe,EAE7Ca,EAAiBC,GAAyBd,CAAW,EAC3De,GAASF,EAAgB,KAAK,OAAQ,KAAK,QAAQ,EAEnD,KAAK,iBAAiB,CAC1B,CACA,eAAeG,EAASC,EAAmB,CACvC,GAAM,CAAE,YAAAjB,CAAY,EAAI,KAAK,OAAO,eAAe,EAC7CkB,EAAeC,GAAgBH,EAAQ,GAAI,KAAK,wBAAwB,EAAGC,EAAmB,KAAK,YAAY,EAC/GhB,EAAiBmB,GAAiB,oBAAoBpB,EAAakB,CAAY,EACrF,KAAK,OAAO,eAAe,CAAE,YAAajB,CAAe,CAAC,EAC1D,KAAK,aAAee,EAAQ,EAChC,CACA,mBAAqBrB,EAAC0B,GAAS,CAC3B,IAAMC,EAAgBC,GAAqBF,CAAI,EAE/C,OADe,KAAK,OAAO,KAAK,mBAAmBC,CAAa,CAEpE,EAJqB,sBAKrB,wBAA0B3B,EAAA,IAAM,CAC5B,GAAM,CAAE,YAAAK,CAAY,EAAI,KAAK,OAAO,eAAe,EACnD,OAAOA,EAAY,OAAQE,GAASA,EAAK,OAAS,MAAM,CAC5D,EAH0B,2BAI1B,gBAAkBP,EAACQ,GAAiB,CAChC,KAAK,OAAO,eAAe,CAAE,aAAAA,CAAa,CAAC,EACvCA,IAAiB,IACjB,KAAK,OAAO,eAAe,CAAE,YAAa,CAAC,CAAE,CAAC,CAEtD,EALkB,mBAMlB,8BAAgCR,EAACK,GAAgB,CAE7C,IAAMwB,EADexB,EAAY,OAAQE,GAASA,EAAK,OAAS,QAAUA,EAAK,SAAW,SAAS,EACpE,IAAKmB,GAASA,EAAK,IAAI,EACtD,OAAO,KAAK,OAAO,KAAK,8BAA8BG,CAAS,CACnE,EAJgC,iCAKhC,OAAOC,EAAOC,EAAc,CAAC,EAAG,CAC5B,GAAM,CAAE,YAAAC,EAAa,aAAAxB,EAAc,QAAAJ,EAAS,YAAAC,CAAY,EAAI,KAAK,OAAO,eAAe,EACjF,CAAE,KAAA4B,CAAK,EAAI,KAAK,OAAO,KACvB9B,EAAO,CAAE,GAAG,KAAK,KAAM,GAAG4B,CAAY,EAC5C,OAAIC,EACQE,EAAKC,GAAY,CAAE,MAAO3B,EAAc,SAAU,KAAK,gBAAiB,SAAU,KAAK,OAAQ,WAAYyB,EAAK,mBAAmB,EAAG,SAAUA,EAAK,cAAc,CAAE,CAAC,EAE1KC,EAAM,MAAO,CAAE,aAAW,GAAAE,SAAW,uBAAwB,kCAAkCjC,EAAK,QAAQ,EAAE,EAAG,SAAU,CAACA,EAAK,YAAe+B,EAAKG,GAAa,CAAE,MAAO7B,EAAc,SAAU,KAAK,gBAAiB,SAAU,KAAK,OAAQ,WAAYyB,EAAK,QAAQ,EAAG,KAAMA,CAAK,CAAC,EAAIC,EAAKI,GAAS,CAAE,eAAgB,KAAK,eAAgB,qBAAsB,KAAK,wBAAwB,EAAG,aAAc,KAAK,aAAc,WAAYtC,EAAA,SAAY,CAAE,EAAd,cAAiB,eAAgBiC,EAAK,iBAAiB,EAAG,SAAU9B,EAAK,SAAU,WAAYA,EAAK,WAAY,UAAWC,EAAS,KAAM6B,EAAM,YAAa,GAAO,UAAW,KAAK,KAAK,SAAU,CAAC,EAAGC,EAAKK,GAAe,CAAE,YAAalC,EAAa,YAAa,KAAK,YAAa,gBAAiB,KAAK,gBAAiB,KAAM4B,EAAM,8BAA+B,KAAK,6BAA8B,CAAC,CAAC,CAAE,CAAC,CACh1B,CACJ,EE1LA,IAAAO,GAAA,CACE,KAAQ,cACR,YAAe,qEACf,QAAW,QACX,QAAW,MACX,MAAS,qBACT,SAAY,CACV,gBACA,OACA,cACA,QACA,aACA,QACA,SACA,eACF,EACA,KAAQ,SACR,YAAe,CACb,OACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,kBAAmB,mBACnB,sBAAuB,uBACvB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,cACf,OAAU,WACZ,EACA,gBAAmB,CACjB,QAAW,SACX,MAAS,UACT,QAAW,SACX,cAAe,UACf,KAAQ,UACR,WAAc,SACd,OAAU,QACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,cAAiB,CACf,OAAU,QACZ,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,cACb,KAAQ,uDACV,CACF,EClEA,IAAOC,GAAQ,CACX,QAAS,CACL,gBAAiB,QAGjB,oBAAqB,wBAGrB,mBAAoB,uBAEpB,sBAAuB,yCAEvB,4BAA6B,0EAE7B,aAAc,2BAEd,mBAAoB,sFAEpB,wBAAyB,uEAGzB,gBAAiB,uCAGjB,mBAAoB,uBAGpB,oBAAqB,uBACzB,CACJ,EC5BA,IAAOC,GAAQC,EAACC,GAAU,CACtB,GAAM,CAAE,KAAAC,EAAM,SAAAC,EAAU,KAAAC,CAAK,EAAIH,EACjC,OAAQI,EAAM,MAAO,CAAE,UAAW,wBAAyB,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,4BAA6B,SAAUH,EAAK,CAAE,CAAC,EAAGG,EAAK,MAAO,CAAE,UAAW,mBAAoB,SAAqBD,EAAXD,EAAgB,wBAAgC,cAAT,CAAyB,CAAC,EAAGE,EAAK,IAAK,CAAE,SACtQD,EADgRD,EAC3Q,8BACA,oBAD6B,CACP,CAAC,CAAC,CAAE,CAAC,CACtD,EALe,WCAf,IAAOG,GAAQC,EAAA,CAAC,CAAE,gBAAAC,EAAiB,aAAAC,EAAc,eAAAC,CAAgB,IACrDC,EAAK,MAAO,CAAE,UAAW,yBAA0B,SAAUA,EAAK,SAAU,CAAE,UAAW,6CAA8C,SAAUJ,EAACK,GAAU,CACxJF,EAAeE,EAAM,OAAO,KAAK,CACrC,EAFiJ,YAE9I,SAAUH,EAAa,IAAKI,GAAiBF,EAAK,SAAU,CAAE,MAAOE,EAAY,SAAU,SAAUA,EAAY,WAAaL,EAAiB,SAAUK,EAAY,KAAM,EAAGA,EAAY,QAAQ,CAAE,CAAE,CAAC,CAAE,CAAC,EAH1M,WCAf,SAASC,GAAWC,EAAG,CACnB,OAAO,OAAOA,GAAM,UACxB,CAFSC,EAAAF,GAAA,cAGT,SAASG,GAAOF,EAAG,CACf,OAAOD,GAAWC,CAAC,EAAIA,EAAE,EAAIA,CACjC,CAFSC,EAAAC,GAAA,UAMT,IAAqBC,GAArB,KAAuC,CAVvC,MAUuC,CAAAF,EAAA,0BACnC,OACA,cACA,MACA,OACA,SACA,aACA,UACA,YACA,aACA,aACA,OACA,YAAYG,EAAQC,EAAU,CAAC,EAAG,CAC9B,IAAMC,EAAgBD,EAAQ,QAAU,CAAC,EACnCE,EAAuBF,EAAQ,eACjC,CAAC,EACL,KAAK,SAAW,KAChB,KAAK,aAAe,EACpB,KAAK,OAASD,EACd,KAAK,MAAQF,GAAOI,EAAc,KAAK,GAAK,KAAK,OAAO,MACxD,KAAK,OAASJ,GAAOI,EAAc,MAAM,GAAK,KAAK,OAAO,OAC1D,KAAK,OAAO,MAAQ,KAAK,MACzB,KAAK,OAAO,OAAS,KAAK,OAC1B,KAAK,cAAgB,KAAK,OAAO,WAAW,IAAI,EAChD,KAAK,cAAc,UACfJ,GAAOK,EAAqB,SAAS,GAAK,qBAC9C,KAAK,cAAc,YACfL,GAAOK,EAAqB,WAAW,GAAK,eAChD,KAAK,cAAc,UAAYL,GAAOK,EAAqB,SAAS,GAAK,EACzE,KAAK,YAAcR,GAAWM,EAAQ,WAAW,EAC3CA,EAAQ,YACR,IAAM,CAAE,CAClB,CACA,UAAUG,EAAc,CACpB,KAAK,aAAeA,EACpB,KAAK,aAAe,KAAK,aAAa,QACtC,KAAK,SAAW,KAAK,aAAa,eAAe,EACjD,KAAK,SAAS,QAAU,KACxB,KAAK,aAAe,KAAK,SAAS,kBAClC,KAAK,OAAS,KAAK,aAAa,mBAAmB,EACnD,KAAK,UAAY,IAAI,WAAW,KAAK,YAAY,EACjD,KAAK,SAAS,sBAAsB,KAAK,SAAS,EAClD,KAAK,aAAa,QAAQ,KAAK,QAAQ,CAC3C,CACA,MAAO,CACH,GAAM,CAAE,SAAAC,EAAU,UAAAC,EAAW,aAAAC,CAAa,EAAI,KACxCC,EAAM,KAAK,cACXC,EAAI,KAAK,MACTC,EAAI,KAAK,OACXL,GACAA,EAAS,sBAAsBC,CAAS,EAE5CE,EAAI,SAAS,EAAG,EAAGC,EAAGC,CAAC,EACvBF,EAAI,UAAU,EACd,IAAMG,EAAcF,EAAI,EAAOF,EAC3BK,EAAI,EACHL,GACDC,EAAI,OAAO,EAAG,KAAK,OAAS,CAAC,EAEjC,QAASK,EAAI,EAAGA,EAAIN,EAAcM,IAAK,CAEnC,IAAMC,EADIR,EAAUO,CAAC,EAAI,KACVH,EAAI,GACfG,IAAM,EACNL,EAAI,OAAOI,EAAGE,CAAC,EAGfN,EAAI,OAAOI,EAAGE,CAAC,EAEnBF,GAAKD,CACT,CACAH,EAAI,OAAOC,EAAGC,EAAI,CAAC,EACnBF,EAAI,OAAO,EACX,KAAK,YAAY,IAAI,EACrB,sBAAsB,KAAKO,EAAK,CACpC,CACAA,GAAQlB,EAAA,IAAM,KAAK,KAAK,EAAhB,QACZ,ECrFA,SAASmB,GAAc,CAAE,UAAAC,EAAW,KAAAC,CAAK,EAAG,CACxC,OAAQC,EAAK,SAAU,CAAE,UAAW,4CAA6C,KAAM,SAAU,MAAOD,EAAK,qBAAqB,EAAG,aAAcA,EAAK,qBAAqB,EAAG,QAASD,EAAW,4BAA6B,GAAM,SAAUE,EAAK,MAAO,CAAE,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,MAAO,6BAA8B,cAAe,OAAQ,UAAW,cAAe,SAAUA,EAAM,IAAK,CAAE,KAAM,OAAQ,SAAU,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,kDAAmD,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,mDAAoD,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CACzmB,CAFSC,EAAAJ,GAAA,iBAGT,IAAOK,GAAQL,GCHA,SAARM,GAA8B,CAAE,UAAAC,EAAW,iBAAAC,EAAkB,gBAAAC,EAAiB,KAAAC,CAAM,EAAG,CAC1F,OAAIH,EACQI,EAAK,SAAU,CAAE,UAAW,4CAA6C,KAAM,SAAU,MAAOD,EAAK,oBAAoB,EAAG,aAAcA,EAAK,oBAAoB,EAAG,QAASD,EAAiB,4BAA6B,GAAM,SAAUE,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,MAAO,OAAQ,MAAO,QAAS,cAAe,SAAUA,EAAK,OAAQ,CAAE,EAAG,KAAM,EAAG,KAAM,MAAO,KAAM,OAAQ,IAAK,CAAC,CAAE,CAAC,CAAE,CAAC,EAErcA,EAAK,SAAU,CAAE,UAAW,4CAA6C,KAAM,SAAU,MAAOD,EAAK,qBAAqB,EAAG,aAAcA,EAAK,qBAAqB,EAAG,QAASF,EAAkB,4BAA6B,GAAM,SAAUG,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,OAAQ,OAAQ,OAAQ,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,weAAye,KAAM,OAAQ,YAAa,SAAU,CAAC,CAAE,CAAC,CAAE,CAAC,CACr7B,CALwBC,EAAAN,GAAA,gBCGT,SAARO,GAA+BC,EAAS,CAC3C,MAAO,GAAG,KAAK,MAAMA,EAAU,EAAE,CAAC,IAAI,OAAOA,EAAU,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAC/E,CAFwBC,EAAAF,GAAA,iBCFT,SAARG,GAAiC,CAAE,uBAAAC,CAAwB,EAAG,CACjE,IAAMC,EAAkCC,GAAcF,CAAsB,EAC5E,OAAOG,EAAK,OAAQ,CAAE,SAAUF,CAAgC,CAAC,CACrE,CAHwBG,EAAAL,GAAA,mBCDxB,SAASM,GAAa,CAAE,SAAAC,EAAU,KAAAC,CAAK,EAAG,CACtC,OAAQC,EAAK,SAAU,CAAE,UAAW,sEAAuE,KAAM,SAAU,MAAOD,EAAK,oBAAoB,EAAG,aAAcA,EAAK,oBAAoB,EAAG,QAASD,EAAU,4BAA6B,GAAM,SAAUE,EAAK,MAAO,CAAE,MAAO,KAAM,OAAQ,IAAK,QAAS,WAAY,MAAO,6BAA8B,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,SAAUA,EAAK,OAAQ,CAAE,KAAM,OAAQ,SAAU,UAAW,EAAG,wDAAyD,CAAC,CAAE,CAAC,CAAE,CAAC,CACljB,CAFSC,EAAAJ,GAAA,gBAGT,IAAOK,GAAQL,GCIA,SAARM,GAAiCC,EAAO,CAC3C,GAAM,CAAE,OAAAC,EAAQ,cAAAC,EAAe,OAAAC,EAAQ,UAAAC,EAAW,kBAAAC,EAAmB,aAAAC,EAAc,wBAAAC,EAAyB,SAAAC,EAAU,KAAAC,EAAM,iBAAAC,EAAkB,gBAAAC,EAAiB,uBAAAC,EAAwB,uBAAAC,CAAwB,EAAIb,EAC7Mc,EAAWC,GAAO,IAAI,EACtBC,EAAeD,GAAO,EAE5BE,GAAU,IACC,IAAM,CACTD,EAAa,QAAU,KACvBb,EAAO,CACX,EACD,CAACA,CAAM,CAAC,EAEXc,GAAU,IAAM,CACZ,GAAI,CAACf,IACDc,EAAa,QAAU,IAAIE,GAAkBJ,EAAS,QAAS,CAC3D,OAAQ,CACJ,MAAO,IACP,OAAQ,GACZ,EACA,cAAe,CACX,UAAW,EACX,UAAW,aACX,YAAa,OACjB,CACJ,CAAC,EACDE,EAAa,QAAQ,KAAK,EACtBf,GAAQ,CAER,IAAMkB,EADe,IAAI,aAAa,EACV,wBAAwBlB,CAAM,EAC1De,EAAa,QAAQ,UAAUG,CAAM,CACzC,CAER,EAAG,CAACjB,EAAeD,CAAM,CAAC,EAC1B,IAAMmB,EAAmBlB,GAAiB,KACpCmB,EAAyB,CAACD,GAAoBf,EAC9CiB,EAAgCf,GAClC,CAACa,GACDd,GACAA,EAAa,OAAS,EAC1B,OAAQiB,EAAM,MAAO,CAAE,UAAW,uBAAwB,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,4BAA6B,SAAUH,EAEzHG,EAAK,QAAS,CAAE,UAAW,oBAAqB,SAAU,GAAM,IAAKrB,CAAc,CAAC,EAAMqB,EAAK,SAAU,CAAE,IAAKT,EAAU,UAAW,mBAAoB,CAAC,CAAG,CAAC,EAAGS,EAAM,MAAO,CAAE,UAAW,oBAAqB,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,kCAAmC,SAAUD,EAAgCE,GAAkBxB,CAAK,EAAI,IAAK,CAAC,EAAGuB,EAAM,MAAO,CAAE,UAAW,6BAA8B,SAAU,CAACF,GAA2BE,EAAKE,GAAc,CAAE,UAAWrB,EAAW,iBAAkBM,EAAkB,gBAAiBC,EAAiB,KAAMF,CAAK,CAAC,EAAIW,GAAoBG,EAAKG,GAAc,CAAE,SAAUlB,EAAU,KAAMC,CAAK,CAAC,EAAGW,GAAqBG,EAAKI,GAAe,CAAE,UAAWf,EAAwB,KAAMH,CAAK,CAAC,CAAE,CAAE,CAAC,EAAGc,EAAK,MAAO,CAAE,UAAW,6BAA8B,SAAU,CAACH,GAAqBG,EAAKK,GAAiB,CAAE,uBAAwBf,CAAuB,CAAC,CAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAC76B,CA1CwBgB,EAAA9B,GAAA,mBCRT,SAAR+B,IAAyC,CAC5C,OAAQ,OAAO,eAAkB,YAC7B,OAAO,cAAc,WAAW,OAAU,UAClD,CAHwBC,EAAAD,GAAA,yBCWxB,IAAqBE,GAArB,cAAmCC,EAAS,CAX5C,MAW4C,CAAAC,EAAA,cACxC,OAAO,QAAUC,GAAY,QAC7BC,GACA,KACAC,GAAU,KACVC,GAAe,GACfC,GAAmB,KACnBC,GAAY,KACZC,GAAqB,KACrBC,GACAC,GACA,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAKH,GAAgB,UAAU,aAC/B,KAAKC,GAAqB,KAAKD,IAAiB,KAChD,KAAK,GAAK,KAAK,KAAK,IAAM,QAC1B,KAAK,KAAO,WACZ,KAAK,KAAO,IAAOI,EAAK,MAAO,CAAE,UAAW,8BAA+B,cAAe,OAAQ,UAAW,QAAS,MAAO,OAAQ,OAAQ,OAAQ,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,2VAA4V,KAAM,eAAgB,YAAa,SAAU,CAAC,CAAE,CAAC,EACplB,KAAK,cAAgBC,GACrB,KAAK,KAAO,CAAE,GAAGF,CAAK,EACtB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,iBAAiB,EACxC,KAAK,eAAe,CAChB,SAAU,GACV,WAAY,GACZ,YAAa,KACb,uBAAwB,EACxB,aAAc,CAAC,EACf,gBAAiB,IACrB,CAAC,CACL,CACAG,IAAiB,CACb,OAAK,KAAKN,GAGH,KAAKA,GAAc,iBAAiB,EAAE,KAAMO,GACxCA,EAAQ,KAAMC,GAAWA,EAAO,OAAS,YAAY,CAC/D,EAJU,QAAQ,QAAQ,EAAK,CAKpC,CACAC,GAASjB,EAACkB,GAAY,CAClB,GAAI,CAAC,KAAKT,GACN,OAAO,QAAQ,OAAO,IAAI,MAAM,iCAAiC,CAAC,EAEtE,KAAKL,GAAe,GACpB,KAAKU,GAAe,EAAE,KAAMK,IACxB,KAAK,eAAe,CAChB,SAAAA,CACJ,CAAC,EAEM,KAAKX,GACP,aAAa,CAAE,MAAO,EAAK,CAAC,EAC5B,KAAMY,GAAW,CAClB,KAAKjB,GAAUiB,EACf,IAAIC,EAAkB,KAChBC,EAASF,EAAO,eAAe,EAChCF,GAAS,SAIVG,EAAkBC,EAAO,SAAUC,GACxBA,EAAM,YAAY,EAAE,WAAaL,EAAQ,QACnD,EALDG,EAAkBC,EAAO,CAAC,EAAE,YAAY,EAAE,SAQ9C,KAAKE,GAAe,EACpB,KAAK,eAAe,CAChB,gBAAAH,EACA,WAAY,EAChB,CAAC,CACL,CAAC,EACI,MAAOI,GAAQ,CAChB,KAAK,eAAe,CAChB,WAAY,GACZ,YAAaA,CACjB,CAAC,EACD,KAAK,KAAK,KAAKA,EAAI,QAAS,OAAO,CACvC,CAAC,EACJ,CACL,EAvCS,UAwCTC,GAAkB1B,EAAA,IAAM,CAEpB,KAAKM,GAAY,IAAI,cAAc,KAAKH,EAAO,EAC/C,KAAKE,GAAmB,CAAC,EACzB,IAAIsB,EAA2B,GAC/B,KAAKrB,GAAU,iBAAiB,gBAAkBsB,GAAU,CACxD,KAAKvB,GAAiB,KAAKuB,EAAM,IAAI,EACrC,GAAM,CAAE,aAAAC,CAAa,EAAI,KAAK,KAAK,KACnC,GAAI,KAAKxB,GAAiB,OAAS,GAC/BwB,EAAa,aAAe,MAC5B,CAACF,EAA0B,CAC3B,IAAMG,EAAY,KAAKzB,GAAiB,OAAO,CAAC0B,EAAKC,IAAUD,EAAMC,EAAM,KAAM,CAAC,EAI5EC,GAFoBH,EAAY,KAAKzB,GAAiB,CAAC,EAAE,OAC1D,KAAKA,GAAiB,OAAS,GACY,EAC1C6B,EAAU,KAAK,IAAI,EAAGL,EAAa,YAAcI,CAAoB,EACvEH,EAAYI,IACZP,EAA2B,GAC3B,KAAK,KAAK,KAAK,KAAK,KAAK,yBAAyB,EAAG,UAAW,GAAI,EACpE,KAAKQ,GAAe,EAE5B,CACJ,CAAC,EAGD,KAAK7B,GAAU,MAAM,GAAG,EAExB,KAAKJ,GAAwB,YAAY,IAAM,CAC3C,IAAMkC,EAAyB,KAAK,eAAe,EAC9C,uBACL,KAAK,eAAe,CAChB,uBAAwBA,EAAyB,CACrD,CAAC,CACL,EAAG,GAAI,EACP,KAAK,eAAe,CAChB,YAAa,EACjB,CAAC,CACL,EAtCkB,mBAuClBD,GAAiBnC,EAAA,IACG,IAAI,QAASqC,GAAY,CACrC,KAAK/B,GAAU,iBAAiB,OAAQ,IAAM,CAC1C+B,EAAQ,CACZ,CAAC,EACD,KAAK/B,GAAU,KAAK,EACpB,cAAc,KAAKJ,EAAqB,EACxC,KAAK,eAAe,CAAE,uBAAwB,CAAE,CAAC,CACrD,CAAC,EAEI,KAAK,KACN,KAAK,eAAe,CAChB,YAAa,EACjB,CAAC,EACM,KAAKoC,GAAU,EACzB,EACI,KAAMC,GAAS,CAChB,GAAI,CACA,KAAKhC,GAAqBgC,EAE1B,KAAK,eAAe,CAChB,cAAe,IAAI,gBAAgBA,EAAK,IAAI,CAChD,CAAC,CACL,OACOd,EAAK,CAEHA,EAAI,eACL,KAAK,KAAK,IAAIA,CAAG,CAEzB,CACJ,CAAC,EACI,KAAK,IAAM,CACZ,KAAKpB,GAAmB,KACxB,KAAKC,GAAY,IACrB,EAAIkC,GAAU,CACV,WAAKnC,GAAmB,KACxB,KAAKC,GAAY,KACXkC,CACV,CAAC,EAtCY,kBAwCjBC,GAAwBzC,EAAA,IAAM,CAC1B,KAAK,eAAe,CAAE,cAAe,IAAK,CAAC,EAC3C,KAAKO,GAAqB,IAC9B,EAHwB,yBAIxBmC,GAAU1C,EAAA,IAAM,CACZ,GAAI,CACI,KAAKO,IACL,KAAK,KAAK,QAAQ,KAAKA,EAAkB,CAEjD,OACOkB,EAAK,CAEHA,EAAI,eACL,KAAK,KAAK,IAAIA,EAAK,SAAS,CAEpC,CACJ,EAZU,WAaVkB,GAAQ3C,EAAA,SAAY,CACZ,KAAKG,IACe,KAAKA,GAAQ,eAAe,EACpC,QAASoB,GAAUA,EAAM,KAAK,CAAC,EAE3C,KAAKjB,IACL,MAAM,IAAI,QAAS+B,GAAY,CAC3B,KAAK/B,GAAU,iBAAiB,OAAQ+B,EAAS,CAAE,KAAM,EAAK,CAAC,EAC/D,KAAK/B,GAAU,KAAK,EACpB,cAAc,KAAKJ,EAAqB,CAC5C,CAAC,EAEL,KAAKG,GAAmB,KACxB,KAAKC,GAAY,KACjB,KAAKF,GAAe,GACpB,KAAKD,GAAU,KACf,KAAK,eAAe,CAChB,cAAe,KACf,YAAa,GACb,uBAAwB,CAC5B,CAAC,CACL,EArBQ,SAsBRmC,IAAY,CAIR,IAAMM,EAAW,KAAKvC,GAAiB,KAAMwC,GAASA,EAAK,MAAM,OAAS,CAAC,EAAE,KACvEC,EAAgBC,GAAqBH,CAAQ,EACnD,GAAI,CAACE,EACD,OAAO,QAAQ,OAAO,IAAI,MAAM,yDAAyDF,CAAQ,GAAG,CAAC,EAEzG,IAAMI,EAAO,SAAS,KAAK,IAAI,CAAC,IAAIF,CAAa,GAC3CD,EAAO,IAAI,KAAK,KAAKxC,GAAkB,CAAE,KAAMuC,CAAS,CAAC,EACzDL,EAAO,CACT,OAAQ,KAAK,GACb,KAAAS,EACA,KAAM,IAAI,KAAK,CAACH,CAAI,EAAG,CAAE,KAAMD,CAAS,CAAC,EACzC,KAAMA,CACV,EACA,OAAO,QAAQ,QAAQL,CAAI,CAC/B,CACAU,GAAgBjD,EAACkD,GAAa,CAC1B,KAAKP,GAAM,EACX,KAAK1B,GAAO,CAAE,SAAAiC,CAAS,CAAC,CAC5B,EAHgB,iBAIhB1B,GAAiBxB,EAAA,IAAM,CACnB,KAAKQ,GAAc,iBAAiB,EAAE,KAAMO,GAAY,CACpD,KAAK,eAAe,CAChB,aAAcA,EAAQ,OAAQC,GAAWA,EAAO,OAAS,YAAY,CACzE,CAAC,CACL,CAAC,CACL,EANiB,kBAOjB,QAAS,CACA,KAAKZ,IACN,KAAKa,GAAO,EAEhB,IAAMkC,EAAa,KAAK,eAAe,EACvC,MAAI,CAACA,EAAW,YAAc,CAACA,EAAW,SAC9BvC,EAAKwC,GAAmB,CAAE,KAAM,KAAK,KAAM,KAAM,KAAK,KAAM,SAAUD,EAAW,QAAS,CAAC,EAE/FvC,EAAKyC,GAAiB,CAAE,GAAGF,EAAY,eAAgB,KAAKF,GAAe,iBAAkB,KAAKvB,GAAiB,gBAAiB,KAAKS,GAAgB,uBAAwB,KAAKM,GAAuB,SAAU,KAAKC,GAAS,OAAQ,KAAKC,GAAO,KAAM,KAAK,KAAM,wBAAyB,KAAK,KAAK,wBAAyB,kBAAmBW,GAAsB,EAAG,UAAWH,EAAW,YAAa,OAAQ,KAAKhD,EAAQ,CAAC,CACvb,CACA,SAAU,CACN,KAAK,eAAe,CAChB,WAAY,GACZ,uBAAwB,CAC5B,CAAC,EACD,GAAM,CAAE,OAAAoD,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,EAEvB,KAAK/C,KACL,KAAKgB,GAAe,EACpB,KAAKhB,GAAc,eAAiB,IAAM,CAEtC,GADA,KAAKgB,GAAe,EAChB,KAAKrB,GAAS,CACd,IAAIqD,EAAgB,GACd,CAAE,aAAAC,EAAc,gBAAApC,CAAgB,EAAI,KAAK,eAAe,EAC9DoC,EAAa,QAASC,GAAgB,CAC9BrC,IAAoBqC,EAAY,WAChCF,EAAgB,GAExB,CAAC,EACGA,IACA,KAAKb,GAAM,EACX,KAAK1B,GAAO,EAEpB,CACJ,EAER,CACA,WAAY,CACJ,KAAKd,IACL,KAAKwC,GAAM,EAEf,KAAK,QAAQ,CACjB,CACJ,EC3RA,IAAAgB,GAAA,CACE,KAAQ,eACR,YAAe,gCACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,cACb,KAAQ,uDACV,EACA,SAAY,CACV,gBACA,SACA,YACA,KACA,OACA,cACA,WACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,cAAe,aACjB,EACA,gBAAmB,CACjB,qBAAsB,WACtB,gCAAiC,WACjC,aAAc,cACd,MAAS,UACT,KAAQ,UACR,WAAc,SACd,OAAU,SACV,eAAgB,OAClB,EACA,iBAAoB,CAClB,aAAc,aAChB,CACF,ECzBA,SAASC,GAAuB,CAAE,OAAAC,EAAS,MAAO,aAAAC,EAAe,IAAK,qBAAAC,EAAuB,GAAI,cAAAC,EAAe,cAAAC,CAAe,EAAG,CAC9H,IAAMC,EAAa,OAAO,KAAKF,CAAa,EACvC,IAAKG,GAAMA,EAAE,YAAY,CAAC,EAC1B,KAAK,EACV,MAAO,CACHN,EACAC,EACAC,EACA,GAAGG,EAAW,IAAKC,GAAM,GAAGA,CAAC,IAAIH,EAAcG,CAAC,CAAC,EAAE,EACnD,GACAD,EAAW,KAAK,GAAG,EACnBD,CACJ,EAAE,KAAK;AAAA,CAAI,CACf,CAbSG,EAAAR,GAAA,0BAcT,IAAMS,GAAK,IAAI,YACTC,GAAY,CAAE,KAAM,OAAQ,KAAM,SAAU,EAClD,eAAeC,GAAOC,EAAM,CACxB,GAAM,CAAE,OAAAC,CAAO,EAAI,WAAW,OAC9B,OAAOA,EAAO,OAAOH,GAAU,KAAMD,GAAG,OAAOG,CAAI,CAAC,CACxD,CAHeJ,EAAAG,GAAA,UAIf,eAAeG,GAAgBC,EAAQ,CACnC,GAAM,CAAE,OAAAF,CAAO,EAAI,WAAW,OAC9B,OAAOA,EAAO,UAAU,MAAO,OAAOE,GAAW,SAAWN,GAAG,OAAOM,CAAM,EAAIA,EAAQL,GAAW,GAAO,CAAC,MAAM,CAAC,CACtH,CAHeF,EAAAM,GAAA,mBAIf,SAASE,GAAuBC,EAAa,CACzC,IAAMC,EAAY,IAAI,WAAWD,CAAW,EACxCE,EAAY,GAChB,QAASC,EAAI,EAAGA,EAAIF,EAAU,OAAQE,IAClCD,GAAaD,EAAUE,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,EAE1D,OAAOD,CACX,CAPSX,EAAAQ,GAAA,0BAQT,eAAeK,GAAKC,EAAKV,EAAM,CAC3B,GAAM,CAAE,OAAAC,CAAO,EAAI,WAAW,OAC9B,OAAOA,EAAO,KAAKH,GAAW,MAAMI,GAAgBQ,CAAG,EAAGb,GAAG,OAAOG,CAAI,CAAC,CAC7E,CAHeJ,EAAAa,GAAA,QAOf,eAAOE,GAAuC,CAAE,WAAAC,EAAY,cAAAC,EAAe,aAAAC,EAAc,WAAAC,EAAY,IAAAC,EAAK,OAAAC,EAAQ,QAAAC,EAAS,SAAAC,EAAU,WAAAC,CAAY,EAAG,CAEhJ,IAAMC,EAAO,MAAcJ,CAAM,iBAO3B3B,EAAe,IAAIyB,CAAU,IAAI,UAAUC,CAAG,EAAE,QAAQ,qBAAuBM,GAAM,IAAIA,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,GACtIC,EAAU,mBACVC,EAAkB,IAAI,KAAK,EAAE,YAAY,EAAE,QAAQ,cAAe,EAAE,EACpEC,EAAOD,EAAgB,MAAM,EAAG,CAAC,EACjCE,EAAQ,GAAGD,CAAI,IAAIR,CAAM,mBACzBU,EAAM,IAAI,IAAI,WAAWN,CAAI,GAAG/B,CAAY,EAAE,EAEpDqC,EAAI,aAAa,IAAI,kBAAmB,kBAAkB,EAC1DA,EAAI,aAAa,IAAI,uBAAwBJ,CAAO,EACpDI,EAAI,aAAa,IAAI,mBAAoB,GAAGf,CAAU,IAAIc,CAAK,EAAE,EACjEC,EAAI,aAAa,IAAI,aAAcH,CAAe,EAClDG,EAAI,aAAa,IAAI,gBAAiBT,CAAO,EAE7CS,EAAI,aAAa,IAAI,uBAAwBb,CAAY,EACzDa,EAAI,aAAa,IAAI,sBAAuB,MAAM,EAE9CP,GACAO,EAAI,aAAa,IAAI,aAAcP,CAAU,EAC7CD,GACAQ,EAAI,aAAa,IAAI,WAAYR,CAAQ,EAC7CQ,EAAI,aAAa,IAAI,OAAQP,GAAcD,EAAW,aAAe,WAAW,EAEhF,IAAMS,EAAYxC,GAAuB,CACrC,aAAAE,EACA,qBAAsBqC,EAAI,OAAO,MAAM,CAAC,EACxC,cAAe,CACX,KAAAN,CACJ,EACA,cAAeE,CACnB,CAAC,EAEKM,EAAkBzB,GAAuB,MAAML,GAAO6B,CAAS,CAAC,EAEhEE,EAAe,CACjB,mBACAN,EACAE,EACAG,CACJ,EAAE,KAAK;AAAA,CAAI,EAELE,EAAQ,MAAMtB,GAAK,OAAOI,CAAa,GAAIY,CAAI,EAC/CO,EAAU,MAAMvB,GAAKsB,EAAOd,CAAM,EAClCgB,EAAW,MAAMxB,GAAKuB,EAAS,IAAO,EACtCE,EAAW,MAAMzB,GAAKwB,EAAU,cAAc,EAC9CE,EAAY/B,GAAuB,MAAMK,GAAKyB,EAAUJ,CAAY,CAAC,EAE3E,OAAAH,EAAI,aAAa,IAAI,kBAAmBQ,CAAS,EAC1CR,CACX,CAzD8B/B,EAAAe,GAAA,mBCrE9B,IAAMyB,GAAK,KAAO,KACZC,GAAiB,CACnB,aAAaC,EAAM,CACf,OAAO,KAAK,KAAKA,EAAK,KAAO,GAAK,CACtC,EACA,YAAa,CAAE,EACf,gBAAiB,CAAE,EACnB,WAAY,CAAE,EACd,QAAQC,EAAK,CACT,MAAMA,CACV,CACJ,EACA,SAASC,GAAUC,EAAO,CACtB,GAAI,OAAOA,GAAU,SAEjB,OAAO,SAASA,EAAO,EAAE,EAE7B,GAAI,OAAOA,GAAU,SAEjB,OAAOA,EAEX,MAAM,IAAI,UAAU,mBAAmB,CAC3C,CAVSC,EAAAF,GAAA,aAWF,IAAMG,GAAsB,OAAO,qCAAqC,EAOzEC,GAAN,KAAwB,CA/BxB,MA+BwB,CAAAF,EAAA,0BACpB,QACAG,GAAmB,IAAIC,GACvBC,GAAU,CAAC,EACXC,GAAc,CAAC,EAIfC,GACAC,GACAC,GAAoB,GACpBC,GACAC,GACAC,GACAC,GACAC,GAAYd,EAACH,GAAQA,GAAK,QAAUI,GAAsB,KAAO,KAAKS,GAASb,CAAG,EAAtE,aACZkB,GAAqB,IACrBC,GAAe,EAAItB,GACnB,YAAYuB,EAAMC,EAAS,CACvB,KAAK,QAAU,CACX,GAAGvB,GACH,GAAGuB,CACP,EAEA,KAAK,QAAQ,eAAiBvB,GAAe,aAC7C,KAAKY,GAAQU,EACb,KAAKT,GAAQU,EAAQ,KACrB,KAAKP,GAAa,KAAK,QAAQ,UAC/B,KAAKD,GAAW,KAAK,QAAQ,QAC7B,KAAKE,GAAsB,KAAK,QAAQ,mBAIxC,KAAKC,GAAgBK,EAAQ,UAAYA,EAAQ,IACjD,KAAKC,GAAY,CACrB,CAKAA,IAAc,CACV,IAAMC,EAAW,KAAKb,GAAM,KACtBc,EAAqB,OAAO,KAAKT,IAAwB,WACzD,KAAKA,GAAoB,KAAKJ,EAAK,EACnC,EAAQ,KAAKI,GACnB,GAAIS,GAAsBD,EAAW,KAAKJ,GAAc,CAEpD,IAAIM,EAAY,KAAK,IAAI,KAAK,QAAQ,aAAa,KAAKf,EAAK,EAC7D,KAAKS,EAAY,EACbO,EAAY,KAAK,MAAMH,EAAWE,CAAS,EAE3CC,EAAY,KAAKR,KACjBQ,EAAY,KAAKR,GACjBO,EAAYF,EAAW,KAAKL,IAEhC,KAAKV,GAAU,MAAMkB,CAAS,EAC9B,QAASC,EAAS,EAAGC,EAAI,EAAGD,EAASJ,EAAUI,GAAUF,EAAWG,IAAK,CACrE,IAAMC,EAAM,KAAK,IAAIN,EAAUI,EAASF,CAAS,EAE3CK,EAAU3B,EAAA,IAAM,CAClB,IAAM4B,EAAKJ,EACX,OAAO,KAAKjB,GAAM,MAAMqB,EAAIF,CAAG,CACnC,EAHgB,WAUhB,GANA,KAAKrB,GAAQoB,CAAC,EAAI,CACd,QAAAE,EACA,WAAY,KAAKE,GAAgBJ,CAAC,EAClC,WAAY,KAAKK,GAAgBL,CAAC,EAClC,mBAAAJ,CACJ,EACI,KAAKR,GAAc,CACnB,IAAMkB,EAAOP,EAASF,EAAYF,EAAWA,EAAWI,EAASF,EAGjE,KAAKjB,GAAQoB,CAAC,EAAE,cAAgB,IAAM,CAClC,KAAKpB,GAAQoB,CAAC,EAAI,KAClB,KAAKnB,GAAYmB,CAAC,EAAE,SAAWM,CACnC,CACJ,CACJ,CACJ,MAEI,KAAK1B,GAAU,CACX,CACI,QAASL,EAAA,IAAM,KAAKO,GAAX,WACT,WAAY,KAAKsB,GAAgB,CAAC,EAClC,WAAY,KAAKC,GAAgB,CAAC,EAClC,mBAAAT,CACJ,CACJ,EAEJ,KAAKf,GAAc,KAAKD,GAAQ,IAAI,KAAO,CAAE,SAAU,CAAE,EAAE,CAC/D,CACA2B,IAAgB,CACZ,KAAK,QAAQ,cACR,WAAW,KAAKxB,GAAO,KAAKH,GAAS,KAAKF,GAAiB,MAAM,EACjE,KAAK,KAAKQ,GAAY,KAAKG,EAAS,EACzC,KAAKL,GAAoB,EAC7B,CACAwB,IAAgB,CACZ,KAAK,QAAQ,cACR,iBAAiB,KAAKzB,GAAO,KAAKH,GAAS,KAAKF,GAAiB,MAAM,EACvE,KAAK,KAAKQ,GAAY,KAAKG,EAAS,CAC7C,CACAe,GAAkB7B,EAACkC,GAAWC,GAAO,CACjC,GAAI,CAACA,EAAG,iBACJ,OACJ,KAAK7B,GAAY4B,CAAK,EAAE,SAAWpC,GAAUqC,EAAG,MAAM,EACtD,IAAMC,EAAgB,KAAK9B,GAAY,OAAO,CAAC+B,EAAGC,IAAMD,EAAIC,EAAE,SAAU,CAAC,EACzE,KAAK,QAAQ,WAAWF,EAAe,KAAK7B,GAAM,IAAI,CAC1D,EANkB,mBAOlBuB,GAAkB9B,EAACkC,GAAWK,GAAS,CAEnC,KAAKlC,GAAQ6B,CAAK,EAAI,KACtB,KAAK5B,GAAY4B,CAAK,EAAE,KAAOK,EAC/B,KAAKjC,GAAY4B,CAAK,EAAE,KAAO,GAC/B,IAAMM,EAAO,CACT,WAAYN,EAAQ,EACpB,KAAMK,CACV,EACA,KAAK,QAAQ,eAAeC,CAAI,CACpC,EAVkB,mBAWlBC,IAAe,CACX,KAAKtC,GAAiB,MAAM,EAC5B,KAAK,QAAQ,cACR,gBAAgB,KAAKK,EAAK,EAC1B,MAAOX,GAAQ,KAAK,QAAQ,IAAIA,CAAG,CAAC,CAC7C,CACA,OAAQ,CACA,KAAKY,IACA,KAAKN,GAAiB,OAAO,SAC9B,KAAKA,GAAiB,MAAMF,EAAmB,EACnD,KAAKE,GAAmB,IAAIC,GAC5B,KAAK6B,GAAc,GAEd,KAAKpB,IACV,KAAK,QAAQ,cAAc,kBAAkB,KAAKL,GAAO,CACrD,SAAU,KAAK,QAAQ,SACvB,IAAK,KAAK,QAAQ,GACtB,CAAC,EACD,KAAKyB,GAAc,GAGnB,KAAKD,GAAc,CAE3B,CACA,OAAQ,CACJ,KAAK7B,GAAiB,MAAMF,EAAmB,EAE/C,KAAKE,GAAmB,IAAIC,EAChC,CACA,MAAMsC,EAAM,CACJA,GAAM,OACN,KAAKD,GAAa,EAElB,KAAK,MAAM,CACnB,CACA,CAAC,OAAO,IAAI,0BAA0B,CAAC,GAAI,CACvC,OAAO,KAAKnC,EAChB,CACJ,EACOqC,GAAQzC,GC9LR,SAAS0C,GAAeC,EAAQ,CACnC,GAAIA,GAAQ,QACR,MAAMC,GAAiB,4BAA6B,CAChD,MAAOD,EAAO,MAClB,CAAC,CAET,CANgBE,EAAAH,GAAA,kBCChB,SAASI,GAAsBC,EAAW,CACtC,IAAMC,EAAY,IAAI,IAAID,CAAS,EACnC,OAAAC,EAAU,OAAS,GACnBA,EAAU,KAAO,GACVA,EAAU,IACrB,CALSC,EAAAH,GAAA,yBAMF,IAAMI,GAAN,KAA6B,CARpC,MAQoC,CAAAD,EAAA,+BAChCE,GACAC,GAAS,IAAI,QACbC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA,YAAYC,EAAUC,EAASC,EAAqBC,EAAS,CACzD,KAAKT,GAAYM,EACjB,KAAKH,GAAuBK,EAC5B,KAAKH,GAAWI,EAChB,KAAK,WAAWF,CAAO,CAC3B,CACA,WAAWA,EAAS,CAChB,IAAMD,EAAW,KAAKN,GAClB,yBAA0BO,IAC1B,KAAKd,GAAwBa,EAAS,oBAAoBC,EAAQ,qBAAsB,CAAE,SAAU,CAAE,CAAC,GAEvG,0BAA2BA,IAC3B,KAAKZ,GAAyBW,EAAS,oBAAoBC,EAAQ,sBAAuB,CAAE,SAAU,EAAG,CAAC,GAE1G,aAAcA,IACd,KAAKX,GAAkBU,EAAS,oBAAoBC,EAAQ,QAAQ,GAEpE,cAAeA,IACf,KAAKT,GAAaQ,EAAS,oBAAoBC,EAAQ,SAAS,GAEhE,4BAA6BA,IAC7B,KAAKL,GAAyBI,EAAS,oBAAoBC,EAAQ,wBAAyB,CAAE,SAAU,CAAE,CAAC,GAE3G,gBAAiBA,IACjB,KAAKN,GAAeM,EAAQ,aAAe,CAAC,GAE5C,oBAAqBA,IACrB,KAAKH,GAAmBE,EAAS,oBAAoBC,EAAQ,gBAAiB,CAAE,SAAU,GAAS,CAAC,GAEpG,wBAAyBA,IACzB,KAAKV,GAAuBS,EAAS,oBAAoBC,EAAQ,mBAAmB,EAE5F,CACA,KAAMG,GAAaC,EAAKC,EAAoB,CACxC,IAAMN,EAAW,KAAKN,GAChBa,EAASF,GAAK,QAAQ,OAG5B,GAAIE,GAAU,KACV,MAAO,GAEX,GAAIA,IAAW,KAAOF,EAAI,UAAY,uBAClC,GAAI,CAACL,EAAS,SAAU,CAIpB,GAAIA,EAAS,QAAU,GAAK,KAAKP,IAAuB,KAAM,CAC1D,IAAMe,EAAOF,EAAmB,KAAK,EACrC,GAAIE,GAAQ,MAAQA,EAAK,KACrB,MAAO,GAQX,KAAKf,GAAsBe,EAAK,KACpC,CAEAR,EAAS,UAAU,CAAC,EACpB,MAAM,IAAI,QAASS,GAAY,WAAWA,EAAS,KAAKhB,EAAmB,CAAC,CAChF,UAEKc,IAAW,KAEhB,GAAI,CAACP,EAAS,SAAU,CACpB,IAAMQ,EAAOF,EAAmB,KAAK,EACrC,GAAIE,GAAQ,MAAQA,EAAK,KACrB,MAAO,GAEXR,EAAS,UAAUQ,EAAK,KAAK,CACjC,MAEC,IAAID,EAAS,KAAOA,EAAS,KAAOA,IAAW,IAEhD,MAAO,GAEN,GAAI,OAAO,UAAc,KAAe,UAAU,SAAW,GAEzDP,EAAS,WACVA,EAAS,MAAM,EACf,OAAO,iBAAiB,SAAU,IAAM,CACpCA,EAAS,OAAO,CACpB,EAAG,CAAE,KAAM,EAAK,CAAC,OAGpB,CAED,IAAMQ,EAAOF,EAAmB,KAAK,EACrC,GAAIE,GAAQ,MAAQA,EAAK,KACrB,MAAO,GAEX,MAAM,IAAI,QAASC,GAAY,WAAWA,EAASD,EAAK,KAAK,CAAC,CAClE,EACA,MAAO,EACX,CACA,MAAM,YAAYE,EAAMC,EAAQ,CAC5B,IAAIC,EAIJ,OAAS,CACL,GAAIF,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EAExC,GADAE,EAAe,KAAKxB,GAAO,IAAIsB,EAAK,IAAI,EACpCE,GAAgB,KAChB,MACJ,GAAI,CACA,OAAO,MAAMA,CACjB,MACM,CAGN,CACJ,CACA,IAAMC,EAAU,KAAKxB,GAAuB,KAAKU,GAASW,CAAI,EAAGC,CAAM,EACjEG,EAAe7B,EAAA,IAAM,CACvB,GAAIyB,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EACxCG,EAAQ,MAAMF,EAAO,MAAM,EAC3B,KAAKvB,GAAO,OAAOsB,EAAK,IAAI,CAChC,EALqB,gBAMrB,OAAAC,EAAO,iBAAiB,QAASG,EAAc,CAAE,KAAM,EAAK,CAAC,EAC7D,KAAK1B,GAAO,IAAIsB,EAAK,KAAMG,CAAO,EAClCA,EAAQ,KAAK,MAAOE,GAAW,CAG3B,GAFAJ,EAAO,oBAAoB,QAASG,CAAY,EAChD,KAAKjB,GAAqBa,EAAMK,CAAM,EAClCL,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EACxC,KAAKtB,GAAO,IAAIsB,EAAK,KAAMK,CAAM,CACrC,EAAG,IAAM,CAEL,GADAJ,EAAO,oBAAoB,QAASG,CAAY,EAC5CJ,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EACxC,KAAKtB,GAAO,OAAOsB,EAAK,IAAI,CAChC,CAAC,EACMG,CACX,CACA,MAAM,gBAAgBH,EAAM,CACxB,GAAIA,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EACxC,IAAMK,EAAS,KAAK3B,GAAO,IAAIsB,EAAK,IAAI,EACxC,GAAIK,GAAU,KAGV,OAIJ,KAAK3B,GAAO,OAAOsB,EAAK,IAAI,EAC5B,KAAKb,GAAqBa,EAAM,OAAO,OAAO,IAAI,CAAC,EACnD,IAAIM,EACJ,GAAI,CACAA,EAAgB,MAAMD,CAC1B,MACM,CAEF,MACJ,CACA,MAAM,KAAK5B,GAAsB,KAAKY,GAASW,CAAI,EAAGM,CAAa,CACvE,CACA,KAAMC,GAAoBP,EAAMQ,EAAOP,EAAQ,CAC3C,GAAM,CAAE,OAAAQ,EAAS,OAAQ,IAAAC,EAAK,OAAAC,EAAQ,QAAAC,CAAS,EAAI,MAAM,KAAK/B,GAAqB,KAAKQ,GAASW,CAAI,EAAG,CACpG,OAAAC,CACJ,CAAC,EAAE,QAAQA,CAAM,EACbY,EACEC,EAAON,EAAM,QAAQ,EAC3B,GAAIC,EAAO,YAAY,IAAM,OAAQ,CACjC,IAAMM,EAAW,IAAI,SACrB,OAAO,QAAQJ,CAAM,EAAE,QAAQ,CAAC,CAACK,EAAKC,CAAK,IAAMF,EAAS,IAAIC,EAAKC,CAAK,CAAC,EACzEF,EAAS,IAAI,OAAQD,CAAI,EACzBD,EAAOE,CACX,MAEIF,EAAOC,EAEX,GAAM,CAAE,WAAAI,EAAY,WAAAC,CAAW,EAAIX,EAC7BH,EAAU,MAAM,KAAKjB,GAAiB,CACxC,UAAW,CAAE,IAAAsB,EAAK,QAAAE,EAAS,OAAAH,CAAO,EAClC,KAAAI,EACA,KAAMC,EAAK,KACX,WAAAI,EACA,WAAAC,EACA,OAAAlB,CACJ,CAAC,EAAE,QAAQA,CAAM,EAGXe,EAAML,GAAQ,IACpB,YAAKxB,GAAqBa,EAAM,CAAE,IAAKgB,CAAI,CAAC,EACrC,CACH,GAAGX,EACH,SAAUA,EAAO,UAAYjC,GAAsBsC,CAAG,EACtD,OAAQC,GAAQ,OAChB,IAAAK,CACJ,CACJ,CACA,MAAM,WAAWhB,EAAMoB,EAAQnB,EAAQ,CAEnC,GADAoB,GAAepB,CAAM,EACjBmB,EAAO,SAAW,GAAK,CAACA,EAAO,CAAC,EAAE,mBAClC,OAAO,KAAKb,GAAoBP,EAAMoB,EAAO,CAAC,EAAGnB,CAAM,EAE3D,GAAM,CAAE,SAAAqB,EAAU,IAAAN,CAAI,EAAI,MAAM,KAAK,YAAYhB,EAAMC,CAAM,EAC7DoB,GAAepB,CAAM,EACrB,GAAI,CACA,IAAMsB,EAAQ,MAAM,QAAQ,IAAIH,EAAO,IAAI,CAACZ,EAAOgB,IAAM,KAAK,YAAYxB,EAAMwB,EAAI,EAAGhB,EAAOP,CAAM,CAAC,CAAC,EACtG,OAAAoB,GAAepB,CAAM,EACd,MAAM,KAAKf,GAAuB,KAAKG,GAASW,CAAI,EAAG,CAAE,IAAAgB,EAAK,SAAAM,EAAU,MAAAC,EAAO,OAAAtB,CAAO,EAAGA,CAAM,EAAE,QAAQA,CAAM,CAC1H,OACON,EAAK,CACR,MAAIA,GAAK,QAAU8B,IAAuB9B,GAAK,OAAS,cAIpD,KAAK,gBAAgBK,CAAI,EAEvBL,CACV,CACJ,CACA,kBAAkBK,EAAM0B,EAAgB,CACpC,GAAI1B,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EACxC,KAAKtB,GAAO,IAAIsB,EAAK,KAAM0B,CAAc,CAC7C,CACA,MAAM,iBAAiB1B,EAAMoB,EAAQnB,EAAQ,CAEzC,GADAoB,GAAepB,CAAM,EACjBmB,EAAO,SAAW,GAClBA,EAAO,CAAC,GAAK,MACb,CAACA,EAAO,CAAC,EAAE,mBACX,OAAO,KAAKb,GAAoBP,EAAMoB,EAAO,CAAC,EAAGnB,CAAM,EAE3D,GAAM,CAAE,SAAAqB,EAAU,IAAAN,CAAI,EAAI,MAAM,KAAK,YAAYhB,EAAMC,CAAM,EAC7DoB,GAAepB,CAAM,EACrB,IAAM0B,EAAuB,MAAM,KAAK7C,GAAW,KAAKO,GAASW,CAAI,EAAG,CAAE,SAAAsB,EAAU,IAAAN,EAAK,OAAAf,CAAO,EAAGA,CAAM,EAAE,QAAQA,CAAM,EACzHoB,GAAepB,CAAM,EACrB,IAAMsB,EAAQ,MAAM,QAAQ,IAAIH,EAAO,IAAI,CAACZ,EAAOgB,IAAM,CACrD,IAAMI,EAAaJ,EAAI,EACjBK,EAAsBF,EAAqB,KAAK,CAAC,CAAE,WAAAG,CAAW,IAAMA,IAAeF,CAAU,EACnG,OAAIC,GAAuB,KAChB,KAAK,YAAY7B,EAAM4B,EAAYpB,EAAOP,CAAM,GAG3DO,GAAO,gBAAgB,EAChB,CAAE,WAAYoB,EAAY,KAAMC,EAAoB,IAAK,EACpE,CAAC,CAAC,EACF,OAAAR,GAAepB,CAAM,EACd,KAAKf,GAAuB,KAAKG,GAASW,CAAI,EAAG,CAAE,IAAAgB,EAAK,SAAAM,EAAU,MAAAC,EAAO,OAAAtB,CAAO,EAAGA,CAAM,EAAE,QAAQA,CAAM,CACpH,CACA,MAAM,YAAYD,EAAM4B,EAAYpB,EAAOP,EAAQ,CAC/CoB,GAAepB,CAAM,EACrB,GAAM,CAAE,SAAAqB,EAAU,IAAAN,CAAI,EAAI,MAAM,KAAK,YAAYhB,EAAMC,CAAM,EACvD8B,EAAyB,KAAK9C,GAAa,OAAO,EAClD+C,EAAqB,KAAK/C,GAAa,OAAO,EAC9CgD,EAAuB1D,EAAA,IAAM,CAC/B,IAAMuB,EAAOiC,EAAuB,KAAK,EACzC,OAAIjC,GAAQ,MAAQA,EAAK,KACd,KAEJA,EAAK,KAChB,EAN6B,wBAO7B,OAAS,CACLuB,GAAepB,CAAM,EACrB,IAAMiC,EAAY1B,EAAM,QAAQ,EAC1B,CAAE,WAAAU,EAAY,WAAAC,CAAW,EAAIX,EAC/B2B,EACJ,GAAI,CACAA,EAAY,MAAM,KAAKvD,GAAgB,KAAKS,GAASW,CAAI,EAAG,CAExD,SAAUsB,EACV,IAAAN,EACA,WAAAY,EACA,KAAMM,EACN,OAAAjC,CACJ,CAAC,EAAE,QAAQA,CAAM,CACrB,OACON,EAAK,CACR,IAAMyC,EAAUH,EAAqB,EACrC,GAAIG,GAAW,MAAQnC,EAAO,QAC1B,MAAMN,EAEV,MAAM,IAAI,QAASI,GAAY,WAAWA,EAASqC,CAAO,CAAC,EAC3D,QACJ,CACAf,GAAepB,CAAM,EACrB,GAAI,CACA,MAAO,CACH,WAAY2B,EACZ,GAAI,MAAM,KAAKxC,GAAiB,CAC5B,UAAA+C,EACA,KAAMD,EACN,KAAMA,EAAU,KAChB,WAAAhB,EACA,WAAAC,EACA,OAAAlB,CACJ,CAAC,EAAE,QAAQA,CAAM,CACrB,CACJ,OACON,EAAK,CACR,GAAI,CAAE,MAAM,KAAKD,GAAaC,EAAKqC,CAAkB,EACjD,MAAMrC,CACd,CACJ,CACJ,CACJ,EC7TA,SAAS0C,GAAkBC,EAAK,CAC5B,GAAIA,GAAK,MAAO,CACZ,IAAMC,EAAQ,IAAI,MAAMD,EAAI,OAAO,EACnC,aAAO,OAAOC,EAAOD,EAAI,KAAK,EACxBC,CACV,CACA,OAAOD,CACX,CAPSE,EAAAH,GAAA,qBAeT,SAASI,GAAUC,EAAa,CAC5B,IAAMC,EAAiBD,EAAY,WACnC,GAAIC,EAAgB,CAChB,IAAMC,EAAkB,KAAK,OAAO,IAAI,KAAKD,CAAc,EAAI,KAAK,IAAI,GAAK,GAAI,EACjF,GAAIC,EAAkB,EAClB,OAAOA,CAEf,CAEJ,CATSJ,EAAAC,GAAA,aAUT,SAASI,GAAmB,CAAE,KAAAC,EAAM,kBAAAC,EAAmB,QAAAC,EAAU,EAAO,EAAG,CACvE,IAAMC,EAAaF,GAAqB,OAAO,KAAKD,CAAI,EACxD,OAAKA,EAEE,OAAO,YAAYG,EACrB,OAAQC,GAAQJ,EAAKI,CAAG,GAAK,IAAI,EACjC,IAAKA,GAAQ,CACd,IAAMC,EAAUH,EAAU,YAAYE,CAAG,IAAMA,EACzCE,EAAQ,OAAON,EAAKI,CAAG,CAAC,EAC9B,MAAO,CAACC,EAASC,CAAK,CAC1B,CAAC,CAAC,EAPS,CAAC,CAQhB,CAXSZ,EAAAK,GAAA,sBAYT,IAAMQ,GAAiB,CACnB,kBAAmB,GACnB,MAAO,EACP,gCAAiC,GACjC,mBAAqBb,GAACc,IAAUA,EAAK,MAAQ,GAAK,IAAM,KAAO,MAA1C,sBACrB,YAAa,CAAC,EAAG,IAAM,IAAM,GAAI,CACrC,EACqBC,GAArB,MAAqBC,UAAuBC,EAAW,CApDvD,MAoDuD,CAAAjB,EAAA,uBACnD,OAAO,QAAUkB,GAAY,QAC7BC,GACAC,GACA,SACA,eACA,UACA,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CACR,GAAGR,GACH,gBAAiBG,EAAe,gBAChC,sBAAuB,KACvB,UAAW,KACX,qBAAsB,KACtB,wBAAyB,KACzB,SAAU,KACV,oBAAqB,KACrB,GAAGM,CACP,CAAC,EAED,KAAK,KAAO,WACZ,KAAK,GAAK,KAAK,KAAK,IAAM,iBAC1B,KAAKC,GAAWD,CAAI,EACpB,IAAME,EAAwB,CAC1B,sBAAuB,KAAK,sBAC5B,UAAW,KAAK,UAChB,qBAAsB,KAAK,qBAC3B,wBAAyB,KAAK,wBAC9B,SAAUF,GAAM,gCACV,KAAK,gBACL,KAAK,SACX,oBAAqBA,GAAM,gCACrB,KAAK,gBACL,KAAK,mBACf,EACA,QAAWZ,KAAO,OAAO,KAAKc,CAAqB,EAC3C,KAAK,KAAKd,CAAG,GAAK,OAClB,KAAK,KAAKA,CAAG,EACTc,EAAsBd,CAAG,EAAE,KAAK,IAAI,GAQhD,KAAK,SACD,KAAK,KAAK,kBACN,IAAIe,GAAiB,KAAK,KAAK,KAAK,EAC5C,KAAKN,GAA+B,IAAIO,GAAuB,KAAK,SAAU,KAAK,KAAM,KAAKC,GAAsB,KAAKC,EAAQ,EACjI,KAAK,UAAY,OAAO,OAAO,IAAI,EACnC,KAAK,eAAiB,OAAO,OAAO,IAAI,CAC5C,CACA,CAAC,OAAO,IAAI,sBAAsB,CAAC,GAAI,CACnC,OAAO,KAAKR,EAChB,CACAG,GAAWD,EAAM,CACTA,GAAQ,MACR,EAAE,aAAcA,GACZ,iBAAkBA,GAClB,YAAaA,GACb,qBAAsBA,GACtB,gBAAiBA,GACjB,yBAA0BA,KAE9B,iBAAkBA,GAAQ,EAAE,aAAcA,IAC1C,KAAK,KAAK,IAAI,kFAAmF,SAAS,EAE1G,qBAAsBA,GAAQ,EAAE,YAAaA,IAC7C,KAAK,KAAK,IAAI,qFAAsF,SAAS,EAE7G,yBAA0BA,GAAQ,EAAE,gBAAiBA,IACrD,KAAK,KAAK,IAAI,6FAA8F,SAAS,EAErH,aAAcA,EACd,KAAKF,GAAU,IAAIS,GAAc,KAAK,KAAM,CACxC,SAAU,KAAK,GACf,SAAU,MACV,aAAc,KAAK,KAAK,SACxB,iBAAkB,KAAK,KAAK,QAC5B,qBAAsB,KAAK,KAAK,WACpC,CAAC,GAGG,YAAaP,GACb,KAAKQ,GAAqB,EAE1B,gBAAiBR,IACjB,KAAKF,GAAQ,KAAK,qBAAuBE,EAAK,cAG1D,CACA,WAAWS,EAAY,CACnB,KAAKZ,GAA6B,WAAWY,CAAU,EACvD,MAAM,WAAWA,CAAU,EAC3B,KAAKR,GAAWQ,CAAU,CAC9B,CAQA,wBAAwBC,EAAQV,EAAM,CAC9B,KAAK,UAAUU,CAAM,IACrB,KAAK,UAAUA,CAAM,EAAE,MAAM,CAAE,OAAQV,GAAM,OAAS,EAAM,CAAC,EAC7D,KAAK,UAAUU,CAAM,EAAI,MAEzB,KAAK,eAAeA,CAAM,IAC1B,KAAK,eAAeA,CAAM,EAAE,OAAO,EACnC,KAAK,eAAeA,CAAM,EAAI,KAEtC,CACAC,GAAYC,EAAQ,CAChB,GAAI,CAAC,KAAKd,GACN,MAAM,IAAI,MAAM,kGAAkGc,CAAM,oBAAoB,CAEpJ,CACA,sBAAsBpB,EAAMqB,EAAQ,CAChC,KAAKF,GAAY,uBAAuB,EACxCG,GAAeD,CAAM,EACrB,IAAM5B,EAAoB8B,GAAqB,KAAK,KAAK,kBAAmBvB,EAAK,IAAI,EAC/EwB,EAAWjC,GAAmB,CAAE,KAAMS,EAAK,KAAM,kBAAAP,CAAkB,CAAC,EAC1E,OAAO,KAAKa,GACP,KAAK,eAAgB,CACtB,SAAUN,EAAK,KACf,KAAMA,EAAK,KACX,SAAAwB,CACJ,EAAG,CAAE,OAAAH,CAAO,CAAC,EACR,KAAKtC,EAAiB,CAC/B,CACA,UAAUiB,EAAM,CAAE,IAAAJ,EAAK,SAAA6B,EAAU,OAAAJ,CAAO,EAAGK,EAAW,CAClDL,IAAWK,EACX,KAAKP,GAAY,WAAW,EAC5BG,GAAeD,CAAM,EACrB,IAAMM,EAAW,mBAAmB/B,CAAG,EACvC,OAAO,KAAKU,GACP,IAAI,gBAAgB,mBAAmBmB,CAAQ,CAAC,QAAQE,CAAQ,GAAI,CAAE,OAAAN,CAAO,CAAC,EAC9E,KAAKtC,EAAiB,CAC/B,CACA,wBAAwBiB,EAAM,CAAE,IAAAJ,EAAK,SAAA6B,EAAU,MAAAG,EAAO,OAAAP,CAAO,EAAGK,EAAW,CACvEL,IAAWK,EACX,KAAKP,GAAY,yBAAyB,EAC1CG,GAAeD,CAAM,EACrB,IAAMM,EAAW,mBAAmB/B,CAAG,EACjCiC,EAAc,mBAAmBJ,CAAQ,EAC/C,OAAO,KAAKnB,GACP,KAAK,gBAAgBuB,CAAW,iBAAiBF,CAAQ,GAAI,CAAE,MAAOC,EAAM,IAAI,CAAC,CAAE,KAAAE,EAAM,WAAAC,CAAW,KAAO,CAAE,KAAAD,EAAM,WAAAC,CAAW,EAAE,CAAE,EAAG,CAAE,OAAAV,CAAO,CAAC,EAC/I,KAAKtC,EAAiB,CAC/B,CACAiD,GACA,KAAMC,GAAiCC,EAAS,CAE5C,GADAZ,GAAeY,GAAS,MAAM,EAC1B,KAAKF,IAA+B,KAAM,CAC1C,GAAM,CAAE,gCAAAG,CAAgC,EAAI,KAAK,KAE7CA,IAAoC,IACpC,KAAKhB,GAAY,iCAAiC,EAClD,KAAKa,GAA8B,KAAK1B,GACnC,IAAI,SAAU4B,CAAO,EACrB,KAAKnD,EAAiB,GAG3B,KAAKiD,GACDG,EAAgCD,CAAO,EAE/C,KAAKF,GAA8B,MAAM,KAAKA,GAC9C,WAAW,IAAM,CAQb,KAAKA,GAA8B,IACvC,GAAI7C,GAAU,KAAK6C,GAA4B,WAAW,GAAK,GAAK,GAAG,CAC3E,CACA,OAAO,KAAKA,EAChB,CACA,MAAM,gBAAgBhC,EAAMkC,EAAS,CACjC,IAAME,EAAO,MAAM,KAAKH,GAAiCC,CAAO,EAC1DG,EAAUlD,GAAUiD,EAAK,WAAW,GAAK,OACzC,CAAE,SAAAX,EAAU,IAAA7B,EAAK,WAAA0C,CAAW,EAAIJ,EAEtC,MAAO,CACH,OAAQ,MACR,QAAAG,EACA,OAAQ,CAAC,EACT,IAAK,GAAG,MAAME,GAAgB,CAC1B,WAAYH,EAAK,YAAY,YAC7B,cAAeA,EAAK,YAAY,gBAChC,aAAcA,EAAK,YAAY,aAC/B,QAAAC,EACA,WAAYD,EAAK,OACjB,OAAQA,EAAK,OACb,IAAKxC,GAAO,GAAG,OAAO,WAAW,CAAC,IAAII,EAAK,IAAI,GAC/C,SAAAyB,EACA,WAAAa,CACJ,CAAC,CAAC,GAEF,QAAS,CACL,eAAgBtC,EAAK,IACzB,CACJ,CACJ,CACA,SAASA,EAAM,CAAE,SAAAyB,EAAU,IAAA7B,EAAK,WAAA0C,EAAY,OAAAjB,CAAO,EAAG,CAGlD,GAFA,KAAKF,GAAY,UAAU,EAC3BG,GAAeD,CAAM,EACjBI,GAAY,MAAQ7B,GAAO,MAAQ0C,GAAc,KACjD,MAAM,IAAI,MAAM,0DAA0D,EAE9E,IAAMX,EAAW,mBAAmB/B,CAAG,EACvC,OAAO,KAAKU,GACP,IAAI,gBAAgB,mBAAmBmB,CAAQ,CAAC,IAAIa,CAAU,QAAQX,CAAQ,GAAI,CAAE,OAAAN,CAAO,CAAC,EAC5F,KAAKtC,EAAiB,CAC/B,CACA,qBAAqBiB,EAAM,CAAE,IAAAJ,EAAK,SAAA6B,EAAU,OAAAJ,CAAO,EAAG,CAClD,KAAKF,GAAY,sBAAsB,EACvC,IAAMQ,EAAW,mBAAmB/B,CAAG,EACjCiC,EAAc,mBAAmBJ,CAAQ,EAC/C,OAAO,KAAKnB,GACP,OAAO,gBAAgBuB,CAAW,QAAQF,CAAQ,GAAI,OAAW,CAClE,OAAAN,CACJ,CAAC,EACI,KAAKtC,EAAiB,CAC/B,CACA,oBAAoBiB,EAAMkC,EAAS,CAC/B,KAAKf,GAAY,qBAAqB,EACtC,GAAM,CAAE,KAAA3B,CAAK,EAAIQ,EACX,CAAE,KAAAwC,EAAM,KAAMb,CAAS,EAAInC,EAC3BC,EAAoB8B,GAAqB,KAAK,KAAK,kBAAmBvB,EAAK,IAAI,EAC/EwB,EAAWjC,GAAmB,CAChC,KAAAC,EACA,kBAAAC,EACA,QAAS,EACb,CAAC,EACKgD,EAAQ,IAAI,gBAAgB,CAAE,SAAAd,EAAU,KAAAa,EAAM,GAAGhB,CAAS,CAAC,EACjE,OAAO,KAAKlB,GAAQ,IAAI,aAAamC,CAAK,GAAIP,CAAO,CACzD,CACA,aAAa,gBAAgB,CAAE,UAAW,CAAE,IAAAQ,EAAK,QAAAL,EAAS,QAAAM,EAAS,OAAAvB,EAAS,KAAM,EAAG,KAAAwB,EAAM,KAAAC,EAAOD,EAAK,KAAM,WAAAE,EAAY,WAAAC,EAAY,OAAA1B,CAAQ,EAAG,CAE5I,GADAC,GAAeD,CAAM,EACjBqB,GAAO,KACP,MAAM,IAAI,MAAM,mCAAmC,EAEvD,OAAO,IAAI,QAAQ,CAACM,EAASC,IAAW,CACpC,IAAMC,EAAM,IAAI,eAChBA,EAAI,KAAK9B,EAAQsB,EAAK,EAAI,EACtBC,GACA,OAAO,KAAKA,CAAO,EAAE,QAAS/C,GAAQ,CAClCsD,EAAI,iBAAiBtD,EAAK+C,EAAQ/C,CAAG,CAAC,CAC1C,CAAC,EAELsD,EAAI,aAAe,OACf,OAAOb,GAAY,WACnBa,EAAI,QAAUb,EAAU,KAE5B,SAASc,GAAU,CACfD,EAAI,MAAM,CACd,CAFShE,EAAAiE,EAAA,WAGT,SAASC,GAAU,CACf/B,GAAQ,oBAAoB,QAAS8B,CAAO,CAChD,CAFSjE,EAAAkE,EAAA,WAGT/B,GAAQ,iBAAiB,QAAS8B,CAAO,EACzCD,EAAI,OAAO,iBAAiB,WAAaG,GAAO,CAC5CP,EAAWO,CAAE,CACjB,CAAC,EACDH,EAAI,iBAAiB,QAAS,IAAM,CAChCE,EAAQ,EACRH,EAAOK,GAAiB,CAAC,CAC7B,CAAC,EACDJ,EAAI,iBAAiB,UAAW,IAAM,CAClCE,EAAQ,EACR,IAAMnE,EAAQ,IAAI,MAAM,qBAAqB,EAC7CA,EAAM,OAAS,CAAE,OAAQ,GAAI,EAC7BgE,EAAOhE,CAAK,CAChB,CAAC,EACDiE,EAAI,iBAAiB,OAAQ,IAAM,CAE/B,GADAE,EAAQ,EACJF,EAAI,SAAW,KACfA,EAAI,aAAa,SAAS,wCAAwC,EAAG,CACrE,IAAMjE,EAAQ,IAAI,MAAM,qBAAqB,EAC7CA,EAAM,OAASiE,EACfD,EAAOhE,CAAK,EACZ,MACJ,CACA,GAAIiE,EAAI,OAAS,KAAOA,EAAI,QAAU,IAAK,CACvC,IAAMjE,EAAQ,IAAI,MAAM,SAAS,EACjCA,EAAM,OAASiE,EACfD,EAAOhE,CAAK,EACZ,MACJ,CACA6D,IAAa,CAAE,OAAQD,EAAM,iBAAkB,EAAK,CAAC,EAErD,IAAMU,EAAML,EACP,sBAAsB,EACtB,KAAK,EACL,MAAM,SAAS,EAEdM,EAAa,CAAE,UAAW,IAAK,EACrC,QAAWC,KAAQF,EAAK,CACpB,IAAM3B,EAAQ6B,EAAK,MAAM,IAAI,EACvBC,EAAS9B,EAAM,MAAM,EACrB9B,EAAQ8B,EAAM,KAAK,IAAI,EAC7B4B,EAAWE,CAAM,EAAI5D,CACzB,CACA,GAAM,CAAE,KAAA6D,EAAM,SAAAC,CAAS,EAAIJ,EAO3B,GAJIpC,EAAO,YAAY,IAAM,QAAUwC,GAAY,MAE/C,QAAQ,MAAM,mLAAmL,EAEjMD,GAAQ,KAAM,CACd,QAAQ,MAAM,+KAA+K,EAC7L,MACJ,CACAZ,IAAaY,CAAI,EACjBX,EAAQ,CACJ,GAAGQ,EACH,KAAMG,CACV,CAAC,CACL,CAAC,EACDT,EAAI,iBAAiB,QAAUG,GAAO,CAClCD,EAAQ,EACR,IAAMnE,EAAQ,IAAI,MAAM,eAAe,EACvCA,EAAM,OAASoE,EAAG,OAClBJ,EAAOhE,CAAK,CAChB,CAAC,EACDiE,EAAI,KAAKN,CAAI,CACjB,CAAC,CACL,CACA/B,GAAuB3B,EAAA,CAACc,EAAM,CAAE,IAAAJ,EAAK,SAAA6B,CAAS,IAAM,CAChD,IAAMoC,EAAQ,KAAK,KAAK,QAAQ7D,EAAK,EAAE,EACnC6D,GAAS,MAIb,KAAK,KAAK,aAAa7D,EAAK,GAAI,CAC5B,YAAa,CACT,GAAG6D,EAAM,YACT,IAAAjE,EACA,SAAA6B,CACJ,CACJ,CAAC,CACL,EAbuB,wBAcvBX,GAAW5B,EAACc,GACD,KAAK,KAAK,QAAQA,EAAK,EAAE,GAAKA,EAD9B,YAGX8D,GAAiB9D,EAAM,CACnB,OAAO,IAAI,QAAQ,CAACgD,EAASC,IAAW,CACpC,IAAMH,EAAa5D,EAAA,CAAC6E,EAAeC,IAAe,CAC9C,IAAMC,EAAa,KAAK,KAAK,QAAQjE,EAAK,EAAE,EAC5C,KAAK,KAAK,KAAK,kBAAmBiE,EAAY,CAC1C,cAAeA,EAAW,SAAS,eAAiB,EACpD,cAAAF,EACA,WAAAC,CACJ,CAAC,CACL,EAPmB,cAQbE,EAAUhF,EAACiF,GAAQ,CACrB,KAAK,KAAK,IAAIA,CAAG,EACjB,KAAK,KAAK,KAAK,eAAgBnE,EAAMmE,CAAG,EACxC,KAAK,wBAAwBnE,EAAK,EAAE,EACpCiD,EAAOkB,CAAG,CACd,EALgB,WAMVC,EAAYlF,EAACmF,GAAW,CAC1B,IAAMC,EAAa,CACf,KAAM,CACF,GAAGD,CACP,EACA,OAAQ,IACR,UAAWA,EAAO,QACtB,EACA,KAAK,wBAAwBrE,EAAK,EAAE,EACpC,KAAK,KAAK,KAAK,iBAAkB,KAAKc,GAASd,CAAI,EAAGsE,CAAU,EAC5DD,EAAO,UACP,KAAK,KAAK,IAAI,YAAYrE,EAAK,IAAI,SAASqE,EAAO,QAAQ,EAAE,EAEjErB,EAAQ,MAAS,CACrB,EAdkB,aAelB,GAAIhD,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EACxC,IAAMuE,EAAS,IAAIC,GAAkBxE,EAAK,KAAM,CAE5C,cAAe,KAAKK,GACpB,IAAKnB,EAAA,IAAIuF,IAAS,KAAK,KAAK,IAAI,GAAGA,CAAI,EAAlC,OACL,aAAc,KAAK,KAAK,aAClB,KAAK,KAAK,aAAa,KAAK,IAAI,EAChC,OACN,WAAA3B,EACA,QAAAoB,EACA,UAAAE,EACA,eAAgBlF,EAACwF,GAAS,CACtB,KAAK,KAAK,KAAK,6BAA8B,KAAK5D,GAASd,CAAI,EAAG0E,CAAI,CAC1E,EAFgB,kBAGhB,KAAA1E,EACA,mBAAoB,KAAK,KAAK,mBAC9B,GAAGA,EAAK,WACZ,CAAC,EACD,KAAK,UAAUA,EAAK,EAAE,EAAIuE,EAC1B,IAAMI,EAAe,IAAIC,GAAa,KAAK,IAAI,EAC/C,KAAK,eAAe5E,EAAK,EAAE,EAAI2E,EAC/BA,EAAa,aAAa3E,EAAK,GAAK6E,GAAY,CAC5CN,EAAO,MAAM,EACb,KAAK,wBAAwBvE,EAAK,GAAI,CAAE,MAAO,EAAK,CAAC,EACrDgD,EAAQ,UAAU6B,CAAO,cAAc,CAC3C,CAAC,EACDF,EAAa,YAAY3E,EAAK,GAAI,IAAM,CACpCuE,EAAO,MAAM,EACb,KAAK,wBAAwBvE,EAAK,GAAI,CAAE,MAAO,EAAK,CAAC,EACrDgD,EAAQ,UAAUhD,EAAK,EAAE,eAAe,CAC5C,CAAC,EACD2E,EAAa,YAAY3E,EAAK,GAAK8E,GAAa,CACxCA,EACAP,EAAO,MAAM,EAGbA,EAAO,MAAM,CAErB,CAAC,EACDI,EAAa,WAAW3E,EAAK,GAAI,IAAM,CACnCuE,EAAO,MAAM,CACjB,CAAC,EACDI,EAAa,YAAY3E,EAAK,GAAI,IAAM,CACpCuE,EAAO,MAAM,CACjB,CAAC,EACDA,EAAO,MAAM,CACjB,CAAC,CACL,CACAQ,GAAwB/E,EAAM,CAC1B,MAAO,CACH,GAAI,WAAYA,GAAQA,EAAK,QAAQ,KACrC,SAAU,eACV,KAAMA,EAAK,KAAK,KAChB,SAAUA,EAAK,IACnB,CACJ,CACAgF,GAAU9F,EAAA,MAAO+F,GAAY,CACzB,GAAIA,EAAQ,SAAW,EACnB,OACJ,IAAMC,EAAQ,KAAK,KAAK,cAAcD,CAAO,EACvCE,EAAgBC,GAAoBF,CAAK,EACzCG,EAAcC,GAA+BH,CAAa,EAChE,KAAK,KAAK,KAAK,eAAgBE,CAAW,EAC1C,IAAME,EAAWJ,EAAc,IAAKnF,GAAS,CACzC,GAAIA,EAAK,SAAU,CACf,IAAMwF,EAAWtG,EAAA,IAAM,KAAK,SAAX,YACjB,KAAKuG,GAA+B,EAAK,EACzC,IAAMC,EAAa,IAAI,gBACjBC,EAAiBzG,EAAC0G,GAAgB,CAChCA,EAAY,KAAO5F,EAAK,IACxB0F,EAAW,MAAM,CACzB,EAHuB,kBAIvB,KAAK,KAAK,GAAG,eAAgBC,CAAc,EAC3C,IAAME,EAAgB,KAAK,KACtB,wBAAwB7F,CAAI,EAC5B,iBAAiBA,EAAM,KAAK+E,GAAwB/E,CAAI,EAAG,CAC5D,OAAQ0F,EAAW,OACnB,SAAAF,CACJ,CAAC,EACD,YAAK,SAAS,iBAAiB,IAAM,CACjC,KAAK,KAAK,IAAI,eAAgBG,CAAc,CAChD,EAAG,CAAE,SAAU,EAAG,CAAC,EAAE,EACdE,CACX,CACA,OAAO,KAAK/B,GAAiB9D,CAAI,CACrC,CAAC,EACKuE,EAAS,MAAM,QAAQ,WAAWgB,CAAQ,EAGhD,YAAKE,GAA+B,EAAI,EACjClB,CACX,EAnCU,WAoCVvD,GAAuB9B,EAAA,IAAM,CACzB,KAAKoB,IAAS,oBAAoB,KAAK,KAAK,OAAO,CACvD,EAFuB,wBAGvBmF,GAAiCvG,EAAC4G,GAAY,CAC1C,GAAM,CAAE,aAAAC,CAAa,EAAI,KAAK,KAAK,SAAS,EAC5C,KAAK,KAAK,SAAS,CACf,aAAc,CACV,GAAGA,EACH,iBAAkBD,CACtB,CACJ,CAAC,CACL,EARiC,kCASjCE,GAA4B9G,EAAA,IAAM,CAC9B,KAAKuG,GAA+B,EAAI,CAC5C,EAF4B,6BAG5B,SAAU,CACN,KAAKA,GAA+B,EAAI,EACxC,KAAK,KAAK,gBAAgB,KAAKzE,EAAoB,EACnD,KAAK,KAAK,YAAY,KAAKgE,EAAO,EAClC,KAAK,KAAK,GAAG,aAAc,KAAKgB,EAAyB,CAC7D,CACA,WAAY,CACR,KAAK,KAAK,mBAAmB,KAAKhF,EAAoB,EACtD,KAAK,KAAK,eAAe,KAAKgE,EAAO,EACrC,KAAK,KAAK,IAAI,aAAc,KAAKgB,EAAyB,CAC9D,CACJ,ECxiBA,IAAAC,GAAA,CACE,KAAQ,YACR,YAAe,oCACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,KACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,uBAAwB,cACxB,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,cAAiB,CACf,OAAU,QACZ,EACA,gBAAmB,CACjB,aAAc,cACd,WAAc,QAChB,CACF,ECnDA,IAAOC,GAAQ,CACX,QAAS,CACL,cAAe,KACnB,CACJ,ECIA,IAAqBC,GAArB,cAAiCC,EAAS,CAR1C,MAQ0C,CAAAC,EAAA,YACtC,OAAO,QAAUC,GAAY,QAC7B,KACA,SACA,KACA,QACA,MACA,aAAe,KACf,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,GAAK,KAAK,KAAK,IAAM,MAC1B,KAAK,KAAO,WACZ,KAAK,QAAU,KAAK,KAAK,SAAWC,GACpC,KAAK,MAAQ,CAAC,EACd,KAAK,KAAO,IAAOC,EAAK,MAAO,CAAE,UAAW,4BAA6B,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,KAAM,eAAgB,SAAU,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,yYAA0Y,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,qPAAsP,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EACl6B,KAAK,KAAK,sBAAwBC,GAAgB,KAAK,KAAK,sBAAuB,KAAK,KAAK,YAAY,EACzG,KAAK,SAAW,IAAIC,GAASL,EAAM,CAC/B,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,oBAAqB,KAAK,KAAK,oBAC/B,qBAAsB,KAAK,KAAK,qBAChC,SAAU,MACV,SAAU,KAAK,GACf,qBAAsB,EAC1B,CAAC,EACD,KAAK,cAAgBM,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,eAAe,EACtC,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,CACvC,CACA,SAAU,CACN,KAAK,KAAO,IAAIC,GAAc,KAAM,CAChC,SAAU,KAAK,SACf,aAAc,GACd,YAAa,EACjB,CAAC,EACD,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,KAAK,SAAS,EACnB,KAAK,QAAQ,CACjB,CACA,OAAOC,EAAO,CACV,OAAO,KAAK,KAAK,OAAOA,CAAK,CACjC,CACJ,ECxDA,IAAAC,GAA0B,WAI1B,IAAAC,GAAyB,WCJzB,IAAOC,GAAQ,CACX,QAAS,CAEL,kBAAmB,wBACnB,YAAa,qCACjB,CACJ,EDAA,IAAMC,GAAiB,CACnB,QAAS,GACT,MAAO,EACX,EACqBC,GAArB,cAAwCC,EAAW,CAVnD,MAUmD,CAAAC,EAAA,mBAC/CC,GACA,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CAAE,GAAGL,GAAgB,GAAGM,CAAK,CAAC,EAC1C,KAAK,GAAK,KAAK,KAAK,IAAM,aAC1B,KAAK,KAAO,WACZ,KAAK,cAAgBC,GACrB,KAAKH,GAAoB,IAAII,GAAiB,KAAK,KAAK,KAAK,EAC7D,KAAK,SAAS,EACd,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,CAC3C,CACA,SAASC,EAAM,CACX,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACpC,IAAI,GAAAC,QAAaH,EAAM,CACnB,GAAG,KAAK,KACR,QAASC,EACT,MAAOC,CACX,CAAC,CACL,CAAC,CACL,CACA,MAAM,cAAcE,EAAS,CACzB,IAAIC,EAAsB,EACpBC,EAAkB,CAAC,EACnBC,EAAyB,KAAKZ,GAAkB,oBAAoB,MAAOa,GAAS,CACtF,GAAI,CACA,GAAIA,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EACxC,IAAMC,EAAiB,MAAM,KAAK,SAASD,EAAK,IAAI,EAC9CE,EAAwBF,EAAK,KAAK,KAAOC,EAAe,KAC9D,KAAK,KAAK,IAAI,4BAA4BD,EAAK,EAAE,qBAAkB,GAAAG,SAAcD,CAAqB,CAAC,EAAE,EACzGL,GAAuBK,EACvB,GAAM,CAAE,KAAAE,EAAM,KAAAC,EAAM,KAAAC,CAAK,EAAIL,EACvBM,EAAqBC,GAAwBJ,CAAI,EAGjDK,EAAc,GAFCD,GAAwBR,EAAK,KAAK,IAAI,EAEvB,IAAI,IAAIO,EAAmB,SAAS,GACxE,KAAK,KAAK,aAAaP,EAAK,GAAI,CAC5B,GAAII,GAAQ,CAAE,KAAAA,CAAK,EACnB,GAAIG,EAAmB,WAAa,CAChC,UAAWA,EAAmB,SAClC,EACA,GAAIF,GAAQ,CAAE,KAAAA,CAAK,EACnB,GAAIC,GAAQ,CAAE,KAAAA,CAAK,EACnB,KAAML,EACN,KAAM,CACF,GAAGD,EAAK,KACR,KAAAK,EACA,KAAMI,CACV,CACJ,CAAC,EACDX,EAAgB,KAAKE,CAAI,CAC7B,OACOU,EAAK,CACR,KAAK,KAAK,IAAI,yCAAyCV,EAAK,EAAE,IAAK,SAAS,EAC5E,KAAK,KAAK,IAAIU,EAAK,SAAS,CAChC,CACJ,CAAC,EACKC,EAAWf,EAAQ,IAAKgB,GAAW,CACrC,IAAMZ,EAAO,KAAK,KAAK,QAAQY,CAAM,EAcrC,OAbA,KAAK,KAAK,KAAK,sBAAuBZ,EAAM,CACxC,KAAM,gBACN,QAAS,KAAK,KAAK,mBAAmB,CAC1C,CAAC,EACGA,EAAK,WAMJA,EAAK,KAAK,OACXA,EAAK,KAAOA,EAAK,KAAK,MAAM,EAAGA,EAAK,KAAK,KAAMA,EAAK,IAAI,GAExD,CAACA,EAAK,MAAM,WAAW,QAAQ,GACxB,QAAQ,QAAQ,EAEpBD,EAAuBC,CAAI,CACtC,CAAC,EAKD,MAAM,QAAQ,IAAIW,CAAQ,EAC1B,KAAK,KAAK,KAAK,sBAAuBb,CAAe,EAEjDD,EAAsB,MACtB,KAAK,KAAK,KAAK,KAAK,KAAK,cAAe,CACpC,QAAM,GAAAM,SAAcN,CAAmB,CAC3C,CAAC,EAAG,MAAM,EAEd,QAAWe,KAAUhB,EAAS,CAC1B,IAAMI,EAAO,KAAK,KAAK,QAAQY,CAAM,EACrC,KAAK,KAAK,KAAK,sBAAuBZ,CAAI,CAC9C,CACJ,CACA,SAAU,CACN,KAAK,KAAK,gBAAgB,KAAK,aAAa,CAChD,CACA,WAAY,CACR,KAAK,KAAK,mBAAmB,KAAK,aAAa,CACnD,CACJ,EE/GA,SAASa,GAAEA,EAAEC,EAAEC,EAAE,CAAC,OAAOD,KAAKD,EAAE,OAAO,eAAeA,EAAEC,EAAE,CAAC,MAAMC,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,EAAE,CAAC,EAAEF,EAAEC,CAAC,EAAEC,EAAEF,CAAC,CAA9GG,EAAAH,GAAA,KAA+G,IAAIC,GAAe,OAAO,KAApB,IAAyB,KAAK,OAAaC,GAAe,OAAO,UAApB,IAA8BE,GAAEF,IAAgB,OAAO,iBAApB,IAAqCG,GAAE,EAAe,OAAO,OAApB,KAAyC,OAAO,QAApB,KAA6B,CAAC,QAAQ,UAAU,CAAC,QAAQ,SAAS,MAAMC,GAAEL,GAAE,OAAOM,GAAE,CAAC,CAACD,GAAEE,GAAEL,EAAAH,GAAYA,IAAT,OAAH,KAAc,SAASS,GAAET,EAAE,CAAC,OAAgBA,IAAT,SAAaA,aAAa,IAAQA,EAAE,OAAN,EAAe,OAAO,OAAOA,CAAC,EAAE,OAAOQ,EAAC,EAAE,SAA/B,EAAsC,CAA3FL,EAAAM,GAAA,KAA4F,SAASC,GAAEV,EAAE,CAAC,IAAIC,EAAE,IAAI,MAAMD,CAAC,EAAE,MAAM,OAAOC,EAAE,MAAMA,CAAC,CAA9CE,EAAAO,GAAA,KAA+C,SAASC,GAAEX,EAAE,CAAC,IAAIC,GAAE,SAASD,EAAE,CAAC,IAAIC,EAAE,EAAE,OAAOD,EAAE,KAAK,UAAUC,GAAG,MAAMD,EAAE,KAAK,UAAUC,GAAG,MAAMD,EAAE,YAAYC,GAAG,MAAMD,EAAE,cAAcC,GAAG,MAAMD,EAAE,IAAI,UAAUC,GAAG,KAAKD,EAAE,QAAQ,UAAUC,GAAG,KAAKD,EAAE,KAAK,UAAUC,GAAG,MAAMA,EAAE,IAAI,GAAED,CAAC,EAAE,OAAOA,EAAE,KAAK,UAAUC,GAAG,IAAID,EAAE,IAAI,UAAUC,GAAG,KAAKD,EAAE,KAAK,UAAUC,GAAG,MAAMD,EAAE,IAAI,UAAUC,GAAG,KAAKA,CAAC,CAA7UE,EAAAQ,GAAA,KAA8U,IAAMC,GAAET,EAAAH,GAAG,OAAO,aAAa,MAAM,KAAKA,CAAC,EAAnC,KAAqCa,GAAe,OAAO,YAApB,IAAgC,IAAI,YAAY,OAAO,EAAE,OAAaC,GAAN,MAAMC,CAAC,CAAt+B,MAAs+B,CAAAZ,EAAA,UAAC,OAAO,KAAK,EAAE,EAAE,CAAC,OAAO,aAAa,MAAM,EAAE,KAAK,EAAE,EAAE,IAAIY,EAAE,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,EAAEb,EAAEE,EAAE,CAAC,GAAc,OAAOA,GAAlB,YAAsB,KAAK,GAAGA,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC,GAAO,IAAJ,EAAM,KAAK,WAAW,EAAE,KAAK,WAAW,UAAU,aAAa,YAAY,CAAUF,IAAT,SAAaA,EAAE,EAAE,WAAW,GAAG,IAAIE,EAAE,IAAI,SAAS,EAAE,EAAEF,CAAC,EAAE,KAAK,cAAcE,CAAC,CAAC,SAAS,aAAa,YAAY,aAAa,UAAU,aAAaW,EAAE,CAAUb,IAAT,SAAaA,EAAE,EAAE,WAAW,IAAI,GAAG,EAAE,YAAYA,EAAE,EAAE,WAAW,EAAE,YAAYQ,GAAE,0DAA0D,EAAE,IAAIN,EAAE,IAAI,SAAS,EAAE,OAAO,EAAEF,CAAC,EAAE,KAAK,cAAcE,CAAC,CAAC,SAAmB,OAAO,GAAjB,SAAmB,CAAC,IAAIH,EAAE,IAAI,SAAS,IAAI,YAAY,CAAC,CAAC,EAAE,KAAK,cAAcA,CAAC,CAAC,MAAMS,GAAE,0CAA0C,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,KAAK,cAAc,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,cAAc,IAAI,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,OAAO,KAAK,WAAW,EAAE,WAAW,KAAK,WAAW,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,IAAI,EAAE,EAAER,EAAEa,EAAE,CAAC,OAAO,aAAa,UAAU,aAAaA,EAAE,EAAE,IAAI,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,cAAc,EAAE,IAAI,WAAW,CAAC,GAAG,aAAa,YAAYL,GAAE,0CAA0C,EAAE,KAAK,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAIR,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,aAAa,CAAC,EAAE,IAAIa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,IAAI,WAAW,KAAK,OAAO,KAAK,WAAW,KAAK,UAAU,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,OAAO,IAAI,WAAW,KAAK,OAAO,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,WAAW,CAA+B,OAAOX,EAA/B,KAAK,cAAc,EAAE,CAAC,EAAaS,GAAEA,GAAE,OAAOT,CAAC,EAAEG,GAAE,OAAO,KAAKH,CAAC,EAAE,SAAS,MAAM,EAAE,mBAAmB,OAAOQ,GAAER,CAAC,CAAC,CAAC,EAAE,IAAIA,CAAC,CAAC,gBAAgB,EAAE,EAAE,EAAE,KAAK,WAAW,CAAC,IAAIF,EAAE,KAAK,cAAc,EAAE,CAAC,EAAE,OAAOU,GAAEV,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,WAAW,CAAC,IAAMA,EAAE,CAAC,EAAE,QAAQE,EAAE,EAAEA,EAAE,GAAG,EAAEA,EAAE,KAAK,WAAWA,GAAG,EAAEF,EAAE,KAAK,KAAK,UAAU,EAAEE,CAAC,CAAC,EAAE,OAAOQ,GAAEV,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,KAAK,SAAS,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,KAAK,SAAS,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,KAAK,GAAG,CAAC,OAAO,KAAK,SAAS,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,KAAK,GAAG,CAAC,OAAO,KAAK,SAAS,SAAS,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,KAAK,GAAG,CAAC,OAAO,KAAK,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,KAAK,GAAG,CAAC,OAAO,KAAK,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,GAAG,CAAC,OAAO,KAAK,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,GAAG,CAAC,OAAO,KAAK,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,KAAK,GAAG,CAAC,OAAO,KAAK,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,KAAK,GAAG,CAAC,OAAO,KAAK,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,EAAEA,EAAE,CAAC,OAAO,EAAE,CAAC,IAAK,GAAE,OAAO,KAAK,SAAS,EAAEA,CAAC,EAAE,IAAK,GAAE,OAAO,KAAK,UAAU,EAAEA,CAAC,EAAE,IAAK,GAAE,OAAO,KAAK,UAAU,EAAEA,CAAC,EAAE,IAAK,GAAE,OAAO,KAAK,WAAW,KAAK,UAAU,EAAEA,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAEA,EAAE,CAAC,OAAO,EAAE,CAAC,IAAK,GAAE,OAAO,KAAK,SAAS,EAAEA,CAAC,EAAE,IAAK,IAAG,OAAO,KAAK,UAAU,EAAEA,CAAC,EAAE,IAAK,IAAG,OAAO,KAAK,UAAU,EAAEA,CAAC,EAAE,IAAK,IAAG,OAAO,KAAK,WAAW,KAAK,UAAU,EAAEA,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,KAAK,SAAS,SAAS,EAAE,KAAK,YAAY,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,EAAC,SAASc,GAAEhB,EAAEC,EAAE,CAACS,GAAE,GAAGV,CAAC,KAAKC,CAAC,kDAAkD,CAAC,CAAtEE,EAAAa,GAAA,KAAuE,IAAMC,GAAN,cAAgB,GAAG,CAAx6H,MAAw6H,CAAAd,EAAA,UAAC,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,GAAGa,GAAE,KAAK,KAAK,CAAC,EAAE,IAAI,KAAK,IAAG,SAAShB,EAAEC,EAAE,CAACS,GAAE,WAAWV,CAAC,KAAKC,CAAC,IAAI,CAAC,GAAE,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,SAASe,GAAE,KAAK,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,MAAM,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,EAAKE,GAAE,IAAID,GAAE,aAAa,EAAEE,GAAE,IAAIF,GAAE,gBAAgB,EAAEG,GAAE,IAAIH,GAAE,aAAa,EAAMI,GAAEpB,GAAE,MAAM,SAASqB,GAAEtB,EAAEC,EAAE,CAAC,OAAOG,EAAEJ,GAAG,WAAW,OAAO,GAAGI,EAAE,OAAO,IAAImB,GAAEvB,EAAEC,EAAE,QAAQ,EAAEI,IAAGL,EAAE,SAAS,KAAK,EAAEwB,GAAExB,EAAEC,EAAE,MAAMwB,EAAC,EAAEpB,GAAEkB,GAAEvB,EAAEC,EAAE,IAAI,EAAEC,GAAEsB,GAAExB,EAAEC,EAAE,MAAMwB,EAAC,EAAE,KAAKf,GAAE,wBAAwB,EAAE,IAAIN,CAAC,CAA9KD,EAAAmB,GAAA,KAA+K,eAAeE,GAAExB,EAAEC,EAAEC,EAAEE,EAAE,CAAC,OAAOgB,GAAE,IAAIlB,CAAC,EAAEqB,GAAEvB,EAAEC,EAAEC,CAAC,EAAEE,GAAE,eAAeJ,EAAEC,EAAE,CAAC,IAAIC,EAAE,MAAMD,EAAED,CAAC,EAAE,OAAO,IAAIc,GAAEZ,CAAC,CAAC,GAAEF,EAAEI,CAAC,EAAE,KAAKM,GAAE,UAAUR,CAAC,gBAAgB,CAAC,CAApIC,EAAAqB,GAAA,KAAqI,eAAeD,GAAEvB,EAAEC,EAAEC,EAAE,CAAC,IAAIE,EAAE,IAAIgB,GAAE,IAAIlB,CAAC,GAAGF,EAAEC,CAAC,EAAE,OAAO,MAAMG,EAAE,KAAK,EAAEA,CAAC,CAAzDD,EAAAoB,GAAA,KAA0D,IAAME,GAAEtB,EAAAH,GAAGqB,GAAErB,CAAC,EAAE,MAAM,GAAG,EAAE,YAAY,EAAE,EAAjC,KAAmC0B,GAAEvB,EAAAH,GAAG,IAAI,SAAS,CAACC,EAAEC,IAAI,CAAC,IAAIE,EAAE,IAAI,WAAWA,EAAE,UAAU,IAAIH,EAAEG,EAAE,QAAQ,IAAI,WAAW,EAAEA,EAAE,QAAQF,EAAEE,EAAE,kBAAkBJ,CAAC,CAAC,EAAE,EAA9H,KAAsI2B,GAAN,cAAgB,GAAG,CAA9zJ,MAA8zJ,CAAAxB,EAAA,UAAC,IAAI,SAAS,CAAC,OAAO,KAAK,UAAU,KAAK,QAAQ,MAAM,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,KAAK,YAAY,KAAK,UAAU,MAAM,KAAK,KAAK,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,EAAC,SAASyB,GAAE5B,EAAEC,EAAEC,EAAE,CAAC,IAAIE,EAAE,IAAIuB,GAAE,OAAO,CAAC3B,EAAEC,CAAC,IAAIC,EAAEE,EAAE,IAAIJ,EAAEC,CAAC,EAAE,GAAG,MAAM,QAAQA,CAAC,EAAE,QAAQ,KAAKA,EAAED,EAAE,IAAI,EAAEI,CAAC,OAAOJ,EAAE,IAAIC,EAAEG,CAAC,EAAE,OAAOA,CAAC,CAAvHD,EAAAyB,GAAA,KAAwH,SAASC,GAAE7B,EAAEC,EAAEC,EAAE,CAAC,IAAIE,EAAEC,EAAEL,EAAE,IAAIC,CAAC,EAAE,IAAIG,KAAKF,EAAEG,EAAE,IAAID,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,CAArDD,EAAA0B,GAAA,KAAsD,IAAMC,GAAE,IAAI,IAAIC,GAAE,IAAI,IAAIC,GAAE,IAAI,IAAIC,GAAE,CAAC,UAAU,iBAAiB,qBAAqB,wBAAwB,YAAY,YAAY,EAAEC,GAAE,CAAC,OAAO,MAAM,MAAM,OAAO,MAAM,EAAEC,GAAE,CAAC,OAAO,GAAGD,EAAC,EAAEE,GAAE,CAAC,OAAO,OAAO,OAAO,MAAM,SAAS,EAAEC,GAAE,CAAC,GAAGF,GAAE,GAAGC,EAAC,EAAEE,GAAE,CAAC,YAAY,aAAa,EAAEC,GAAE,CAAC,gBAAgB,kBAAkB,eAAe,cAAc,EAAEC,GAAE,CAAC,GAAGD,GAAE,WAAW,cAAc,cAAc,EAAQE,GAAN,KAAO,CAAvkL,MAAukL,CAAAtC,EAAA,UAAC,IAAI,WAAW,CAAC,OAAO,KAAK,eAAe,KAAK,iBAAiB,KAAK,YAAY,CAAC,EAAOuC,GAAN,cAAgBD,EAAC,CAA7qL,MAA6qL,CAAAtC,EAAA,UAAC,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,KAAK,KAAK,KAAK,CAAC,CAAC,YAAYF,EAAEC,EAAEE,EAAEC,EAAE,CAAC,GAAG,MAAM,EAAEL,GAAE,KAAK,UAAU,EAAE,EAAEA,GAAE,KAAK,OAAO,IAAI,GAAG,EAAEA,GAAE,KAAK,OAAO,IAAI,GAAG,EAAEA,GAAE,KAAK,OAAO,IAAI,GAAG,EAAEA,GAAE,KAAK,gBAAgB,EAAE,EAAEA,GAAE,KAAK,kBAAkB,EAAE,EAAEA,GAAE,KAAK,eAAe,EAAE,EAAE,KAAK,IAAIC,EAAE,KAAK,QAAQC,EAAE,KAAK,MAAM,KAAK,QAAQ,KAAK,kBAAkBG,CAAC,EAAE,KAAK,cAAc+B,GAAE,SAASnC,CAAC,EAAE,KAAK,gBAAgB,KAAK,KAAK6B,GAAE,IAAI7B,CAAC,GAAYG,IAAT,OAAW,GAAG,MAAM,QAAQA,CAAC,EAAE,KAAK,MAAM,KAAK,QAAQ,GAAG,KAAK,eAAeA,EAAE,OAAO,GAAG,KAAK,gBAAgBA,EAAE,KAAK,IAAI,UAAoB,OAAOA,GAAjB,SAAmB,CAAC,GAAG,KAAK,QAAQ,GAAG,KAAK,MAAWA,EAAE,QAAP,GAAa,KAAK,cAAc,CAAC,GAAG,CAAC,KAAKJ,EAAE,KAAKC,CAAC,EAAEG,EAAEJ,GAAGA,EAAE,OAAO,GAAG,KAAK,gBAAgBA,EAAE,KAAK,IAAI,EAAEC,GAAGA,EAAE,OAAO,GAAG,KAAK,gBAAgBA,EAAE,KAAK,IAAI,CAAC,CAAC,KAAK,kBAAkBG,CAAC,CAAC,MAAUA,IAAL,IAAaA,IAAL,GAAO,KAAK,MAAM,KAAK,QAAQA,EAAEM,GAAE,6BAA6BN,CAAC,EAAE,CAAC,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAEF,EAAE,IAAI,KAAKqC,GAAErC,EAAE,EAAE,CAAC,EAAWA,IAAT,SAAa,KAAK,CAAC,EAAEA,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,IAAIA,EAAEE,EAAE,CAAC,QAAQ,EAAE,UAAUE,CAAC,EAAE,KAAK,KAAK,IAAIJ,KAAK,EAAY,OAAOA,GAAjB,UAAoBE,EAAEE,EAAE,QAAQJ,CAAC,EAAOE,IAAL,KAASA,EAAE,EAAE,QAAQ,OAAOF,CAAC,CAAC,GAAQE,IAAL,IAAQ,EAAE,IAAI,OAAO,EAAEA,CAAC,CAAC,CAAC,GAAG,EAAE,IAAIF,CAAC,CAAC,KAAM,SAAQA,KAAK,EAAE,EAAE,IAAIA,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,KAAK,SAAS,KAAK,KAAK,KAAK,GAAG,KAAK,QAAQ,GAAGyC,GAAE,KAAK,KAAK,KAAK,IAAI,GAAG,KAAK,SAAS,KAAK,KAAK,KAAK,GAAGA,GAAE,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,EAAKC,GAAE,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,KAAK,OAAO,UAAU,GAAG,YAAY,GAAG,aAAa,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,gBAAgB,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,GAAG,eAAe,OAAO,mBAAmB,IAAI,sBAAsB,MAAM,UAAU,MAAM,WAAW,CAAC,EAAEC,GAAE,IAAI,IAAUC,GAAN,cAAgBL,EAAC,CAAh0O,MAAg0O,CAAAtC,EAAA,UAAC,OAAO,UAAU,EAAE,CAAC,IAAI,EAAE0C,GAAE,IAAI,CAAC,EAAE,OAAgB,IAAT,SAAa,EAAE,IAAI,KAAK,CAAC,EAAEA,GAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,MAAM,EAAO,IAAL,GAAO,KAAK,cAAc,EAAW,IAAT,OAAW,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC,EAAE,KAAK,eAAe,CAAC,EAAY,OAAO,GAAjB,SAAmB,KAAK,gBAAgB,CAAC,EAAEnC,GAAE,4BAA4B,CAAC,EAAE,EAAW,KAAK,iBAAd,SAA+B,KAAK,eAAeR,GAAE,KAAK,sBAAsB,KAAK,oBAAoB,KAAK,cAAc,KAAK,KAAK,QAAQ,IAAI,KAAK,wBAAwB,EAAE,KAAK,2BAA2B,EAAE,KAAK,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,KAAK+B,GAAE,KAAK,CAAC,EAAEW,GAAE,CAAC,EAAE,IAAI,KAAKJ,GAAE,KAAK,CAAC,EAAEI,GAAE,CAAC,EAAE,IAAI,KAAKN,GAAE,KAAK,CAAC,EAAEM,GAAE,CAAC,EAAE,IAAI,KAAKP,GAAE,KAAK,CAAC,EAAE,IAAIK,GAAE,EAAEE,GAAE,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,KAAKX,GAAE,KAAK,CAAC,EAAEW,GAAE,CAAC,EAAE,IAAI,KAAKJ,GAAE,KAAK,CAAC,EAAEI,GAAE,CAAC,EAAE,IAAI,KAAKN,GAAE,KAAK,CAAC,EAAE,GAAG,IAAI,KAAKD,GAAE,KAAK,CAAC,EAAE,IAAIK,GAAE,EAAE,GAAG,OAAO,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAKT,GAAE,KAAK,CAAC,EAAEW,GAAE,CAAC,EAAE,IAAI,KAAKJ,GAAE,KAAK,CAAC,EAAEI,GAAE,CAAC,EAAE,IAAI,KAAKN,GAAE,KAAK,CAAC,EAAEM,GAAE,CAAC,EAAE,IAAI,KAAKP,GAAE,KAAK,CAAC,EAAE,IAAIK,GAAE,EAAE,GAAG,OAAO,IAAI,EAAE,KAAK,mBAAmB,EAAE,OAAON,EAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAKA,GAAE,KAAKA,GAAE,MAAMA,GAAE,MAAMA,GAAE,KAAKA,GAAE,MAAMA,GAAE,UAAU,OAAO,OAAO,KAAK,CAAC,EAAEH,IAAG,KAAK,CAAC,EAAEc,GAAE,EAAE,CAAC,EAAEH,GAAE,CAAC,CAAC,EAAE,IAAI,KAAKJ,GAAE,KAAK,CAAC,EAAEO,GAAE,EAAE,CAAC,EAAEH,GAAE,CAAC,CAAC,EAAE,IAAI,KAAKN,GAAE,KAAK,CAAC,EAAES,GAAE,EAAE,CAAC,EAAEH,GAAE,CAAC,CAAC,EAAE,IAAI,KAAKT,GAAE,KAAK,CAAC,EAAE,IAAIO,GAAE,EAAEE,GAAE,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,KAAKR,GAAE,KAAK,CAAC,EAAE,IAAIM,GAAE,EAAEE,GAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,KAAK,mBAAmB,EAAE,KAAK,EAAE,KAAKR,GAAEC,EAAC,EAAO,EAAE,OAAP,GAAY,KAAK,oBAAoBD,GAAE,EAAE,EAAO,EAAE,OAAP,GAAY,KAAK,yBAAyBA,GAAE,CAAC,EAAE,MAAM,QAAQ,EAAE,IAAI,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAOA,EAAC,EAAY,OAAO,EAAE,MAAnB,UAAyB,KAAK,mBAAmB,EAAE,KAAK,KAAK,EAAE,KAAK,KAAKA,EAAC,CAAC,CAAC,oBAAoB,EAAE,EAAE,CAAC,QAAQlC,KAAK,EAAE,KAAKA,CAAC,EAAE,QAAQ,CAAC,CAAC,yBAAyB,EAAE,EAAE,CAAC,QAAQA,KAAK,EAAE,CAAC,IAAIF,EAAE,EAAEE,CAAC,EAAE,KAAKA,CAAC,EAAE,QAAaF,IAAL,IAAiBA,IAAT,MAAU,CAAC,CAAC,mBAAmB,EAAE,EAAEE,EAAEE,EAAEF,EAAE,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,QAAQF,KAAKI,EAAE,KAAKJ,CAAC,EAAE,QAAQ,GAAG,IAAIC,EAAE+C,GAAE,EAAE9C,CAAC,EAAE,OAAO,CAACF,EAAEE,CAAC,IAAID,EAAE0C,GAAE,KAAK3C,CAAC,EAAE,KAAKE,CAAC,EAAE,KAAKF,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE,OAAO,CAAC,IAAIA,EAAEgD,GAAE,EAAE9C,CAAC,EAAE,OAAO,CAACD,EAAEC,CAAC,IAAIF,EAAE2C,GAAE,KAAK1C,CAAC,EAAE,KAAKC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAIA,EAAE,KAAKE,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,UAAU,EAAE,KAAK,IAAI,KAAK,EAAE,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,KAAK,EAAE,EAAE,KAAK,IAAI,KAAK,EAAEF,EAAE,SAAS,EAAE,KAAK,IAAI,GAAG,EAAEE,EAAE,SAAS,EAAE,KAAK,IAAI,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAIF,EAAE,QAAQE,CAAC,EAAE,KAAKA,EAAE,SAAS,EAAE,KAAK,IAAI,KAAK,EAAE,EAAE,KAAK,IAAI,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,IAAI,KAAK,EAAEF,EAAE,QAAQ,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,KAAK,QAAQkC,GAAE,MAAMpC,GAAQ,KAAKA,CAAC,EAAE,UAAb,GAAqB,GAAG,KAAK,WAAW,KAAK,YAAY,QAAQA,KAAKoC,GAAE,KAAKpC,CAAC,EAAE,gBAAgB,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAACkC,GAAE,KAAK,GAAG,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAQ,IAAL,GAAO,GAAG,KAAK,KAAK,OAAO,CAAC,oBAAoB,CAAC,QAAQ,KAAKC,GAAE,KAAK,CAAC,EAAE,SAAS,CAAChB,GAAE,IAAI,CAAC,GAAGH,GAAE,iBAAiB,CAAC,CAAC,CAAC,EAAC,SAASgC,GAAEhD,EAAEC,EAAE,CAAC,IAAIC,EAAEE,EAAEC,EAAEC,EAAE,EAAE,CAAC,EAAE,IAAID,KAAKJ,EAAE,CAAC,IAAIK,KAAKJ,EAAE4B,GAAE,IAAIzB,CAAC,EAAED,EAAE,CAAC,EAAEF,IAAIF,EAAE,SAASM,EAAE,CAAC,CAAC,GAAGN,EAAE,SAASM,EAAE,CAAC,CAAC,IAAIF,EAAE,KAAKE,EAAE,CAAC,CAAC,EAAEF,EAAE,QAAQ,EAAE,KAAK,CAACC,EAAED,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAnJD,EAAA6C,GAAA,KAAoJ,SAASD,GAAE/C,EAAEC,EAAE,CAAC,OAAgBD,IAAT,OAAWA,EAAWC,IAAT,OAAWA,EAAE,MAAM,CAA9CE,EAAA4C,GAAA,KAA+C,SAASJ,GAAE3C,EAAEC,EAAE,CAAC,QAAQC,KAAKD,EAAED,EAAE,IAAIE,CAAC,CAAC,CAA9BC,EAAAwC,GAAA,KAA+B3C,GAAE8C,GAAE,UAAUF,EAAC,EAAE,IAAMK,GAAN,KAAO,CAAnqU,MAAmqU,CAAA9C,EAAA,UAAC,YAAYF,EAAE,CAACD,GAAE,KAAK,UAAU,CAAC,CAAC,EAAEA,GAAE,KAAK,SAAS,CAAC,CAAC,EAAEA,GAAE,KAAK,SAAS,CAAC,CAAC,EAAEA,GAAE,KAAK,gBAAgBA,GAAG,KAAK,OAAO,KAAKA,CAAC,EAAE,EAAE,KAAK,QAAQ8C,GAAE,UAAU7C,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,KAAK,MAAM,SAASD,EAAEC,EAAE,CAAC,OAAgB,OAAOD,GAAjB,SAAmBsB,GAAEtB,EAAEC,CAAC,EAAEC,IAAG,CAACE,IAAGJ,aAAa,iBAAiBsB,GAAEtB,EAAE,IAAIC,CAAC,EAAED,aAAa,YAAYA,aAAa,aAAaA,aAAa,SAAS,IAAIc,GAAEd,CAAC,EAAEE,IAAGF,aAAa,KAAKwB,GAAExB,EAAEC,EAAE,OAAOyB,EAAC,EAAE,KAAKhB,GAAE,wBAAwB,CAAC,GAAE,EAAE,KAAK,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,WAAW,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,EAAE,OAAO,CAACR,EAAEE,CAAC,IAAIc,GAAE,GAAGd,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,KAAK,WAAW,IAAIA,EAAE,KAAK,QAAQ,KAAK,KAAK,KAAK,OAAO,EAAE,EAAEF,CAAC,EAAE,GAAG,KAAK,KAAK,OAAO,KAAK,KAAK,MAAM,EAAEQ,GAAE,qBAAqB,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,KAAK,OAAO,KAAK,MAAM,EAAE,KAAK,QAAQ,cAAc,MAAM,KAAK,eAAe,EAAE,MAAM,KAAK,YAAY,EAAE,EAAE,KAAK,GAAG,KAAK,WAAW,MAAM,GAAG,MAAM,KAAK,eAAe,EAAE,KAAK,KAAK,OAAO,KAAK,KAAK,MAAM,EAAE,KAAK,QAAQ,cAAc,EAAE,OAAO,IAAI,EAAE,OAAO,GAAGD,GAAEP,EAAE,CAAC,EAAE,OAAOA,EAAE,IAAIA,CAAC,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,MAAM,KAAK,WAAW,MAAM,EAAE,IAAI,EAAE,OAAO,OAAO,KAAK,OAAO,EAAE,KAAK,MAAMD,GAAG,CAAC,IAAI,EAAE,MAAMA,EAAE,MAAM,EAAEA,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,QAAQ,eAAe,EAAE,EAAE,KAAKD,GAAGA,EAAE,MAAM,KAAK,YAAY,EAAE,GAAG,MAAM,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,kBAAkB,CAAC,KAAK,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAKE,EAAEiB,GAAE,IAAI,OAAO,CAAC,EAAE,IAAIf,EAAE,GAAG,EAAE,KAAKA,EAAE,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,EAAE,OAAOA,EAAE,MAAM,KAAK,WAAW,iBAAiB,MAAM,GAAYA,IAAT,OAAW,OAAO,IAAI,EAAE,MAAM,KAAK,WAAW,mBAAmBA,CAAC,EAAEE,EAAE,KAAK,QAAQ,KAAK,IAAIJ,EAAE,EAAE,EAAE,CAAC,EAAEK,EAAE,MAAMD,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAEC,CAAC,CAAC,EAAC,eAAe2C,GAAElD,EAAEC,EAAE,CAAC,IAAIC,EAAE,IAAI+C,GAAEhD,CAAC,EAAE,OAAO,MAAMC,EAAE,KAAKF,CAAC,EAAEE,EAAE,MAAM,CAAC,CAAtDC,EAAA+C,GAAA,KAAuD,IAAIC,GAAE,OAAO,OAAO,CAAC,UAAU,KAAK,MAAMD,GAAE,MAAMD,GAAE,YAAY/B,GAAE,eAAeC,GAAE,YAAYC,GAAE,QAAQU,GAAE,UAAUC,GAAE,YAAYC,GAAE,iBAAiBJ,GAAE,iBAAiBC,GAAE,sBAAsBJ,GAAE,sBAAsBC,GAAE,aAAaO,GAAE,cAAcC,GAAE,SAASC,GAAE,WAAWC,GAAE,kBAAkBC,GAAE,iBAAiBC,GAAE,aAAaC,GAAE,cAAcC,GAAE,QAAQM,EAAC,CAAC,EAAQM,GAAN,KAAO,CAAnpY,MAAmpY,CAAAjD,EAAA,UAAC,OAAO,aAAa,EAAE,EAAE,CAAC,IAAID,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAEE,EAAc,OAAO,KAAK,cAAxB,WAAqC,KAAK,aAAa,EAAE,EAAEF,CAAC,EAAE,KAAK,aAAa,EAAE,EAAEE,EAAEE,EAAEJ,EAAEE,EAAE,MAAM,CAAC,OAAO,EAAE,OAAOF,EAAE,aAAaE,EAAE,MAAM,EAAE,KAAKE,EAAE,IAAI,EAAEA,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,EAAE,IAAIwC,GAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC,OAAO,aAAahC,GAAE,EAAE,IAAIA,GAAE,CAAC,CAAC,CAAC,YAAYb,EAAEC,EAAE,CAAC,EAAEE,EAAE,CAACJ,GAAE,KAAK,SAAS,CAAC,CAAC,EAAEA,GAAE,KAAK,MAAM,IAAI,GAAG,EAAEA,GAAE,KAAK,eAAeA,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,aAAa,MAAMA,EAAE,KAAK,OAAO,KAAKA,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,MAAM,KAAK,eAAeC,CAAC,EAAE,KAAK,KAAKG,EAAE,KAAK,KAAK,KAAK,YAAY,KAAK,KAAK,cAAc,KAAK,QAAQF,EAAE,KAAK,aAAaA,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,KAAK,cAAc,KAAK,aAAa,SAAS,CAAC,WAAW,CAAC,KAAK,eAAe,KAAK,WAAW,KAAK,eAAe,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,OAAO,KAAK,WAAW,KAAK,WAAW,KAAK,IAAI,OAAO,YAAY,KAAK,GAAG,EAAE,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC,IAAIA,EAAE8B,GAAE,IAAI,CAAC,EAAE5B,EAAE2B,GAAE,IAAI,CAAC,EAAE,EAAED,GAAE,IAAI,CAAC,EAAExB,EAAE,KAAK,QAAQ,CAAC,EAAEC,EAAED,EAAE,cAAc,CAAC,CAACJ,EAAEM,EAAEF,EAAE,iBAAiB,CAAC,CAACF,EAAEK,EAAEH,EAAE,eAAe,CAAC,CAAC,EAAEI,EAAE,CAAC,EAAE,OAAO,CAACT,EAAEK,CAAC,IAAI,EAAEC,GAAGL,EAAE,IAAID,CAAC,EAAEK,EAAEJ,EAAE,IAAID,CAAC,EAAEK,CAAC,EAAEE,GAAGJ,EAAE,IAAIH,CAAC,IAAIK,EAAE,KAAK,eAAeA,EAAEF,EAAE,IAAIH,CAAC,CAAC,GAAGQ,GAAG,EAAE,IAAIR,CAAC,IAAIA,EAAE,EAAE,IAAIA,CAAC,GAAGA,GAAGS,EAAET,CAAC,EAAEK,EAAE,OAAOI,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,KAAK,qBAAqB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,qBAAqB,EAAE,EAAER,EAAE,CAAC,GAAG,KAAK,cAAc,YAAY,OAAO,OAAO,OAAO,EAAEA,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,OAAO,EAAE,CAAC,EAAEA,CAAC,EAAE,EAAE,CAAC,EAAEA,CAAC,CAAC,EAACF,GAAEoD,GAAE,eAAe,CAAC,EAAEpD,GAAEoD,GAAE,OAAO,MAAM,EAAEpD,GAAEoD,GAAE,eAAe,EAAE,EAAEpD,GAAEoD,GAAE,aAAa,IAAI,GAAG,EAAE,SAASC,GAAErD,EAAE,CAAC,OAAaA,IAAN,KAAeA,IAAN,KAAeA,IAAN,KAAeA,IAAN,KAAeA,IAAN,KAAeA,IAAN,KAAeA,IAAN,GAAO,CAAzEG,EAAAkD,GAAA,KAA0E,SAASC,GAAEtD,EAAE,CAAC,OAAOA,GAAG,KAAKA,GAAG,GAAG,CAA1BG,EAAAmD,GAAA,KAA2B,SAASC,GAAEvD,EAAEC,EAAEC,EAAE,CAAC,OAAO,CAACE,EAAEC,CAAC,IAAIc,GAAE,GAAGd,EAAE,UAAUL,EAAEC,EAAEC,CAAC,EAAE,OAAOE,CAAC,CAAxDD,EAAAoD,GAAA,KAAyD,IAAMC,GAAN,cAAiB,KAAK,CAAC,YAAYvD,EAAEC,EAAEE,EAAE,CAACJ,GAAE,KAAK,SAAS,CAAC,CAAC,EAAEA,GAAE,KAAK,sBAAsB,MAAMA,GAAG,CAAC,IAAIC,EAAED,EAAE,MAAME,EAAEF,EAAE,MAAM,MAAM,GAAG,KAAK,KAAK,QAAQ,GAAG,KAAK,KAAK,UAAUC,EAAEC,CAAC,EAAEF,EAAE,MAAM,KAAK,KAAK,SAASC,EAAEC,CAAC,MAAO,IAAG,CAACF,EAAE,MAAM,MAAM,KAAK,KAAK,UAAUC,EAAEC,CAAC,CAAC,OAAOD,EAAE,CAACS,GAAE,0BAA0B,KAAK,UAAUV,CAAC,CAAC,KAAKC,EAAE,OAAO,EAAE,CAAC,MAAM,KAAK,KAAK,WAAWA,EAAEC,EAAEF,EAAE,MAAM,KAAK,KAAK,SAASC,EAAEC,CAAC,EAAWF,EAAE,OAAX,OAAgBA,EAAE,MAAM,KAAK,KAAK,SAASC,CAAC,EAAES,GAAE,wBAAwB,KAAK,UAAUV,CAAC,CAAC,EAAE,OAAOA,EAAE,KAAK,EAAE,EAAE,KAAK,eAAe,KAAK,cAAcC,CAAC,EAAE,KAAK,QAAQA,EAAE,KAAK,KAAKC,EAAE,KAAK,QAAQE,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,EAAE,SAAS,KAAK,aAAa,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,IAAIF,EAAE,IAAIiB,GAAE,IAAI,CAAC,GAAG,EAAE,KAAK,QAAQ,KAAK,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC,EAAEjB,CAAC,CAAC,cAAc,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,GAAG,CAAC,KAAKF,EAAE,MAAM,CAAC,EAAE,EAAEI,EAAE,KAAK,QAAQJ,CAAC,EAAE,GAAGI,GAAGA,EAAE,QAAQ,CAAC,IAAIH,EAAE,KAAK,QAAQD,CAAC,EAAEC,GAAGA,EAAE,QAAQA,GAAG,KAAK,aAAaD,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,KAAK,kBAAkB,EAAE,MAAM,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAA9vd,MAA8vd,CAAAG,EAAA,WAAC,eAAeF,EAAE,CAAC,MAAM,GAAGA,CAAC,EAAED,GAAE,KAAK,cAAc,CAAC,CAAC,EAAEA,GAAE,KAAK,eAAe,CAAC,CAAC,EAAEA,GAAE,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,EAAE,EAAE,CAAC,OAAe,IAAR,KAAS,CAAC,MAAM,OAAO,CAAC,MAAM,KAAK,gBAAgB,EAAE,MAAM,KAAK,aAAa,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,KAAK,mBAAmB,KAAK,WAAW,CAAC,CAAC,uBAAuB,EAAE,CAAM,IAAL,IAAQ,KAAK,QAAQ,GAAG,KAAK,OAAO,IAAI,IAAImB,GAAE,QAAQ,CAAC,IAAI,EAAW,IAAT,OAAWA,GAAE,QAAQ,EAAE,QAAQnB,GAAG,KAAK,QAAQA,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQA,GAAG,KAAK,QAAQA,CAAC,EAAE,SAASmB,GAAE,IAAInB,CAAC,EAAE,EAAE,KAAK,QAAQ,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,uBAAuB,EAAE,CAAC,MAAM,gBAAgB,EAAE,EAAE,EAAE,CAAC,KAAK,uBAAuB,CAAC,EAAE,GAAG,CAAC,KAAKE,EAAE,QAAQE,EAAE,OAAO,EAAE,UAAUE,CAAC,EAAE,KAAK,GAAG,CAACF,GAAG,KAAK,KAAK,UAAUA,EAAE,MAAM,KAAK,CAAC,EAAE,MAAMJ,GAAG,CAAC,IAAIC,EAAEkB,GAAE,IAAInB,CAAC,EAAEE,EAAE,KAAK,QAAQF,CAAC,EAAE,OAAOC,EAAE,cAAcC,EAAE,YAAY,EAAE,EAAEE,GAAG,MAAM,KAAK,KAAK,UAAU,GAAG,EAAE,KAAK,uBAAuB,EAAEF,EAAE,UAAU,EAAE,CAAC,KAAK,QAAQ,UAAUA,EAAE,QAAQ,CAAC,IAAID,EAAE,GAAG,KAAKK,EAAE,KAAK,GAAG,CAACL,IAAIC,EAAE,kBAAkB,KAAK,yBAAyB,CAAC,GAAG,CAAC,gBAAgBE,CAAC,EAAEF,EAAEG,EAAE,KAAK,YAAY,MAAML,GAAG,CAAC,KAAK,KAAK,UAAUA,EAAE,QAAQA,EAAE,MAAMA,EAAE,QAAQA,EAAE,IAAI,EAAE,EAAE,GAAGC,EAAE,EAAEG,GAAG,CAACC,EAAE,CAAC,MAAMH,EAAE,cAAc,CAAC,EAAE,CAAC,MAAMA,EAAE,cAAcE,CAAC,GAAY,EAAE,KAAK,uBAAuB,EAAEF,EAAE,UAAU,KAAtD,OAAyD,MAAM,CAAC,CAAC,CAAC,uBAAuB,EAAE,EAAE,CAAC,GAAG,EAAE,IAAIA,EAAEE,EAAE,EAAEE,EAAEC,EAAEC,EAAE,CAAC,KAAKC,EAAE,QAAQC,EAAE,OAAOC,EAAE,UAAUC,EAAE,QAAQC,CAAC,EAAE,KAAK,KAAK,EAAE,EAAE,IAAI,GAASJ,EAAE,SAAS,CAAC,IAAlB,KAAoB,GAAGP,EAAEO,EAAE,SAAS,EAAE,CAAC,EAAE6C,GAAEpD,CAAC,EAAE,CAAC,GAAGE,EAAEK,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE8C,GAAE9C,EAAE,EAAEL,CAAC,EAAE,GAAGO,EAAE,IAAI,CAAC,IAAIL,EAAEa,GAAE,IAAI,CAAC,EAAEZ,EAAED,EAAE,aAAaG,EAAE,CAAC,EAAED,EAAEK,EAAE,CAAC,EAAEN,EAAE,KAAK,EAAE,KAAK,YAAY,KAAKA,CAAC,EAAE,CAACG,IAAIJ,EAAE,cAAcE,EAAE,cAAc,KAAK,uBAAuBD,EAAE,YAAYA,EAAE,WAAW,KAAK,wBAAwBK,EAAE,OAAO,CAAC,GAAGA,EAAE,OAAO,CAAC,EAAMA,EAAE,OAAN,IAAa,MAAMC,EAAE,wBAAwBN,EAAE6C,GAAE,aAAa3C,EAAE,CAAC,EAAEF,EAAE,OAAOL,EAAE,KAAK,gBAAgB,KAAKK,CAAC,GAAG,GAAGH,EAAE,CAAC,SAASiD,GAAEnD,CAAC,EAAE,CAAC,GAAGE,EAAEK,EAAE,UAAU,EAAE,CAAC,EAAQP,IAAN,KAAcW,EAAE,eAAP,GAAoB,OAAOA,EAAE,oBAAoB,KAAK,aAAa,KAAK,CAAC,OAAO,EAAE,OAAOT,EAAE,OAAOF,CAAC,CAAC,EAAE,GAAGE,EAAE,CAAC,EAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,YAAY,MAAMJ,GAAGA,EAAE,aAAa,EAAE,OAAO,IAAI,GAAE,SAASA,EAAEC,EAAE,CAAC,IAAI,EAAEG,EAAEC,EAAEC,EAAE,IAAI,IAAI,QAAQC,EAAE,EAAEA,EAAEP,EAAE,OAAOO,IAAI,EAAEP,EAAEO,CAAC,EAAEH,EAAE,EAAEH,CAAC,EAAEK,EAAE,IAAIF,CAAC,EAAEC,EAAEC,EAAE,IAAIF,CAAC,EAAEE,EAAE,IAAIF,EAAEC,EAAE,CAAC,CAAC,EAAEA,EAAE,KAAK,CAAC,EAAE,OAAO,MAAM,KAAKC,CAAC,CAAC,GAAE,KAAK,YAAY,MAAM,EAAE,KAAK,kBAAkB,EAAE,KAAK,CAAC,CAACN,EAAEC,CAAC,IAAI,CAAC,IAAI,EAAEkB,GAAE,IAAInB,EAAE,KAAK,OAAO,EAAE,OAAG,EAAE,oBAA2B,CAAC,KAAKA,EAAE,MAAM,EAAE,oBAAoBC,CAAC,CAAC,EAASA,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,KAAK,YAAY,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,WAAW,CAAC,EAAE,OAAgB,IAAT,SAAa,MAAM,KAAK,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,EAACD,GAAEwD,GAAG,OAAO,MAAM,EAAEtC,GAAE,IAAI,OAAOsC,EAAE,EAAE,IAAMC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAQC,GAAN,cAAiBN,EAAC,CAA/3iB,MAA+3iB,CAAAjD,EAAA,WAAC,aAAa,CAAC,IAAI,EAAE,KAAK,MAAM,UAAU,EAAU,IAAR,MAAU,KAAK,GAAG,GAAW,IAAR,QAAY,KAAK,GAAG,IAAI,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK,aAAa,EAAE,CAAC,UAAU,EAAE,EAAED,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAKE,EAAE,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAEA,EAAE,IAAI,IAAIA,CAAC,EAAE,IAAIE,EAAEF,EAAE,KAAK,EAAEG,EAAM,EAAE,OAAN,EAAWC,EAAE,KAAK,MAAM,UAAU,CAAC,EAAE,GAAG,EAAE,QAAQC,EAAE,EAAEA,EAAED,EAAEC,IAAI,CAAC,IAAID,EAAE,KAAK,MAAM,UAAU,CAAC,EAAE,GAAGF,GAAG,GAAGF,EAAE,IAAII,CAAC,IAAIN,EAAE,IAAIM,EAAE,KAAK,SAAS,EAAEA,EAAE,CAAC,CAAC,EAAEJ,EAAE,OAAOI,CAAC,EAAMJ,EAAE,OAAN,GAAY,UAAU,CAACG,GAAG,EAAE,IAAIC,CAAC,GAAGN,EAAE,IAAIM,EAAE,KAAK,SAAS,EAAEA,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,OAAON,CAAC,CAAC,SAAS,EAAE,EAAEA,EAAE,CAAC,GAAG,CAAC,MAAME,CAAC,EAAE,KAAK,EAAEA,EAAE,UAAU,EAAE,CAAC,EAAEE,EAAEF,EAAE,UAAU,EAAE,CAAC,EAAEG,EAAEkD,GAAG,CAAC,EAAE,GAAGlD,EAAED,GAAG,EAAE,GAAG,EAAE,EAAEF,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAKM,GAAE,mCAAmCR,EAAE,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,EAAE,EAAEE,EAAE,YAAYM,GAAE,qCAAqCR,EAAE,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,6BAA6BE,EAAE,UAAU,EAAE,EAAM,IAAJ,EAAM,OAAOA,EAAE,cAAc,EAAEE,CAAC,EAAE,GAAO,IAAJ,EAAM,OAAYE,GAAE,SAASR,EAAE,CAAC,KAAKA,EAAE,SAAS,IAAI,GAAGA,EAAEA,EAAE,MAAM,EAAE,EAAE,EAAE,OAAOA,CAAC,GAAEQ,EAAEJ,EAAE,UAAU,EAAEE,CAAC,CAAC,EAAE,KAAK,KAA9F,GAAiG,OAAOE,EAAE,IAAIA,EAAE,GAAO,IAAJ,EAAM,OAAOJ,EAAE,cAAc,EAAEE,CAAC,EAAE,GAAOA,IAAJ,EAAM,OAAO,KAAK,cAAc,EAAE,CAAC,EAAE,CAAC,IAAIL,EAAE,KAAI,SAASD,EAAE,CAAC,OAAOA,EAAE,CAAC,IAAK,GAAE,OAAO,WAAW,IAAK,GAAE,OAAO,YAAY,IAAK,GAAE,OAAO,YAAY,IAAK,GAAE,OAAO,MAAM,IAAK,GAAE,OAAO,UAAU,IAAK,GAAE,OAAO,WAAW,IAAK,GAAE,OAAO,WAAW,IAAK,IAAG,OAAO,MAAM,IAAK,IAAG,OAAO,aAAa,IAAK,IAAG,OAAO,aAAa,QAAQ,OAAO,KAAK,CAAC,GAAE,CAAC,GAAGM,CAAC,EAAEJ,EAAEK,EAAE,QAAQH,EAAE,EAAEA,EAAEE,EAAEF,IAAIH,EAAEG,CAAC,EAAE,KAAK,cAAc,EAAE,CAAC,EAAE,GAAGF,EAAE,OAAOD,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,GAAG,CAAC,MAAMC,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC,IAAK,GAAE,OAAOA,EAAE,SAAS,CAAC,EAAE,IAAK,GAAE,OAAOA,EAAE,UAAU,CAAC,EAAE,IAAK,GAAE,OAAOA,EAAE,UAAU,CAAC,EAAE,IAAK,GAAE,OAAOA,EAAE,UAAU,CAAC,EAAEA,EAAE,UAAU,EAAE,CAAC,EAAE,IAAK,GAAE,OAAOA,EAAE,QAAQ,CAAC,EAAE,IAAK,GAAE,OAAOA,EAAE,SAAS,CAAC,EAAE,IAAK,GAAE,OAAOA,EAAE,SAAS,CAAC,EAAE,IAAK,IAAG,OAAOA,EAAE,SAAS,CAAC,EAAEA,EAAE,SAAS,EAAE,CAAC,EAAE,IAAK,IAAG,OAAOA,EAAE,SAAS,CAAC,EAAE,IAAK,IAAG,OAAOA,EAAE,UAAU,CAAC,EAAE,IAAK,IAAG,OAAOA,EAAE,UAAU,CAAC,EAAE,QAAQQ,GAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAOiD,GAAN,cAAiBD,EAAE,CAAnwmB,MAAmwmB,CAAAvD,EAAA,WAAC,OAAO,UAAU,EAAE,EAAE,CAAC,OAAa,EAAE,SAAS,EAAE,CAAC,IAApB,KAAoC,EAAE,UAAU,EAAE,CAAC,IAA5B,YAAmC,EAAE,UAAU,EAAE,CAAC,IAAnB,CAAoB,CAAC,MAAM,OAAO,CAAC,KAAK,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,MAAM,KAAK,eAAe,EAAE,EAAE,KAAK,SAAS,MAAM,KAAK,UAAU,gBAAgB,EAAE,EAAE,IAAI,SAAS,MAAM,KAAK,UAAU,eAAe,EAAE,EAAE,QAAQ,SAAS,MAAM,KAAK,UAAU,mBAAmB,EAAE,EAAE,KAAK,SAAS,MAAM,KAAK,UAAU,qBAAqB,EAAE,KAAK,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,OAAgB,EAAE,QAAX,SAAmB,EAAE,EAAE,MAAM,KAAK,WAAW,GAAG,CAAC,CAAC,gBAAgB,CAAU,KAAK,aAAd,SAA2B,KAAK,WAAW,KAAK,MAAM,UAAU,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAY,KAAK,aAAd,OAAyB,CAAC,KAAK,eAAe,EAAE,IAAI,EAAE,KAAK,MAAM,UAAU,KAAK,UAAU,EAAE,EAAE,KAAK,WAAW,EAAE,GAAG,EAAE,KAAK,WAAW,KAAK,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAID,EAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAEA,EAAE,KAAK,UAAU,EAAE,EAAEA,CAAC,EAAEA,CAAC,CAAC,MAAM,gBAAgB,CAAC,GAAG,KAAK,KAAK,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,eAAe,EAAE,KAAK,WAAW,GAAGQ,GAAE,qBAAqB,EAAE,CAAC,EAAE,SAAS,KAAK,WAAW,EAAE,YAAYA,GAAE;AAAA,mBAA4D,KAAK,UAAU,sBAAsB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,MAAM,EAAE,YAAY,KAAK,WAAWC,GAAE,KAAK,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,WAAW,KAAK,WAAW,MAAM,EAAE,OAAW,EAAE,OAAN,GAAY,KAAK,WAAW,EAAE,IAAI,KAAK,EAAE,KAAK,cAAc,EAAE,IAAI,KAAK,EAAE,KAAK,UAAU,EAAE,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,IAAI,GAAG,EAAE,KAAK,KAAK,EAAE,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,IAAI,KAAK,EAAE,KAAK,QAAQ,WAAW,EAAE,OAAO,KAAK,EAAE,EAAE,OAAO,KAAK,EAAE,EAAE,OAAO,KAAK,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,KAAK,EAAE,EAAE,OAAO,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,gBAAgB,CAAqB,GAAjB,KAAK,OAAe,KAAK,MAAM,MAAM,KAAK,eAAe,EAAW,KAAK,aAAd,QAAyB,OAAO,KAAK,KAAK,MAAM,MAAM,KAAK,KAAK,YAAY,KAAK,WAAWA,GAAE,KAAK,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,WAAW,KAAK,WAAW,MAAM,EAAE,OAAO,KAAK,gBAAgB,KAAK,cAAc,EAAE,IAAI,KAAK,GAAG,KAAK,UAAU,EAAE,IAAI,KAAK,EAAE,KAAK,YAAY,EAAE,IAAI,KAAK,EAAE,KAAK,QAAQ,WAAW,EAAE,OAAO,KAAK,EAAE,EAAE,OAAO,KAAK,EAAE,EAAE,OAAO,KAAK,GAAG,KAAK,OAAO,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAIT,EAAE,EAAE,IAAI,CAAC,EAAEA,GAAOA,EAAE,SAAN,GAAc,EAAE,IAAI,EAAEA,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,eAAe,CAAoB,GAAhB,KAAK,MAAc,KAAK,MAAM,MAAM,KAAK,eAAe,EAAW,KAAK,YAAd,QAAwB,OAAO,IAAI,EAAE,KAAK,WAAW,KAAK,UAAU,KAAK,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,WAAW0D,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,YAAYA,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,mBAAmB,CAAC,GAAG,CAAC,KAAK,UAAU,KAAK,MAAM,MAAM,KAAK,eAAe,EAAW,KAAK,gBAAd,QAA6B,KAAK,MAAM,MAAM,KAAK,eAAe,EAAW,KAAK,gBAAd,QAA6B,OAAO,KAAK,WAAW,KAAK,cAAc,SAAS,CAAC,CAAC,MAAM,oBAAoB,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,aAAa,CAAC,KAAK,QAAQ,aAAa,GAAG,OAAO,KAAK,eAAe,EAAE,KAAK,WAAW,IAAI,KAAK,WAAW,KAAK,WAAW,MAAM,EAAE,KAAK,WAAW,IAAI,KAAK,IAAI,CAAC,MAAM,kBAAkB,CAAC,GAAG,KAAK,cAAc,KAAK,YAAY,EAAE,KAAK,YAAY,MAAM,KAAK,oBAAoB,EAAE,EAAW,KAAK,OAAd,OAAmB,OAAO,IAAI,EAAE,KAAK,KAAK,IAAI,GAAG,EAAE,EAAE,KAAK,KAAK,IAAI,GAAG,EAAE,OAAO,KAAK,MAAM,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE1D,EAAEE,EAAE,CAAC,EAAE,IAAI,KAAKgC,GAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC3B,GAAE,CAAC,EAAE,GAAGP,EAAE,KAAK,aAAa,KAAK,eAAe,EAAE,CAAC,EAAE,OAAO,YAAY,CAAC,EAAE,KAAK,QAAQ,YAAY,CAAC,GAAY,IAAT,OAAW,SAAS,OAAO,OAAOE,EAAEF,CAAC,CAAC,MAAME,EAAE,CAAC,EAAEF,EAAE,OAAO,KAAK,YAAYE,EAAE,UAAU,KAAK,WAAW,KAAK,cAAcA,EAAE,YAAY,KAAK,aAAaA,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,KAAK,cAAc,YAAY,OAAO,OAAO,EAAE,CAAC,MAAO,QAAO,CAACF,EAAEE,CAAC,IAAI,OAAO,QAAQ,CAAC,EAAE,KAAK,qBAAqB,EAAEF,EAAEE,CAAC,CAAC,CAAC,EAAC,SAASwD,GAAG5D,EAAEC,EAAEC,EAAEE,EAAE,CAAC,IAAIC,EAAEL,EAAEC,EAAE,GAAGC,EAAE,KAAK,OAAYE,IAAN,KAAeA,IAAN,MAAUC,GAAG,IAAIA,CAAC,CAAjEF,EAAAyD,GAAA,MAAkE5D,GAAE2D,GAAG,OAAO,MAAM,EAAE3D,GAAE2D,GAAG,eAAe,EAAE,EAAExC,GAAE,IAAI,OAAOwC,EAAE,EAAE,IAAIE,GAAG,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQV,GAAE,MAAMF,GAAE,YAAY/B,GAAE,eAAeC,GAAE,YAAYC,GAAE,QAAQU,GAAE,UAAUC,GAAE,YAAYC,GAAE,iBAAiBJ,GAAE,iBAAiBC,GAAE,sBAAsBJ,GAAE,sBAAsBC,GAAE,aAAaO,GAAE,cAAcC,GAAE,SAASC,GAAE,WAAWC,GAAE,kBAAkBC,GAAE,iBAAiBC,GAAE,aAAaC,GAAE,cAAcC,GAAE,QAAQM,GAAE,MAAMI,EAAC,CAAC,EAAQY,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,gBAAgB,GAAG,YAAY,EAAE,EAAEC,GAAG,OAAO,OAAO,CAAC,EAAED,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAA4J,IAAME,GAAG,OAAO,OAAO,CAAC,EAAEC,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,YAAY,EAAE,CAAC,EAAqO,IAAMC,GAAG,OAAO,OAAO,CAAC,EAAEC,GAAG,CAAC,eAAe,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,eAAeC,GAAGC,EAAE,CAAC,IAAIC,EAAE,IAAIC,GAAEL,EAAE,EAAE,MAAMI,EAAE,KAAKD,CAAC,EAAE,IAAIG,EAAE,MAAMF,EAAE,MAAM,EAAE,GAAGE,GAAGA,EAAE,KAAK,OAAOA,EAAE,KAAK,GAAG,CAAC,CAA3FC,EAAAL,GAAA,MAA4F,IAAMM,GAAG,OAAO,OAAO,CAAC,EAAE,CAAC,iBAAiB,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,GAAG,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,iBAAiB,GAAG,OAAO,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,iBAAiB,GAAG,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,iBAAiB,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,iBAAiB,GAAG,OAAO,EAAE,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,iBAAiB,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAMC,GAAG,GAAGC,GAAG,GAAG,GAAa,OAAO,WAAjB,SAA2B,CAAC,IAAIP,EAAE,UAAU,UAAU,GAAGA,EAAE,SAAS,MAAM,GAAGA,EAAE,SAAS,QAAQ,EAAE,CAAC,IAAIC,EAAED,EAAE,MAAM,gBAAgB,EAAE,GAAGC,EAAE,CAAC,GAAG,CAAC,CAACD,EAAEG,CAAC,EAAEF,EAA2BK,GAAvB,OAAON,CAAC,EAAE,GAAG,OAAOG,CAAC,EAAO,KAAKI,GAAG,EAAE,CAAC,SAASP,EAAE,SAAS,SAAS,EAAE,CAAC,GAAG,CAAC,CAACC,CAAC,EAAED,EAAE,MAAM,kBAAkB,EAAEM,GAAGC,GAAG,OAAON,CAAC,EAAE,EAAE,CAAC,GAAGD,EAAE,SAAS,SAAS,EAAE,CAAC,GAAG,CAAC,CAACC,CAAC,EAAED,EAAE,MAAM,eAAe,EAAEM,GAAGC,GAAG,OAAON,CAAC,EAAE,EAAE,SAASD,EAAE,SAAS,UAAU,EAAE,CAAC,GAAG,CAAC,CAACC,CAAC,EAAED,EAAE,MAAM,gBAAgB,EAAEM,GAAGC,GAAG,OAAON,CAAC,EAAE,EAAE,CAAC,CAAC,eAAeO,GAAGR,EAAE,CAAC,IAAIC,EAAE,MAAMF,GAAGC,CAAC,EAAE,OAAO,OAAO,OAAO,CAAC,OAAOM,GAAG,IAAIC,EAAE,EAAEF,GAAGJ,CAAC,CAAC,CAAC,CAAtEG,EAAAI,GAAA,MAAuE,IAAMC,GAAN,cAAiBC,EAAC,CAAznyB,MAAynyB,CAAAN,EAAA,WAAC,eAAeH,EAAE,CAAC,MAAM,GAAGA,CAAC,EAAED,GAAE,KAAK,SAAS,IAAIW,EAAE,EAAM,KAAK,aAAT,GAAqB,KAAK,OAAO,IAAI,EAAE,KAAK,UAAU,CAAC,CAAC,WAAW,EAAE,EAAER,EAAE,CAAC,GAAO,IAAJ,GAAW,KAAK,aAAT,GAAqBA,EAAE,CAAC,IAAIH,EAAE,IAAI,SAASG,EAAE,QAAQA,EAAEA,EAAE,WAAWA,EAAE,UAAU,EAAE,KAAK,cAAcH,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,WAAW,CAAC,GAAG,CAAC,SAASA,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,KAAK,cAAcA,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAEY,GAAEC,GAAE,YAAY,CAAC,EAAE,IAAI,WAAW,CAAC,EAAE,IAAIV,EAAE,IAAI,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,IAAI,WAAW,KAAK,OAAO,KAAK,WAAW,KAAK,UAAU,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,SAASA,CAAC,CAAC,CAAC,SAAS,EAAE,EAAEA,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,aAAa,CAAC,EAAEA,GAAG,KAAK,WAAW,EAAE,CAAC,EAAE,KAAK,OAAO,IAAI,EAAE,CAAC,EAAE,MAAM,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAEA,EAAE,GAAG,CAACA,GAAG,KAAK,WAAW,EAAE,EAAE,WAAW,CAAC,EAAE,IAAIW,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,OAAO,KAAK,OAAO,IAAI,EAAEA,EAAE,UAAU,EAAEA,CAAC,CAAC,MAAM,YAAY,EAAE,EAAE,CAAC,KAAK,UAAU,KAAK,OAAO,UAAU,EAAE,CAAC,GAAG,MAAM,KAAK,UAAU,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,KAAK,OAAO,UAAU,EAAE,CAAC,CAAC,CAAC,EAAOH,GAAN,KAAQ,CAAzh0B,MAAyh0B,CAAAP,EAAA,WAAC,aAAa,CAACJ,GAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,MAAM,CAAC,IAAI,EAAE,EAAEG,EAAE,EAAE,CAAC,IAAIW,EAAE,EAAE,EAAE,EAAE,KAAK,KAAK,QAAQb,GAAGc,GAAG,EAAEd,EAAE,OAAOa,CAAC,GAAGC,GAAG,EAAEd,EAAE,IAAIa,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,GAAG,EAAE,KAAKd,GAAGA,EAAE,OAAO,CAAC,EAAEc,EAAE,KAAK,IAAIA,EAAE,GAAG,EAAE,KAAKd,GAAGA,EAAE,IAAI,CAAC,EAAE,EAAEc,EAAE,EAAE,IAAIX,EAAE,EAAE,MAAM,EAAEA,EAAE,OAAO,EAAEA,EAAE,OAAO,EAAEA,EAAE,IAAIW,EAAE,KAAK,KAAK,KAAK,KAAK,QAAQd,GAAG,CAAC,EAAE,SAASA,CAAC,EAAE,CAAC,MAAM,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAIc,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAIX,EAAE,EAAE,EAAE,OAAO,KAAK,KAAK,MAAMF,GAAGA,EAAE,QAAQ,GAAGE,GAAGF,EAAE,IAAI,CAAC,CAAC,EAAC,SAASc,GAAGf,EAAEC,EAAEE,EAAE,CAAC,OAAOH,GAAGC,GAAGA,GAAGE,CAAC,CAA3BC,EAAAW,GAAA,MAA4B,IAAMC,GAAN,cAAiBP,EAAE,CAA9h1B,MAA8h1B,CAAAL,EAAA,WAAC,YAAYH,EAAEE,EAAE,CAAC,MAAM,CAAC,EAAEH,GAAE,KAAK,aAAa,CAAC,EAAE,KAAK,MAAMC,EAAE,KAAK,QAAQE,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,QAAQ,GAAG,MAAM,KAAK,UAAU,KAAK,eAAe,CAAC,CAAC,MAAM,aAAa,CAAC,KAAK,QAAQ,GAAG,MAAM,KAAK,UAAU,EAAE,KAAK,QAAQ,cAAc,CAAC,CAAC,MAAM,cAAc,EAAE,KAAK,gBAAgB,CAAC,GAAG,KAAK,UAAU,OAAO,KAAK,aAAa,GAAG,IAAI,EAAE,KAAK,QAAQ,UAAUA,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC,CAACA,GAAGA,EAAE,aAAa,CAAC,CAAC,MAAM,UAAU,EAAE,EAAE,CAAC,GAAG,KAAK,cAAkB,EAAE,KAAK,gBAAgB,EAAE,CAAC,KAA/B,EAAkC,OAAO,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,OAAgB,KAAK,OAAd,QAAoB,EAAE,EAAE,KAAK,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAO,KAAK,OAAO,KAAK,SAArB,EAA4B,OAAO,KAAK,OAAO,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,kBAAkB,CAAC,OAAO,KAAK,WAAW,KAAK,QAAQ,UAAU,CAAC,IAAI,WAAW,CAAC,OAAgB,KAAK,OAAd,QAAoB,KAAK,kBAAkB,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ,QAAQ,KAAK,YAAY,EAAE,KAAK,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,EAACc,GAAE,IAAI,OAAO,cAAcD,EAAE,CAAC,MAAM,WAAW,CAAC,KAAK,QAAQ,GAAG,IAAIhB,EAAE,MAAMkB,GAAE,KAAK,KAAK,EAAE,KAAK,iBAAiBlB,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,KAAK,QAAQ,GAAG,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,YAAY,CAAC,CAAC,MAAM,WAAWA,EAAEC,EAAE,CAAC,IAAIE,EAAEF,EAAED,EAAEC,EAAE,OAAOa,EAAE,KAAK,MAAM,MAAMd,EAAEG,CAAC,EAAEgB,EAAE,MAAMD,GAAEJ,CAAC,EAAE,OAAO,KAAK,IAAIK,EAAEnB,EAAE,EAAE,CAAC,CAAC,CAAC,ECAvu3B,IAAAoB,GAAA,CACE,KAAQ,4BACR,YAAe,iFACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,cACb,KAAQ,uDACV,EACA,SAAY,CACV,gBACA,OACA,cACA,YACA,UACA,QACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,cACf,MAAS,QACX,EACA,gBAAmB,CACjB,MAAS,UACT,oBAAqB,QACrB,WAAc,SACd,OAAU,QACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,CACF,ECnDA,IAAOC,GAAQ,CACX,QAAS,CACL,qBAAsB,0BAC1B,CACJ,ECMA,SAASC,GAAaC,EAAQC,EAAMC,EAAS,CACzC,GAAI,CACAF,EAAO,WAAW,IAAI,EAAE,aAAa,EAAG,EAAG,EAAG,CAAC,CACnD,OACOG,EAAK,CACR,GAAIA,EAAI,OAAS,GACb,OAAO,QAAQ,OAAO,IAAI,MAAM,4DAA4D,CAAC,CAErG,CACA,OAAIH,EAAO,OACA,IAAI,QAASI,GAAY,CAC5BJ,EAAO,OAAOI,EAASH,EAAMC,CAAO,CACxC,CAAC,EAAE,KAAMG,GAAS,CACd,GAAIA,IAAS,KACT,MAAM,IAAI,MAAM,4DAA4D,EAEhF,OAAOA,CACX,CAAC,EAEE,QAAQ,QAAQ,EAClB,KAAK,IACCC,GAAcN,EAAO,UAAUC,EAAMC,CAAO,EAAG,CAAC,CAAC,CAC3D,EACI,KAAMG,GAAS,CAChB,GAAIA,IAAS,KACT,MAAM,IAAI,MAAM,iDAAiD,EAErE,OAAOA,CACX,CAAC,CACL,CA7BSE,EAAAR,GAAA,gBA8BT,SAASS,GAAYC,EAAOC,EAAW,CACnC,IAAIC,EAAIF,EAAM,MACVG,EAAIH,EAAM,QACVC,EAAU,MAAQ,IAAMA,EAAU,MAAQ,OAC1CC,EAAIF,EAAM,OACVG,EAAIH,EAAM,OAEd,IAAMT,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,MAAQW,EACfX,EAAO,OAASY,EAChB,IAAMC,EAAUb,EAAO,WAAW,IAAI,EACtC,OAAAa,EAAQ,UAAUF,EAAI,EAAGC,EAAI,CAAC,EAC1BF,EAAU,SACVG,EAAQ,OAAOH,EAAU,GAAG,EAC5BG,EAAQ,MAAMH,EAAU,OAAQA,EAAU,MAAM,GAEpDG,EAAQ,UAAUJ,EAAO,CAACA,EAAM,MAAQ,EAAG,CAACA,EAAM,OAAS,EAAGA,EAAM,MAAOA,EAAM,MAAM,EAChFT,CACX,CAlBSO,EAAAC,GAAA,eAuBT,SAASM,GAAQL,EAAO,CAEpB,IAAMM,EAAQN,EAAM,MAAQA,EAAM,OAC5BO,EAAY,IACZC,EAAU,KACZC,EAAO,KAAK,MAAM,KAAK,KAAKF,EAAYD,CAAK,CAAC,EAC9CI,EAAO,KAAK,MAAMH,EAAY,KAAK,KAAKA,EAAYD,CAAK,CAAC,EAS9D,GARIG,EAAOD,IACPC,EAAOD,EACPE,EAAO,KAAK,MAAMD,EAAOH,CAAK,GAE9BI,EAAOF,IACPE,EAAOF,EACPC,EAAO,KAAK,MAAMH,EAAQI,CAAI,GAE9BV,EAAM,MAAQS,EAAM,CACpB,IAAMlB,EAAS,SAAS,cAAc,QAAQ,EAC9C,OAAAA,EAAO,MAAQkB,EACflB,EAAO,OAASmB,EAChBnB,EAAO,WAAW,IAAI,EAAE,UAAUS,EAAO,EAAG,EAAGS,EAAMC,CAAI,EAClDnB,CACX,CACA,OAAOS,CACX,CAvBSF,EAAAO,GAAA,WAwBT,IAAMM,GAAiB,CACnB,eAAgB,KAChB,gBAAiB,KACjB,cAAe,aACf,8BAA+B,GAC/B,KAAM,EACV,EAIqBC,GAArB,cAAgDC,EAAS,CAjGzD,MAiGyD,CAAAf,EAAA,2BACrD,OAAO,QAAUgB,GAAY,QAC7B,MACA,gBACA,0BACA,cACA,YAAYC,EAAMC,EAAM,CAWpB,GAVA,MAAMD,EAAM,CAAE,GAAGJ,GAAgB,GAAGK,CAAK,CAAC,EAC1C,KAAK,KAAO,WACZ,KAAK,GAAK,KAAK,KAAK,IAAM,qBAC1B,KAAK,MAAQ,sBACb,KAAK,MAAQ,CAAC,EACd,KAAK,gBAAkB,GACvB,KAAK,0BAA4B,IACjC,KAAK,cAAgB,KAAK,KAAK,cAC/B,KAAK,cAAgBC,GACrB,KAAK,SAAS,EACV,KAAK,KAAK,MAAQ,KAAK,KAAK,8BAC5B,MAAM,IAAI,MAAM,wJAAwJ,CAEhL,CACA,gBAAgBC,EAAMC,EAAaC,EAAc,CAC7C,GAAIF,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EACxC,IAAMG,EAAc,IAAI,gBAAgBH,EAAK,IAAI,EAC3CI,EAAS,IAAI,QAAQ,CAAC3B,EAAS4B,IAAW,CAC5C,IAAMvB,EAAQ,IAAI,MAClBA,EAAM,IAAMqB,EACZrB,EAAM,iBAAiB,OAAQ,IAAM,CACjC,IAAI,gBAAgBqB,CAAW,EAC/B1B,EAAQK,CAAK,CACjB,CAAC,EACDA,EAAM,iBAAiB,QAAUwB,GAAU,CACvC,IAAI,gBAAgBH,CAAW,EAC/BE,EAAOC,EAAM,OAAS,IAAI,MAAM,4BAA4B,CAAC,CACjE,CAAC,CACL,CAAC,EACKC,EAAqBC,GAASR,EAAK,IAAI,EAAE,MAAM,IAAM,CAAC,EAC5D,OAAO,QAAQ,IAAI,CAACI,EAAQG,CAAkB,CAAC,EAC1C,KAAK,CAAC,CAACzB,EAAO2B,CAAW,IAAM,CAChC,IAAMC,EAAa,KAAK,0BAA0B5B,EAAOmB,EAAaC,EAAcO,EAAY,GAAG,EAC7FE,EAAe9B,GAAYC,EAAO2B,CAAW,EAC7CG,EAAe,KAAK,YAAYD,EAAcD,EAAW,MAAOA,EAAW,MAAM,EACvF,OAAOtC,GAAawC,EAAc,KAAK,cAAe,EAAE,CAC5D,CAAC,EACI,KAAMlC,GACA,IAAI,gBAAgBA,CAAI,CAClC,CACL,CAOA,0BAA0BmC,EAAKC,EAAOC,EAAQC,EAAK,CAC/C,IAAIC,EAASJ,EAAI,MAAQA,EAAI,OAI7B,IAHIG,IAAQ,IAAMA,IAAQ,OACtBC,EAASJ,EAAI,OAASA,EAAI,OAE1BC,GAAS,KAAM,CACf,IAAIb,EAAca,EAGlB,OAAID,EAAI,MAAQC,IACZb,EAAcY,EAAI,OACf,CACH,MAAOZ,EACP,OAAQ,KAAK,MAAMA,EAAcgB,CAAM,CAC3C,CACJ,CACA,GAAIF,GAAU,KAAM,CAChB,IAAIb,EAAea,EACnB,OAAIF,EAAI,OAASE,IACbb,EAAeW,EAAI,QAChB,CACH,MAAO,KAAK,MAAMX,EAAee,CAAM,EACvC,OAAQf,CACZ,CACJ,CACA,MAAO,CACH,MAAO,KAAK,0BACZ,OAAQ,KAAK,MAAM,KAAK,0BAA4Be,CAAM,CAC9D,CACJ,CAMA,YAAYnC,EAAOmB,EAAaC,EAAc,CAG1C,IAAIW,EAAM1B,GAAQL,CAAK,EACnBoC,EAAQ,KAAK,KAAK,KAAK,KAAKL,EAAI,MAAQZ,CAAW,CAAC,EACpDiB,EAAQ,IACRA,EAAQ,GAEZ,IAAIC,EAAKlB,EAAc,IAAMiB,EAAQ,GACjCE,EAAKlB,EAAe,IAAMgB,EAAQ,GAChCG,EAAI,EACV,KAAOH,KAAS,CACZ,IAAM7C,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,MAAQ8C,EACf9C,EAAO,OAAS+C,EAChB/C,EAAO,WAAW,IAAI,EAAE,UAAUwC,EAAK,EAAG,EAAGM,EAAIC,CAAE,EACnDP,EAAMxC,EACN8C,EAAK,KAAK,MAAMA,EAAKE,CAAC,EACtBD,EAAK,KAAK,MAAMA,EAAKC,CAAC,CAC1B,CACA,OAAOR,CACX,CAIA,cAAcS,EAAQC,EAAS,CAC3B,KAAK,KAAK,aAAaD,EAAQ,CAAE,QAAAC,CAAQ,CAAC,CAC9C,CACA,WAAWD,EAAQ,CACf,KAAK,MAAM,KAAKA,CAAM,EAClB,KAAK,kBAAoB,IACzB,KAAK,aAAa,CAE1B,CACA,cAAe,CAEX,GADA,KAAK,gBAAkB,GACnB,KAAK,MAAM,OAAS,EAAG,CACvB,IAAME,EAAU,KAAK,KAAK,QAAQ,KAAK,MAAM,MAAM,CAAC,EACpD,OAAKA,EAIE,KAAK,iBAAiBA,CAAO,EAC/B,MAAM,IAAM,CAAE,CAAC,EACf,KAAK,IAAM,KAAK,aAAa,CAAC,GAL/B,KAAK,KAAK,IAAI,sIAAuI,OAAO,EACrJ,QAAQ,QAAQ,EAK/B,CACA,YAAK,gBAAkB,GACvB,KAAK,KAAK,IAAI,8CAA8C,EAC5D,KAAK,KAAK,KAAK,yBAAyB,EACjC,QAAQ,QAAQ,CAC3B,CACA,iBAAiBxB,EAAM,CACnB,OAAIyB,GAAmBzB,EAAK,IAAI,GAAK,CAACA,EAAK,SAChC,KAAK,gBAAgBA,EAAM,KAAK,KAAK,eAAgB,KAAK,KAAK,eAAe,EAChF,KAAMuB,GAAY,CACnB,KAAK,cAAcvB,EAAK,GAAIuB,CAAO,EACnC,KAAK,KAAK,IAAI,gDAAgDvB,EAAK,EAAE,EAAE,EACvE,KAAK,KAAK,KAAK,sBAAuB,KAAK,KAAK,QAAQA,EAAK,EAAE,EAAGuB,CAAO,CAC7E,CAAC,EACI,MAAO/C,GAAQ,CAChB,KAAK,KAAK,IAAI,6CAA6CwB,EAAK,EAAE,IAAK,SAAS,EAChF,KAAK,KAAK,IAAIxB,EAAK,SAAS,EAC5B,KAAK,KAAK,KAAK,kBAAmB,KAAK,KAAK,QAAQwB,EAAK,EAAE,EAAGxB,CAAG,CACrE,CAAC,EAEE,QAAQ,QAAQ,CAC3B,CACA,YAAcI,EAACoB,GAAS,CAChB,CAACA,EAAK,SACNA,EAAK,MACLyB,GAAmBzB,EAAK,IAAI,GAC5B,CAACA,EAAK,UACN,KAAK,WAAWA,EAAK,EAAE,CAE/B,EAPc,eAWd,gBAAkBpB,EAACoB,GAAS,CACxB,IAAM0B,EAAQ,KAAK,MAAM,QAAQ1B,EAAK,EAAE,EACpC0B,IAAU,IACV,KAAK,MAAM,OAAOA,EAAO,CAAC,CAElC,EALkB,mBASlB,cAAgB9C,EAACoB,GAAS,CACtB,IAAM0B,EAAQ,KAAK,MAAM,QAAQ1B,EAAK,EAAE,EACpC0B,IAAU,IACV,KAAK,MAAM,OAAOA,EAAO,CAAC,EAG1B1B,EAAK,SAAW2B,GAAY3B,EAAK,OAAO,GACxC,IAAI,gBAAgBA,EAAK,OAAO,CAExC,EATgB,iBAUhB,WAAapB,EAAA,IAAM,CACO,KAAK,KAAK,SAAS,EAAE,OAAQoB,GAASA,EAAK,UAAU,EAC7D,QAASA,GAAS,EAExB,CAACA,EAAK,SAAW2B,GAAY3B,EAAK,OAAO,IACzC,KAAK,WAAWA,EAAK,EAAE,CAE/B,CAAC,CACL,EARa,cASb,kBAAoBpB,EAAA,IAAM,CACtB,KAAK,MAAQ,CAAC,CAClB,EAFoB,qBAGpB,sBAAwBA,EAACgD,GAAY,CACjCA,EAAQ,QAASN,GAAW,CACxB,IAAMtB,EAAO,KAAK,KAAK,QAAQsB,CAAM,EACrC,KAAK,KAAK,KAAK,sBAAuBtB,EAAM,CACxC,KAAM,gBACN,QAAS,KAAK,KAAK,sBAAsB,CAC7C,CAAC,CACL,CAAC,EACD,IAAM6B,EAA+BjD,EAAA,IAAM,CACvCgD,EAAQ,QAASN,GAAW,CACxB,IAAMtB,EAAO,KAAK,KAAK,QAAQsB,CAAM,EACrC,KAAK,KAAK,KAAK,sBAAuBtB,CAAI,CAC9C,CAAC,CACL,EALqC,gCAMrC,OAAO,IAAI,QAASvB,GAAY,CACxB,KAAK,gBACL,KAAK,KAAK,KAAK,0BAA2B,IAAM,CAC5CoD,EAA6B,EAC7BpD,EAAQ,CACZ,CAAC,GAGDoD,EAA6B,EAC7BpD,EAAQ,EAEhB,CAAC,CACL,EA1BwB,yBA2BxB,SAAU,CACN,KAAK,KAAK,GAAG,eAAgB,KAAK,aAAa,EAC/C,KAAK,KAAK,GAAG,aAAc,KAAK,iBAAiB,EAC7C,KAAK,KAAK,MACV,KAAK,KAAK,GAAG,oBAAqB,KAAK,WAAW,EAClD,KAAK,KAAK,GAAG,mBAAoB,KAAK,eAAe,IAGrD,KAAK,KAAK,GAAG,oBAAqB,KAAK,WAAW,EAClD,KAAK,KAAK,GAAG,aAAc,KAAK,WAAW,EAC3C,KAAK,KAAK,GAAG,WAAY,KAAK,UAAU,GAExC,KAAK,KAAK,+BACV,KAAK,KAAK,gBAAgB,KAAK,qBAAqB,CAE5D,CACA,WAAY,CACR,KAAK,KAAK,IAAI,eAAgB,KAAK,aAAa,EAChD,KAAK,KAAK,IAAI,aAAc,KAAK,iBAAiB,EAC9C,KAAK,KAAK,MACV,KAAK,KAAK,IAAI,oBAAqB,KAAK,WAAW,EACnD,KAAK,KAAK,IAAI,mBAAoB,KAAK,eAAe,IAGtD,KAAK,KAAK,IAAI,oBAAqB,KAAK,WAAW,EACnD,KAAK,KAAK,IAAI,aAAc,KAAK,WAAW,EAC5C,KAAK,KAAK,IAAI,WAAY,KAAK,UAAU,GAEzC,KAAK,KAAK,+BACV,KAAK,KAAK,mBAAmB,KAAK,qBAAqB,CAE/D,CACJ,ECnWA,IAAAqD,GAAA,CACE,KAAQ,kBACR,YAAe,gCACf,QAAW,QACX,QAAW,MACX,MAAS,qBACT,KAAQ,SACR,YAAe,CACb,OACF,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,cACb,KAAQ,oCACR,WAAY,8BACd,EACA,SAAY,CACV,gBACA,OACA,cACA,YACA,IACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,kBAAmB,mBACnB,sBAAuB,uBACvB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,8BAA+B,SAC/B,uBAAwB,cACxB,4BAA6B,cAC7B,cAAe,cACf,WAAc,SACd,OAAU,WACV,OAAU,SACV,OAAU,YACV,gBAAiB,QACnB,EACA,gBAAmB,CACjB,aAAc,cACd,gBAAiB,cACjB,qBAAsB,cACtB,YAAa,cACb,eAAgB,cAChB,kBAAmB,SACnB,QAAW,SACX,MAAS,UACT,WAAc,SACd,QAAW,SACX,cAAe,UACf,2BAA4B,SAC5B,KAAQ,UACR,WAAc,SACd,OAAU,QACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,CACF,EC1EA,IAAAC,GAAuB,WCAvB,IAAMC,GAAN,cAAuBC,EAAU,CAFjC,MAEiC,CAAAC,EAAA,iBAC7B,UAAY,KACZ,YAAc,KACd,qBAAuB,KACvB,qBAAuB,KACvB,sBAAwBA,EAAA,IAAM,CAC1B,KAAK,WAAW,MAAM,CAC1B,EAFwB,yBAGxB,wBAA0BA,EAAA,IAAM,CAC5B,KAAK,aAAa,MAAM,CAC5B,EAF0B,2BAG1B,6BAA+BA,EAAA,IAAM,CACjC,KAAK,sBAAsB,MAAM,CACrC,EAF+B,gCAG/B,6BAA+BA,EAAA,IAAM,CACjC,KAAK,sBAAsB,MAAM,CACrC,EAF+B,gCAG/B,kBAAoBA,EAACC,GAAU,CAC3B,KAAK,MAAM,kBAAkBA,CAAK,EAGlCA,EAAM,cAAc,MAAQ,EAChC,EALoB,qBAMpB,kBAAoBD,EAAA,CAACE,EAAUC,IACnBC,EAAK,QAAS,CAAE,UAAW,uBAAwB,OAAQ,GAAM,cAAe,OAAQ,SAAU,GAEtG,gBAAiBF,EAAU,KAAM,OAAQ,KAAM,UAAW,SAAU,KAAK,MAAM,mBAAqB,EAAG,SAAU,KAAK,kBAAmB,OAAQ,KAAK,MAAM,kBAAkB,KAAK,IAAI,EAAG,IAAKC,CAAY,CAAC,EAHhM,qBAKpB,wBAA0BH,EAAA,CAACK,EAAMC,EAAwBH,IAAgB,CAErE,IAAMI,EADe,CAAE,MAAO,UAAW,MAAO,SAAU,EAC9BF,CAAI,EAChC,OAAQD,EAAK,QAAS,CAAE,UAAW,uBAAwB,OAAQ,GAAM,cAAe,OAAQ,SAAU,GAAI,KAAM,OAAQ,KAAM,UAAUC,CAAI,GAAI,SAAU,KAAK,kBAAmB,QAASC,IAA2B,GAAK,cAAgBA,EAAwB,OAAQC,EAAQ,IAAKJ,CAAY,CAAC,CAC7S,EAJ0B,2BAK1B,uBAAyBH,EAAA,IACbI,EAAK,MAAO,CAAE,UAAW,oBAAqB,KAAM,eAAgB,wBAAyB,WAAY,SAAUA,EAAM,SAAU,CAAE,KAAM,SAAU,UAAW,gDAAiD,KAAM,MAAO,SAAU,EAAG,4BAA6B,GAAM,QAAS,KAAK,sBAAuB,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,0BAA2B,SAAUA,EAAK,MAAO,CAAE,UAAW,iCAAkC,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,4aAA6a,KAAM,eAAgB,YAAa,SAAU,CAAC,CAAE,CAAC,CAAE,CAAC,EAAGA,EAAK,MAAO,CAAE,UAAW,yBAA0B,SAAU,KAAK,MAAM,KAAK,UAAU,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EADvmC,0BAGzB,kBAAoBJ,EAAA,IACRI,EAAK,MAAO,CAAE,UAAW,oBAAqB,KAAM,eAAgB,wBAAyB,oBAAqB,SAAUA,EAAM,SAAU,CAAE,KAAM,SAAU,UAAW,gDAAiD,KAAM,MAAO,SAAU,EAAG,4BAA6B,GAAM,QAAS,KAAK,6BAA8B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,0BAA2B,SAAUA,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,4cAA6c,KAAM,UAAW,YAAa,SAAU,CAAC,CAAE,CAAC,CAAE,CAAC,EAAGA,EAAK,MAAO,CAAE,UAAW,yBAA0B,SAAU,KAAK,MAAM,KAAK,gBAAgB,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EADhnC,qBAGpB,kBAAoBJ,EAAA,IACRI,EAAK,MAAO,CAAE,UAAW,oBAAqB,KAAM,eAAgB,wBAAyB,oBAAqB,SAAUA,EAAM,SAAU,CAAE,KAAM,SAAU,UAAW,gDAAiD,KAAM,MAAO,SAAU,EAAG,4BAA6B,GAAM,QAAS,KAAK,6BAA8B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,0BAA2B,SAAUA,EAAK,MAAO,CAAE,cAAe,OAAQ,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,KAAM,UAAW,SAAU,UAAW,EAAG,igBAAkgB,CAAC,CAAE,CAAC,CAAE,CAAC,EAAGA,EAAK,MAAO,CAAE,UAAW,yBAA0B,SAAU,KAAK,MAAM,KAAK,gBAAgB,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAD/oC,qBAGpB,mBAAqBJ,EAAA,CAACQ,EAAMC,IAAc,CACtC,IAAMC,EAAoB,KAAK,MAAM,UAAU,OAC/C,OAAQN,EAAK,SAAU,CAAE,KAAM,SAAU,UAAW,gDAAiD,QAASK,EAAW,4BAA6BC,IAAsB,EAAG,SAAUF,CAAK,CAAC,CACnM,EAHqB,sBAIrB,6BAA+BR,EAACU,GAAsB,CAClD,IAAMC,EAAc,KAAK,mBAAmB,KAAK,MAAM,KAAK,aAAa,EAAG,KAAK,qBAAqB,EAChGC,EAAgB,KAAK,mBAAmB,KAAK,MAAM,KAAK,eAAe,EAAG,KAAK,uBAAuB,EAGtGC,EAAuB,KAAK,MAAM,yBAClCC,EAAuBD,EAAqB,OAAO,CAAC,EAAE,YAAY,EACpEA,EAAqB,MAAM,CAAC,EAChC,OAAQT,EAAK,MAAO,CAAE,MAAO,gCAAiC,SAAU,KAAK,MAAM,kBACzE,KAAK,MAAM,KAAK,aAAa,EAC7BM,EAAoB,EAChB,KAAK,MAAM,UAAU,kBAAkBI,CAAoB,GAAI,CAC7D,YAAAH,EACA,cAAAC,EACA,OAAQD,CACZ,CAAC,EACC,KAAK,MAAM,UAAU,YAAYG,CAAoB,GAAI,CACvD,YAAAH,EACA,cAAAC,EACA,OAAQD,CACZ,CAAC,CAAE,CAAC,CACpB,EArB+B,gCAsB/B,CAAC,OAAO,IAAI,8CAA8C,CAAC,GAAI,CAE3D,KAAK,MAAM,UAAU,eAAe,EACpC,KAAK,MAAM,UAAU,gBAAgB,EACrC,KAAK,MAAM,UAAU,kBAAkB,EACvC,KAAK,MAAM,UAAU,qBAAqB,EAC1C,KAAK,MAAM,UAAU,sBAAsB,EAC3C,KAAK,MAAM,UAAU,wBAAwB,CACjD,CACA,eAAiBX,EAACe,GACNX,EAAK,MAAO,CAAE,UAAW,oBAAqB,KAAM,eAAgB,wBAAyBW,EAAS,GAAI,SAAUX,EAAM,SAAU,CAAE,KAAM,SAAU,UAAW,gDAAiD,KAAM,MAAO,SAAU,EAAG,UAAWW,EAAS,GAAI,gBAAiB,gCAAgCA,EAAS,EAAE,GAAI,gBAAiB,KAAK,MAAM,mBAAmB,KAAOA,EAAS,GAAI,4BAA6B,GAAM,QAASf,EAAA,IAAM,KAAK,MAAM,UAAUe,EAAS,EAAE,EAAtC,WAAyC,SAAU,CAACX,EAAK,MAAO,CAAE,UAAW,0BAA2B,SAAUW,EAAS,KAAK,CAAE,CAAC,EAAGX,EAAK,MAAO,CAAE,UAAW,yBAA0B,SAAUW,EAAS,IAAK,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EADvoB,kBAGjB,gBAAkBf,EAACgB,GAAc,CAG7B,IAAMC,EAA0B,CAAC,GAAGD,CAAS,EACvCE,EAAmBD,EAAwB,OAAOD,EAAU,OAAS,EAAGA,EAAU,MAAM,EAC9F,OAAQZ,EAAMe,GAAW,CAAE,SAAU,CAACF,EAAwB,IAAKF,GAAa,KAAK,eAAeA,CAAQ,CAAC,EAAGX,EAAK,OAAQ,CAAE,KAAM,eAAgB,MAAO,CAAE,cAAe,QAAS,EAAG,SAAUc,EAAiB,IAAKH,GAAa,KAAK,eAAeA,CAAQ,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAC9Q,EANkB,mBAOlB,kBAAoBf,EAAA,CAACgB,EAAWI,IAAsB,CAClD,GAAM,CAAE,4BAAAC,EAA6B,4BAAAC,CAA4B,EAAI,KAAK,MACtEC,EAAO,CAAC,EACNC,EAAc,WACfJ,GACDG,EAAK,KAAK,CACN,IAAKC,EACL,SAAU,KAAK,uBAAuB,CAC1C,CAAC,EACDH,GACAE,EAAK,KAAK,CACN,IAAK,0BACL,SAAU,KAAK,kBAAkB,CACrC,CAAC,EACDD,GACAC,EAAK,KAAK,CACN,IAAK,0BACL,SAAU,KAAK,kBAAkB,CACrC,CAAC,EACLA,EAAK,KAAK,GAAGP,EAAU,IAAKD,IAAc,CACtC,IAAKA,EAAS,GACd,SAAU,KAAK,eAAeA,CAAQ,CAC1C,EAAE,CAAC,EAEqBQ,EAAK,SAAW,GAAKA,EAAK,CAAC,EAAE,MAAQC,IAEzDD,EAAO,CAAC,GAGZ,IAAME,EAAqB,CAAC,GAAGF,CAAI,EAC7BG,EAAUD,EAAmB,OAAOF,EAAK,OAAS,EAAGA,EAAK,MAAM,EACtE,OAAQnB,EAAMe,GAAW,CAAE,SAAU,CAAC,KAAK,6BAA6BI,EAAK,MAAM,EAAGnB,EAAM,MAAO,CAAE,UAAW,+BAAgC,KAAM,UAAW,SAAU,CAACqB,EAAmB,IAAI,CAAC,CAAE,IAAAE,EAAK,SAAAC,CAAS,IAAOxB,EAAKe,GAAU,CAAE,SAAUS,CAAS,EAAGD,CAAG,CAAE,EAAGvB,EAAK,OAAQ,CAAE,KAAM,eAAgB,MAAO,CAAE,cAAe,QAAS,EAAG,SAAUsB,EAAQ,IAAI,CAAC,CAAE,IAAAC,EAAK,SAAAC,CAAS,IAAOxB,EAAKe,GAAU,CAAE,SAAUS,CAAS,EAAGD,CAAG,CAAE,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAC5b,EAhCoB,qBAiCpB,qBAAsB,CAClB,GAAM,CAAE,UAAAE,CAAU,EAAI,KAAK,MACrBC,EAAgB1B,EAAM,OAAQ,CAAE,SAAU,CAACA,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,2CAA4C,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,0EAA2E,SAAU,SAAU,CAAC,CAAE,CAAC,EAAGA,EAAK,OAAQ,CAAE,UAAW,+BAAgC,SAAU,MAAO,CAAC,CAAC,CAAE,CAAC,EAC9Z2B,EAAWF,EAAU,YAAa,CAAE,KAAMC,CAAa,CAAC,EAC9D,OAAQ1B,EAAK,IAAK,CAAE,SAAU,GAAI,KAAM,kBAAmB,IAAK,sBAAuB,OAAQ,SAAU,UAAW,2BAA4B,SAAU2B,CAAS,CAAC,CACxK,CACA,QAAS,CACL,GAAM,CAAE,4BAAAV,EAA6B,4BAAAC,EAA6B,uBAAAhB,CAAwB,EAAI,KAAK,MACnG,OAAQF,EAAM,MAAO,CAAE,UAAW,0BAA2B,SAAU,CAAC,KAAK,kBAAkB,GAAQ4B,GAAQ,CACnG,KAAK,UAAYA,CACrB,CAAC,EAAG,KAAK,kBAAkB,GAAOA,GAAQ,CACtC,KAAK,YAAcA,CACvB,CAAC,EAAGX,GACA,KAAK,wBAAwB,QAASf,EAAyB0B,GAAQ,CACnE,KAAK,qBAAuBA,CAChC,CAAC,EAAGV,GACJ,KAAK,wBAAwB,QAAShB,EAAyB0B,GAAQ,CACnE,KAAK,qBAAuBA,CAChC,CAAC,EAAG,KAAK,kBAAkB,KAAK,MAAM,UAAW,KAAK,MAAM,iBAAiB,EAAG5B,EAAM,MAAO,CAAE,UAAW,+BAAgC,SAAU,CAAC,KAAK,MAAM,MAASA,EAAK,MAAO,CAAE,UAAW,sBAAuB,SAAU,KAAK,MAAM,IAAK,CAAC,EAAI,KAAK,MAAM,6BAA+B,KAAK,oBAAoB,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CACnV,CACJ,EACO6B,GAAQnC,GC9If,IAAAoC,GAAuB,WAEvB,IAAMC,GAAgBC,EAACC,GACXC,EAAM,MAAO,CAAE,aAAW,GAAAC,SAAW,+BAAgCF,EAAM,SAAS,EAAG,sBAAuB,WAAY,cAAe,CAACA,EAAM,kBAAmB,SAAU,CAACC,EAAM,MAAO,CAAE,UAAW,4BAA6B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,8BAE7P,KAAM,UAAW,aAAc,EAAG,SAAUD,EAAM,KAAK,iBAAiB,CAAE,CAAC,EAAGC,EAAK,SAAU,CAAE,UAAW,6BAA8B,KAAM,SAAU,QAASF,EAAA,IAAMC,EAAM,oBAAoB,EAAK,EAArC,WAAwC,SAAUA,EAAM,KAAK,MAAM,CAAE,CAAC,CAAC,CAAE,CAAC,EAAGC,EAAKE,GAAU,CAAE,GAAGH,CAAM,CAAC,CAAC,CAAE,CAAC,EAH/Q,iBAKfI,GAAQN,GCPf,IAAAO,GAAuB,WACvB,SAASC,GAAYC,EAAO,CACxB,IAAMC,EAAOD,EAAM,MAAMA,EAAM,WAAW,EACpCE,EAAeC,EAAA,IAAM,CACvBH,EAAM,KAAK,KAAK,qBAAsBC,CAAI,EAC1CD,EAAM,gBAAgB,CAC1B,EAHqB,gBAIrB,OAAQI,EAAM,MAAO,CAAE,aAAW,GAAAC,SAAW,8BAA+BL,EAAM,SAAS,EAAG,KAAM,WAAY,sBAAuB,aAAc,GAAI,sCAAuC,SAAU,CAACI,EAAM,MAAO,CAAE,UAAW,4BAA6B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,8BAElR,KAAM,UAAW,aAAc,EAAG,SAAUJ,EAAM,UAAU,UAAW,CACnE,KAAOI,EAAK,OAAQ,CAAE,UAAW,kCAAmC,SAAUH,EAAK,KAAOA,EAAK,KAAK,KAAOA,EAAK,IAAK,CAAC,CAC1H,CAAC,CAAE,CAAC,EAAGG,EAAK,SAAU,CAAE,UAAW,6BAA8B,KAAM,SAAU,QAASF,EAAc,SAAUF,EAAM,KAAK,QAAQ,CAAE,CAAC,EAAGI,EAAK,SAAU,CAAE,UAAW,6BAA8B,KAAM,SAAU,QAASJ,EAAM,eAAgB,SAAUA,EAAM,KAAK,MAAM,CAAE,CAAC,CAAC,CAAE,CAAC,EAAGI,EAAK,MAAO,CAAE,UAAW,kCAAmC,SAAUJ,EAAM,QAAQ,IAAKM,GAC/WN,EAAM,KAAK,UAAUM,EAAO,EAAE,EAAE,OAAON,EAAM,KAAK,CAC5D,CAAE,CAAC,CAAC,CAAE,CAAC,CACxB,CAbSG,EAAAJ,GAAA,eAcT,IAAOQ,GAAQR,GCff,IAAAS,GAAuB,WCAvB,SAASC,IAAY,CACjB,OAAQC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,KAAM,UAAW,SAAU,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,yFAA0F,SAAU,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,oLAAqL,SAAU,SAAU,CAAC,EAAGA,EAAK,SAAU,CAAE,GAAI,MAAO,GAAI,MAAO,EAAG,KAAM,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CACzlB,CAFSC,EAAAF,GAAA,aAGT,SAASG,IAAY,CACjB,OAAQF,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,0ZAA2Z,KAAM,UAAW,SAAU,SAAU,CAAC,CAAE,CAAC,CAChnB,CAFSC,EAAAC,GAAA,aAGT,SAASC,IAAY,CACjB,OAAQH,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,kLAAmL,KAAM,UAAW,SAAU,SAAU,CAAC,CAAE,CAAC,CACxY,CAFSC,EAAAE,GAAA,aAGT,SAASC,IAAU,CACf,OAAQJ,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,miCAAoiC,KAAM,UAAW,SAAU,SAAU,CAAC,CAAE,CAAC,CACzvC,CAFSC,EAAAG,GAAA,WAGT,SAASC,IAAc,CACnB,OAAQL,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,g6CAAi6C,KAAM,UAAW,SAAU,SAAU,CAAC,CAAE,CAAC,CAC5lD,CAFSC,EAAAI,GAAA,eAGT,SAASC,IAAW,CAChB,OAAQN,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,KAAM,UAAW,SAAU,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,2JAA4J,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,oCAAqC,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CACzc,CAFSC,EAAAK,GAAA,YAGT,SAASC,IAAW,CAChB,OAAQP,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,6KAA8K,KAAM,UAAW,SAAU,SAAU,CAAC,CAAE,CAAC,CACnY,CAFSC,EAAAM,GAAA,YAGM,SAARC,GAA+BC,EAAU,CAC5C,IAAMC,EAAgB,CAClB,MAAO,UACP,KAAMJ,GAAS,CACnB,EACA,GAAI,CAACG,EACD,OAAOC,EACX,IAAMC,EAAkBF,EAAS,MAAM,GAAG,EAAE,CAAC,EACvCG,EAAmBH,EAAS,MAAM,GAAG,EAAE,CAAC,EAE9C,OAAIE,IAAoB,OACb,CACH,MAAO,UACP,KAAMJ,GAAS,CACnB,EAGAI,IAAoB,QACb,CACH,MAAO,UACP,KAAMZ,GAAU,CACpB,EAGAY,IAAoB,QACb,CACH,MAAO,UACP,KAAMT,GAAU,CACpB,EAGAS,IAAoB,QACb,CACH,MAAO,UACP,KAAMR,GAAU,CACpB,EAGAQ,IAAoB,eAAiBC,IAAqB,MACnD,CACH,MAAO,UACP,KAAMR,GAAQ,CAClB,EAYAO,IAAoB,eATH,CACjB,MACA,kBACA,mBACA,mBACA,QACA,SACA,mBACJ,EAEiB,QAAQC,CAAgB,IAAM,GACpC,CACH,MAAO,UACP,KAAMP,GAAY,CACtB,EAEGK,CACX,CA9DwBT,EAAAO,GAAA,iBClBxB,SAASK,GAAYC,EAAI,CACrB,GAAM,CAAE,QAAAC,CAAQ,EAAID,EAAG,OACvB,GAAIC,IAAY,SAAWA,IAAY,WAAY,CAC/CD,EAAG,gBAAgB,EACnB,MACJ,CACAA,EAAG,eAAe,EAClBA,EAAG,gBAAgB,CACvB,CARSE,EAAAH,GAAA,eAST,IAAOI,GAAQJ,GCXA,SAARK,GAA6BC,EAAO,CACvC,GAAM,CAAE,KAAAC,CAAK,EAAID,EACjB,GAAIC,EAAK,QACL,OAAQC,EAAK,MAAO,CAAE,UAAW,GAAO,UAAW,iCAAkC,IAAKD,EAAK,KAAM,IAAKA,EAAK,OAAQ,CAAC,EAE5H,GAAM,CAAE,MAAAE,EAAO,KAAAC,CAAK,EAAIC,GAAgBJ,EAAK,IAAI,EACjD,OAAQC,EAAM,MAAO,CAAE,UAAW,sCAAuC,SAAU,CAACA,EAAK,OAAQ,CAAE,UAAW,kCAAmC,MAAO,CAAE,MAAAC,CAAM,EAAG,SAAUC,CAAK,CAAC,EAAGF,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,oCAAqC,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,KAAM,OAAQ,MAAO,KAAM,OAAQ,KAAM,GAAI,IAAK,SAAU,SAAU,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAC3b,CAPwBI,EAAAP,GAAA,eCAT,SAARQ,GAAkCC,EAAO,CAC5C,GAAM,CAAE,mBAAAC,EAAoB,mBAAAC,EAAoB,WAAAC,EAAY,KAAAC,EAAM,UAAAC,CAAW,EAAIL,EAC3EM,EAAkB,CACpB,KAAM,6DACV,EACA,OAAOL,EAAmB,IAAKM,GAAU,CACrC,IAAMC,EAAK,iCAAiCD,EAAM,EAAE,GAC9CE,EAAWP,EAAmB,SAASK,EAAM,EAAE,EACrD,OAAQG,EAAM,WAAY,CAAE,UAAW,mCAAoC,SAAU,CAACA,EAAK,QAAS,CAAE,UAAW,gCAAiC,QAASF,EAAI,SAAUD,EAAM,IAAK,CAAC,EAAGA,EAAM,SAAW,OAAaA,EAAM,OAAO,CACvN,MAAOF,EAAUE,EAAM,EAAE,EACzB,SAAUI,EAACC,GAAWT,EAAWS,EAAQL,EAAM,EAAE,EAAvC,YACV,gBAAAD,EACA,SAAAG,EACA,KAAML,EAAK,EACf,EAAGS,EAAC,EAAMH,EAAK,QAAS,CAAE,UAAWJ,EAAgB,KAAM,GAAIE,EAAI,KAAMJ,EAAK,GAAI,KAAMG,EAAM,MAAQ,OAAQ,SAAUE,EAAU,MAAOJ,EAAUE,EAAM,EAAE,EAAG,YAAaA,EAAM,YAAa,QAASI,EAACG,GAAOX,EAAWW,EAAG,OAAO,MAAOP,EAAM,EAAE,EAA5C,WAA+C,4BAA6B,EAAK,CAAC,CAAE,CAAE,EAAGA,EAAM,EAAE,CACpT,CAAC,CACL,CAhBwBI,EAAAZ,GAAA,oBJMT,SAARgB,GAA0BC,EAAO,CACpC,GAAM,CAAE,MAAAC,EAAO,YAAAC,EAAa,eAAAC,EAAgB,aAAAC,EAAc,WAAAC,EAAY,mBAAAC,EAAoB,eAAAC,EAAgB,KAAAC,EAAM,UAAAC,EAAW,UAAAC,EAAW,YAAAC,CAAa,EAAIX,EACjJY,EAAgBC,EAAA,IACX,OAAOR,GAAe,WACvBA,EAAWJ,EAAMC,CAAW,CAAC,EAC7BG,EAHY,iBAKhBS,EAAOb,EAAMC,CAAW,EACxBa,EAAqBH,EAAc,GAAK,CAAC,EACzCI,EAAiBL,EAAYG,CAAI,EACjCG,EAAiB,CAAC,EACxBF,EAAmB,QAASG,GAAU,CAClCD,EAAeC,EAAM,EAAE,EAAIJ,EAAK,KAAKI,EAAM,EAAE,GAAK,EACtD,CAAC,EACD,GAAM,CAACC,EAAWC,CAAY,EAAIC,GAASJ,CAAc,EACnDK,EAAaC,GAAaC,GAAO,CACnCA,EAAG,eAAe,EAClBpB,EAAae,EAAWjB,CAAW,CACvC,EAAG,CAACE,EAAce,EAAWjB,CAAW,CAAC,EACnCuB,EAAaZ,EAAA,CAACa,EAAQC,IAAS,CACjCP,EAAa,CACT,GAAGD,EACH,CAACQ,CAAI,EAAGD,CACZ,CAAC,CACL,EALmB,cAMbE,EAAef,EAAA,IAAM,CACvBV,EAAe,EAAK,CACxB,EAFqB,gBAGf,CAAC0B,CAAI,EAAIR,GAAS,IAAM,CAC1B,IAAMS,EAAS,SAAS,cAAc,MAAM,EAC5C,OAAAA,EAAO,aAAa,WAAY,IAAI,EACpCA,EAAO,GAAKC,GAAO,EACZD,CACX,CAAC,EAEKE,EAASC,GAAO,IAAI,EAC1B,OAAAC,GAAU,IAAM,CAKZ,IAAMC,EAAWH,EAAO,SAAS,YAAY,GAAK,SAMlD,OAAIG,aAAoB,SACpBA,EAAS,KAAK,YAAYN,CAAI,GAGzBM,aAAoB,WACzBA,EAAS,YAAYN,CAAI,GAM7BA,EAAK,iBAAiB,SAAUP,CAAU,EACnC,IAAM,CACTO,EAAK,oBAAoB,SAAUP,CAAU,EAEzCO,EAAK,YACLA,EAAK,WAAW,YAAYA,CAAI,CAExC,CACJ,EAAG,CAACA,EAAMP,CAAU,CAAC,EAGrBc,EAAM,MAAO,CAAE,aAAW,GAAAC,SAAW,0BAA2B3B,CAAS,EAAG,sBAAuB,WAAY,WAAY4B,GAAa,YAAaA,GAAa,OAAQA,GAAa,QAASA,GAAa,IAAKN,EAAQ,SAAU,CAACI,EAAM,MAAO,CAAE,UAAW,4BAA6B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,8BAE5S,KAAM,UAAW,aAAc,EAAG,SAAU3B,EAAU,UAAW,CAC7D,KAAO2B,EAAK,OAAQ,CAAE,UAAW,kCAAmC,SAAUtB,EAAK,KAAOA,EAAK,KAAK,KAAOA,EAAK,IAAK,CAAC,CAC1H,CAAC,CAAE,CAAC,EAAGsB,EAAK,SAAU,CAAE,UAAW,6BAA8B,KAAM,SAAU,KAAMP,EAAK,GAAI,MAAOrB,EAAK,mBAAmB,EAAG,QAASoB,EAAc,SAAUpB,EAAK,QAAQ,CAAE,CAAC,CAAC,CAAE,CAAC,EAAG4B,EAAM,MAAO,CAAE,UAAW,gCAAiC,SAAU,CAACA,EAAM,MAAO,CAAE,UAAW,kCAAmC,MAAO,CAAE,gBAAiBG,GAAgBzB,EAAK,IAAI,EAAE,KAAM,EAAG,SAAU,CAACsB,EAAKI,GAAa,CAAE,KAAM1B,CAAK,CAAC,EAAGE,GAAmBoB,EAAK,SAAU,CAAE,KAAM,SAAU,UAAW,uDAAwD,QAASvB,EAAC4B,GAAU,CAKxiBnB,EAAWmB,CAAK,EAChBlC,EAAeO,CAAI,CACvB,EAPiiB,WAO9hB,SAAUN,EAAK,WAAW,CAAE,CAAC,CAAE,CAAE,CAAC,EAAG4B,EAAK,MAAO,CAAE,UAAW,+BAAgC,SAAUA,EAAKM,GAAkB,CAAE,mBAAoB3B,EAAoB,mBAAoBT,EAAoB,WAAYmB,EAAY,KAAMI,EAAM,UAAWV,CAAU,CAAC,CAAE,CAAC,EAAGiB,EAAM,MAAO,CAAE,UAAW,kCAAmC,SAAU,CAACA,EAAK,SAAU,CAAE,UAAW,gFAGxX,KAAM,SAAU,KAAMP,EAAK,GAAI,SAAUrB,EAAK,aAAa,CAAE,CAAC,EAAG4B,EAAK,SAAU,CAAE,UAAW,6EAA8E,KAAM,SAAU,QAASR,EAAc,KAAMC,EAAK,GAAI,SAAUrB,EAAK,QAAQ,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CACvS,CApFwBK,EAAAd,GAAA,YKPxB,IAAA4C,GAAuB,WECT,SAAUC,GACtBC,EACAC,EAAsB,CAEtB,GAAID,IAASC,EACX,MAAO,GAGT,GAAI,CAACD,GAAQ,CAACC,EACZ,MAAO,GAGT,IAAMC,EAAQC,OAAOC,KAAKJ,CAAI,EACxBK,EAAQF,OAAOC,KAAKH,CAAI,EACxBK,EAAMJ,EAAMK,OAElB,GAAIF,EAAME,SAAWD,EACnB,MAAO,GAGT,QAASE,EAAI,EAAGA,EAAIF,EAAKE,IAAK,CAC5B,IAAMC,EAAMP,EAAMM,CAAC,EAEnB,GACER,EAAKS,CAAG,IAAMR,EAAKQ,CAAG,GACtB,CAACN,OAAOO,UAAUC,eAAeC,KAAKX,EAAMQ,CAAG,EAE/C,MAAO,EAEV,CAED,MAAO,EACT,CAhCwBV,EAAAA,GAAAA,uBEQT,SAARc,GAAiCC,EAAYC,EAAiB,qBAAsB,CACvF,OAAO,IAAI,QAASC,GAAY,CAC5B,IAAMC,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,aAAa,QAAS,CAC3B,SAAU,QACV,IAAK,EACL,KAAM,EACN,MAAO,MACP,OAAQ,MACR,QAAS,EACT,OAAQ,OACR,QAAS,OACT,UAAW,OACX,WAAY,aAChB,CAAC,EACDA,EAAS,MAAQH,EACjB,SAAS,KAAK,YAAYG,CAAQ,EAClCA,EAAS,OAAO,EAChB,IAAMC,EAAkBC,EAAA,IAAM,CAC1B,SAAS,KAAK,YAAYF,CAAQ,EAClC,OAAO,OAAOF,EAAgBD,CAAU,EACxCE,EAAQ,CACZ,EAJwB,mBAKxB,GAAI,CAEA,OADmB,SAAS,YAAY,MAAM,GAI9C,SAAS,KAAK,YAAYC,CAAQ,EAC3BD,EAAQ,GAHJE,EAAgB,CAI/B,MACa,CACT,gBAAS,KAAK,YAAYD,CAAQ,EAC3BC,EAAgB,CAC3B,CACJ,CAAC,CACL,CApCwBC,EAAAN,GAAA,mBCRxB,SAASO,GAAW,CAAE,KAAAC,EAAM,2BAAAC,EAA4B,WAAAC,EAAY,YAAAC,EAAa,KAAAC,EAAM,QAAAC,CAAS,EAAG,CAC/F,MAAK,CAACJ,GAA8BC,GAAcA,EAAW,OAAS,GACjE,CAACD,GAA8BE,EAAYH,CAAI,EACxCM,EAAK,SAAU,CAAE,UAAW,sFAAuF,KAAM,SAAU,aAAcF,EAAK,uBAAwB,CAAE,KAAMJ,EAAK,KAAK,IAAK,CAAC,EAAG,MAAOI,EAAK,uBAAwB,CAAE,KAAMJ,EAAK,KAAK,IAAK,CAAC,EAAG,QAASO,EAAA,IAAMF,EAAQ,EAAd,WAAiB,SAAUC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,SAAU,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,+JAAgK,SAAU,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,IAAK,EAAG,SAAU,MAAO,KAAM,OAAQ,IAAK,GAAI,IAAK,CAAC,EAAGA,EAAK,OAAQ,CAAE,SAAU,UAAW,EAAG,2CAA4C,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,EAE/1B,IACX,CANSC,EAAAR,GAAA,cAOT,SAASS,GAAa,CAAE,KAAAJ,EAAM,QAAAC,EAAS,KAAAL,CAAM,EAAG,CAC5C,OAAQM,EAAK,SAAU,CAAE,UAAW,6EAA8E,KAAM,SAAU,aAAcF,EAAK,aAAc,CAAE,KAAMJ,EAAK,KAAK,IAAK,CAAC,EAAG,MAAOI,EAAK,aAAc,CAAE,KAAMJ,EAAK,KAAK,IAAK,CAAC,EAAG,QAASO,EAAA,IAAMF,EAAQ,EAAd,WAAiB,SAAUC,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,+DAAgE,CAAC,EAAGA,EAAK,OAAQ,CAAE,KAAM,OAAQ,EAAG,2GAA4G,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CACrpB,CAFSC,EAAAC,GAAA,gBAGT,SAASC,GAAe,CAAE,KAAAT,EAAM,KAAAU,EAAM,KAAAN,CAAM,EAAG,CAC3C,IAAMO,EAAsBJ,EAACK,GAAU,CACnCC,GAAgBb,EAAK,UAAWI,EAAK,6BAA6B,CAAC,EAC9D,KAAK,IAAM,CACZM,EAAK,IAAI,2BAA2B,EACpCA,EAAK,KAAKN,EAAK,4BAA4B,EAAG,OAAQ,GAAI,CAC9D,CAAC,EACI,MAAMM,EAAK,GAAG,EAEd,KAAK,IAAME,EAAM,OAAO,MAAM,CAAE,cAAe,EAAK,CAAC,CAAC,CAC/D,EAT4B,uBAU5B,OAAQN,EAAK,SAAU,CAAE,UAAW,+EAAgF,KAAM,SAAU,aAAcF,EAAK,UAAU,EAAG,MAAOA,EAAK,UAAU,EAAG,QAASG,EAACK,GAAUD,EAAoBC,CAAK,EAApC,WAAuC,SAAUN,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,stBAAutB,CAAC,CAAE,CAAC,CAAE,CAAC,CACznC,CAZSC,EAAAE,GAAA,kBAaM,SAARK,GAAyBC,EAAO,CACnC,GAAM,CAAE,KAAAL,EAAM,KAAAV,EAAM,2BAAAC,EAA4B,YAAAE,EAAa,WAAAD,EAAY,2BAAAc,EAA4B,iBAAAC,EAAkB,KAAAb,EAAM,eAAAc,EAAgB,eAAAC,CAAgB,EAAIJ,EASjK,OAAQT,EAAM,MAAO,CAAE,UAAW,oCAAqC,SAAU,CAACA,EAAKP,GAAY,CAAE,KAAMK,EAAM,KAAMJ,EAAM,2BAA4BC,EAA4B,YAAaE,EAAa,WAAYD,EAAY,QARpNK,EAAA,IAAM,CACjBL,GAAcA,EAAW,OAAS,EAClCgB,EAAe,GAAMlB,EAAK,EAAE,EAG5BmB,EAAenB,CAAI,CAE3B,EAPmB,aAQwO,CAAC,EAAGgB,GAA8BhB,EAAK,UAAaM,EAAKG,GAAgB,CAAE,KAAMT,EAAM,KAAMU,EAAM,KAAMN,CAAK,CAAC,EAAK,KAAMa,EAAoBX,EAAKE,GAAc,CAAE,KAAMJ,EAAM,KAAMJ,EAAM,QAASO,EAAA,IAAMG,EAAK,WAAWV,EAAK,EAAE,EAA7B,UAA+B,CAAC,EAAK,IAAI,CAAE,CAAC,CAC/e,CAXwBO,EAAAO,GAAA,WCxBxB,IAAAM,GAA0B,WCA1B,IAAMC,GAAoBC,EAAA,CAACC,EAAaC,KACrB,OAAOA,GAAe,WAAaA,EAAW,EAAIA,GAC5C,OAAQC,GAAMA,EAAE,KAAOF,CAAW,EAC1C,CAAC,EAAE,KAHM,qBAKX,SAARG,GAAkCC,EAAO,CAC5C,GAAM,CAAE,KAAAC,EAAM,eAAAC,EAAgB,KAAAC,EAAM,WAAAN,CAAW,EAAIG,EAC7C,CAAE,0BAAAI,CAA0B,EAAIH,EACtC,GAAI,CAACG,GAA2B,OAC5B,OAAO,KAEX,IAAMC,EAAmBD,EACpB,IAAKE,GAAqBZ,GAAkBY,EAAkBT,CAAU,CAAC,EACzE,KAAK,IAAI,EACd,OAAQU,EAAM,MAAO,CAAE,UAAW,mCAAoC,SAAU,CAACJ,EAAK,4BAA6B,CACvG,YAAaC,EAA0B,OACvC,OAAQC,CACZ,CAAC,EAAG,IAAKE,EAAK,SAAU,CAAE,KAAM,SAAU,MAAO,mDAAoD,QAASZ,EAAA,IAAMO,EAAe,GAAMD,EAAK,EAAE,EAAlC,WAAqC,SAAUE,EAAK,UAAU,CAAE,CAAC,CAAC,CAAE,CAAC,CAC/L,CAbwBR,EAAAI,GAAA,oBDFxB,IAAMS,GAAiBC,EAACC,GAAU,CAC9B,GAAM,CAAE,OAAAC,EAAQ,KAAAC,CAAK,EAAIF,EAAM,KAAK,KACpC,SAASG,GAAmB,CACxB,OAAIH,EAAM,cAAgBA,EAAM,iBAAmB,IACxC,GAEPA,EAAM,gBAAkB,IACjB,GAEPA,EAAM,gBAAkB,IACjB,GAKJC,EAAS,GAAK,EACzB,CAdS,OAAAF,EAAAI,EAAA,oBAeDC,EAAK,MAAO,CAAE,UAAW,2BAA4B,MAAOF,EAAM,SAAUG,GAAeH,EAAMC,EAAiB,CAAC,CAAE,CAAC,CAClI,EAlBuB,kBAmBjBG,GAAeP,EAACC,GAAU,CAC5B,GAAM,CAAE,OAAAC,CAAO,EAAID,EAAM,KAAK,KACxBO,EAAe,WAAYP,EAAM,KAAOA,EAAM,KAAK,QAAQ,aAAe,OAC1EQ,EAAM,OACZ,OAAKP,EAGGG,EAAM,MAAO,CAAE,UAAW,6BAA8B,SAAU,CAACA,EAAK,IAAK,CAAE,KAAM,GAAGH,EAAO,GAAG,4CAA6C,OAAQ,SAAU,IAAK,sBAAuB,SAAUI,GAAeJ,EAAO,KAAM,EAAE,CAAE,CAAC,EAAGM,EAAgBH,EAAMK,GAAW,CAAE,SAAU,CAAC,IAAID,CAAG,IAAKD,EAAc,IAAIC,CAAG,GAAG,CAAE,CAAC,EAAK,IAAI,CAAE,CAAC,EAFzU,IAGf,EARqB,gBASfE,GAAiBX,EAACC,GAAUA,EAAM,KAAK,MAASI,EAAK,MAAO,CAAE,UAAW,iCAAkC,YAAU,GAAAO,SAAcX,EAAM,KAAK,IAAI,CAAE,CAAC,EAApI,kBACjBY,GAAiBb,EAACC,GAAUA,EAAM,KAAK,SAAYI,EAAM,OAAQ,CAAE,SAAU,CAAC,WAAYA,EAAK,SAAU,CAAE,UAAW,uDAAwD,KAAM,SAAU,QAASL,EAAA,IAAMC,EAAM,oBAAoB,EAAI,EAApC,WAAuC,SAAUA,EAAM,KAAK,UAAU,CAAE,CAAC,CAAC,CAAE,CAAC,EAAnQ,kBACjBa,GAAcd,EAAA,CAAC,CAAE,KAAAe,EAAM,QAAAC,CAAS,IAC9BD,EAAK,MACGV,EAAK,SAAU,CAAE,UAAW,2DAA4D,aAAcU,EAAK,MAAO,yBAA0B,SAAU,qBAAsB,SAAU,QAASC,EAAS,KAAM,SAAU,SAAU,GAAI,CAAC,EAE5O,KAJS,eAML,SAARC,GAA0BhB,EAAO,CACpC,GAAM,CAAE,KAAAc,EAAM,KAAAG,EAAM,eAAAC,EAAgB,WAAAC,EAAY,oBAAAC,EAAqB,aAAAC,EAAc,gBAAAC,EAAiB,eAAAC,CAAgB,EAAIvB,EACxH,OAAQI,EAAM,MAAO,CAAE,UAAW,+BAAgC,wBAAyBU,EAAK,OAAQ,SAAU,CAACV,EAAM,MAAO,CAAE,UAAW,+BAAgC,SAAU,CAACN,GAAe,CACnL,KAAAgB,EACA,aAAAO,EACA,gBAAAC,EACA,eAAAC,CACJ,CAAC,EAAGnB,EAAKS,GAAa,CAAE,KAAMC,EAAM,QAASf,EAAA,IAAM,MAAMe,EAAK,KAAK,EAAtB,UAAwB,CAAC,CAAC,CAAE,CAAC,EAAGV,EAAM,MAAO,CAAE,UAAW,6BAA8B,SAAU,CAACE,GAAa,CAAE,KAAAQ,CAAK,CAAC,EAAGJ,GAAe,CAAE,KAAAI,CAAK,CAAC,EAAGF,GAAe,CAAE,KAAAE,EAAM,oBAAAM,EAAqB,KAAAH,CAAK,CAAC,CAAC,CAAE,CAAC,EAAGb,EAAKoB,GAAkB,CAAE,KAAMV,EAAM,KAAMG,EAAM,eAAgBC,EAAgB,WAAYC,CAAW,CAAC,CAAC,CAAE,CAAC,CAC5X,CARwBpB,EAAAiB,GAAA,YEpCT,SAARS,GAAoCC,EAAO,CAC9C,GAAM,CAAE,KAAAC,EAAM,KAAAC,EAAM,eAAAC,EAAgB,WAAAC,EAAY,2BAAAC,CAA2B,EAAIL,EAEzEM,EAAyBL,EAAK,QADtB,2BAGRM,GAAgBN,EAAK,IAAI,EAAE,MACjC,OAAQO,EAAM,MAAO,CAAE,UAAW,uCAAwC,MAAO,CAAE,gBAAiBF,CAAuB,EAAG,SAAU,CAACD,GAA8BJ,EAAK,WAAcO,EAAK,IAAK,CAAE,UAAW,kCAAmC,KAAMP,EAAK,UAAW,IAAK,sBAAuB,OAAQ,SAAU,aAAcA,EAAK,KAAK,KAAM,SAAUO,EAAK,OAAQ,CAAE,OAAQ,GAAM,SAAUP,EAAK,KAAK,IAAK,CAAC,CAAE,CAAC,EAAIO,EAAKC,GAAa,CAAE,KAAMR,CAAK,CAAC,EAAGO,EAAKE,GAAkB,CAAE,KAAMT,EAAM,KAAMC,EAAM,eAAgBC,EAAgB,WAAYC,CAAW,CAAC,CAAC,CAAE,CAAC,CACljB,CAPwBO,EAAAZ,GAAA,sBCHxB,SAASa,GAAyBC,EAAO,CACrC,GAAI,CAAAA,EAAM,WAEV,IAAIA,EAAM,OAAS,CAACA,EAAM,gBAAiB,CACvCA,EAAM,KAAK,YAAYA,EAAM,KAAK,EAAE,EACpC,MACJ,CACIA,EAAM,kBAAoB,CAACA,EAAM,sBACjCA,EAAM,KAAK,YAAYA,EAAM,KAAK,EAAE,EAE/BA,EAAM,wBAA0B,CAACA,EAAM,kBAC5CA,EAAM,KAAK,WAAWA,EAAM,KAAK,EAAE,EAE3C,CAbSC,EAAAF,GAAA,4BAcT,SAASG,GAAuBF,EAAO,CACnC,OAAIA,EAAM,WACCA,EAAM,KAAK,gBAAgB,EAElCA,EAAM,MACCA,EAAM,KAAK,aAAa,EAE/BA,EAAM,iBACFA,EAAM,KAAK,SACJA,EAAM,KAAK,cAAc,EAE7BA,EAAM,KAAK,aAAa,EAE/BA,EAAM,uBACCA,EAAM,KAAK,cAAc,EAE7B,EACX,CAjBSC,EAAAC,GAAA,0BAkBT,SAASC,GAAwBH,EAAO,CACpC,OAAQI,EAAK,MAAO,CAAE,UAAW,+BAAgC,SAAUA,EAAK,SAAU,CAAE,UAAW,gEAAiE,KAAM,SAAU,aAAcF,GAAuBF,CAAK,EAAG,MAAOE,GAAuBF,CAAK,EAAG,QAASC,EAAA,IAAMF,GAAyBC,CAAK,EAApC,WAAuC,SAAUA,EAAM,QAAS,CAAC,CAAE,CAAC,CAC5V,CAFSC,EAAAE,GAAA,2BAGT,SAASE,GAAwB,CAAE,SAAAC,CAAS,EAAG,CAC3C,OAAQF,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,UAAW,uDAAwD,SAAUE,CAAS,CAAC,CAC7M,CAFSL,EAAAI,GAAA,2BAGT,SAASE,GAAe,CAAE,SAAAC,CAAS,EAAG,CAElC,IAAMC,EAAe,EAAI,KAAK,GAAK,GACnC,OAAQL,EAAM,IAAK,CAAE,SAAU,CAACA,EAAK,SAAU,CAAE,UAAW,uCAAwC,EAAG,KAAM,GAAI,KAAM,GAAI,KAAM,eAAgB,IAAK,KAAM,MAAO,CAAC,EAAGA,EAAK,SAAU,CAAE,UAAW,6CAA8C,EAAG,KAAM,GAAI,KAAM,GAAI,KAAM,UAAW,sBAAuB,KAAM,OAAQ,eAAgB,IAAK,mBAAoBK,EAAc,oBAAqBA,EAAgBA,EAAe,IAAOD,CAAS,CAAC,CAAC,CAAE,CAAC,CAClc,CAJSP,EAAAM,GAAA,kBAKM,SAARG,GAA8BV,EAAO,CAKxC,MAHI,CAACA,EAAM,KAAK,SAAS,eAGrBA,EAAM,KAAK,SAAS,aAAe,OAC5B,KAGPA,EAAM,WACEI,EAAK,MAAO,CAAE,UAAW,+BAAgC,SAAUA,EAAK,MAAO,CAAE,UAAW,wCAAyC,SAAUA,EAAMC,GAAyB,CAAE,SAAU,CAACD,EAAK,SAAU,CAAE,EAAG,KAAM,GAAI,KAAM,GAAI,KAAM,KAAM,SAAU,CAAC,EAAGA,EAAK,UAAW,CAAE,UAAW,0CAA2C,UAAW,kBAAmB,OAAQ,qFAAsF,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,EAEpdJ,EAAM,eACC,KAGPA,EAAM,OAAS,CAACA,EAAM,gBACdI,EAAKD,GAAyB,CAAE,GAAGH,EAAO,SAAUI,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,sDAAuD,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,yCAA0C,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,kBAAmB,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,8CAA+C,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,kDAAmD,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAG/eJ,EAAM,kBAAoB,CAACA,EAAM,sBACzBI,EAAKD,GAAyB,CAAE,GAAGH,EAAO,SAAUI,EAAMC,GAAyB,CAAE,SAAU,CAACD,EAAKG,GAAgB,CAAE,SAAUP,EAAM,KAAK,SAAS,UAAW,CAAC,EAAGA,EAAM,KAAK,SAAYI,EAAK,UAAW,CAAE,UAAW,yCAA0C,UAAW,kBAAmB,OAAQ,mBAAoB,CAAC,EAAMA,EAAM,IAAK,CAAE,UAAW,0CAA2C,UAAW,sBAAuB,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,IAAK,EAAG,IAAK,MAAO,IAAK,OAAQ,KAAM,GAAI,GAAI,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,IAAK,EAAG,IAAK,MAAO,IAAK,OAAQ,KAAM,GAAI,GAAI,CAAC,CAAC,CAAE,CAAC,CAAE,CAAE,CAAC,CAAE,CAAC,EAG9kB,CAACJ,EAAM,kBACPA,EAAM,wBACN,CAACA,EAAM,iBACCI,EAAKD,GAAyB,CAAE,GAAGH,EAAO,SAAUI,EAAMC,GAAyB,CAAE,SAAU,CAACD,EAAKG,GAAgB,CAAE,SAAUP,EAAM,KAAK,SAAS,UAAW,CAAC,EAAGI,EAAK,UAAW,CAAE,UAAW,SAAU,UAAW,kBAAmB,OAAQ,yMAA0M,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAGvcA,EAAK,MAAO,CAAE,UAAW,+BAAgC,SAAUA,EAAK,MAAO,CAAE,UAAW,wCAAyC,SAAUA,EAAKC,GAAyB,CAAE,SAAUD,EAAKG,GAAgB,CAAE,SAAUP,EAAM,KAAK,SAAS,UAAW,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CAC/Q,CA/BwBC,EAAAS,GAAA,gBTnCxB,IAAqBC,GAArB,cAAsCC,EAAU,CAThD,MASgD,CAAAC,EAAA,iBAC5C,mBAAoB,CAChB,GAAM,CAAE,KAAAC,CAAK,EAAI,KAAK,MACjBA,EAAK,SACN,KAAK,MAAM,uBAAuBA,CAAI,CAE9C,CACA,sBAAsBC,EAAW,CAC7B,MAAO,CAACC,GAAoB,KAAK,MAAOD,CAAS,CACrD,CAGA,oBAAqB,CACjB,GAAM,CAAE,KAAAD,CAAK,EAAI,KAAK,MACjBA,EAAK,SACN,KAAK,MAAM,uBAAuBA,CAAI,CAE9C,CACA,sBAAuB,CACnB,GAAM,CAAE,KAAAA,CAAK,EAAI,KAAK,MACjBA,EAAK,SACN,KAAK,MAAM,sBAAsBA,CAAI,CAE7C,CACA,QAAS,CACL,GAAM,CAAE,KAAAA,CAAK,EAAI,KAAK,MAChBG,EAAeH,EAAK,SAAS,YAAcA,EAAK,SAAS,YACzDI,EAAa,CAAC,CAACJ,EAAK,SAAS,gBAAkB,CAACG,GAAgB,CAACH,EAAK,MACtEK,EAA6B,CAAC,CAACL,EAAK,SAAS,eAAiB,CAAC,CAACG,EAChEG,EAAoBN,EAAK,SAAS,eAAiB,CAACA,EAAK,SAAS,gBACpEG,EACEI,EAAQP,EAAK,OAAS,GAGtB,CAAE,QAAAQ,CAAQ,EAAIR,EAChBS,GAAmB,KAAK,MAAM,wBAE5B,CAACH,IAAoB,CAACF,EACxBA,GAAc,KAAK,MAAM,gCACzBK,EAAmB,IAEvB,IAAMC,KAAqB,GAAAC,SAAW,CAClC,sBAAuB,GACvB,gBAAiBL,GAAoB,CAAC,KAAK,MAAM,eACjD,gBAAiBH,EACjB,cAAeC,EACf,WAAY,CAAC,CAACG,EACd,eAAgB,KAAK,MAAM,iBAC3B,8BAA+B,CAAC,KAAK,MAAM,uBAC3C,WAAYC,CAChB,CAAC,EACD,OAAQI,EAAM,MAAO,CAAE,UAAWF,EAAoB,GAAI,QAAQV,EAAK,EAAE,GAAI,KAAM,KAAK,MAAM,KAAM,SAAU,CAACY,EAAM,MAAO,CAAE,UAAW,8BAA+B,SAAU,CAACA,EAAKC,GAAoB,CAAE,KAAMb,EAAM,2BAA4B,KAAK,MAAM,2BAA4B,KAAM,KAAK,MAAM,KAAM,eAAgB,KAAK,MAAM,eAAgB,WAAY,KAAK,MAAM,UAAW,CAAC,EAAGY,EAAKE,GAAc,CAAE,KAAM,KAAK,MAAM,KAAM,KAAMd,EAAM,MAAOO,EAAO,WAAYH,EAAY,gBAAiB,KAAK,MAAM,gBAAiB,iBAAkB,KAAK,MAAM,iBAAkB,sBAAuB,KAAK,MAAM,sBAAuB,eAAgB,KAAK,MAAM,eAAgB,iBAAkB,KAAK,MAAM,iBAAkB,uBAAwB,KAAK,MAAM,uBAAwB,KAAM,KAAK,MAAM,IAAK,CAAC,CAAC,CAAE,CAAC,EAAGQ,EAAM,MAAO,CAAE,UAAW,yCAA0C,SAAU,CAACA,EAAKG,GAAU,CAAE,KAAMf,EAAM,eAAgB,KAAK,MAAM,eAAgB,gBAAiB,KAAK,MAAM,gBAAiB,KAAM,KAAK,MAAM,KAAM,oBAAqB,KAAK,MAAM,oBAAqB,eAAgB,KAAK,MAAM,eAAgB,WAAY,KAAK,MAAM,WAAY,aAAc,KAAK,MAAM,YAAa,CAAC,EAAGY,EAAKI,GAAS,CAAE,KAAMhB,EAAM,WAAY,KAAK,MAAM,WAAY,2BAA4B,KAAK,MAAM,2BAA4B,iBAAkBS,EAAkB,YAAa,KAAK,MAAM,YAAa,2BAA4BJ,EAA4B,eAAgB,KAAK,MAAM,eAAgB,eAAgB,KAAK,MAAM,eAAgB,KAAM,KAAK,MAAM,KAAM,KAAM,KAAK,MAAM,IAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CACtkD,CACJ,EUzDA,SAASY,GAAOC,EAAMC,EAAM,CACxB,IAAMC,EAAU,CAAC,EACbC,EAAe,CAAC,EACpB,OAAAH,EAAK,QAASI,GAAS,CACfD,EAAa,OAASF,EACtBE,EAAa,KAAKC,CAAI,GAGtBF,EAAQ,KAAKC,CAAY,EACzBA,EAAe,CAACC,CAAI,EAE5B,CAAC,EACGD,EAAa,QACbD,EAAQ,KAAKC,CAAY,EACtBD,CACX,CAfSG,EAAAN,GAAA,UAgBM,SAARO,GAA0B,CAAE,GAAAC,EAAI,KAAAC,EAAM,KAAAC,EAAM,MAAAC,EAAO,iBAAAC,EAAkB,gBAAAC,EAAiB,sBAAAC,EAAuB,iBAAAC,EAAkB,2BAAAC,EAA4B,8BAAAC,EAA+B,WAAAC,EAAY,aAAAC,EAAc,eAAAC,EAAgB,uBAAAC,EAAwB,sBAAAC,EAAuB,eAAAC,EAAgB,uBAAAC,EAAwB,YAAAC,EAAa,eAAAC,EAAgB,YAAAC,EAAa,oBAAAC,EAAqB,eAAAC,EAAgB,gBAAAC,CAAiB,EAAG,CAGja,IAAMC,EAAYN,IAAgB,EAE1B,GAEA,IAEFO,EAAOC,GAAQ,IAAM,CACvB,IAAMC,GAAwB5B,EAAA,CAAC6B,GAAOC,KAAU,OAAOzB,EAAMyB,EAAK,EAAE,OAAO,EAAI,OAAOzB,EAAMwB,EAAK,EAAE,OAAO,EAA5E,yBACxBE,GAAU,OAAO,KAAK1B,CAAK,EACjC,OAAIY,GACAc,GAAQ,KAAKH,EAAqB,EAC/BlC,GAAOqC,GAASZ,CAAW,CACtC,EAAG,CAACd,EAAOc,EAAaF,CAAc,CAAC,EACjCe,EAAYhC,EAACiC,IAASC,EAAK,MAAO,CAAE,MAAO,4BAG7C,KAAM,eAAgB,SAAUD,GAAI,IAAKE,IAAYD,EAAKE,GAAU,CAAE,KAAMhC,EAExE,GAAIF,EAEJ,KAAMC,EAEN,iBAAkBG,EAAkB,uBAAwBY,EAE5D,gBAAiBX,EAAiB,sBAAuBC,EAAuB,iBAAkBC,EAAkB,2BAA4BC,EAA4B,8BAA+BC,EAA+B,WAAYC,EAAY,eAAgBK,EAAgB,aAAcJ,EAAc,eAAgBU,EAAgB,gBAAiBC,EAE/W,eAAgBV,EAAgB,uBAAwBC,EAAwB,sBAAuBC,EAAuB,KAAM,WAAY,eAAgBI,EAAgB,YAAaC,EAAa,oBAAqBC,EAAqB,KAAMjB,EAAM8B,EAAM,CAAE,EAAGA,EAAM,CAAE,CAAE,EAAGF,GAAI,CAAC,CAAC,EAbpR,aAclB,OAAIpB,EACOqB,EAAK,MAAO,CAAE,MAAO,uBAAwB,SAAUF,EAAUN,EAAK,CAAC,CAAC,CAAE,CAAC,EAE9EQ,EAAKG,GAAa,CAAE,MAAO,uBAAwB,KAAM,OAAQ,KAAMX,EAAM,UAAWM,EAAW,UAAWP,CAAU,CAAC,CACrI,CAlCwBzB,EAAAC,GAAA,YCnBxB,IAAMqC,GAAgB,IACDC,GAArB,cAAoCC,EAAU,CAH9C,MAG8C,CAAAC,EAAA,eAC1C,IAAMC,GAAU,EAChB,mBAAmBC,EAAU,CACzB,KAAK,IAAI,QAAQ,MAAM,QAAU,IACjC,KAAK,IAAI,QAAQ,MAAM,UAAY,OACnC,WAAWA,EAAUL,EAAa,CACtC,CACA,mBAAmBK,EAAU,CACzB,KAAK,IAAI,QAAQ,MAAM,QAAU,IACjC,KAAK,IAAI,QAAQ,MAAM,UAAY,mBACnC,WAAWA,EAAUL,EAAa,CACtC,CACA,QAAS,CACL,GAAM,CAAE,SAAAM,CAAS,EAAI,KAAK,MAC1B,OAAQC,EAAK,MAAO,CAAE,UAAW,yBAA0B,IAAK,KAAK,IAAK,SAAUD,CAAS,CAAC,CAClG,CACJ,ECbA,SAASE,GAAOC,EAAKC,EAAO,CACxB,OAAO,OAAO,OAAOD,EAAKC,CAAK,CACnC,CAFSC,EAAAH,GAAA,UAGT,SAASI,GAAOC,EAAOC,EAAU,CAC7B,OAAOD,GAAO,KAAOC,CACzB,CAFSH,EAAAC,GAAA,UAGT,SAASG,GAAQC,EAAWC,EAAM,CAE9B,IAAMC,EAAQF,EAAU,iBAAmBA,EAAU,eAAiB,CAAC,GACvE,OAAQE,EAAMD,CAAI,IAEbC,EAAMD,CAAI,EAAKE,GAAM,CAClBH,EAAU,KAAKC,CAAI,EAAIE,CAC3B,EACR,CARSR,EAAAI,GAAA,WAST,SAASK,GAAgBC,EAAU,CAC/B,IAAMC,EAAM,CAAC,EACb,QAASC,EAAI,EAAGA,EAAIF,EAAS,OAAQE,IACjC,GAAIF,EAASE,CAAC,GAAK,KAAM,CACrB,IAAMC,EAAMZ,GAAOS,EAASE,CAAC,EAAGA,EAAE,SAAS,EAAE,CAAC,EAC9CD,EAAIE,CAAG,EAAIH,EAASE,CAAC,CACzB,CAEJ,OAAOD,CACX,CATSX,EAAAS,GAAA,mBAUT,SAASK,GAAmBC,EAAMC,EAAM,CACpCD,EAAOA,GAAQ,CAAC,EAChBC,EAAOA,GAAQ,CAAC,EAChB,IAAMC,EAAiBjB,EAACa,GAAQ,OAAO,OAAOG,EAAMH,CAAG,EAAIG,EAAKH,CAAG,EAAIE,EAAKF,CAAG,EAAxD,kBAGjBK,EAAkB,CAAC,EACrBC,EAAc,CAAC,EACnB,QAAWC,KAAWL,EACd,OAAO,OAAOC,EAAMI,CAAO,EACvBD,EAAY,SACZD,EAAgBE,CAAO,EAAID,EAC3BA,EAAc,CAAC,GAInBA,EAAY,KAAKC,CAAO,EAGhC,IAAMC,EAAe,CAAC,EACtB,QAAWC,KAAWN,EAAM,CACxB,GAAI,OAAO,OAAOE,EAAiBI,CAAO,EACtC,QAASV,EAAI,EAAGA,EAAIM,EAAgBI,CAAO,EAAE,OAAQV,IAAK,CACtD,IAAMW,EAAiBL,EAAgBI,CAAO,EAAEV,CAAC,EACjDS,EAAaH,EAAgBI,CAAO,EAAEV,CAAC,CAAC,EACpCK,EAAeM,CAAc,CACrC,CAEJF,EAAaC,CAAO,EAAIL,EAAeK,CAAO,CAClD,CAEA,QAASV,EAAI,EAAGA,EAAIO,EAAY,OAAQP,IACpCS,EAAaF,EAAYP,CAAC,CAAC,EAAIK,EAAeE,EAAYP,CAAC,CAAC,EAEhE,OAAOS,CACX,CAnCSrB,EAAAc,GAAA,sBAoCT,IAAMU,GAAWxB,EAAC,GAAM,EAAP,YACXyB,GAAN,cAA8BC,EAAU,CApExC,MAoEwC,CAAA1B,EAAA,wBACpC,YAAYD,EAAO4B,EAAS,CACxB,MAAM5B,EAAO4B,CAAO,EACpB,KAAK,KAAO,CAAC,EACb,KAAK,MAAQ,CACT,SAAUlB,GAAgBmB,GAAaA,GAAa,KAAK,MAAM,QAAQ,CAAC,GAAK,CAAC,CAAC,CACnF,EACA,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,CACnD,CACA,oBAAqB,CACjB,KAAK,2BAA6B,CAAC,EACnC,KAAK,iBAAmB,CAAC,EACzB,KAAK,YAAc,CAAC,EACpB,KAAK,YAAc,CAAC,CACxB,CACA,mBAAoB,CAChB,IAAMC,EAAsB,KAAK,MAAM,SACvC,QAAWhB,KAAOgB,EACVA,EAAoBhB,CAAG,GAEvB,KAAK,cAAcA,CAAG,CAGlC,CACA,0BAA0BiB,EAAW,CACjC,IAAMC,EAAmBtB,GAAgBmB,GAAaE,EAAU,QAAQ,GAAK,CAAC,CAAC,EACzEE,EAAmB,KAAK,MAAM,SACpC,KAAK,SAAUC,IAAe,CAC1B,SAAUnB,GAAmBmB,EAAU,SAAUF,CAAgB,CACrE,EAAE,EACF,IAAIlB,EACJ,IAAKA,KAAOkB,EACR,GAAI,OAAO,OAAOA,EAAkBlB,CAAG,EAAG,CACtC,IAAMqB,EAAUF,GAAoB,OAAO,OAAOA,EAAkBnB,CAAG,EAEnEkB,EAAiBlB,CAAG,GACpBqB,GACA,KAAK,2BAA2BrB,CAAG,GACnC,KAAK,YAAY,KAAKA,CAAG,EACzB,KAAK,iBAAiB,KAAKA,CAAG,GAEzBkB,EAAiBlB,CAAG,GACzB,CAACqB,GACD,CAAC,KAAK,2BAA2BrB,CAAG,GACpC,KAAK,YAAY,KAAKA,CAAG,CAEjC,CAEJ,IAAKA,KAAOmB,EACR,GAAI,OAAO,OAAOA,EAAkBnB,CAAG,EAAG,CACtC,IAAMsB,EAAUJ,GAAoB,OAAO,OAAOA,EAAkBlB,CAAG,EACnEmB,EAAiBnB,CAAG,GACpB,CAACsB,GACD,CAAC,KAAK,2BAA2BtB,CAAG,GACpC,KAAK,YAAY,KAAKA,CAAG,CAEjC,CAER,CACA,oBAAqB,CACjB,GAAM,CAAE,YAAAuB,CAAY,EAAI,KACxB,KAAK,YAAc,CAAC,EACpBA,EAAY,QAAQ,KAAK,YAAY,EACrC,GAAM,CAAE,YAAAC,CAAY,EAAI,KACxB,KAAK,YAAc,CAAC,EACpBA,EAAY,QAAQ,KAAK,YAAY,CACzC,CACA,aAAaxB,EAAK,CACd,IAAMyB,EAAM,KAAK,iBAAiB,QAAQzB,CAAG,EACzCyB,IAAQ,IACR,KAAK,iBAAiB,OAAOA,EAAK,CAAC,CAE3C,CACA,cAAczB,EAAK,CACf,KAAK,2BAA2BA,CAAG,EAAI,GACvC,IAAMR,EAAY,KAAK,KAAKQ,CAAG,EAC3BR,GAAW,oBACXA,EAAU,oBAAoB,KAAK,qBAAqB,KAAK,KAAMQ,CAAG,CAAC,EAGvE,KAAK,qBAAqBA,CAAG,CAErC,CACA,qBAAqBA,EAAK,CACtB,IAAMR,EAAY,KAAK,KAAKQ,CAAG,EAC3BR,GAAW,oBACXA,EAAU,mBAAmB,EAEjC,OAAO,KAAK,2BAA2BQ,CAAG,EAC1C,KAAK,aAAaA,CAAG,EACrB,IAAM0B,EAAsB9B,GAAgBmB,GAAa,KAAK,MAAM,QAAQ,GAAK,CAAC,CAAC,GAC/E,CAACW,GAAuB,CAAC,OAAO,OAAOA,EAAqB1B,CAAG,IAE/D,KAAK,aAAaA,CAAG,CAE7B,CACA,aAAaA,EAAK,CACd,KAAK,2BAA2BA,CAAG,EAAI,GACvC,IAAMR,EAAY,KAAK,KAAKQ,CAAG,EAC3BR,GAAW,mBACXA,EAAU,mBAAmB,KAAK,oBAAoB,KAAK,KAAMQ,CAAG,CAAC,EAGrE,KAAK,oBAAoBA,CAAG,CAEpC,CACA,oBAAoBA,EAAK,CACrB,IAAMR,EAAY,KAAK,KAAKQ,CAAG,EAC3BR,GAAW,mBACXA,EAAU,kBAAkB,EAEhC,OAAO,KAAK,2BAA2BQ,CAAG,EAC1C,KAAK,aAAaA,CAAG,EACrB,IAAM0B,EAAsB9B,GAAgBmB,GAAa,KAAK,MAAM,QAAQ,GAAK,CAAC,CAAC,GAC/E,CAACW,GAAuB,CAAC,OAAO,OAAOA,EAAqB1B,CAAG,IAE/D,KAAK,aAAaA,CAAG,CAE7B,CACA,aAAaA,EAAK,CAId,GADY,KAAK,iBAAiB,QAAQA,CAAG,IACjC,GACR,OAEJ,KAAK,2BAA2BA,CAAG,EAAI,GACvC,IAAMR,EAAY,KAAK,KAAKQ,CAAG,EAC3BR,GAAW,mBACXA,EAAU,mBAAmB,KAAK,mBAAmB,KAAK,KAAMQ,CAAG,CAAC,EAMpE,KAAK,mBAAmBA,CAAG,CAEnC,CACA,mBAAmBA,EAAK,CAIpB,GADY,KAAK,iBAAiB,QAAQA,CAAG,IACjC,GACR,OAEJ,IAAMR,EAAY,KAAK,KAAKQ,CAAG,EAC3BR,GAAW,mBACXA,EAAU,kBAAkB,EAEhC,OAAO,KAAK,2BAA2BQ,CAAG,EAC1C,IAAM0B,EAAsB9B,GAAgBmB,GAAa,KAAK,MAAM,QAAQ,GAAK,CAAC,CAAC,EACnF,GAAIW,GAAuB,OAAO,OAAOA,EAAqB1B,CAAG,EAE7D,KAAK,aAAaA,CAAG,MAEpB,CACD,IAAMH,EAAWb,GAAO,CAAC,EAAG,KAAK,MAAM,QAAQ,EAC/C,OAAOa,EAASG,CAAG,EACnB,KAAK,SAAS,CAAE,SAAAH,CAAS,CAAC,CAC9B,CACJ,CACA,OAAO,CAAE,aAAA8B,EAAc,gBAAAC,EAAiB,eAAAC,EAAgB,iBAAAC,EAAkB,gBAAAC,EAAiB,uBAAAC,EAAwB,uBAAAC,EAAwB,wBAAAC,EAAyB,UAAA1C,EAAW,GAAGN,CAAM,EAAG,CAAE,SAAAW,CAAS,EAAG,CAGrM,IAAMsC,EAAmB,OAAO,QAAQtC,CAAQ,EAC3C,IAAI,CAAC,CAACG,EAAKoC,CAAK,IAAM,CACvB,GAAI,CAACA,EACD,OACJ,IAAMC,EAAM9C,GAAQ,KAAMS,CAAG,EAC7B,OAAOsC,GAAaX,EAAaS,CAAK,EAAG,CAAE,IAAAC,EAAK,IAAArC,CAAI,CAAC,CACzD,CAAC,EACI,OAAO,OAAO,EACnB,OAAOuC,GAAE/C,EAAWN,EAAOiD,CAAgB,CAC/C,CACJ,EACAvB,GAAgB,aAAe,CAC3B,UAAW,OACX,aAAcD,EAClB,EACA,IAAO6B,GAAQ5B,GCrPf,IAAqB6B,GAArB,cAAsCC,EAAU,CAJhD,MAIgD,CAAAC,EAAA,iBAC5C,QAAS,CAEL,GAAM,CAAE,KAAAC,CAAK,EAAI,KAAK,MAAM,KAAK,SAAS,EAC1C,OAAQC,EAAK,MAAO,CAAE,UAAW,qBAAsB,SAAUA,EAAKC,GAAiB,CAAE,SAAUF,EAAK,IAAKA,GAAUC,EAAKE,GAAQ,CAAE,SAAUF,EAAM,IAAK,CAAE,KAAM,QAAS,SAAU,CAACD,EAAK,QAAS,IAAKA,EAAK,SAE3LC,EAAK,OAAQ,CAAE,aAAcD,EAAK,QAAS,yBAA0B,WAAY,qBAAsB,SAAU,KAAM,UAAW,QAASD,EAAA,IAAM,MAAM,GAAGC,EAAK,OAAO;AAAA;AAAA,GAASA,EAAK,OAAO,EAAE,EAAlD,WAAqD,SAAU,GAAI,CAAC,CAAE,CAAE,CAAC,CAAE,EAAGA,EAAK,OAAO,CAAE,CAAE,CAAC,CAAE,CAAC,CACrQ,CACJ,ECXA,IAAAI,GAAuB,WAGvB,SAASC,GAAmB,CAAE,kBAAAC,EAAmB,UAAAC,EAAW,cAAAC,EAAe,KAAAC,EAAM,MAAAC,EAAO,KAAAC,CAAM,EAAG,CAC7F,IAAMC,EAAMC,GAAO,IAAI,EACvB,OAAQC,EAAM,MAAO,CAAE,aAAW,GAAAC,SAAW,8BAA+BR,CAAS,EAAG,KAAM,WAAY,sBAAuB,cAAe,GAAI,gCAAgCD,EAAkB,EAAE,GAAI,WAAYU,GAAa,YAAaA,GAAa,OAAQA,GAAa,QAASA,GAAa,SAAU,CAACF,EAAM,MAAO,CAAE,UAAW,4BAA6B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,8BAE5X,KAAM,UAAW,aAAc,EAAG,SAAUL,EAAK,aAAc,CAAE,KAAMH,EAAkB,IAAK,CAAC,CAAE,CAAC,EAAGQ,EAAK,SAAU,CAAE,UAAW,6BAA8B,KAAM,SAAU,QAASN,EAAe,SAAUC,EAAK,QAAQ,CAAE,CAAC,CAAC,CAAE,CAAC,EAAGK,EAAK,MAAO,CAAE,IAAKF,EAAK,UAAW,kCAAmC,SAAUD,EAAK,UAAUL,EAAkB,EAAE,EAAE,OAAOI,EAAOE,EAAI,OAAO,CAAE,CAAC,CAAC,CAAE,CAAC,CACrZ,CALSK,EAAAZ,GAAA,sBAMT,IAAOa,GAAQb,GCTf,IAAMc,GAAe,CACjB,YAAa,QACb,cAAe,UACf,oBAAqB,gBACrB,gBAAiB,YACjB,qBAAsB,iBACtB,eAAgB,WAChB,aAAc,QAClB,EACA,SAASC,GAAkBC,EAAcC,EAAeC,EAAaC,EAAQ,CAAC,EAAG,CAC7E,GAAIH,EACA,OAAOF,GAAa,YAExB,GAAIG,EACA,OAAOH,GAAa,eAExB,GAAII,EACA,OAAOJ,GAAa,aAExB,IAAIM,EAAQN,GAAa,cACnBO,EAAU,OAAO,KAAKF,CAAK,EACjC,QAASG,EAAI,EAAGA,EAAID,EAAQ,OAAQC,IAAK,CACrC,GAAM,CAAE,SAAAC,CAAS,EAAIJ,EAAME,EAAQC,CAAC,CAAC,EAErC,GAAIC,EAAS,eAAiB,CAACA,EAAS,eACpC,OAAOT,GAAa,gBAIpBS,EAAS,YAAcH,IAAUN,GAAa,kBAC9CM,EAAQN,GAAa,qBAIrBS,EAAS,aACTH,IAAUN,GAAa,iBACvBM,IAAUN,GAAa,sBACvBM,EAAQN,GAAa,qBAE7B,CACA,OAAOM,CACX,CAhCSI,EAAAT,GAAA,qBAiCT,SAASU,GAAa,CAAE,MAAAN,EAAO,KAAAO,EAAM,cAAAT,EAAe,aAAAD,EAAc,YAAAE,EAAa,yBAAAS,EAA0B,SAAAC,EAAU,gBAAAC,CAAiB,EAAG,CAEnI,OADuBd,GAAkBC,EAAcC,EAAeC,EAAaC,CAAK,EAChE,CACpB,IAAK,YACD,OAAOO,EAAK,kBAAmB,CAC3B,YAAaC,EAAyB,MAC1C,CAAC,EACL,IAAK,gBACL,IAAK,iBACD,OAAOD,EAAK,mBAAoB,CAAE,YAAaG,EAAgB,MAAO,CAAC,EAC3E,IAAK,SACD,OAAOH,EAAK,cAAc,EAC9B,IAAK,UACD,OAAOA,EAAK,iBAAkB,CAAE,YAAaE,EAAS,MAAO,CAAC,EAClE,IAAK,WACD,OAAOF,EAAK,gBAAgB,EAChC,IAAK,QACD,OAAOA,EAAK,OAAO,EACvB,QACJ,CACJ,CApBSF,EAAAC,GAAA,gBAqBT,SAASK,GAAYC,EAAO,CACxB,GAAM,CAAE,KAAAL,EAAM,cAAAT,EAAe,iBAAAe,EAAkB,iBAAAC,EAAkB,oBAAAC,EAAqB,KAAAC,CAAM,EAAIJ,EAC5F,CAAE,eAAAK,CAAe,EAAIL,EAEzB,OAAIK,GAAkBH,IAClBG,EAAiBL,EAAM,eAAiBA,EAAM,kBAE1CM,EAAM,MAAO,CAAE,UAAW,4BAA6B,SAAU,CAAC,CAACpB,GAAiB,CAACe,EAAoBK,EAAK,SAAU,CAAE,UAAW,6BAA8B,KAAM,SAAU,QAASb,EAAA,IAAMW,EAAK,UAAU,EAArB,WAAwB,SAAUT,EAAK,QAAQ,CAAE,CAAC,EAAMW,EAAK,MAAO,CAAC,CAAC,EAAIA,EAAK,MAAO,CAAE,UAAW,8BAA+B,SAAUA,EAAKZ,GAAc,CAAE,GAAGM,CAAM,CAAC,CAAE,CAAC,EAAGK,EAAkBC,EAAM,SAAU,CAAE,UAAW,gCAAiC,KAAM,SAAU,aAAcX,EAAK,cAAc,EAAG,MAAOA,EAAK,cAAc,EAAG,QAASF,EAAA,IAAMU,EAAoB,EAAI,EAA9B,WAAiC,SAAU,CAACG,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,uKAAwK,CAAC,CAAE,CAAC,EAAGA,EAAK,OAAQ,CAAE,UAAW,uCAAwC,SAAUX,EAAK,SAAS,CAAE,CAAC,CAAC,CAAE,CAAC,EAAMW,EAAK,MAAO,CAAC,CAAC,CAAE,CAAE,CAAC,CACxhC,CARSb,EAAAM,GAAA,eAST,IAAOQ,GAAQR,GCzEf,IAAAS,GAAuB,WAGvB,IAAMC,GAAiB,8BACjBC,GAAW,IAUjB,SAASC,GAAM,CAAE,SAAAC,CAAS,EAAG,CACzB,GAAM,CAACC,EAAgBC,CAAiB,EAAIC,GAAS,IAAI,EACnD,CAACC,EAAWC,CAAY,EAAIF,GAAS,EAAE,EACvCG,EAAkBC,GAAO,EACzBC,EAAkBD,GAAO,EACzBE,EAAoBF,GAAO,EAC3BG,EAAwBC,GAAY,IAAM,CAC5CN,EAAa,GAAGR,EAAc,QAAQ,EACtC,qBAAqBY,EAAkB,OAAO,EAC9C,aAAaD,EAAgB,OAAO,EACpCA,EAAgB,QAAU,OAC1BC,EAAkB,QAAU,sBAAsB,IAAM,CACpDJ,EAAa,GAAGR,EAAc,UAAUA,EAAc,eAAe,EACrES,EAAgB,QAAU,WAAW,IAAM,CACvCD,EAAa,EAAE,CACnB,EAAGP,EAAQ,CACf,CAAC,CACL,EAAG,CAAC,CAAC,EACCc,EAAwBD,GAAY,IAAM,CAC5CN,EAAa,GAAGR,EAAc,QAAQ,EACtC,qBAAqBY,EAAkB,OAAO,EAC9C,aAAaH,EAAgB,OAAO,EACpCA,EAAgB,QAAU,OAC1BG,EAAkB,QAAU,sBAAsB,IAAM,CACpDJ,EAAa,GAAGR,EAAc,UAAUA,EAAc,eAAe,EACrEW,EAAgB,QAAU,WAAW,IAAM,CACvCN,EAAkB,IAAI,EACtBG,EAAa,EAAE,CACnB,EAAGP,EAAQ,CACf,CAAC,CACL,EAAG,CAAC,CAAC,EAoBL,OAnBAe,GAAU,IAAM,CACZ,IAAMC,EAAQC,GAAaf,CAAQ,EAAE,CAAC,EAClCC,IAAmBa,IAEnBA,GAAS,CAACb,EACVS,EAAsB,EAEjBT,GAAkB,CAACa,GAAS,CAACN,EAAgB,SAClDI,EAAsB,EAE1BV,EAAkBY,CAAK,EAC3B,EAAG,CAACd,EAAUC,EAAgBS,EAAuBE,CAAqB,CAAC,EAC3EC,GAAU,IACC,IAAM,CACT,aAAaP,EAAgB,OAAO,EACpC,aAAaE,EAAgB,OAAO,EACpC,qBAAqBC,EAAkB,OAAO,CAClD,EACD,CAAC,CAAC,EACAR,EAEEe,GAAaf,EAAgB,CAChC,aAAW,GAAAgB,SAAWb,EAAWH,EAAe,MAAM,SAAS,CACnE,CAAC,EAHU,IAIf,CAvDSiB,EAAAnB,GAAA,SAwDT,IAAOoB,GAAQpB,GCtEf,IAAOqB,GAAQ,CACX,YAAa,QACb,cAAe,UACf,oBAAqB,gBACrB,gBAAiB,YACjB,qBAAsB,iBACtB,eAAgB,UACpB,ECNA,IAAAC,GAAuB,WCAvB,IAAAC,GAA0B,WAE1B,IAAAC,GAAuB,WAEvB,IAAMC,GAAM,OACNC,GAAYC,EAAA,IAAM,IAAIF,EAAG,IAAb,aAClB,SAASG,GAAUC,EAAO,CACtB,GAAM,CAAE,SAAAC,EAAU,gBAAAC,EAAiB,eAAAC,EAAgB,KAAAC,EAAM,YAAAC,EAAa,YAAAC,EAAa,YAAAC,CAAa,EAAIP,EAC9FQ,KAAsB,GAAAC,SAAW,eAAgB,aAAc,2BAA4B,mCAAoC,CACjI,qBAAsBJ,IAAgBK,GAAgB,aAC1D,EAAG,CAAE,qCAAsCJ,CAAY,CAAC,EAClDK,EAAgBV,GAAYC,GAAmB,CAACC,EAChDC,EAAK,kBAAmB,CAAE,YAAaH,CAAS,CAAC,EACjDG,EAAK,eAAgB,CAAE,YAAaH,CAAS,CAAC,EACpD,OAAQW,EAAK,SAAU,CAAE,KAAM,SAAU,UAAWJ,EAAqB,aAAcJ,EAAK,eAAgB,CAAE,YAAaH,CAAS,CAAC,EAAG,QAASM,EAAa,SAAUD,EAAa,4BAA6B,GAAM,SAAUK,CAAc,CAAC,CACrP,CATSb,EAAAC,GAAA,aAUT,SAASc,GAASb,EAAO,CACrB,GAAM,CAAE,KAAAI,EAAM,KAAAU,CAAK,EAAId,EACvB,OAAQY,EAAM,SAAU,CAAE,KAAM,SAAU,UAAW,mFAAoF,aAAcR,EAAK,aAAa,EAAG,QAASN,EAAA,IAAMgB,EAAK,SAAS,EAAE,MAAM,IAAM,CAEnN,CAAC,EAFgL,WAE7K,4BAA6B,GAAM,UAAW,QAAS,SAAU,CAACF,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,IAAK,OAAQ,KAAM,QAAS,WAAY,SAAUA,EAAK,OAAQ,CAAE,EAAG,oLAAqL,CAAC,CAAE,CAAC,EAAGR,EAAK,OAAO,CAAC,CAAE,CAAC,CACxb,CALSN,EAAAe,GAAA,YAMT,SAASE,GAAUf,EAAO,CACtB,GAAM,CAAE,KAAAI,EAAM,KAAAU,CAAK,EAAId,EACvB,OAAQY,EAAK,SAAU,CAAE,KAAM,SAAU,UAAW,8CAA+C,MAAOR,EAAK,QAAQ,EAAG,aAAcA,EAAK,QAAQ,EAAG,QAASN,EAAA,IAAMgB,EAAK,UAAU,EAArB,WAAwB,UAAW,SAAU,4BAA6B,GAAM,SAAUF,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,KAAM,OAAQ,SAAU,UAAW,SAAU,CAACA,EAAK,SAAU,CAAE,KAAM,OAAQ,GAAI,IAAK,GAAI,IAAK,EAAG,GAAI,CAAC,EAAGA,EAAK,OAAQ,CAAE,KAAM,OAAQ,EAAG,iIAAkI,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CACjrB,CAHSd,EAAAiB,GAAA,aAIT,SAASC,GAAkBhB,EAAO,CAC9B,GAAM,CAAE,YAAAiB,EAAa,KAAAb,EAAM,cAAAc,EAAe,iBAAAC,EAAkB,KAAAL,CAAK,EAAId,EAC/DoB,EAAsBhB,EAAda,EAAmB,SAAiB,OAAT,EACzC,SAASI,GAAoB,CACzB,GAAI,CAAAH,EAEJ,IAAI,CAACC,EAAkB,CACnBL,EAAK,UAAU,EACf,MACJ,CACA,GAAIG,EAAa,CACbH,EAAK,UAAU,EACf,MACJ,CACAA,EAAK,SAAS,EAClB,CAZS,OAAAhB,EAAAuB,EAAA,qBAaDT,EAAK,SAAU,CAAE,MAAOQ,EAAO,aAAcA,EAAO,UAAW,8CAA+C,KAAM,SAAU,QAASC,EAAmB,UAAW,oBAAqB,4BAA6B,GAAM,SAAUT,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,KAAM,OAAQ,SAAU,UAAW,SAAU,CAACA,EAAK,SAAU,CAAE,KAAM,OAAQ,GAAI,IAAK,GAAI,IAAK,EAAG,GAAI,CAAC,EAAGA,EAAK,OAAQ,CAAE,KAAM,OAAQ,EAAGK,EAC1f,0BACA,gCAAiC,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CAC1E,CAnBSnB,EAAAkB,GAAA,qBAoBT,SAASM,GAAQtB,EAAO,CACpB,GAAM,CAAE,KAAAI,EAAM,kBAAAmB,CAAkB,EAAIvB,EACpC,OAAQY,EAAK,SAAU,CAAE,KAAM,SAAU,UAAW,kFAAmF,QAASW,EAAmB,4BAA6B,GAAM,SAAUnB,EAAK,MAAM,CAAE,CAAC,CAClO,CAHSN,EAAAwB,GAAA,WAIT,SAASE,IAAiB,CACtB,OAAQZ,EAAK,MAAO,CAAE,UAAW,yBAA0B,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,SAAUA,EAAK,OAAQ,CAAE,EAAG,ubAAwb,SAAU,SAAU,CAAC,CAAE,CAAC,CACjnB,CAFSd,EAAA0B,GAAA,kBAGT,SAASC,GAAsBzB,EAAO,CAClC,GAAM,CAAE,SAAA0B,CAAS,EAAI1B,EACf,CAAE,MAAA2B,EAAO,KAAAC,EAAM,QAAAC,CAAQ,EAAIH,EAEjC,OAAQd,EAAM,MAAO,CAAE,UAAW,yBAA0B,SAAU,CAACA,EAAKY,GAAgB,CAAC,CAAC,EAAGI,IAAS,cAAgB,GAAG,KAAK,MAAMD,EAAQ,GAAG,CAAC,UAAc,GAAIE,CAAO,CAAE,CAAC,CACpL,CALS/B,EAAA2B,GAAA,yBAMT,SAASK,GAAgB9B,EAAO,CAC5B,GAAM,CAAE,WAAA+B,EAAY,SAAAC,EAAU,kBAAAC,EAAmB,UAAAC,EAAW,SAAAC,EAAU,KAAA/B,CAAK,EAAIJ,EACzEoC,EAA6BL,EAAa,EAC1CM,KAAuB,GAAAC,SAAcL,CAAiB,EAC5D,OAAQrB,EAAM,MAAO,CAAE,UAAW,iCAAkC,SAAU,CAACwB,GACnEhC,EAAK,uBAAwB,CACzB,SAAA4B,EACA,YAAaD,CACjB,CAAC,EAAGnB,EAAM,OAAQ,CAAE,UAAW,gCAAiC,SAAU,CAACwB,GAA8BvC,GAAU,EAAGqC,GAAa,KACzH9B,EAAK,sBAAuB,CAC1B,SAAUiC,EACV,SAAO,GAAAC,SAAcJ,CAAS,CAClC,CAAC,EACC9B,EAAK,wBAAyB,CAAE,SAAUiC,CAAqB,CAAC,EAAGxC,GAAU,EAAGsC,GAAY,MAC9F/B,EAAK,YAAa,CACd,KAAMmC,GAAUJ,CAAQ,CAC5B,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CACjC,CAjBSrC,EAAAgC,GAAA,mBAkBT,SAASU,GAAgBxC,EAAO,CAC5B,GAAM,CAAE,KAAAI,EAAM,SAAA4B,EAAU,WAAAD,CAAW,EAAI/B,EACvC,OAAQY,EAAK,MAAO,CAAE,UAAW,iCAAkC,SAAUR,EAAK,uBAAwB,CAAE,SAAA4B,EAAU,YAAaD,CAAW,CAAC,CAAE,CAAC,CACtJ,CAHSjC,EAAA0C,GAAA,mBAIT,SAASC,GAAsBzC,EAAO,CAClC,GAAM,CAAE,KAAAI,EAAM,SAAAH,EAAU,YAAAM,CAAY,EAAIP,EAClCQ,KAAsB,GAAAC,SAAW,eAAgB,aAAc,2BAA4B,4CAA4C,EAC7I,OAAQG,EAAM,MAAO,CAAE,UAAW,iCAAkC,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,qCAAsC,SAAUR,EAAK,kBAAmB,CAAE,YAAaH,CAAS,CAAC,CAAE,CAAC,EAAGW,EAAK,SAAU,CAAE,KAAM,SAAU,UAAWJ,EAAqB,aAAcJ,EAAK,eAAgB,CAAE,YAAaH,CAAS,CAAC,EAAG,QAASM,EAAa,SAAUH,EAAK,QAAQ,CAAE,CAAC,CAAC,CAAE,CAAC,CACvY,CAJSN,EAAA2C,GAAA,yBAKT,SAASC,GAAqB1C,EAAO,CACjC,GAAM,CAAE,KAAAI,EAAM,uBAAAuC,EAAwB,cAAAC,EAAe,oBAAAC,EAAqB,gBAAA3C,EAAiB,cAAAgB,EAAe,YAAAD,EAAa,SAAAhB,EAAU,WAAA8B,EAAY,SAAAC,EAAU,kBAAAC,EAAmB,UAAAC,EAAW,SAAAC,EAAU,YAAA5B,CAAa,EAAIP,EAC1M8C,EAA4B7C,GAAYC,EAC9C,GAAI,CAACA,GAAmBgB,EACpB,OAAO,KAEX,IAAME,EAAsBhB,EAAda,EAAmB,SAAiB,WAAT,EACzC,SAAS8B,GAAwB,CAC7B,MAAI,CAAC9B,GAAe,CAAC6B,GAA6B,CAACD,EAC3CF,EACQ/B,EAAKkB,GAAiB,CAAE,WAAYC,EAAY,SAAUC,EAAU,kBAAmBC,EAAmB,UAAWC,EAAW,SAAUC,EAAU,KAAM/B,CAAK,CAAC,EAEpKQ,EAAK4B,GAAiB,CAAE,KAAMpC,EAAM,SAAU4B,EAAU,WAAYD,CAAW,CAAC,EAErF,IACX,CARS,OAAAjC,EAAAiD,EAAA,yBASDnC,EAAM,MAAO,CAAE,UAAW,yBAA0B,MAAOQ,EAAO,SAAU,CAAEH,EAAyC,KAA3BL,EAAKY,GAAgB,CAAC,CAAC,EAAUZ,EAAM,MAAO,CAAE,UAAW,wBAAyB,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,+BAAgC,SAAU+B,GAA0BC,IAAkB,EACxR,GAAGxB,CAAK,KAAKwB,CAAa,IAC1BxB,CAAM,CAAC,EAAG2B,EAAsB,EAAGD,EAA6BlC,EAAK6B,GAAuB,CAAE,KAAMrC,EAAM,SAAUH,EAAU,YAAaM,CAAY,CAAC,EAAK,IAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CACtM,CAnBST,EAAA4C,GAAA,wBAoBT,SAASM,GAAoBhD,EAAO,CAChC,GAAM,CAAE,KAAAI,CAAK,EAAIJ,EACjB,OAAQY,EAAK,MAAO,CAAE,UAAW,yBAE7B,KAAM,SAAU,MAAOR,EAAK,UAAU,EAAG,SAAUQ,EAAK,MAAO,CAAE,UAAW,wBAAyB,SAAUA,EAAM,MAAO,CAAE,UAAW,+BAAgC,SAAU,CAACA,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,6CAA8C,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,qEAAsE,CAAC,CAAE,CAAC,EAAGR,EAAK,UAAU,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CACje,CALSN,EAAAkD,GAAA,uBAMT,SAASC,GAAiBjD,EAAO,CAC7B,GAAM,CAAE,MAAAkD,EAAO,KAAA9C,EAAM,SAAA4B,EAAU,WAAAD,CAAW,EAAI/B,EAC9C,SAASmD,GAAoB,CACzB,IAAMC,EAAe,GAAGhD,EAAK,cAAc,CAAC;AAAA;AAAA,GAAS8C,CAAK,GAC1D,MAAME,CAAY,CACtB,CAHS,OAAAtD,EAAAqD,EAAA,qBAIDvC,EAAM,MAAO,CAAE,UAAW,yBAA0B,MAAOR,EAAK,cAAc,EAAG,SAAU,CAACQ,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,6CAA8C,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,+GAAgH,CAAC,CAAE,CAAC,EAAGA,EAAM,MAAO,CAAE,UAAW,wBAAyB,SAAU,CAACA,EAAM,MAAO,CAAE,UAAW,+BAAgC,SAAU,CAACR,EAAK,cAAc,EAAGQ,EAAK,SAAU,CAAE,UAAW,sCAAuC,aAAcR,EAAK,kBAAkB,EAAG,yBAA0B,YAAa,qBAAsB,SAAU,QAAS+C,EAAmB,KAAM,SAAU,SAAU,GAAI,CAAC,CAAC,CAAE,CAAC,EAAGvC,EAAK4B,GAAiB,CAAE,KAAMpC,EAAM,SAAU4B,EAAU,WAAYD,CAAW,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CACn4B,CAPSjC,EAAAmD,GAAA,oBCjHM,SAARI,GAA6CC,EAAO,CACvD,IAAMC,EAAS,CAAC,EACZC,EAAO,gBACPC,EACJ,OAAW,CAAE,SAAAC,CAAS,IAAK,OAAO,OAAOJ,CAAK,EAAG,CAC7C,GAAM,CAAE,WAAAK,EAAY,YAAAC,CAAY,EAAIF,EAGhCD,GAAW,OAASE,GAAcC,KAEjC,CAAE,KAAAJ,EAAM,QAAAC,CAAQ,EAAIE,GAAcC,GAEnCD,GAAY,OAAS,eACrBJ,EAAO,KAAKI,EAAW,KAAK,EAC5BC,GAAa,OAAS,eACtBL,EAAO,KAAKK,EAAY,KAAK,CACrC,CACA,IAAMC,EAAQN,EAAO,OAAO,CAACO,EAAOC,IACzBD,EAAQC,EAAgBR,EAAO,OACvC,CAAC,EACJ,MAAO,CACH,KAAAC,EACA,QAAAC,EACA,MAAAI,CACJ,CACJ,CAzBwBG,EAAAX,GAAA,+BFKxB,GAAM,CAAE,YAAAY,GAAa,cAAAC,GAAe,oBAAAC,GAAqB,gBAAAC,GAAiB,qBAAAC,GAAsB,eAAAC,EAAgB,EAAIC,GACrG,SAARC,GAA6B,CAAE,SAAAC,EAAU,eAAAC,EAAgB,mBAAAC,EAAoB,YAAAC,EAAa,iBAAAC,EAAkB,MAAAC,EAAO,iBAAAC,EAAmB,OAAW,sBAAAC,EAAwB,GAAO,iBAAAC,EAAmB,GAAO,gBAAAC,EAAkB,GAAO,eAAAC,EAAgB,YAAAC,EAAa,cAAAC,EAAe,MAAAC,EAAO,uBAAAC,EAAwB,gBAAAC,EAAkB,GAAO,YAAAC,EAAa,kBAAAC,EAAoB,OAAW,gBAAAC,EAAiB,KAAAC,EAAM,YAAAC,EAAa,KAAAC,EAAM,cAAAC,EAAe,oBAAAC,EAAsB,OAAW,WAAAC,EAAY,SAAAC,EAAU,UAAAC,GAAW,SAAAC,GAAU,kBAAAC,EAAmB,EAAG,CACjhB,SAASC,IAAmB,CACxB,OAAQlB,EAAa,CACjB,KAAKf,GACL,KAAKF,GAAqB,CACtB,IAAMoC,GAAWC,GAA4BlB,CAAK,EAClD,OAAIiB,GAAS,OAAS,cACXA,GAAS,MAAQ,IAErBlB,CACX,CACA,KAAKpB,GACD,OAAO,KAEX,KAAKG,GACD,OAAKmB,EAGEF,EAFI,KAIf,QACI,OAAOA,CACf,CACJ,CAtBSoB,EAAAH,GAAA,oBAuBT,SAASI,IAAqB,CAC1B,OAAQtB,EAAa,CACjB,KAAKf,GACL,KAAKF,GAAqB,CACtB,GAAM,CAAE,KAAAwC,EAAK,EAAIH,GAA4BlB,CAAK,EAClD,OAAOqB,KAAS,eACpB,CACA,KAAKvC,GACD,MAAK,CAAAmB,EAKT,QACI,MAAO,EACf,CACJ,CAhBSkB,EAAAC,GAAA,sBAiBT,IAAME,GAAgBN,GAAiB,EACjCO,EAAQD,IAAiB,IACzBE,EAAgB,CAAChC,GACnBL,IACE,CAACE,GAAsB,CAACC,GAAgBO,IAC1CT,GACA,CAACK,EACCgC,EAAgB,CAAC9B,GACnBG,IAAgBlB,IAChBkB,IAAgBd,GACd0C,EAAqBnC,GACvB,CAACG,GACDI,IAAgBhB,GACd6C,EAAenC,GAAS,CAACiB,GAAiB,CAACb,EAC3CgC,EAAcxB,GAAqBN,IAAgBd,GACnD6C,KAAqB,GAAAC,SAAW,0BAA2B,CAC7D,mBAAoBV,GAAmB,CAC3C,CAAC,EACKW,KAAsB,GAAAD,SAAW,iBAAkB,MAAMhC,CAAW,GAAI,CAAE,aAAcK,CAAY,CAAC,EACrG6B,GAAsB,IAAM,CAC9B,OAAQlC,EAAa,CACjB,KAAKjB,GACL,KAAKE,GACD,OAAQkD,EAAKC,GAAuB,CAAE,SAAUhB,GAA4BlB,CAAK,CAAE,CAAC,EACxF,KAAKhB,GACD,OAAOiD,EAAKE,GAAqB,CAAE,KAAM7B,CAAK,CAAC,EACnD,KAAK3B,GACD,OAAQsD,EAAKG,GAAkB,CAAE,MAAO5C,EAAO,KAAMc,EAAM,WAAYK,EAAY,SAAUC,CAAS,CAAC,EAC3G,KAAK9B,GACD,OAAQmD,EAAKI,GAAsB,CAAE,KAAM/B,EAAM,uBAAwBL,EAAwB,cAAeF,EAAe,oBAAqBW,EAAqB,gBAAiBL,EAAiB,cAAeI,EAAe,YAAanB,EAAa,SAAUH,EAAU,WAAYwB,EAAY,SAAUC,EAAU,kBAAmBG,GAAmB,UAAWF,GAAW,SAAUC,GAAU,YAAaP,CAAY,CAAC,EACjb,QACI,OAAO,IACf,CACJ,GAAG,EAQH,MAF6B,EALJiB,GACrBG,GACAD,GACAD,GACAG,IAC8C,CAACI,GACTlC,IAAgBd,IAAkBkB,EAEjE,KAEH+B,EAAM,MAAO,CAAE,UAAWF,EAAqB,SAAU,CAACE,EAAK,MAAO,CAAE,UAAWJ,EAAoB,MAAO,CAAE,MAAO,GAAGN,CAAK,GAAI,EAAG,KAAM,cAAe,aAAc,GAAGA,CAAK,IAAK,iBAAkB,GAAGA,CAAK,IAAK,gBAAiB,EAAG,gBAAiB,IAAK,gBAAiBD,EAAc,CAAC,EAAGU,EAAoBC,EAAM,MAAO,CAAE,UAAW,yBAA0B,SAAU,CAACT,EAAiBS,EAAKK,GAAW,CAAE,SAAUnD,EAAU,gBAAiBkB,EAAiB,eAAgBR,EAAgB,KAAMS,EAAM,YAAaH,EAAa,YAAaI,EAAa,YAAaT,CAAY,CAAC,EAAK,KAAM6B,EAAeM,EAAKM,GAAU,CAAE,KAAMjC,EAAM,KAAME,CAAK,CAAC,EAAI,KAAMkB,EAAsBO,EAAKO,GAAmB,CAAE,YAAalD,EAAa,KAAMgB,EAAM,cAAeG,EAAe,iBAAkBlB,EAAkB,KAAMiB,CAAK,CAAC,EAAK,KAAMiB,EAAgBQ,EAAKQ,GAAW,CAAE,KAAMnC,EAAM,KAAME,CAAK,CAAC,EAAI,KAAMoB,EAAeK,EAAKS,GAAS,CAAE,KAAMpC,EAAM,kBAAmBF,CAAkB,CAAC,EAAK,IAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CACr/B,CAtFwBe,EAAAjC,GAAA,eGDxB,IAAMyD,GAAsB,IACtBC,GAAoB,IAC1B,SAASC,GAAkBC,EAAOC,EAAeC,EAAgBC,EAAO,CACpE,GAAIH,EACA,OAAOI,GAAgB,YAE3B,GAAIH,EACA,OAAOG,GAAgB,eAE3B,GAAIF,EACA,OAAOE,GAAgB,cAE3B,IAAIC,EAAQD,GAAgB,cACtBE,EAAU,OAAO,KAAKH,CAAK,EACjC,QAASI,EAAI,EAAGA,EAAID,EAAQ,OAAQC,IAAK,CACrC,GAAM,CAAE,SAAAC,CAAS,EAAIL,EAAMG,EAAQC,CAAC,CAAC,EAErC,GAAIC,EAAS,eAAiB,CAACA,EAAS,eACpC,OAAOJ,GAAgB,gBAIvBI,EAAS,aACTH,EAAQD,GAAgB,qBAIxBI,EAAS,aAAeH,IAAUD,GAAgB,sBAClDC,EAAQD,GAAgB,qBAEhC,CACA,OAAOC,CACX,CA9BSI,EAAAV,GAAA,qBA+BT,IAAqBW,GAArB,cAAuCC,EAAU,CAtCjD,MAsCiD,CAAAF,EAAA,kBAC7CG,GACAC,GACAC,GACAC,GACA,mBAAoB,CAEhB,KAAKH,GAAkB,YAAY,IAAI,EACvC,KAAKC,GAAyB,KAAK,MAAM,KACpC,SAAS,EACT,OAAO,CAACG,EAAIC,IAASD,GAAMC,EAAK,SAAS,eAAiB,GAAI,CAAC,EAEpE,KAAK,MAAM,KAAK,GAAG,SAAU,KAAKC,EAAc,CACpD,CACA,sBAAuB,CACnB,KAAK,MAAM,KAAK,IAAI,SAAU,KAAKA,EAAc,CACrD,CACAA,GAAiBT,EAAA,IAAM,CACnB,GAAM,CAAE,eAAAP,CAAe,EAAI,KAAK,MAAM,KAAK,SAAS,EAGpD,GAFA,KAAKY,GAAiB,KACtB,KAAKC,GAAe,KAChBb,EAAgB,CAChB,KAAKW,GAAyB,OAAO,OAAOX,EAAe,KAAK,EAAE,OAAO,CAACc,EAAI,CAAE,SAAAR,CAAS,IAAMQ,GAAMR,EAAS,eAAiB,GAAI,CAAC,EAGpI,MACJ,CACA,KAAKI,GAAkB,YAAY,IAAI,EACvC,KAAKC,GAAyB,CAClC,EAZiB,kBAajBM,GAAkBC,EAAY,CAC1B,GAAIA,EAAW,OAAS,MAAQA,EAAW,QAAU,EACjD,OAAO,KAEX,IAAMC,EAAYD,EAAW,MAAQA,EAAW,SAChD,GAAIC,GAAa,EACb,OAAO,KAGX,KAAKT,KAAoB,YAAY,IAAI,EACzC,IAAMU,EAAK,YAAY,IAAI,EAAI,KAAKV,GACpC,GAAIU,IAAO,EACP,OAAO,KAAK,OAAO,KAAKP,IAAgB,GAAK,GAAG,EAAI,GAGxD,GAAI,KAAKF,IAA0B,KAC/B,YAAKA,GAAyBO,EAAW,SAClC,KAEX,IAAMG,EAA6BH,EAAW,SAAW,KAAKP,GAI9D,GAHA,KAAKA,GAAyBO,EAAW,SAGrCG,GAA8B,EAC9B,OAAO,KAAK,OAAO,KAAKR,IAAgB,GAAK,GAAG,EAAI,GAExD,IAAMS,EAAeD,EAA6BD,EAElD,GAAI,CAAC,OAAO,SAASE,CAAY,GAAKA,GAAgB,EAClD,OAAO,KAEX,IAAMC,EAAgB,KAAKX,IAAkB,KACvCU,EACAE,GAAUF,EAAc,KAAKV,GAAgBjB,GAAqByB,CAAE,EAE1E,GAAI,CAAC,OAAO,SAASG,CAAa,GAAKA,GAAiB,EACpD,OAAO,KAEX,KAAKX,GAAiBW,EACtB,IAAME,EAAaN,EAAYI,EAE/B,GAAI,CAAC,OAAO,SAASE,CAAU,GAAKA,EAAa,EAC7C,OAAO,KAEX,IAAMC,EAAqB,KAAK,KAAK,KAAKb,IAAgB,GAAKO,EAAI,CAAC,EAC9DO,EAAc,KAAKd,IAAgB,KACnCY,EACAD,GAAUC,EAAYC,EAAoB9B,GAAmBwB,CAAE,EAErE,MAAI,CAAC,OAAO,SAASO,CAAW,GAAKA,EAAc,EACxC,MAEX,KAAKd,GAAec,EACpB,KAAKjB,GAAkB,YAAY,IAAI,EAChC,KAAK,MAAMiB,EAAc,GAAG,EAAI,GAC3C,CACA,YAAcpB,EAAA,IAAM,CAChB,GAAM,CAAE,eAAAP,CAAe,EAAI,KAAK,MAAM,KAAK,SAAS,EAChDA,EACA,KAAK,MAAM,KAAK,KAAK,mBAAmB,EAGxC,KAAK,MAAM,KAAK,OAAO,EAAE,OAAO,IAAM,CAEtC,EAAE,CAEV,EAVc,eAWd,QAAS,CACL,GAAM,CAAE,aAAA4B,EAAc,MAAA3B,EAAO,eAAA4B,EAAgB,cAAAC,EAAe,MAAAhC,EAAO,eAAAE,CAAgB,EAAI,KAAK,MAAM,KAAK,SAAS,EAC1G,CAAE,SAAA+B,EAAU,aAAAC,EAAc,cAAAC,EAAe,gBAAAC,EAAiB,cAAAnC,EAAe,YAAAoC,EAAa,mBAAAC,EAAoB,YAAAC,CAAa,EAAI,KAAK,MAAM,KAAK,yBAAyB,EACpKC,EAAsBtC,EAAiB,OAAO,OAAOC,CAAK,EAAI8B,EAC9DQ,EAAmB,CAAC,CAACX,EAAa,iBAClCY,EAAyBZ,EAAa,iBAAmB,GAC3Da,EAAY,KACZC,EAAoB,EAEpBV,EAAa,MAAOW,GAAMA,EAAE,SAAS,YAAc,MAAQA,EAAE,SAAS,aAAe,CAAC,GACtFF,EAAY,EACZT,EAAa,QAASjB,GAAS,CAC3B0B,GAAa1B,EAAK,SAAS,YAAc,EACzC2B,GAAqB3B,EAAK,SAAS,eAAiB,CACxD,CAAC,GAIDiB,EAAa,QAASjB,GAAS,CAC3B2B,GAAqB3B,EAAK,SAAS,eAAiB,CACxD,CAAC,EAEL,IAAM6B,EAAW,KAAK3B,GAAkB,CACpC,SAAUyB,EACV,MAAOD,CACX,CAAC,EACD,OAAQI,EAAKC,GAAa,CAAE,MAAOhD,EAAO,YAAaD,GAAkBC,EAAOC,EAAeC,EAAgBC,GAAS,CAAC,CAAC,EAAG,eAAgB4B,EAAgB,cAAeC,EAAe,UAAWW,EAAW,kBAAmBC,EAAmB,cAAe3C,EAAe,YAAaoC,EAAa,gBAAiBD,EAAiB,mBAAoBE,EAAoB,YAAaC,EAAa,eAAgBrC,EAAgB,SAAUiC,EAAc,OAAQ,SAAUK,EAAoB,OAAQ,WAAYN,EAAa,OAAQ,SAAUY,EAAU,MAAO3C,EAAO,KAAM,KAAK,MAAM,KAAM,KAAM,KAAK,MAAM,KAAM,YAAa,KAAK,YAAa,kBAAmB,KAAK,MAAM,kBAAmB,iBAAkBsC,EAAkB,uBAAwBC,EAAwB,oBAAqB,KAAK,MAAM,oBAAqB,iBAAkB,KAAK,MAAM,iBAAkB,gBAAiB,KAAK,MAAM,gBAAiB,sBAAuB,KAAK,MAAM,sBAAuB,iBAAkB,KAAK,MAAM,iBAAkB,gBAAiB,KAAK,MAAM,eAAgB,CAAC,CACxjC,CACJ,E9BpJA,IAAMO,GAAW,IACXC,GAAW,IACXC,GAAW,IACXC,GAAY,IACH,SAARC,GAA2BC,EAAO,CACrC,IAAMC,EAAYD,EAAM,iBAAmB,EACrCE,EAAeF,EAAM,iBAAmB,EACxCG,EAAWH,EAAM,eAAiBH,GAClCO,EAAiBJ,EAAM,gBAAkBF,GACzCO,KAAqB,GAAAC,SAAW,CAClC,iBAAkB,GAClB,6BAA8BN,EAAM,SACpC,mCAAoCA,EAAM,iBAC1C,4BAA6BA,EAAM,UACnC,iCAAkCA,EAAM,eACxC,wBAAyB,CAACA,EAAM,OAChC,gBAAiBA,EAAM,eAAiBH,GACxC,gBAAiBG,EAAM,eAAiBJ,GACxC,gBAAiBI,EAAM,eAAiBL,GACxC,uBAAwBK,EAAM,gBAAkBF,GAIhD,yCAA0CE,EAAM,kBAChD,qCAAsCA,EAAM,2BAE5C,6BAA8BA,EAAM,sBAAwBE,GAAgBE,CAChF,CAAC,EAEGG,EAAc,EACdP,EAAM,eAAiBL,GACvBY,EAAc,EAETP,EAAM,eAAiBJ,GAC5BW,EAAc,EAETP,EAAM,eAAiBH,KAC5BU,EAAc,GAElB,IAAMC,EAAeR,EAAM,mBAAqB,CAACC,EAC3CQ,EAA2BT,EAAM,eACjC,OAAO,KAAKA,EAAM,eAAe,KAAK,EAAE,OACxC,KACAU,EAAiBV,EAAM,MACvB,OAAO,KAAKA,EAAM,KAAK,EAAE,OAAQW,GAAWX,EAAM,MAAMW,CAAM,EAAE,OAAO,EACpE,OACH,EACAC,EAAqBC,EAAA,IACnBH,EAAiB,EACVV,EAAM,KAAK,kBAAmB,CACjC,YAAaU,CACjB,CAAC,EAEEV,EAAM,KAAK,mBAAmB,EANd,sBAqB3B,OAXAc,EAAM,MAAO,CAAE,UAAWT,EAAoB,kBAAmBL,EAAM,MAAO,0BAA2BA,EAAM,UAAU,OAAQ,gCAAiC,CAACA,EAAM,mBAAqBe,GAAoB,EAAG,cAAef,EAAM,OAAS,QAAUA,EAAM,SAAU,gBAAiBA,EAAM,SAAU,aAAeA,EAAM,OAEzTA,EAAM,KAAK,gBAAgB,EAD3BA,EAAM,KAAK,sBAAsB,EACH,QAASA,EAAM,YAAa,WAAYA,EAAM,eAAgB,YAAaA,EAAM,gBAAiB,OAAQA,EAAM,WAAY,SAAU,CAACc,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,yBAA0B,SAAU,GAAI,QAASd,EAAM,kBAAmB,CAAC,EAAGc,EAAM,MAAO,CAAE,UAAW,uBAAwB,KAAMd,EAAM,OAAS,OAAY,SAAU,MAAO,CACjY,MAAOA,EAAM,QAAUA,EAAM,MAAQA,EAAM,MAAQ,GACnD,OAAQA,EAAM,QAAUA,EAAM,OAASA,EAAM,OAAS,EAC1D,EAAG,SAAU,CAAEA,EAAM,OAA2Q,KAAjQc,EAAK,SAAU,CAAE,UAAW,oCAAqC,KAAM,SAAU,aAAcd,EAAM,KAAK,YAAY,EAAG,MAAOA,EAAM,KAAK,YAAY,EAAG,QAASA,EAAM,WAAY,SAAUc,EAAK,OAAQ,CAAE,cAAe,OAAQ,SAAU,MAAS,CAAC,CAAE,CAAC,EAAWA,EAAM,MAAO,CAAE,UAAW,2BAA4B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,mCAAoC,SAAUd,EAAM,KAAK,UAAU,CAAE,CAAC,EAAGQ,GAAgBM,EAAKE,GAAa,CAAE,GAAGhB,CAAM,CAAC,EAAGS,GAA4B,MAAQA,EAA2B,GAAMK,EAAM,MAAO,CAAE,UAAW,4BAA6B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,iCAAkC,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,UAAW,kBAAmB,KAAM,OAAQ,SAAU,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,uGAAwG,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,KAAM,OAAQ,EAAG,qBAAsB,CAAC,EAAGA,EAAK,SAAU,CAAE,KAAM,OAAQ,GAAI,KAAM,GAAI,KAAM,EAAG,GAAI,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAAGA,EAAK,SAAU,CAAE,UAAW,kCAAmC,SAAUd,EAAM,KAAK,iBAAiB,CAAE,CAAC,EAAGc,EAAK,MAAO,CAAE,UAAW,iCAAkC,SAAUF,EAAmB,CAAE,CAAC,CAAC,CAAE,CAAC,EAAIJ,EAAgBM,EAAKG,GAAU,CAAE,GAAIjB,EAAM,GAAI,KAAMA,EAAM,KAAM,KAAMA,EAAM,KAAM,MAAOA,EAAM,MAAO,iBAAkBA,EAAM,iBAAkB,gBAAiBA,EAAM,gBAAiB,sBAAuBA,EAAM,sBAAuB,iBAAkBA,EAAM,iBAAkB,2BAA4BA,EAAM,2BAA4B,8BAA+BA,EAAM,8BAA+B,WAAYA,EAAM,WAAY,eAAgBA,EAAM,eAAgB,uBAAwBA,EAAM,uBAAwB,sBAAuBA,EAAM,sBAAuB,eAAgBA,EAAM,eAAgB,uBAAwBA,EAAM,uBAAwB,eAAgBA,EAAM,eAAgB,YAAaA,EAAM,YAAa,oBAAqBA,EAAM,oBAAqB,aAAcE,EAAc,YAAaK,EAAa,eAAgBP,EAAM,eAAgB,gBAAiBA,EAAM,eAAgB,CAAC,EAAMc,EAAKI,GAAU,CAAE,KAAMlB,EAAM,KAAM,UAAWA,EAAM,UAAW,UAAWA,EAAM,UAAW,kBAAmBA,EAAM,kBAAmB,iBAAkBA,EAAM,iBAAkB,iBAAkBA,EAAM,iBAAkB,4BAA6BA,EAAM,4BAA6B,4BAA6BA,EAAM,4BAA6B,uBAAwBA,EAAM,uBAAwB,UAAWA,EAAM,UAAW,kBAAmBA,EAAM,kBAAmB,kBAAmBA,EAAM,kBAAmB,yBAA0BA,EAAM,yBAA0B,KAAMA,EAAM,KAAM,4BAA6BA,EAAM,2BAA4B,CAAC,EAAIc,EAAKK,GAAO,CAAE,SAAUnB,EAAM,kBAAqBc,EAAKM,GAAe,CAAE,GAAGpB,EAAO,SAAUG,CAAS,EAAG,UAAU,EAAK,IAAK,CAAC,EAAGW,EAAKK,GAAO,CAAE,SAAUnB,EAAM,YAAcc,EAAKO,GAAU,CAAE,GAAGrB,CAAM,EAAG,UAAU,EAAI,IAAK,CAAC,EAAGc,EAAKK,GAAO,CAAE,SAAUnB,EAAM,kBAAqBc,EAAKQ,GAAoB,CAAE,GAAGtB,CAAM,EAAG,QAAQ,EAAK,IAAK,CAAC,EAAGc,EAAKK,GAAO,CAAE,SAAUnB,EAAM,eAAkBc,EAAKS,GAAa,CAAE,GAAGvB,CAAM,EAAG,QAAQ,EAAK,IAAK,CAAC,EAAGc,EAAM,MAAO,CAAE,UAAW,oCAAqC,SAAU,CAAC,CAACd,EAAM,iBAAmBc,EAAKU,GAAU,CAAE,KAAMxB,EAAM,IAAK,CAAC,EAAG,CAACA,EAAM,kBAAqBc,EAAKW,GAAW,CAAE,KAAMzB,EAAM,KAAM,KAAMA,EAAM,KAAM,oBAAqBA,EAAM,oBAAqB,iBAAkBA,EAAM,iBAAkB,gBAAiBA,EAAM,gBAAiB,sBAAuBA,EAAM,sBAAuB,iBAAkBA,EAAM,iBAAkB,gBAAiBA,EAAM,wBAAyB,kBAAmBA,EAAM,iBAAkB,CAAC,EAAI,CAACA,EAAM,iBAAmBc,EAAKU,GAAU,CAAE,KAAMxB,EAAM,IAAK,CAAC,EAAGA,EAAM,mBAAmB,IAAK0B,GAIh6H1B,EAAM,KAAK,UAAU0B,EAAO,EAAE,EAAE,OAAO1B,EAAM,KAAK,CAC5D,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAErD,CAjEwBa,EAAAd,GAAA,a+BnBxB,IAAO4B,GAAQ,CACX,QAAS,CAEL,WAAY,cAEZ,aAAc,iBACd,gBAAiB,oBAEjB,WAAY,sBAEZ,qBAAsB,gDAEtB,eAAgB,iBAEhB,2BAA4B,4BAG5B,4BAA6B,qBAE7B,SAAU,YACV,KAAM,OAEN,WAAY,cAEZ,SAAU,YACV,UAAW,aAEX,QAAS,kBAET,MAAO,QAGP,kBAAmB,sBACnB,YAAa,eAEb,SAAU,YACV,SAAU,uBAGV,eAAgB,kBAChB,aAAc,gBAEd,aAAc,gBAEd,YAAa,eAEb,YAAa,eAEb,aAAc,gBAEd,eAAgB,CACZ,EAAG,+BACH,EAAG,+BACP,EACA,gBAAiB,CACb,EAAG,gCACH,EAAG,gCACP,EACA,iBAAkB,CACd,EAAG,iCACH,EAAG,iCACP,EAEA,UAAW,qBACX,QAAS,WACT,qBAAsB,oBACtB,KAAM,OACN,OAAQ,SACR,eAAgB,oCAChB,iBAAkB,sCAClB,cAAe,sDACf,qBAAsB,kDACtB,uBAAwB,oDACxB,oBAAqB,oEACrB,YAAa,qBACb,YAAa,eACb,cAAe,iBACf,gBAAiB,CACb,EAAG,gFACH,EAAG,+FACP,EACA,kBAAmB,wDACnB,gBAAiB,mBACjB,SAAU,YACV,0BAA2B,CACvB,EAAG,0CACH,EAAG,0CACP,EAEA,eAAgB,eAChB,eAAgB,eAGhB,UAAW,YAEX,SAAU,WAEV,aAAc,gBAEd,OAAQ,SAER,MAAO,QAEP,MAAO,QAEP,OAAQ,SAER,KAAM,OAEN,qBAAsB,CAClB,EAAG,8CACH,EAAG,8CACP,EAEA,oBAAqB,0BACrB,sBAAuB,yBAEvB,UAAW,eAEX,aAAc,CACV,EAAG,6BACH,EAAG,6BACP,EAGA,gBAAiB,CACb,EAAG,8BACH,EAAG,8BACP,EACA,OAAQ,SACR,gBAAiB,CACb,EAAG,iCACH,EAAG,iCACP,EACA,iBAAkB,oBACtB,CACJ,ECtIA,IAAAC,GAAqB,WCCN,SAARC,GAAoCC,EAAaC,EAAmB,CACvE,GAAIA,EAAmB,CACnB,IAAMC,EAAYF,EAAY,cAAc,yBAAyBC,CAAiB,IAAI,EAE1F,GAAIC,EACA,OAAOA,CACf,CACA,OAAOF,CACX,CARwBG,EAAAJ,GAAA,sBDWT,SAARK,IAAoC,CACvC,IAAIC,EAAiC,GA+BrC,SAAO,GAAAC,SA9BYC,EAAA,CAACC,EAAaC,IAAsB,CACnD,IAAMC,EAAYC,GAAmBH,EAAaC,CAAiB,EAC7DG,EAAmBF,EAAU,SAAS,SAAS,aAAa,EAIlE,GAAIE,GAAoBP,EACpB,OACJ,IAAMQ,EAAmBH,EAAU,cAAc,6BAA6B,EAI1EE,GAAoB,CAACC,IAErBA,GACAA,EAAiB,MAAM,CAAE,cAAe,EAAK,CAAC,EAC9CR,EAAiC,KAGjBK,EAAU,cAAcI,EAAkB,GACjD,MAAM,CAAE,cAAe,EAAK,CAAC,EACtCT,EAAiC,IAEzC,EAvBmB,cA8BS,GAAG,CACnC,CAjCwBE,EAAAH,GAAA,oBEXxB,SAASW,GAAiBC,EAAOC,EAAO,CACpC,IAAMC,EAAOD,EAAM,CAAC,EAChBC,IACAA,EAAK,MAAM,EACXF,EAAM,eAAe,EAE7B,CANSG,EAAAJ,GAAA,oBAOT,SAASK,GAAgBJ,EAAOC,EAAO,CACnC,IAAMC,EAAOD,EAAMA,EAAM,OAAS,CAAC,EAC/BC,IACAA,EAAK,MAAM,EACXF,EAAM,eAAe,EAE7B,CANSG,EAAAC,GAAA,mBAaT,SAASC,GAAiBC,EAAiB,CACvC,OAAOA,EAAgB,SAAS,SAAS,aAAa,CAC1D,CAFSH,EAAAE,GAAA,oBAGT,SAASE,GAAUP,EAAOQ,EAAmBC,EAAa,CACtD,IAAMH,EAAkBI,GAAmBD,EAAaD,CAAiB,EACnEG,EAAiBC,GAAQN,EAAgB,iBAAiBO,EAAkB,CAAC,EAC7EC,EAAmBH,EAAe,QAAQ,SAAS,aAAa,EAKjEN,GAAiBC,CAAe,EAI5BN,EAAM,UAAYc,IAAqB,EAC5CV,GAAgBJ,EAAOW,CAAc,EAGhC,CAACX,EAAM,UACZc,IAAqBH,EAAe,OAAS,GAC7CZ,GAAiBC,EAAOW,CAAc,EATtCZ,GAAiBC,EAAOW,CAAc,CAW9C,CApBSR,EAAAI,GAAA,aAyBF,SAASQ,GAAUC,EAAOC,EAAmBC,EAAa,CAEzDD,IAAsB,MAOtBE,GAAUH,EAAOC,EAAmBC,CAAW,CAEvD,CAXgBE,EAAAL,GAAA,aCzChB,IAAMM,GAAU,EACVC,GAAU,GAChB,SAASC,IAAgB,CACrB,IAAMC,EAAI,CAAC,EACX,OAAAA,EAAE,QAAU,IAAI,QAAQ,CAACC,EAASC,IAAW,CACzCF,EAAE,QAAUC,EACZD,EAAE,OAASE,CACf,CAAC,EACMF,CACX,CAPSG,EAAAJ,GAAA,iBAQT,IAAMK,GAAiB,CACnB,OAAQ,OACR,WAAY,CAAC,EACb,eAAgB,IAChB,cAAe,aACf,8BAA+B,GAC/B,kBAAAC,GACA,2BAA4B,GAC5B,oBAAqB,GACrB,iBAAkB,GAClB,iBAAkB,GAClB,gBAAiB,GACjB,sBAAuB,GACvB,wBAAyB,GACzB,KAAM,KACN,qBAAsB,GACtB,iBAAkB,GAClB,gBAAiB,GACjB,0BAA2B,GAC3B,yBAA0B,QAC1B,4BAA6B,GAC7B,kBAAmB,GACnB,8BAA+B,GAC/B,4BAA6B,GAC7B,4BAA6B,GAC7B,MAAO,QACP,SAAU,KACV,SAAU,GACV,kBAAmB,GACnB,uBAAwB,GACxB,YAAaF,EAAA,IAAM,CAAE,EAAR,eACb,WAAYA,EAAA,IAAM,CAAE,EAAR,cACZ,OAAQA,EAAA,IAAM,CAAE,EAAR,UACR,QAAS,CAAC,EAIV,kBAAmB,OACnB,oBAAqB,KAErB,OAAQ,GACR,iBAAkB,GAClB,uBAAwB,GACxB,iBAAkB,GAClB,yBAA0B,GAC1B,+BAAgC,GAChC,QAAS,KAET,MAAO,IACP,OAAQ,GACZ,EAIqBG,GAArB,cAAuCC,EAAS,CA1EhD,MA0EgD,CAAAJ,EAAA,kBAC5C,OAAO,QAAUK,GAAY,QAC7BC,GACA,UAAY,kBAAkBC,GAAO,CAAC,GACtC,WAAaC,GAAiB,EAC9B,wBAA0B,GAC1B,oBACA,oBACA,mBACA,eACA,mBAEA,yCACA,YAAYC,EAAMC,EAAM,CACpB,IAAMC,EAAWD,GAAM,UAAY,KACnC,MAAMD,EAAM,CAAE,GAAGR,GAAgB,GAAGS,EAAM,SAAAC,CAAS,CAAC,EACpD,KAAK,GAAK,KAAK,KAAK,IAAM,YAC1B,KAAK,MAAQ,YACb,KAAK,KAAO,eACZ,KAAK,cAAgBC,GAEjB,KAAK,KAAK,oBAAsB,SAGhC,KAAK,KAAK,kBAAoB,IAAM,CAChC,KAAK,KAAK,MAAM,EAChB,KAAK,kBAAkB,CAC3B,GAEJ,KAAK,KAAK,sBAAwB,IAAM,KAAK,WAAW,EACxD,KAAK,SAAS,CAClB,CACA,aAAeZ,EAACa,GAAW,CAGvB,IAAMC,EAFc,KAAK,eAAe,EAET,QAAQ,OAAQC,GAAWA,EAAO,KAAOF,EAAO,EAAE,EACjF,KAAK,eAAe,CAChB,QAASC,CACb,CAAC,CACL,EAPe,gBAQf,UAAYd,EAACa,GAAW,CACpB,IAAMG,EAAiBH,EAAO,IAAMA,EAAO,YAAY,KACjDI,EAAmBJ,EAAO,OAASG,EACnCE,EAAmBL,EAAO,KAChC,GAAIK,IAAqB,YACrBA,IAAqB,qBACrBA,IAAqB,SAErB,YAAK,KAAK,IADE,2FACO,OAAO,EACnB,KAEX,IAAMH,EAAS,CACX,GAAIC,EACJ,KAAMC,EACN,KAAMC,CACV,EAEMJ,EADQ,KAAK,eAAe,EACT,QAAQ,MAAM,EACvC,OAAAA,EAAW,KAAKC,CAAM,EACtB,KAAK,eAAe,CAChB,QAASD,CACb,CAAC,EACM,KAAK,EAChB,EAvBY,aAwBZ,cAAgBd,EAAA,IAAM,CAClB,IAAMmB,EAAQ,KAAK,eAAe,EAC5BC,EAAS,CACX,kBAAmB,OACnB,kBAAmB,GACnB,kBAAmB,KACnB,YAAa,KACb,eAAgB,EACpB,EACID,EAAM,oBAAsBC,EAAO,mBACnCD,EAAM,oBAAsBC,EAAO,mBACnCD,EAAM,iBAAmBC,EAAO,gBAChCD,EAAM,oBAAsBC,EAAO,oBAIvC,KAAK,eAAeA,CAAM,EAC1B,KAAK,KAAK,KAAK,wBAAyBD,EAAM,mBAAmB,EAAE,EACvE,EAlBgB,iBAmBhB,UAAYnB,EAACqB,GAAO,CAChB,GAAM,CAAE,QAAAC,CAAQ,EAAI,KAAK,eAAe,EAClCC,EAAoBD,EAAQ,KAAMP,GAC7BA,EAAO,OAAS,YAAcA,EAAO,KAAOM,CACtD,EACD,KAAK,eAAe,CAChB,kBAAAE,EACA,kBAAmB,aACvB,CAAC,EACD,KAAK,KAAK,KAAK,uBAAwBF,CAAE,CAC7C,EAVY,aAWZ,YAAcrB,EAACwB,GAAS,CACpB,GAAM,CAAE,QAAAF,CAAQ,EAAI,KAAK,eAAe,EAExC,OADgB,KAAKG,GAAYH,CAAO,EACzB,KAAMP,GAAW,KAAK,KAAK,UAAUA,EAAO,EAAE,EAAE,YAAYS,CAAI,CAAC,CACpF,EAJc,eAKd,eAAiBxB,EAACwB,GAAS,CACvB,GAAM,CAAE,QAAAF,CAAQ,EAAI,KAAK,eAAe,EAClCI,EAAU,KAAKD,GAAYH,CAAO,EACxC,KAAK,eAAe,CAChB,eAAgB,GAChB,YAAaE,EAAK,IAAM,KACxB,kBAAmB,YACvB,CAAC,EACDE,EAAQ,QAASC,GAAW,CAExB,KAAK,KAAK,UAAUA,EAAO,EAAE,EAAE,WAAWH,CAAI,CAClD,CAAC,CACL,EAZiB,kBAajB,gBAAkBxB,EAAA,IAAM,CACpB,GAAM,CAAE,WAAA4B,CAAW,EAAI,KAAK,eAAe,EACfA,GAAcA,EAAW,OAAS,EAE1D,KAAK,eAAe,CAChB,eAAgB,GAChB,kBAAmB,UACvB,CAAC,EAGD,KAAK,eAAe,CAChB,eAAgB,GAChB,YAAa,KACb,kBAAmB,UACvB,CAAC,CAET,EAhBkB,mBAiBlB,eAAiB5B,EAAA,IAAM,CACnB,GAAM,CAAE,QAAAsB,CAAQ,EAAI,KAAK,eAAe,EACxB,KAAKG,GAAYH,CAAO,EAChC,QAASK,GAAW,CAExB,KAAK,KAAK,UAAUA,EAAO,EAAE,EAAE,KAAK,CACxC,CAAC,EACD,KAAK,gBAAgB,CACzB,EARiB,kBASjB,UAAY3B,EAAA,IAAM,CACd,GAAM,CAAE,QAAA6B,EAAS,QAAA/B,CAAQ,EAAIF,GAAc,EAQ3C,GANA,KAAK,oBAAsB,OAAO,YAElC,KAAK,mBAAqB,SAAS,cAC/B,KAAK,KAAK,gCACV,SAAS,KAAK,UAAU,IAAI,wBAAwB,EAEpD,KAAK,KAAK,kBAAoB,KAAK,eAAe,EAAE,UAAW,CAC/D,IAAMkC,EAAU9B,EAAA,IAAM,CAClB,KAAK,eAAe,CAChB,SAAU,EACd,CAAC,EACD,KAAK,GAAG,oBAAoB,eAAgB8B,EAAS,EAAK,EAC1DhC,EAAQ,CACZ,EANgB,WAOhB,KAAK,GAAG,iBAAiB,eAAgBgC,EAAS,EAAK,CAC3D,MAEI,KAAK,eAAe,CAChB,SAAU,EACd,CAAC,EACDhC,EAAQ,EAEZ,OAAI,KAAK,KAAK,wBACV,KAAK,qBAAqB,EAG9B,SAAS,iBAAiB,UAAW,KAAK,oBAAoB,EAC9D,KAAK,KAAK,KAAK,sBAAsB,EAC9B+B,CACX,EAhCY,aAiCZ,WAAa7B,EAACU,GAAS,CAEnB,IAAMqB,EAAcrB,GAAM,aAAe,GACnC,CAAE,SAAAsB,EAAU,UAAAC,CAAU,EAAI,KAAK,eAAe,EACpD,GAAID,GAAYC,EAEZ,OAEJ,GAAM,CAAE,QAAAJ,EAAS,QAAA/B,CAAQ,EAAIF,GAAc,EAI3C,GAHI,KAAK,KAAK,gCACV,SAAS,KAAK,UAAU,OAAO,wBAAwB,EAEvD,KAAK,KAAK,iBAAkB,CAC5B,KAAK,eAAe,CAChB,UAAW,EACf,CAAC,EACD,IAAMkC,EAAU9B,EAAA,IAAM,CAClB,KAAK,eAAe,CAChB,SAAU,GACV,UAAW,EACf,CAAC,EACD,KAAK,WAAW,OAAO,EACvB,KAAK,mBAAmB,MAAM,EAC9B,KAAK,GAAG,oBAAoB,eAAgB8B,EAAS,EAAK,EAC1DhC,EAAQ,CACZ,EATgB,WAUhB,KAAK,GAAG,iBAAiB,eAAgBgC,EAAS,EAAK,CAC3D,MAEI,KAAK,eAAe,CAChB,SAAU,EACd,CAAC,EACD,KAAK,WAAW,OAAO,EACvB,KAAK,mBAAmB,MAAM,EAC9BhC,EAAQ,EAGZ,gBAAS,oBAAoB,UAAW,KAAK,oBAAoB,EAC7DiC,GACI,KAAK,KAAK,wBAEN,QAAQ,QAAQ,KAAK,SAAS,GAE9B,QAAQ,KAAK,EAIzB,KAAK,KAAK,KAAK,wBAAwB,EAChCF,CACX,EAjDa,cAkDb,YAAc7B,EAAA,IACH,CAAC,KAAK,eAAe,EAAE,UAAY,GADhC,eAGd,kBAAoBA,EAAA,IACZ,KAAK,KAAK,oBACH,KAAK,KAAK,oBAAoB,EAElC,KAAK,WAAW,EAJP,qBAMpB,sBAAwBA,EAACkC,GAAiB,CACtC,GAAM,CAAE,aAAAC,CAAa,EAAI,KAAK,KAAK,SAAS,EAC5C,KAAK,KAAK,SAAS,CACf,aAAc,CACV,GAAGA,EACH,SAAUD,CACd,CACJ,CAAC,CACL,EARwB,yBASxB,2BAA6BlC,EAACoC,GAAU,CACpC,IAAMC,EAAkBD,EAAM,QAC9B,KAAK,KAAK,IAAI,4BAA4BC,EAAkB,KAAO,KAAK,EAAE,EAC1E,KAAK,sBAAsBA,CAAe,CAC9C,EAJ6B,8BAK7B,eAAiBrC,EAAA,CAACsC,EAAMC,IAAW,CAC/B,IAAMf,EAAO,KAAK,KAAK,QAAQe,CAAM,EACjCD,EACA,KAAK,KAAK,KAAK,4BAA6Bd,CAAI,EAGhD,KAAK,KAAK,KAAK,+BAAgCA,CAAI,EAEvD,KAAK,eAAe,CAChB,YAAac,EAAOC,EAAS,KAC7B,kBAAmBD,EAAO,WAAa,IAC3C,CAAC,CACL,EAZiB,kBAajB,oBAAsBtC,EAACsC,GAAS,CAC5B,KAAK,eAAe,CAChB,kBAAmBA,EACnB,kBAAmBA,EAAO,WAAa,IAC3C,CAAC,CACL,EALsB,uBAMtB,SAAWtC,EAACwC,GAAU,CAClB,IAAMC,EAAcD,EAAM,IAAKhB,IAAU,CACrC,OAAQ,KAAK,GACb,KAAMA,EAAK,KACX,KAAMA,EAAK,KACX,KAAMA,EACN,KAAM,CAGF,aAAcA,EAAK,cAAgBA,EAAK,oBAAsB,IAClE,CACJ,EAAE,EACF,GAAI,CACA,KAAK,KAAK,SAASiB,CAAW,CAClC,OACOC,EAAK,CACR,KAAK,KAAK,IAAIA,CAAG,CACrB,CACJ,EAlBW,YAyBX,uBAAyB1C,EAAA,IAAM,CAI3B,KAAK,eAAiB,IAAI,eAAgB2C,GAAY,CAClD,IAAMC,EAAuBD,EAAQ,CAAC,EAChC,CAAE,MAAAE,EAAO,OAAAC,CAAO,EAAIF,EAAqB,YAC/C,KAAK,eAAe,CAChB,eAAgBC,EAChB,gBAAiBC,EACjB,2BAA4B,EAChC,CAAC,CACL,CAAC,EACD,KAAK,eAAe,QAAQ,KAAK,GAAG,cAAc,uBAAuB,CAAC,EAE1E,KAAK,yCAA2C,WAAW,IAAM,CAC7D,IAAMC,EAAc,KAAK,eAAe,EAClCC,EAAmB,CAAC,KAAK,KAAK,QAAUD,EAAY,SAI1D,CAACA,EAAY,4BAET,CAACC,IACD,KAAK,KAAK,IAAI,gFAA4E,SAAS,EACnG,KAAK,eAAe,CAChB,2BAA4B,EAChC,CAAC,EAET,EAAG,GAAI,CACX,EA9ByB,0BA+BzB,sBAAwBhD,EAAA,IAAM,CAC1B,KAAK,eAAe,WAAW,EAC/B,aAAa,KAAK,wCAAwC,CAC9D,EAHwB,yBAMxB,8BAAgCA,EAACoC,GAAU,CACnC,KAAK,GAAG,SAASA,EAAM,MAAM,EAC7B,KAAK,wBAA0B,IAG/B,KAAK,wBAA0B,GAI/B,KAAK,WAAW,OAAO,EAE/B,EAXgC,iCAYhC,2BAA6BpC,EAACiD,GAAY,CACtC,IAAMC,EAAmB,CACrB,UACA,wBACA,yBACA,2BACA,yBACA,iCACJ,EACMC,EAAiB,KAAK7C,IACxB8C,GAAQ,KAAK,GAAG,iBAAiBF,CAAgB,CAAC,EAAE,OAAQG,GAAS,CAACA,EAAK,UAAU,SAAS,sBAAsB,CAAC,EACzH,QAAWA,KAAQF,EAEXE,EAAK,UAAY,IACjBA,EAAK,aAAa,gBAAiBJ,CAAO,EAG1CI,EAAK,SAAWJ,EAGpBA,EACA,KAAK3C,GAAiB6C,EAGtB,KAAK7C,GAAiB,KAE1B,KAAK,oBAAsB2C,CAC/B,EA3B6B,8BA4B7B,qBAAuBjD,EAAA,IAAM,CAEpB,QAAQ,QAAQ,KAAK,SAAS,GAE/B,QAAQ,UAAU,CACd,GAAG,QAAQ,MACX,CAAC,KAAK,SAAS,EAAG,EACtB,EAAG,EAAE,EAGT,OAAO,iBAAiB,WAAY,KAAK,eAAgB,EAAK,CAClE,EAXuB,wBAYvB,eAAiBA,EAACoC,GAAU,CAEpB,KAAK,YAAY,IAAM,CAACA,EAAM,OAAS,CAACA,EAAM,MAAM,KAAK,SAAS,IAClE,KAAK,WAAW,CAAE,YAAa,EAAM,CAAC,EAQtC,CAAC,KAAK,YAAY,GAAKA,EAAM,QAAQ,KAAK,SAAS,GACnD,QAAQ,KAAK,CAErB,EAdiB,kBAejB,qBAAuBpC,EAACoC,GAAU,CAE1BA,EAAM,UAAYzC,IAClB,KAAK,kBAAkB,EAEvByC,EAAM,UAAY1C,IACR4D,GAASlB,EAAO,KAAK,eAAe,EAAE,kBAAmB,KAAK,EAAE,CAClF,EAPuB,wBAQvB,mBAAqBpC,EAAA,IAAM,CACnB,KAAK,KAAK,0BACV,KAAK,kBAAkB,CAC/B,EAHqB,sBAIrB,YAAcA,EAACoC,GAAU,CAErB,KAAK,KAAK,eAAgBvB,GAAW,CAC7BA,EAAO,OAAS,YAGhBA,EAAO,kBAAkBuB,CAAK,CAEtC,CAAC,EAED,IAAMI,EAAQY,GAAQhB,EAAM,cAAc,KAAK,EAC3CI,EAAM,OAAS,IACf,KAAK,KAAK,IAAI,0BAA0B,EACxC,KAAK,SAASA,CAAK,EAE3B,EAfc,eAgBd,kBAAoBxC,EAACoC,GAAU,CAC3BA,EAAM,eAAe,EACrB,IAAMI,EAAQY,GAAQhB,EAAM,cAAc,OAAS,CAAC,CAAC,EACjDI,EAAM,OAAS,IACf,KAAK,KAAK,IAAI,0CAA0C,EACxD,KAAK,SAASA,CAAK,EAE3B,EAPoB,qBAQpB,eAAiBxC,EAACoC,GAAU,CACxBA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EAGtB,IAAMmB,EAA8BvD,EAAA,IAAM,CACtC,IAAIwD,EAA8B,GAClC,YAAK,KAAK,eAAgB3C,GAAW,CAC7BA,EAAO,oBAAoBuB,CAAK,IAChCoB,EAA8B,GAEtC,CAAC,EACMA,CACX,EARoC,+BAU9BC,EAAqBzD,EAAA,IAAM,CAC7B,GAAM,CAAE,MAAA0D,CAAM,EAAItB,EAAM,aACxB,OAAOsB,EAAM,KAAMC,GAASA,IAAS,OAAO,CAChD,EAH2B,sBAMrBH,EAA8BD,EAA4B,EAC1DK,EAAWH,EAAmB,EACpC,GAAK,CAACD,GAA+B,CAACI,GAClC,KAAK,KAAK,UAGT,KAAK,KAAK,oBACNA,GAAY,CAACJ,IAClB,CAAC,KAAK,KAAK,SAAS,EAAE,eAAgB,CACtCpB,EAAM,aAAa,WAAa,OAChC,MACJ,CAIAA,EAAM,aAAa,WAAa,OAChC,KAAK,eAAe,CAAE,eAAgB,EAAK,CAAC,EAC5C,KAAK,KAAK,WAAWA,CAAK,CAC9B,EAvCiB,kBAwCjB,gBAAkBpC,EAACoC,GAAU,CACzBA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,KAAK,eAAe,CAAE,eAAgB,EAAM,CAAC,EAC7C,KAAK,KAAK,YAAYA,CAAK,CAC/B,EALkB,mBAMlB,WAAapC,EAAA,MAAOoC,GAAU,CAC1BA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,KAAK,eAAe,CAAE,eAAgB,EAAM,CAAC,EAE7C,KAAK,KAAK,eAAgBvB,GAAW,CAC7BA,EAAO,OAAS,YAGhBA,EAAO,iBAAiBuB,CAAK,CAErC,CAAC,EAED,IAAIyB,EAAwB,GACtBC,EAAe9D,EAAC+D,GAAU,CAC5B,KAAK,KAAK,IAAIA,EAAO,OAAO,EAGvBF,IACD,KAAK,KAAK,KAAKE,EAAM,QAAS,OAAO,EACrCF,EAAwB,GAEhC,EARqB,gBASrB,KAAK,KAAK,IAAI,sCAAsC,EAEpD,IAAMrB,EAAQ,MAAMwB,GAAgB5B,EAAM,aAAc,CAAE,aAAA0B,CAAa,CAAC,EACpEtB,EAAM,OAAS,IACf,KAAK,KAAK,IAAI,2BAA2B,EACzC,KAAK,SAASA,CAAK,GAEvB,KAAK,KAAK,OAAOJ,CAAK,CAC1B,EA/Ba,cAgCb,uBAAyBpC,EAACwB,GAAS,CAC1B,KAAK,KAAK,+BACX,KAAK,KAAK,KAAK,oBAAqBA,CAAI,CAEhD,EAJyB,0BASzB,sBAAwBxB,EAACwB,GAAS,CACzB,KAAK,KAAK,+BACX,KAAK,KAAK,KAAK,mBAAoBA,CAAI,CAE/C,EAJwB,yBAKxB,sBAAwBxB,EAACoC,GAAU,CAE3BA,EAAM,UAAY1C,IACRuE,GAAU7B,EAAO,KAAK,eAAe,EAAE,kBAAmB,KAAK,EAAE,CACnF,EAJwB,yBAcxB,kBAAoBpC,EAACoC,GAAU,CACF,KAAK,GAAG,SAAS,SAAS,aAAa,GAE5D,KAAK,YAAYA,CAAK,CAE9B,EALoB,qBAMpB,eAAiBpC,EAAA,CAAC,CAAE,OAAAkE,CAAO,IAAM,CACzB,KAAK,KAAK,kBAAoB,CAACA,GAAQ,QAEvC,KAAK,kBAAkB,CAE/B,EALiB,kBAMjBC,GAAsCnE,EAAA,IAAM,CACxC,GAAI,KAAK,KAAK,0BACV,OAEJ,IAAMoE,EAAkB,IAClB5B,EAAQ,KAAK,KAAK,SAAS,EACjC,GAAIA,EAAM,SAAW,EAAG,CACpB,IAAM6B,EAAqB,KAAK,KAAK,UAAU,GAAG,KAAK,EAAE,qBAAqB,EAC9EA,GAAoB,WAAW,CAAE,eAAgBD,CAAgB,CAAC,EAClE,IAAME,EAAmB,CAAE,GAAG9B,EAAM,CAAC,EAAG,QAAS,MAAU,EAC3D6B,GAAoB,iBAAiBC,CAAgB,EAAE,KAAK,IAAM,CAC9DD,GAAoB,WAAW,CAC3B,eAAgB,KAAK,KAAK,cAC9B,CAAC,CACL,CAAC,CACL,CACJ,EAhBsC,uCAiBtCE,GAAgCvE,EAACwC,GAAU,CACvC,IAAMgC,EAAYhC,EAAM,CAAC,EACnB,CAAE,WAAAZ,CAAW,EAAI,KAAK,eAAe,EACrC6C,EAAsB7C,GAAcA,EAAW,OAAS,EACxD8C,EAAuB,KAAK,YAAYF,CAAS,EACnDC,GAAuB,KAAK,KAAK,WAAa,aAC9C,KAAK,eAAe,GAAMD,EAAU,EAAE,EAEjCE,GAAwB,KAAK,KAAK,WAAa,eACpD,KAAK,eAAeF,CAAS,CAErC,EAXgC,iCAYhC,WAAaxE,EAAA,IAAM,CAEf,GAAI,KAAK,KAAK,SAAW,CAAC,KAAK,KAAK,OAAQ,CACxC,IAAM2E,EAAmBC,GAAmB,KAAK,KAAK,OAAO,EACzDD,EACAA,EAAiB,QAASE,GAAYA,EAAQ,iBAAiB,QAAS,KAAK,SAAS,CAAC,EAGvF,KAAK,KAAK,IAAI,8JAA+J,SAAS,CAE9L,CACA,KAAK,uBAAuB,EAC5B,SAAS,iBAAiB,QAAS,KAAK,iBAAiB,EACzD,KAAK,KAAK,GAAG,eAAgB,KAAKC,EAA6B,EAC/D,KAAK,KAAK,GAAG,gBAAiB,KAAK,YAAY,EAC/C,KAAK,KAAK,GAAG,aAAc,KAAK,aAAa,EAC7C,KAAK,KAAK,GAAG,yBAA0B,KAAK,aAAa,EACzD,KAAK,KAAK,GAAG,WAAY,KAAK,cAAc,EAC5C,KAAK,KAAK,GAAG,cAAe,KAAKX,EAAmC,EACpE,KAAK,KAAK,GAAG,eAAgB,KAAKA,EAAmC,EAGrE,SAAS,iBAAiB,QAAS,KAAK,8BAA+B,EAAI,EAC3E,SAAS,iBAAiB,QAAS,KAAK,8BAA+B,EAAI,EACvE,KAAK,KAAK,QACV,KAAK,GAAG,iBAAiB,UAAW,KAAK,qBAAqB,EAE9D,KAAK,KAAK,UACV,KAAK,KAAK,GAAG,cAAe,KAAKI,EAA6B,CAEtE,EA9Ba,cA+Bb,aAAevE,EAAA,IAAM,CACjB,IAAM2E,EAAmBC,GAAmB,KAAK,KAAK,OAAO,EACzD,CAAC,KAAK,KAAK,QAAUD,GACrBA,EAAiB,QAASE,GAAYA,EAAQ,oBAAoB,QAAS,KAAK,SAAS,CAAC,EAE9F,KAAK,sBAAsB,EAC3B,SAAS,oBAAoB,QAAS,KAAK,iBAAiB,EAC5D,OAAO,oBAAoB,WAAY,KAAK,eAAgB,EAAK,EACjE,KAAK,KAAK,IAAI,eAAgB,KAAKC,EAA6B,EAChE,KAAK,KAAK,IAAI,gBAAiB,KAAK,YAAY,EAChD,KAAK,KAAK,IAAI,aAAc,KAAK,aAAa,EAC9C,KAAK,KAAK,IAAI,yBAA0B,KAAK,aAAa,EAC1D,KAAK,KAAK,IAAI,WAAY,KAAK,cAAc,EAC7C,KAAK,KAAK,IAAI,cAAe,KAAKX,EAAmC,EACrE,KAAK,KAAK,IAAI,eAAgB,KAAKA,EAAmC,EACtE,SAAS,oBAAoB,QAAS,KAAK,8BAA+B,EAAI,EAC9E,SAAS,oBAAoB,QAAS,KAAK,8BAA+B,EAAI,EAC1E,KAAK,KAAK,QACV,KAAK,GAAG,oBAAoB,UAAW,KAAK,qBAAqB,EAEjE,KAAK,KAAK,UACV,KAAK,KAAK,IAAI,cAAe,KAAKI,EAA6B,CAEvE,EAvBe,gBAwBf,uBAAyBvE,EAAA,IAAM,CAC3B,IAAM+E,EAAgB,KAAK,GAAG,SAAS,SAAS,aAAa,EAEvDC,EAAiB,SAAS,gBAAkB,SAAS,MACvD,SAAS,gBAAkB,KACzBC,EAAmB,KAAK,KAAK,SAAS,EAAE,KAAK,SAAW,EACxDC,EAAU,CAAC,KAAK,KAAK,OAG3BD,IAGKC,GAEGH,GAUCC,GAAkB,KAAK,yBAC5B,KAAK,WAAW,KAAK,GAAI,KAAK,eAAe,EAAE,iBAAiB,EAGhE,KAAK,WAAW,OAAO,CAE/B,EA9ByB,0BA+BzB,YAAchF,EAAA,IAAM,CAChB,GAAI,KAAK,KAAK,UAAY,CAAC,KAAK,oBAAqB,CACjD,KAAK,2BAA2B,EAAI,EACpC,MACJ,CACI,CAAC,KAAK,KAAK,UAAY,KAAK,qBAC5B,KAAK,2BAA2B,EAAK,EAEzC,KAAK,uBAAuB,CAChC,EATc,eAUd,aAAeA,EAAA,CAACmF,EAAM5C,IAAW,CAC7B,KAAK,KAAK,YAAYA,EAAQ4C,CAAI,EAClC,KAAK,eAAe,GAAO5C,CAAM,CACrC,EAHe,gBAIf6C,GAAgCpF,EAACe,GAAW,CACxC,IAAMF,EAAS,KAAK,KAAK,UAAUE,EAAO,EAAE,EAC5C,MAAO,CACH,GAAGA,EACH,KAAMF,EAAO,MAAQ,KAAK,KAAK,kBAC/B,OAAQA,EAAO,MACnB,CACJ,EAPgC,iCAQhCwE,GAAqBrF,EAACe,GAAW,CAC7B,IAAMF,EAAS,KAAK,KAAK,UAAUE,EAAO,EAAE,EAE5C,OAAI,OAAOF,EAAO,aAAgB,WACvB,GAEJA,EAAO,YAAY,CAC9B,EAPqB,sBAQrByE,GAAgBtF,EAACsB,GACNA,EACF,OAAQP,GAAWA,EAAO,OAAS,YAAc,KAAKsE,GAAmBtE,CAAM,CAAC,EAChF,IAAI,KAAKqE,EAA6B,EAH/B,iBAKhBG,GAAyBvF,EAACsB,GACfA,EACF,OAAQP,GAAWA,EAAO,OAAS,mBAAmB,EACtD,IAAI,KAAKqE,EAA6B,EAHtB,0BAKzB3D,GAAczB,EAACsB,GACJA,EACF,OAAQP,GAAWA,EAAO,OAAS,QAAQ,EAC3C,IAAI,KAAKqE,EAA6B,EAHjC,eAKd,OAASpF,EAACmB,GAAU,CAChB,IAAM4B,EAAc,KAAK,eAAe,EAClC,CAAE,MAAAP,EAAO,aAAAL,EAAc,eAAAqD,CAAe,EAAIrE,EAC1C,CAAE,SAAAsE,EAAU,mBAAAC,EAAoB,cAAAC,EAAe,aAAAC,EAAc,gBAAAC,EAAiB,yBAAAC,EAA0B,gBAAAC,EAAiB,gBAAAC,EAAiB,cAAAC,EAAe,YAAAC,CAAa,EAAI,KAAK,KAAK,yBAAyB,EAC7MC,EAAY,KAAKb,GAAcvC,EAAY,OAAO,EAClDqD,EAAqB,KAAKb,GAAuBxC,EAAY,OAAO,EACpErB,EAAU,KAAKD,GAAYsB,EAAY,OAAO,EAChDsD,EACJ,OAAI,KAAK,KAAK,QAAU,OACpBA,EAAQlE,EAAa,SAAW,OAAS,QAGzCkE,EAAQ,KAAK,KAAK,MAElB,CAAC,QAAS,UAAW,MAAM,EAAE,QAAQ,KAAK,KAAK,wBAAwB,EACvE,IACA,KAAK,KAAK,yBAA2B,QACrC,QAAQ,KAAK,wEAAwE,KAAK,KAAK,wBAAwB,IAAI,GAExHlG,GAAY,CACf,MAAAgB,EACA,SAAU4B,EAAY,SACtB,MAAAP,EACA,SAAAiD,EACA,mBAAAC,EACA,cAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,yBAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,YAAAC,EACA,eAAgB,OAAO,KAAK1D,CAAK,EAAE,OACnC,cAAerB,EAAM,cACrB,eAAAqE,EACA,UAAAW,EACA,MAAAE,EACA,SAAU,KAAK,KAAK,SACpB,kBAAmB,KAAK,KAAK,kBAC7B,UAAW,KAAK,KAAK,UACrB,kBAAmBtD,EAAY,kBAC/B,eAAgBA,EAAY,eAC5B,eAAgB,KAAK,eACrB,gBAAiB,KAAK,gBACtB,2BAA4B,KAAK,2BACjC,iBAAkB,KAAK,KAAK,iBAC5B,UAAWA,EAAY,UACvB,mBAAAqD,EACA,QAAA1E,EACA,YAAa,KAAK,KAAK,KAAK,YAC5B,GAAI,KAAK,GACT,WAAY,KAAK,kBACjB,mBAAoB,KAAK,mBACzB,kBAAmB,KAAK,kBACxB,YAAa,KAAK,YAClB,OAAQ,KAAK,KAAK,OAClB,UAAW,KAAK,UAChB,cAAe,KAAK,cACpB,KAAM,KAAK,KACX,UAAW,KAAK,UAChB,KAAM,KAAK,KACX,KAAM,KAAK,KAAK,KAChB,eAAgBP,EAAM,eACtB,WAAY4B,EAAY,WACxB,iBAAkBZ,EAAa,kBAAoB,GACnD,uBAAwBA,EAAa,uBACrC,eAAgBA,EAAa,eAC7B,YAAaY,EAAY,YACzB,eAAgB,KAAK,eACrB,oBAAqB,KAAK,oBAC1B,kBAAmBA,EAAY,kBAC/B,aAAc,KAAK,aACnB,eAAgB,KAAK,eACrB,YAAa,KAAK,YAClB,MAAO,KAAK,KAAK,MACjB,OAAQ,KAAK,KAAK,OAClB,2BAA4B,KAAK,KAAK,2BACtC,yBAA0B,KAAK,KAAK,yBACpC,4BAA6B,KAAK,KAAK,4BACvC,8BAA+B,KAAK,KAAK,8BACzC,eAAgBA,EAAY,eAC5B,gBAAiBA,EAAY,gBAC7B,2BAA4BA,EAAY,2BACxC,cAAe,KAAK,GACpB,iBAAkB,KAAK,KAAK,KAAK,aAAa,iBAC9C,iBAAkB,KAAK,KAAK,KAAK,aAAa,iBAC9C,mBAAoB,KAAK,KAAK,KAAK,aAAa,mBAChD,kBAAmB,KAAK,KAAK,kBAC7B,4BAA6B,KAAK,KAAK,4BACvC,4BAA6B,KAAK,KAAK,4BACvC,uBAAwB,KAAK,KAAK,uBAClC,qBAAsB,KAAK,KAAK,qBAChC,uBAAwB,KAAK,uBAC7B,sBAAuB,KAAK,sBAE5B,eAAgBA,EAAY,eAC5B,eAAgB,KAAK,eACrB,gBAAiB,KAAK,gBACtB,WAAY,KAAK,WAEjB,gBAAiB,KAAK,KAAK,gBAE3B,iBAAkB,KAAK,KAAK,iBAC5B,oBAAqB,KAAK,KAAK,oBAC/B,iBAAkB,KAAK,KAAK,iBAC5B,gBAAiB,KAAK,KAAK,gBAC3B,sBAAuB,KAAK,KAAK,sBACjC,iBAAkB,KAAK,KAAK,iBAC5B,wBAAyB,KAAK,KAAK,wBACnC,kBAAmB,KAAK,KAAK,iBACjC,CAAC,CACL,EAhHS,UAiHTuD,GAAkCtG,EAAA,IAAM,CACpC,GAAM,CAAE,QAAAuG,CAAQ,EAAI,KAAK,KACzBA,EAAQ,QAASC,GAAa,CAC1B,IAAM3F,EAAS,KAAK,KAAK,UAAU2F,CAAQ,EACvC3F,EAEAA,EAAO,MAAM,KAAMA,CAAM,EAGzB,KAAK,KAAK,IAAI,2CAA2C2F,CAAQ,4DAA6D,SAAS,CAE/I,CAAC,CACL,EAZkC,mCAalCC,GAAuBzG,EAAA,IAAM,CACzB,KAAK,KAAK,eAAe,KAAK8E,EAA6B,CAC/D,EAFuB,wBAGvBA,GAAgC9E,EAACa,GAAW,CAGxC,IAAM6F,EAAe,CAAC,WAAY,QAAQ,EACtC7F,GAAU,CAACA,EAAO,MAAM,QAAU6F,EAAa,SAAS7F,EAAO,IAAI,IACxC,KAAK,eAAe,EAAE,QAAQ,KAAM8F,GAAoB9F,EAAO,KAAO8F,EAAgB,EAAE,GAG/G9F,EAAO,MAAM,KAAMA,CAAM,EAGrC,EAXgC,iCAYhC+F,IAA6B,CACzB,GAAM,CAAE,eAAAC,EAAgB,gBAAAC,EAAiB,cAAAC,EAAe,8BAAAC,CAA+B,EAAI,KAAK,KAChG,MAAO,CACH,eAAAH,EACA,gBAAAC,EACA,cAAAC,EACA,8BAAAC,EAEA,KAAM,CAACA,CACX,CACJ,CACA,WAAWtG,EAAM,CACb,MAAM,WAAWA,CAAI,EACrB,KAAK,KACA,UAAU,KAAKuG,GAAyB,CAAC,GACxC,WAAW,KAAKL,GAA2B,CAAC,CACtD,CACAK,IAA2B,CACvB,MAAO,GAAG,KAAK,EAAE,qBACrB,CACA,QAAUjH,EAAA,IAAM,CAEZ,KAAK,eAAe,CAChB,SAAU,GACV,YAAa,KACb,kBAAmB,KACnB,kBAAmB,GACnB,kBAAmB,OACnB,eAAgB,GAChB,WAAY,KAAK,KAAK,WACtB,QAAS,CAAC,EAEV,2BAA4B,GAC5B,eAAgB,EACpB,CAAC,EACD,GAAM,CAAE,OAAAkH,EAAQ,iBAAAC,CAAiB,EAAI,KAAK,KAC1C,GAAID,GAAUC,EACV,MAAM,IAAI,MAAM,wMAAwM,EAE5N,GAAM,CAAE,qBAAAC,EAAsB,2BAAAC,CAA2B,EAAI,KAAK,KAAK,MAClED,GAAwBC,IACzBF,GACA,KAAK,KAAK,IAAI,yMAA0M,SAAS,EAErO,GAAM,CAAE,OAAApG,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,EAEtB,KAAK,KAAK,2BACX,KAAK,KAAK,IAAIuG,GAAoB,CAC9B,GAAI,KAAKL,GAAyB,EAClC,GAAG,KAAKL,GAA2B,CACvC,CAAC,EAGL,KAAK,mBACD,OAAO,OAAW,KAAe,OAAO,WAClC,OAAO,WAAW,8BAA8B,EAChD,KACV,IAAMW,EAA2B,KAAK,mBAChC,KAAK,mBAAmB,QACxB,GACN,KAAK,KAAK,IAAI,4BAA4BA,EAA2B,KAAO,KAAK,EAAE,EACnF,KAAK,sBAAsBA,CAAwB,EAC/C,KAAK,KAAK,QAAU,QACpB,KAAK,oBAAoB,YAAY,KAAK,0BAA0B,EAExE,KAAKjB,GAAgC,EACrC,KAAKG,GAAqB,EAC1B,KAAK,WAAW,CACpB,EAlDU,WAmDV,UAAYzG,EAAA,IAAM,CACd,GAAI,CAAC,KAAK,KAAK,0BAA2B,CACtC,IAAMwH,EAAY,KAAK,KAAK,UAAU,GAAG,KAAK,EAAE,qBAAqB,EACjEA,GACA,KAAK,KAAK,aAAaA,CAAS,CACxC,CACA,GAAM,CAAE,QAAAjB,CAAQ,EAAI,KAAK,KACzBA,EAAQ,QAASC,GAAa,CAC1B,IAAM3F,EAAS,KAAK,KAAK,UAAU2F,CAAQ,EACvC3F,GACAA,EAAO,QAAQ,CACvB,CAAC,EACG,KAAK,KAAK,QAAU,QACpB,KAAK,oBAAoB,eAAe,KAAK,0BAA0B,EAEvE,KAAK,KAAK,gCACV,SAAS,KAAK,UAAU,OAAO,wBAAwB,EAE3D,KAAK,QAAQ,EACb,KAAK,aAAa,CACtB,EApBY,YAqBhB,ECr/BA,IAAA4G,GAAA,CACE,KAAQ,kBACR,YAAe,qEACf,QAAW,QACX,QAAW,MACX,MAAS,qBACT,KAAQ,SACR,YAAe,CACb,OACF,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,YACA,OACA,OACA,WACA,QACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,kBAAmB,mBACnB,sBAAuB,uBACvB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,QAAW,SACX,QAAW,SACX,cAAe,UACf,KAAQ,UACR,WAAc,QAChB,CACF,EC5DA,IAAOC,GAAQ,CACX,QAAS,CAGL,WAAY,yBAEZ,OAAQ,QACZ,CACJ,ECHA,IAAMC,GAAiB,CACnB,UAAW,UACX,MAAO,OACP,OAAQ,MACZ,EAKqBC,GAArB,MAAqBC,UAAiBC,EAAS,CAd/C,MAc+C,CAAAC,EAAA,iBAC3C,OAAO,QAAUC,GAAY,QAE7B,oBAAsBC,GAAoB,EAC1C,aACA,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CACR,GAAGP,GACH,GAAGQ,CACP,CAAC,EACD,KAAK,KAAO,WACZ,KAAK,GAAK,KAAK,KAAK,IAAM,WAC1B,KAAK,MAAQ,cACb,KAAK,cAAgBC,GACrB,KAAK,SAAS,CAClB,CACA,SAAWL,EAACM,GAAU,CAClB,IAAMC,EAAcD,EAAM,IAAKE,IAAU,CACrC,OAAQ,KAAK,GACb,KAAMA,EAAK,KACX,KAAMA,EAAK,KACX,KAAMA,EACN,KAAM,CAGF,aAAcA,EAAK,cAAgB,IACvC,CACJ,EAAE,EACF,GAAI,CACA,KAAK,KAAK,SAASD,CAAW,CAClC,OACOE,EAAK,CACR,KAAK,KAAK,IAAIA,CAAG,CACrB,CACJ,EAlBW,YAmBX,cAAgBT,EAACU,GAAU,CACvB,IAAMJ,EAAQK,GAAQD,EAAM,cAAc,OAAS,CAAC,CAAC,EACjDJ,EAAM,OAAS,IACf,KAAK,KAAK,IAAI,yCAAyC,EACvD,KAAK,SAASA,CAAK,GAIvBI,EAAM,cAAc,MAAQ,EAChC,EATgB,iBAUhB,eAAiBV,EAACU,GAAU,CACxBA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EAEtB,GAAM,CAAE,MAAAE,CAAM,EAAIF,EAAM,aAClBG,EAAWD,EAAM,KAAME,GAASA,IAAS,OAAO,EAChD,CAAE,eAAAC,CAAe,EAAI,KAAK,KAAK,SAAS,EAC9C,GAAI,CAACF,GAAY,CAACE,EAAgB,CAC9BL,EAAM,aAAa,WAAa,OAChC,MACJ,CAKAA,EAAM,aAAa,WAAa,OAChC,KAAK,eAAe,CAAE,eAAgB,EAAK,CAAC,EAC5C,KAAK,KAAK,aAAaA,CAAK,CAChC,EAlBiB,kBAmBjB,gBAAkBV,EAACU,GAAU,CACzBA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,KAAK,eAAe,CAAE,eAAgB,EAAM,CAAC,EAC7C,KAAK,KAAK,cAAcA,CAAK,CACjC,EALkB,mBAMlB,WAAaV,EAAA,MAAOU,GAAU,CAC1BA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,KAAK,eAAe,CAAE,eAAgB,EAAM,CAAC,EAC7C,IAAMM,EAAehB,EAACiB,GAAU,CAC5B,KAAK,KAAK,IAAIA,EAAO,OAAO,CAChC,EAFqB,gBAIfX,EAAQ,MAAMY,GAAgBR,EAAM,aAAc,CAAE,aAAAM,CAAa,CAAC,EACpEV,EAAM,OAAS,IACf,KAAK,KAAK,IAAI,0BAA0B,EACxC,KAAK,SAASA,CAAK,GAEvB,KAAK,KAAK,SAASI,CAAK,CAC5B,EAda,cAeb,uBAAwB,CACpB,GAAM,CAAE,aAAAS,CAAa,EAAI,KAAK,KAAK,KACnC,OAAQC,EAAK,QAAS,CAAE,UAAW,sBAAuB,KAAM,OAAQ,OAAQ,GAAM,IAAKpB,EAACqB,GAAQ,CAC5F,KAAK,aAAeA,CACxB,EAFuF,OAEpF,KAAM,KAAK,KAAK,UAAW,SAAUF,EAAa,mBAAqB,EAAG,OAAQA,EAAa,kBAAkB,KAAK,IAAI,EAAG,SAAU,KAAK,aAAc,CAAC,CACtK,CACA,OAAO,gBAAiB,CACpB,OAAQC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,kCAAmC,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,kCAAmC,SAAU,SAAU,CAAC,CAAE,CAAC,CAC3P,CACA,aAAc,CACV,OAAQA,EAAK,MAAO,CAAE,UAAW,sBAAuB,SAAU,KAAK,UAAU,aAAc,CACvF,OAASA,EAAK,OAAQ,CAAE,UAAW,uBAAwB,SAAU,KAAK,KAAK,QAAQ,CAAE,CAAC,CAC9F,CAAC,CAAE,CAAC,CACZ,CACA,YAAa,CACT,OAAOA,EAAK,OAAQ,CAAE,UAAW,qBAAsB,SAAU,KAAK,KAAK,IAAK,CAAC,CACrF,CACA,QAAS,CACL,IAAME,EAAgB;AAAA;AAAA,QAEtB,KAAK,oBAAsB,qCAAuC,EAAE;AAAA,QACpE,KAAK,eAAe,EAAE,eAAiB,gCAAkC,EAAE;AAAA,MAErEC,EAAgB,CAClB,MAAO,KAAK,KAAK,MACjB,OAAQ,KAAK,KAAK,MACtB,EACA,OAAQH,EAAM,SAAU,CAAE,KAAM,SAAU,UAAWE,EAAe,MAAOC,EAAe,QAASvB,EAAA,IAAM,KAAK,aAAa,MAAM,EAA9B,WAAiC,WAAY,KAAK,eAAgB,YAAa,KAAK,gBAAiB,OAAQ,KAAK,WAAY,SAAU,CAAC,KAAK,sBAAsB,EAAGoB,EAAM,MAAO,CAAE,UAAW,sBAAuB,SAAU,CAACtB,EAAS,eAAe,EAAG,KAAK,YAAY,EAAG,KAAK,WAAW,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CACjZ,CACA,SAAU,CACN,GAAM,CAAE,OAAA0B,CAAO,EAAI,KAAK,KACxB,KAAK,eAAe,CAChB,eAAgB,EACpB,CAAC,EACGA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,QAAQ,CACjB,CACJ,EC5IA,IAAAC,GAAA,CACE,KAAQ,oBACR,YAAe,uDACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,CACb,OACF,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,YACA,OACA,OACA,WACA,QACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,kBAAmB,mBACnB,sBAAuB,uBACvB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,aACjB,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,cAAiB,CACf,OAAU,QACZ,EACA,gBAAmB,CACjB,QAAW,SACX,QAAW,SACX,cAAe,UACf,KAAQ,UACR,WAAc,QAChB,CACF,ECzDA,IAAMC,GAAc,CAChB,OAAQ,IACZ,EACA,SAASC,GAAeC,EAAO,CAC3B,OAAOA,EAAM,cAAc,OAAO,KAAMC,GAASA,IAAS,OAAO,GAAK,EAC1E,CAFSC,EAAAH,GAAA,kBAOT,IAAqBI,GAArB,cAAwCC,EAAW,CAdnD,MAcmD,CAAAF,EAAA,mBAC/C,OAAO,QAAUG,GAAY,QAC7B,MACA,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CAAE,GAAGR,GAAa,GAAGS,CAAK,CAAC,EACvC,KAAK,KAAO,WACZ,KAAK,GAAK,KAAK,KAAK,IAAM,YAC9B,CACA,SAAWL,EAACM,GAAU,CAClB,IAAMC,EAAcD,EAAM,IAAKE,IAAU,CACrC,OAAQ,KAAK,GACb,KAAMA,EAAK,KACX,KAAMA,EAAK,KACX,KAAMA,EACN,KAAM,CAGF,aAAcA,EAAK,cAAgB,IACvC,CACJ,EAAE,EACF,GAAI,CACA,KAAK,KAAK,SAASD,CAAW,CAClC,OACOE,EAAK,CACR,KAAK,KAAK,IAAIA,CAAG,CACrB,CACJ,EAlBW,YAmBX,WAAaT,EAAA,MAAOF,GAAU,CAC1B,GAAI,CAACD,GAAeC,CAAK,EACrB,OAEJA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,UAAU,OAAO,mBAAmB,EACzD,KAAK,eAAe,CAAE,eAAgB,EAAM,CAAC,EAE7C,KAAK,KAAK,eAAgBY,GAAW,CAC7BA,EAAO,OAAS,YAEhBA,EAAO,iBAAiBZ,CAAK,CAErC,CAAC,EAED,IAAIa,EAAwB,GACtBC,EAAeZ,EAACa,GAAU,CAC5B,KAAK,KAAK,IAAIA,EAAO,OAAO,EAGvBF,IACD,KAAK,KAAK,KAAKE,EAAM,QAAS,OAAO,EACrCF,EAAwB,GAEhC,EARqB,gBASfL,EAAQ,MAAMQ,GAAgBhB,EAAM,aAAc,CAAE,aAAAc,CAAa,CAAC,EACpEN,EAAM,OAAS,IACf,KAAK,KAAK,IAAI,iCAAiC,EAC/C,KAAK,SAASA,CAAK,GAEvB,KAAK,KAAK,SAASR,CAAK,CAC5B,EAhCa,cAiCb,eAAiBE,EAACF,GAAU,CACnBD,GAAeC,CAAK,IAGzBA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EAItBA,EAAM,aAAa,WAAa,OAChCA,EAAM,cAAc,UAAU,IAAI,mBAAmB,EACrD,KAAK,eAAe,CAAE,eAAgB,EAAK,CAAC,EAC5C,KAAK,KAAK,aAAaA,CAAK,EAChC,EAbiB,kBAcjB,gBAAkBE,EAACF,GAAU,CACpBD,GAAeC,CAAK,IAGzBA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,KAAK,eAAe,CAAE,eAAgB,EAAM,CAAC,EAC7CA,EAAM,eAAe,UAAU,OAAO,mBAAmB,EACzD,KAAK,KAAK,cAAcA,CAAK,EACjC,EATkB,mBAUlB,aAAeE,EAAA,IAAM,CACjB,GAAM,CAAE,OAAAe,CAAO,EAAI,KAAK,KAOxB,GANIA,aAAkB,QAClB,KAAK,MAAQ,CAACA,CAAM,EAEf,OAAOA,GAAW,WACvB,KAAK,MAAQC,GAAQ,SAAS,iBAAiBD,CAAM,CAAC,GAEtD,CAAC,KAAK,OAAS,KAAK,MAAM,SAAW,EACrC,MAAM,IAAI,MAAM,IAAIA,CAAM,oCAAoC,EAElE,KAAK,MAAM,QAASE,GAAS,CACzBA,EAAK,iBAAiB,WAAY,KAAK,eAAgB,EAAK,EAC5DA,EAAK,iBAAiB,YAAa,KAAK,gBAAiB,EAAK,EAC9DA,EAAK,iBAAiB,OAAQ,KAAK,WAAY,EAAK,CACxD,CAAC,CACL,EAhBe,gBAiBf,gBAAkBjB,EAAA,IAAM,CAChB,KAAK,OACL,KAAK,MAAM,QAASiB,GAAS,CACzBA,EAAK,oBAAoB,WAAY,KAAK,eAAgB,EAAK,EAC/DA,EAAK,oBAAoB,YAAa,KAAK,gBAAiB,EAAK,EACjEA,EAAK,oBAAoB,OAAQ,KAAK,WAAY,EAAK,CAC3D,CAAC,CAET,EARkB,mBASlB,SAAU,CACN,KAAK,eAAe,CAAE,eAAgB,EAAM,CAAC,EAC7C,KAAK,aAAa,CACtB,CACA,WAAY,CACR,KAAK,gBAAgB,CACzB,CACJ,ECnIA,IAAAC,GAAA,CACE,KAAQ,gBACR,YAAe,wCACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,SACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,uBAAwB,cACxB,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,aAAc,cACd,WAAc,QAChB,CACF,EChDA,IAAOC,GAAQ,CACX,QAAS,CACL,kBAAmB,SACvB,CACJ,ECIA,IAAqBC,GAArB,cAAqCC,EAAS,CAR9C,MAQ8C,CAAAC,EAAA,gBAC1C,OAAO,QAAUC,GAAY,QAC7B,KACA,SACA,KACA,QACA,MACA,aAAe,KACf,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,GAAK,KAAK,KAAK,IAAM,UAC1B,KAAK,KAAO,WACZ,KAAK,QAAU,KAAK,KAAK,SAAWC,GACpC,KAAK,MAAQ,CAAC,EACd,KAAK,KAAO,IAAOC,EAAK,MAAO,CAAE,UAAW,gCAAiC,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,8MAA+M,KAAM,eAAgB,SAAU,SAAU,CAAC,CAAE,CAAC,EAClc,KAAK,KAAK,sBAAwBC,GAAgB,KAAK,KAAK,sBAAuB,KAAK,KAAK,YAAY,EACzG,KAAK,SAAW,IAAIC,GAASL,EAAM,CAC/B,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,oBAAqB,KAAK,KAAK,oBAC/B,qBAAsB,KAAK,KAAK,qBAChC,SAAU,UACV,SAAU,KAAK,GACf,qBAAsB,EAC1B,CAAC,EACD,KAAK,cAAgBM,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,mBAAmB,EAC1C,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,CACvC,CACA,SAAU,CACN,KAAK,KAAO,IAAIC,GAAc,KAAM,CAChC,SAAU,KAAK,SACf,aAAc,GACd,YAAa,GACb,eAAgB,EACpB,CAAC,EACD,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,KAAK,SAAS,EACnB,KAAK,QAAQ,CACjB,CACA,OAAOC,EAAO,CACV,OAAO,KAAK,KAAK,OAAOA,CAAK,CACjC,CACJ,ECzDA,IAAAC,GAAA,CACE,KAAQ,iBACR,YAAe,yCACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,UACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,uBAAwB,cACxB,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,aAAc,cACd,WAAc,QAChB,CACF,EChDA,IAAOC,GAAQ,CACX,QAAS,CACL,mBAAoB,UACxB,CACJ,ECIA,IAAqBC,GAArB,cAAsCC,EAAS,CAR/C,MAQ+C,CAAAC,EAAA,iBAC3C,OAAO,QAAUC,GAAY,QAC7B,KACA,SACA,KACA,QACA,MACA,aAAe,KACf,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,GAAK,KAAK,KAAK,IAAM,WAC1B,KAAK,KAAO,WACZ,KAAK,QAAU,KAAK,KAAK,SAAWC,GACpC,KAAK,MAAQ,CAAC,EACd,KAAK,KAAO,IAAOC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,KAAM,OAAQ,SAAU,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,8QAA+Q,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,uMAAwM,KAAM,SAAU,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EACzuB,KAAK,KAAK,sBAAwBC,GAAgB,KAAK,KAAK,sBAAuB,KAAK,KAAK,YAAY,EACzG,KAAK,SAAW,IAAIC,GAASL,EAAM,CAC/B,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,oBAAqB,KAAK,KAAK,oBAC/B,qBAAsB,KAAK,KAAK,qBAChC,SAAU,WACV,SAAU,KAAK,GACf,qBAAsB,EAC1B,CAAC,EACD,KAAK,cAAgBM,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,oBAAoB,EAC3C,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,CACvC,CACA,SAAU,CACN,KAAK,KAAO,IAAIC,GAAc,KAAM,CAChC,SAAU,KAAK,QACnB,CAAC,EACD,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,KAAK,SAAS,EACnB,KAAK,QAAQ,CACjB,CACA,OAAOC,EAAO,CACV,GAAM,CAAE,YAAAC,EAAa,gBAAAC,CAAgB,EAAI,KAAK,eAAe,EAE7D,OAD4BD,EAAY,OAAQE,GAAMA,EAAE,OAAS,UAAYA,EAAE,WAAaD,CAAe,EACnF,SAAW,EACxB,KAAK,KAAK,OAAOF,EAAO,CAC3B,SAAU,OACV,WAAY,GACZ,WAAY,EAChB,CAAC,EAEE,KAAK,KAAK,OAAOA,CAAK,CACjC,CACJ,EC/DA,SAASI,IAAW,CAAE,OAAAA,GAAW,OAAO,QAAU,SAAUC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASE,KAAOD,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQC,CAAG,IAAKH,EAAOG,CAAG,EAAID,EAAOC,CAAG,EAAO,CAAE,OAAOH,CAAQ,EAAUD,GAAS,MAAM,KAAM,SAAS,CAAG,CAAnTK,EAAAL,GAAA,YAET,IAAIM,GAAoB,CACtB,0BAA2B,GAC3B,oBAAqB,GACrB,yBAA0B,EAC5B,EAEIC,GAAwB,CAC1B,OAAU,GACV,SAAY,GACZ,MAAS,GACT,OAAU,EACZ,EACIC,GAAsB,CACxB,SAAY,GACZ,MAAS,EACX,EACIC,GAAU,aACVC,GAAQ,MAAM,UAAU,MACxBC,GAAW,OAAO,UAAU,SASjB,SAARC,GAA6BC,EAAMC,EAAS,CACjD,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,qDAAuDA,CAAI,EAG7EC,EAAUd,GAAS,CACjB,gBAAiB,GACjB,KAAM,EACR,EAAGc,CAAO,EAMV,QALIC,EAAO,CAAC,EACRC,EACAC,EAAe,CAAC,EAChBC,EAAoB,CAAC,EAEhBhB,EAAI,EAAGiB,EAAIN,EAAK,SAAS,OAAQX,EAAIiB,EAAGjB,IAAK,CACpD,IAAIkB,EAAUP,EAAK,SAASX,CAAC,EAEzBK,GAAsBa,EAAQ,IAAI,GAAKA,EAAQ,UAAY,CAACN,EAAQ,kBAIxEE,EAAcI,EAAQ,MAAQA,EAAQ,GAElCJ,GAAe,CAACE,EAAkBF,CAAW,IAC/CC,EAAa,KAAKD,CAAW,EAC7BE,EAAkBF,CAAW,EAAI,IAErC,CAIA,QAASK,EAAK,EAAGC,EAAKL,EAAa,OAAQI,EAAKC,EAAID,IAAM,CACxDL,EAAcC,EAAaI,CAAE,EAC7B,IAAIE,EAAQC,GAAaX,EAAMG,EAAaF,CAAO,EAE/CS,GAAS,OACXR,EAAKC,CAAW,EAAIO,EAExB,CAEA,OAAOR,CACT,CAzCwBV,EAAAO,GAAA,eAmDjB,SAASY,GAAaX,EAAMY,EAAWX,EAAS,CACrD,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,sDAAwDA,CAAI,EAG9E,GAAI,CAACY,GAAad,GAAS,KAAKc,CAAS,IAAM,kBAC7C,MAAM,IAAI,MAAM,iEAAmEA,CAAS,EAG9FX,EAAUd,GAAS,CACjB,gBAAiB,GACjB,KAAM,EACR,EAAGc,CAAO,EACV,IAAIM,EAAUP,EAAK,SAASY,CAAS,EAErC,GAAI,CAACL,GAAWA,EAAQ,UAAY,CAACN,EAAQ,gBAC3C,OAAO,KAGT,GAAI,CAACR,GAAkBK,GAAS,KAAKS,CAAO,CAAC,EAC3C,OAAOM,GAAoBN,EAASN,EAAQ,IAAI,EAOlD,QAHIC,EAAO,CAAC,EACRY,EAAY,GAEPzB,EAAI,EAAGiB,EAAIC,EAAQ,OAAQlB,EAAIiB,EAAGjB,IACzC,GAAI,EAAAkB,EAAQlB,CAAC,EAAE,UAAY,CAACY,EAAQ,iBAIpC,CAAIa,GAAaP,EAAQlB,CAAC,EAAE,OAAS,UACnCyB,EAAY,IAGd,IAAIJ,EAAQG,GAAoBN,EAAQlB,CAAC,EAAGY,EAAQ,IAAI,EAEpDS,GAAS,OACXR,EAAOA,EAAK,OAAOQ,CAAK,GAM5B,OAAII,GAAaZ,EAAK,SAAW,EACxBA,EAAK,CAAC,EAGRA,EAAK,OAAS,EAAIA,EAAO,IAClC,CAlDgBV,EAAAmB,GAAA,gBA0DhB,SAASE,GAAoBN,EAASQ,EAAM,CAC1C,IAAIL,EAAQ,KACRM,EAAOT,EAAQ,KAEnB,GAAIS,IAAS,aACX,OAAIT,EAAQ,QAAQ,SAClBG,EAAQH,EAAQ,QAAQA,EAAQ,aAAa,EAAE,OAG1CG,EAGT,GAAIM,IAAS,kBAAmB,CAC9BN,EAAQ,CAAC,EAET,QAASrB,EAAI,EAAGiB,EAAIC,EAAQ,QAAQ,OAAQlB,EAAIiB,EAAGjB,IAC7CkB,EAAQ,QAAQlB,CAAC,EAAE,UACrBqB,EAAM,KAAKH,EAAQ,QAAQlB,CAAC,EAAE,KAAK,EAIvC,OAAIqB,EAAM,SAAW,IACnBA,EAAQ,MAGHA,CACT,CAIA,OAAIM,IAAS,QAAU,UAAWT,GAC5BA,EAAQ,UACVG,EAAQb,GAAM,KAAKU,EAAQ,KAAK,EAE5BG,EAAM,SAAW,IACnBA,EAAQ,OAIVA,EAAQH,EAAQ,MAAM,CAAC,EAGlBG,IAGJf,GAAoBqB,CAAI,EAElBT,EAAQ,UACbS,IAAS,YAAc,CAACT,EAAQ,aAAa,OAAO,EACtDG,EAAQ,GAERA,EAAQH,EAAQ,OALlBG,EAAQK,EAAOR,EAAQ,MAAM,QAAQX,GAAS,EAAE,EAAIW,EAAQ,MASvDG,EACT,CAxDSlB,EAAAqB,GAAA,uBA2DTd,GAAY,aAAeY,GCrM3B,IAAAM,GAAA,CACE,KAAQ,aACR,YAAe,2CACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,MACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,cACf,gBAAiB,QACnB,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,WAAc,QAChB,CACF,ECxCA,IAAMC,GAAiB,CACnB,WAAY,aACZ,gBAAiB,GACjB,gBAAiB,GACjB,gBAAiB,GACjB,sBAAuB,EAC3B,EACA,SAASC,GAAsBC,EAAO,CAClC,GAAIA,GAAS,MAAQA,EAAM,WAAa,OACpC,MAAM,IAAI,MAAM,uDAAwD,CACpE,MAAOA,CACX,CAAC,EAEL,OAAOA,CACX,CAPSC,EAAAF,GAAA,yBAQT,IAAqBG,GAArB,cAAkCC,EAAW,CApB7C,MAoB6C,CAAAF,EAAA,aACzC,OAAO,QAAUG,GAAY,QAC7BC,GACA,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CAAE,GAAGR,GAAgB,GAAGS,CAAK,CAAC,EAC1C,KAAK,KAAO,WACZ,KAAK,GAAK,KAAK,KAAK,IAAM,OAC1B,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,CACzD,CACA,mBAAoB,CACZ,KAAK,KAAK,iBACV,KAAK,gBAAgB,CAE7B,CACA,cAAcC,EAAQ,CACd,KAAK,KAAK,iBACV,KAAK,gBAAgBA,CAAM,EAE3B,KAAK,KAAK,iBAIN,KAAKH,GAAM,eAAe,GAC1B,KAAKA,GAAM,OAAO,CAG9B,CACA,iBAAiBI,EAAI,CACjB,GAAI,KAAK,KAAK,sBAAuB,CACjCA,EAAG,eAAe,EAClB,IAAMC,EAAWC,GAAQF,EAAG,OAAO,QAAQ,EACrCG,EAAiB,CAAC,EACxBF,EAAS,QAASG,GAAO,EACJA,EAAG,UAAY,UAC3BA,EAAG,UAAY,SACZA,EAAG,OAAS,WACJ,CAACA,EAAG,WAEhBA,EAAG,SAAW,GACdD,EAAe,KAAKC,CAAE,EAE9B,CAAC,EACD,KAAK,KACA,OAAO,EACP,KAAK,IAAM,CACZD,EAAe,QAASE,GAAW,CAC/BA,EAAO,SAAW,EACtB,CAAC,CACL,EAAIC,IACAH,EAAe,QAASE,GAAW,CAC/BA,EAAO,SAAW,EACtB,CAAC,EACM,QAAQ,OAAOC,CAAG,EAC5B,EACI,MAAOA,GAAQ,CAChB,KAAK,KAAK,IAAIA,EAAI,OAASA,EAAI,SAAWA,CAAG,CACjD,CAAC,CACL,CACJ,CACA,gBAAgBP,EAAQ,CACpB,KAAK,KAAK,IAAI,4CAA4C,EAC1D,KAAK,KAAK,IAAIA,CAAM,EACpB,IAAIQ,EAAc,KAAKX,GAAM,cAAc,UAAU,KAAK,KAAK,UAAU,IAAI,EAC7E,GAAIW,EAAa,CAIb,IAAIC,EACJ,GAAI,CACAA,EAAgB,KAAK,MAAMD,EAAY,KAAK,CAChD,MACa,CAEb,CACK,MAAM,QAAQC,CAAa,IAC5BA,EAAgB,CAAC,GAErBA,EAAc,KAAKT,CAAM,EACzBQ,EAAY,MAAQ,KAAK,UAAUC,CAAa,EAChD,MACJ,CACAD,EAAc,SAAS,cAAc,OAAO,EAC5CA,EAAY,KAAO,KAAK,KAAK,WAC7BA,EAAY,KAAO,SACnBA,EAAY,MAAQ,KAAK,UAAU,CAACR,CAAM,CAAC,EAC3C,KAAKH,GAAM,YAAYW,CAAW,CACtC,CACA,iBAAkB,CACd,IAAME,EAAWC,GAAY,KAAKd,EAAK,EAGvC,OAAOa,EAAS,KAAK,KAAK,UAAU,EACpC,KAAK,KAAK,QAAQA,CAAQ,CAC9B,CACA,SAAU,CACN,KAAKb,GAAQN,GAAsBqB,GAAe,KAAK,KAAK,MAAM,CAAC,EACnE,KAAKf,GAAM,iBAAiB,SAAU,KAAK,gBAAgB,EAC3D,KAAK,KAAK,GAAG,SAAU,KAAK,iBAAiB,EAC7C,KAAK,KAAK,GAAG,WAAY,KAAK,aAAa,CAC/C,CACA,WAAY,CACR,KAAKA,GAAM,oBAAoB,SAAU,KAAK,gBAAgB,EAC9D,KAAK,KAAK,IAAI,SAAU,KAAK,iBAAiB,EAC9C,KAAK,KAAK,IAAI,WAAY,KAAK,aAAa,CAChD,CACJ,ECjIA,IAAAgB,GAAA,CACE,KAAQ,yBACR,YAAe,qJACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,CACb,sBACF,EACA,QAAW,CACT,MAAS,kCACT,UAAa,cACb,KAAQ,oCACR,WAAY,8BACd,EACA,SAAY,CACV,gBACA,gBACA,iBACA,mBACA,oBACA,OACA,aACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,yBAA0B,yBAC1B,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,cACf,OAAU,UACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,aAAc,cACd,kBAAmB,cACnB,mBAAoB,cACpB,kBAAmB,SACnB,WAAc,SACd,OAAU,QACZ,CACF,EC1DA,IAAMC,GAAY,OAAO,OAAW,MAC/B,OAAO,WAEJ,OAAO,iBAEP,OAAO,cAEP,OAAO,YAEP,OAAO,aACTC,GAAc,CAAC,CAACD,GAChBE,GAAU,aACVC,GAAa,QACbC,GAAiB,KAAU,GAAK,IAChCC,GAAa,EACbC,GAAM,QAIZ,SAASC,GAAkBC,EAAO,CAC9B,IAAMC,EAAUD,EAAM,WAAW,EACjCC,EAAQ,UAAaC,GAAU,CAC3B,IAAMC,EAASD,EAAM,OAAO,OAC5B,GAAI,CAACC,EACD,OAEJ,IAAMC,EAAQD,EAAO,MACrBC,EAAM,QAAU,KAAK,IAAI,EAAIR,GAC7BO,EAAO,OAAOC,CAAK,CACvB,CACJ,CAXSC,EAAAN,GAAA,qBAYT,SAASO,GAAQC,EAAQ,CACrB,IAAMN,EAAUT,GAAU,KAAKe,EAAQV,EAAU,EACjD,OAAO,IAAI,QAAQ,CAACW,EAASC,IAAW,CACpCR,EAAQ,gBAAmBC,GAAU,CACjC,IAAMQ,EAAKR,EAAM,OAAO,OAClBS,EAAcT,EAAM,cACrB,YAML,GALIA,EAAM,WAAa,GAELQ,EAAG,kBAAkBf,GAAY,CAAE,QAAS,IAAK,CAAC,EAC1D,YAAY,QAAS,QAAS,CAAE,OAAQ,EAAM,CAAC,EAErDO,EAAM,WAAa,EAAG,CAEtB,IAAMF,EAAQW,EAAY,YAAYhB,EAAU,EAChDK,EAAM,YAAY,UAAW,UAAW,CAAE,OAAQ,EAAM,CAAC,EACzDD,GAAkBC,CAAK,CAC3B,CACAW,EAAY,WAAa,IAAM,CAC3BH,EAAQE,CAAE,CACd,CACJ,EACAT,EAAQ,UAAaC,GAAU,CAC3BM,EAAQN,EAAM,OAAO,MAAM,CAC/B,EACAD,EAAQ,QAAUQ,CACtB,CAAC,CACL,CA3BSJ,EAAAC,GAAA,WA4BT,SAASM,GAAeX,EAAS,CAC7B,OAAO,IAAI,QAAQ,CAACO,EAASC,IAAW,CACpCR,EAAQ,UAAaC,GAAU,CAC3BM,EAAQN,EAAM,OAAO,MAAM,CAC/B,EACAD,EAAQ,QAAUQ,CACtB,CAAC,CACL,CAPSJ,EAAAO,GAAA,kBAQT,IAAIC,GAAY,GACVC,GAAN,MAAMC,CAAe,CApErB,MAoEqB,CAAAV,EAAA,uBACjBW,GACA,KACA,KACA,OAAO,YACP,YAAYC,EAAM,CACd,KAAK,KAAO,CACR,OAAQvB,GACR,UAAW,UACX,QAASE,GACT,YAAa,GAAKE,GAClB,aAAc,IAAMA,GACpB,GAAGmB,CACP,EACA,KAAK,KAAO,KAAK,KAAK,UACtB,IAAMC,EAAmBb,EAAA,SAAY,CACjC,IAAMK,EAAK,MAAMJ,GAAQ,KAAK,KAAK,MAAM,EACzC,YAAKU,GAASN,EACPA,CACX,EAJyB,oBAKpBG,GAKD,KAAKG,GAASE,EAAiB,GAJ/BL,GAAY,GACZ,KAAKG,GAASD,EAAe,QAAQ,EAAE,KAAKG,EAAkBA,CAAgB,EAKtF,CACA,IAAI,OAAQ,CACR,OAAO,QAAQ,QAAQ,KAAKF,EAAM,CACtC,CACA,IAAIG,EAAQ,CACR,MAAO,GAAG,KAAK,IAAI,IAAIA,CAAM,EACjC,CAIA,MAAM,MAAO,CAIT,IAAMlB,GAHK,MAAM,KAAKe,IACC,YAAY,CAACrB,EAAU,EAAG,UAAU,EACjC,YAAYA,EAAU,EAC1B,MAAM,OAAO,EAAE,OAAO,YAAY,KAAK,KAAK,IAAI,CAAC,EACjEyB,EAAQ,MAAMR,GAAeX,CAAO,EAC1C,OAAO,OAAO,YAAYmB,EAAM,IAAKC,GAAS,CAACA,EAAK,OAAQA,EAAK,IAAI,CAAC,CAAC,CAC3E,CAIA,MAAM,IAAIF,EAAQ,CAGd,IAAMlB,GAFK,MAAM,KAAKe,IACC,YAAY,CAACrB,EAAU,EAAG,UAAU,EAC/B,YAAYA,EAAU,EAAE,IAAI,KAAK,IAAIwB,CAAM,CAAC,EAClE,CAAE,KAAAG,CAAK,EAAI,MAAMV,GAAeX,CAAO,EAC7C,MAAO,CACH,GAAIqB,EAAK,OACT,KAAMA,EAAK,IACf,CACJ,CAIA,MAAM,SAAU,CAIZ,IAAMrB,GAHK,MAAM,KAAKe,IACC,YAAY,CAACrB,EAAU,EAAG,UAAU,EACjC,YAAYA,EAAU,EAC1B,MAAM,OAAO,EAAE,WAAW,YAAY,KAAK,KAAK,IAAI,CAAC,EAC3E,OAAO,IAAI,QAAQ,CAACa,EAASC,IAAW,CACpC,IAAIc,EAAO,EACXtB,EAAQ,UAAaC,GAAU,CAC3B,IAAMC,EAASD,EAAM,OAAO,OACxBC,GACAoB,GAAQpB,EAAO,MAAM,KAAK,KAC1BA,EAAO,SAAS,GAGhBK,EAAQe,CAAI,CAEpB,EACAtB,EAAQ,QAAU,IAAM,CACpBQ,EAAO,IAAI,MAAM,sCAAsC,CAAC,CAC5D,CACJ,CAAC,CACL,CAIA,MAAM,IAAIY,EAAM,CACZ,GAAIA,EAAK,KAAK,MAAQ,MAAQA,EAAK,KAAK,KAAO,KAAK,KAAK,YACrD,MAAM,IAAI,MAAM,2BAA2B,EAG/C,GADa,MAAM,KAAK,QAAQ,EACrB,KAAK,KAAK,aACjB,MAAM,IAAI,MAAM,eAAe,EAInC,IAAMpB,GAFK,MAAM,KAAKe,IACC,YAAY,CAACrB,EAAU,EAAG,WAAW,EAChC,YAAYA,EAAU,EAAE,IAAI,CACpD,GAAI,KAAK,IAAI0B,EAAK,EAAE,EACpB,OAAQA,EAAK,GACb,MAAO,KAAK,KACZ,QAAS,KAAK,IAAI,EAAI,KAAK,KAAK,QAChC,KAAMA,EAAK,IACf,CAAC,EACD,OAAOT,GAAeX,CAAO,CACjC,CAIA,MAAM,OAAOkB,EAAQ,CAGjB,IAAMlB,GAFK,MAAM,KAAKe,IACC,YAAY,CAACrB,EAAU,EAAG,WAAW,EAChC,YAAYA,EAAU,EAAE,OAAO,KAAK,IAAIwB,CAAM,CAAC,EAC3E,OAAOP,GAAeX,CAAO,CACjC,CAKA,aAAa,SAAU,CACnB,IAAMS,EAAK,MAAMJ,GAAQZ,EAAO,EAG1BO,EAFcS,EAAG,YAAY,CAACf,EAAU,EAAG,WAAW,EAClC,YAAYA,EAAU,EAE3C,MAAM,SAAS,EACf,WAAW,YAAY,WAAW,KAAK,IAAI,CAAC,CAAC,EAClD,MAAM,IAAI,QAAQ,CAACa,EAASC,IAAW,CACnCR,EAAQ,UAAaC,GAAU,CAC3B,IAAMC,EAASD,EAAM,OAAO,OACxBC,GACAA,EAAO,OAAO,EACdA,EAAO,SAAS,GAGhBK,EAAQ,CAEhB,EACAP,EAAQ,QAAUQ,CACtB,CAAC,EACDC,EAAG,MAAM,CACb,CACJ,EACAI,GAAe,YAAcrB,GAC7B,IAAO+B,GAAQV,GClNf,IAAAW,GAAqB,WAIrB,SAASC,GAAWC,EAAK,CACrB,GAAI,CACA,OAAO,KAAK,MAAMA,CAAG,CACzB,MACM,CACF,OAAO,IACX,CACJ,CAPSC,EAAAF,GAAA,cAQT,IAAMG,GAAS,aACTC,GAAaF,EAACG,GAAS,GAAGF,EAAM,GAAGE,CAAI,GAA1B,cACnB,SAASC,IAAiB,CACtB,IAAMC,EAAe,CAAC,EACtB,QAASC,EAAI,EAAGA,EAAI,aAAa,OAAQA,IAAK,CAC1C,IAAMC,EAAM,aAAa,IAAID,CAAC,EAC1BC,GAAK,WAAWN,EAAM,GACtBI,EAAa,KAAKE,CAAG,CAE7B,CACA,IAAMC,EAAM,KAAK,IAAI,EACrBH,EAAa,QAASE,GAAQ,CAC1B,IAAME,EAAO,aAAa,QAAQF,CAAG,EACrC,GAAI,CAACE,EACD,OACJ,IAAMC,EAAMZ,GAAWW,CAAI,EACvBC,GAAK,SAAWA,EAAI,QAAUF,GAC9B,aAAa,WAAWD,CAAG,CAEnC,CAAC,CACL,CAlBSP,EAAAI,GAAA,kBAmBT,IAAqBO,GAArB,KAAmC,CAjCnC,MAiCmC,CAAAX,EAAA,sBAC/B,KACA,KAEAY,GACA,YAAYC,EAAM,CACd,KAAK,KAAO,CACR,QAAS,KAAU,GAAK,IACxB,aAAc,IACd,GAAGA,CACP,EACA,KAAK,KAAOX,GAAWW,EAAK,SAAS,EACrC,KAAKD,GACD,KAAK,KAAK,eAAiB,EACrB,KAAK,QACL,GAAAE,SAAS,KAAK,KAAM,KAAK,KAAK,aAAc,CAC1C,QAAS,GACT,SAAU,EACd,CAAC,CACb,CACAC,GAIA,KAAOf,EAAA,IAAM,CACTI,GAAe,EACf,IAAMY,EAAa,aAAa,QAAQ,KAAK,IAAI,EACjD,GAAI,CAACA,EACD,OACJ,IAAMP,EAAOX,GAAWkB,CAAU,EAClC,GAAKP,EAEL,YAAKM,GAASN,EACPA,EAAK,QAChB,EAVO,QAWP,IAAMT,EAAA,IACK,KAAKe,IAAQ,SADlB,OAGN,KAAOf,EAAA,IAAM,CACT,GAAI,KAAKe,KAAW,KAAM,CACtB,aAAa,WAAW,KAAK,IAAI,EACjC,MACJ,CACA,IAAME,EAAQ,KAAK,UAAU,KAAKF,EAAM,EACxC,aAAa,QAAQ,KAAK,KAAME,CAAK,CACzC,EAPO,QAcP,IAAMjB,EAACkB,GAAa,CAChB,KAAKH,GACDG,IAAa,KACP,KACA,CACE,SAAAA,EACA,QAAS,KAAK,IAAI,EAAI,KAAK,KAAK,OACpC,EACR,KAAKN,GAAe,CACxB,EATM,MAUV,EC/FA,IAAMO,GAAc,OAAO,UAAc,KAAe,kBAAmB,UAC3E,SAASC,IAAuB,CAC5B,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC/BH,GAGI,UAAU,cAAc,WAE7BE,EAAQ,EAGR,UAAU,cAAc,iBAAiB,mBAAoB,IAAM,CAC/DA,EAAQ,CACZ,CAAC,EATDC,EAAO,IAAI,MAAM,aAAa,CAAC,CAWvC,CAAC,CACL,CAfSC,EAAAH,GAAA,wBAgBT,IAAMI,GAAN,KAAyB,CAjBzB,MAiByB,CAAAD,EAAA,2BACrBE,GACA,KACA,OAAO,YACP,YAAYC,EAAM,CACd,KAAKD,GAASL,GAAqB,EAAE,KAAMO,GAAQ,CAC/C,KAAKF,GAASE,CAClB,CAAC,EACD,KAAK,KAAOD,EAAK,SACrB,CACA,IAAI,OAAQ,CACR,OAAO,QAAQ,QAAQ,KAAKD,EAAM,CACtC,CACA,MAAM,MAAO,CACT,aAAM,KAAKA,GACJ,IAAI,QAAQ,CAACJ,EAASC,IAAW,CACpC,IAAMM,EAAYL,EAACM,GAAU,CACrBA,EAAM,KAAK,QAAU,KAAK,OAGtBA,EAAM,KAAK,OACV,kBACDR,EAAQQ,EAAM,KAAK,KAAK,EACxB,UAAU,cAAc,oBAAoB,UAAWD,CAAS,GAGhEN,EAAO,EAEnB,EAZkB,aAalB,UAAU,cAAc,iBAAiB,UAAWM,CAAS,EAC7D,UAAU,cAAc,WAAW,YAAY,CAC3C,KAAM,iBACN,MAAO,KAAK,IAChB,CAAC,CACL,CAAC,CACL,CACA,MAAM,IAAIE,EAAM,CACZ,MAAM,KAAKL,GACX,UAAU,cAAc,WAAW,YAAY,CAC3C,KAAM,gBACN,MAAO,KAAK,KACZ,KAAAK,CACJ,CAAC,CACL,CACA,MAAM,OAAOC,EAAQ,CACjB,MAAM,KAAKN,GACX,UAAU,cAAc,WAAW,YAAY,CAC3C,KAAM,mBACN,MAAO,KAAK,KACZ,OAAAM,CACJ,CAAC,CACL,CACJ,EACAP,GAAmB,YAAcL,GACjC,IAAOa,GAAQR,GClEf,IAAMS,GAAiB,CACnB,QAAS,KAAU,GAAK,IACxB,cAAe,EACnB,EAQqBC,GAArB,MAAqBC,UAAwBC,EAAW,CAhBxD,MAgBwD,CAAAC,EAAA,wBACpD,OAAO,QAAUC,GAAY,QAC7BC,GACAC,GACAC,GAEA,OAAQ,OAAO,IAAI,yBAAyB,CAAC,EAC7C,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CAAE,GAAGT,GAAgB,GAAGU,CAAK,CAAC,EAC1C,KAAK,KAAO,WACZ,KAAK,GAAK,KAAK,KAAK,IAAM,kBAC1B,KAAKJ,GAAiB,IAAIK,GAAc,CACpC,QAAS,KAAK,KAAK,QACnB,UAAWF,EAAK,MAAM,EACtB,aAEAP,EAAgB,OAAO,IAAI,yBAAyB,CAAC,GAAK,MAC9D,CAAC,EACG,KAAK,KAAK,gBACV,KAAKK,GAAsB,IAAIK,GAAmB,CAC9C,UAAWH,EAAK,MAAM,CAC1B,CAAC,GAEL,KAAKD,GAAkB,IAAIK,GAAe,CACtC,QAAS,KAAK,KAAK,QACnB,GAAI,KAAK,KAAK,WAAa,CAAC,EAC5B,UAAWJ,EAAK,MAAM,CAC1B,CAAC,CACL,CACA,KAAMK,IAAW,CACb,IAAMC,EAAiB,KAAKT,GAAe,KAAK,EAChD,GAAI,CAACS,EACD,OAEJ,IAAMC,EAAiBD,EAAe,gBAAkB,CAAC,EACnDE,EAAiB,OAAO,QAAQF,EAAe,OAAS,CAAC,CAAC,EAQ1DG,EAAQ,OAAO,YAAYD,EAAe,MAAM,CAAC,CAAC,CAAEE,CAAC,IAAMA,EAAE,SAAS,UAAY,CAACA,EAAE,KAAK,EAC1F,CAAC,EACDF,CAAc,EACdG,EAAe,OAAO,QAAQF,CAAK,EACzC,KAAK,KAAK,IAAI,+BAA+B,OAAO,KAAKF,CAAc,EAAE,MAAM,wBAAwBI,EAAa,MAAM,2BAA2B,EACrJ,IAAMC,EAAWD,EAAa,OAAS,EAClCC,GACD,KAAK,KAAK,IAAI,iFAAiF,EAEnG,GAAM,CAACC,EAAoBC,CAAc,EAAI,MAAM,QAAQ,IAAI,CAC3D,KAAKC,GAAgC,EACrC,KAAKC,GAA4B,CACrC,CAAC,EACKC,EAAQ,CACV,GAAGJ,EACH,GAAGC,CACP,EAEMI,EAAiB,OAAO,YAAYP,EAAa,IAAI,CAAC,CAACQ,EAAQC,CAAI,IAAM,CAC3E,GAAIA,EAAK,SACL,MAAO,CACHD,EACA,CACI,GAAGC,EACH,WAAY,GACZ,KAAM,CAAE,KAAM,IAAK,CACvB,CACJ,EAEJ,IAAMC,EAAOJ,EAAME,CAAM,EACzB,MAAO,CACHA,EACA,CAACC,EAAK,SAAS,gBAAkBC,GAAQ,KAEjC,CACI,GAAGD,EACH,WAAY,GACZ,QAAS,GACT,KAAM,MACV,EACF,CACE,GAAGA,EACH,WAAY,GACZ,QAAS,GACT,KAAMC,CACV,CACR,CACJ,CAAC,CAAC,EACF,KAAK,KAAK,SAAS,CACf,eAAgBT,EAAWN,EAAiB,KAC5C,eAAgBM,EAAWL,EAAiB,CAAC,EAC7C,MAAOW,CACX,CAAC,EACD,KAAK,KAAK,KAAK,WAAYZ,EAAe,UAAU,EACpD,IAAMgB,EAAgB,OAAO,KAAKL,CAAK,EAAE,OAAQE,GAAW,CAACV,EAAMU,CAAM,CAAC,EAC1E,GAAIG,EAAc,OACd,GAAI,CACA,KAAK,KAAK,IAAI,iCAAiCA,EAAc,MAAM,YAAY,EAC/E,MAAM,KAAKC,GAAaD,CAAa,CACzC,OACOE,EAAK,CACR,KAAK,KAAK,IAAI,wCAAwCF,EAAc,MAAM,aAAc,SAAS,EACjG,KAAK,KAAK,IAAIE,CAAG,CACrB,CAER,CACAC,GAAiB9B,EAAA,CAAC,CAAE,WAAA+B,EAAY,GAAGC,CAAM,IAAM,CAC3C,IAAMC,EAAW,KAAK/B,GAAe,IAAI,EACzC,KAAKA,GAAe,IAAI,CACpB,GAAI+B,GAAY,CACZ,eAAgB,CAAC,EACjB,MAAO,CAAC,CACZ,EACA,GAAGD,EACH,WAAY,CAER,GAAGC,GAAU,WACb,GAAGF,CACP,CACJ,CAAC,CACL,EAdiB,kBAejB,KAAMX,IAAkC,CACpC,GAAI,CAAC,KAAKjB,GACN,MAAO,CAAC,EAEZ,GAAI,CACA,IAAMmB,EAAQ,MAAM,KAAKnB,GAAoB,KAAK,EAC5C+B,EAAyB,OAAO,KAAKZ,CAAK,EAAE,OAClD,YAAK,KAAK,IAAIY,EAAyB,EACjC,4CAA4CA,CAAsB,8BAClE,oDAAoD,EACnDZ,CACX,OACOO,EAAK,CACR,YAAK,KAAK,IAAI,gEAAiE,SAAS,EACxF,KAAK,KAAK,IAAIA,CAAG,EACV,CAAC,CACZ,CACJ,CACA,KAAMR,IAA8B,CAChC,GAAI,CACA,IAAMC,EAAQ,MAAM,KAAKlB,GAAgB,KAAK,EACxC8B,EAAyB,OAAO,KAAKZ,CAAK,EAAE,OAClD,YAAK,KAAK,IAAIY,EAAyB,EACjC,4CAA4CA,CAAsB,yBAClE,+CAA+C,EAC9CZ,CACX,OACOO,EAAK,CACR,YAAK,KAAK,IAAI,2DAA4D,SAAS,EACnF,KAAK,KAAK,IAAIA,CAAG,EACV,CAAC,CACZ,CACJ,CACA,KAAMD,GAAaO,EAAS,CACxB,MAAM,QAAQ,IAAIA,EAAQ,IAAI,MAAOC,GAAO,CACxC,GAAI,CACA,MAAM,QAAQ,IAAI,CACd,KAAKjC,IAAqB,OAAOiC,CAAE,EACnC,KAAKhC,GAAgB,OAAOgC,CAAE,CAClC,CAAC,CACL,OACOP,EAAK,CACR,KAAK,KAAK,IAAI,2CAA2CO,CAAE,mBAAoB,SAAS,EACxF,KAAK,KAAK,IAAIP,CAAG,CACrB,CACJ,CAAC,CAAC,EACEM,EAAQ,OAAS,GACjB,KAAK,KAAK,IAAI,6BAA6BA,EAAQ,MAAM,QAAQ,CAEzE,CACA,MAAO,OAAO,IAAI,wBAAwB,CAAC,EAAEA,EAAS,CAClD,OAAO,KAAKP,GAAaO,CAAO,CACpC,CACAE,GAAmBrC,EAAA,MAAOyB,GAAS,CAC/B,GAAM,CAAE,GAAAW,EAAI,KAAAE,EAAM,SAAAC,CAAS,EAAId,EAC3Bc,GAAYD,GAAQ,MAExB,MAAM,QAAQ,IAAI,CACd,KAAKnC,IAAqB,IAAI,CAAE,GAAAiC,EAAI,KAAAE,CAAK,CAAC,EAAE,MAAOT,GAAQ,CACvD,KAAK,KAAK,IAAI,2DAA4D,SAAS,EACnF,KAAK,KAAK,IAAIA,CAAG,CACrB,CAAC,EACD,KAAKzB,GAAgB,IAAI,CAAE,GAAAgC,EAAI,KAAAE,CAAK,CAAC,EAAE,MAAOT,GAAQ,CAE9CA,aAAe,OACfA,EAAI,kBAAkB,YACtBA,EAAI,OAAO,OAAO,OAAS,oBAG/B,KAAK,KAAK,IAAI,sDAAuD,SAAS,EAC9E,KAAK,KAAK,IAAIA,CAAG,EACrB,CAAC,CACL,CAAC,CACL,EApBmB,oBAqBnBW,GAAqBxC,EAAA,CAACyC,EAAWC,EAAWV,IAAU,CAClD,GAAIU,EAAU,iBAAmBD,EAAU,eAAgB,CACvD,GAAM,CAAE,eAAA7B,CAAe,EAAI,KAAK,KAAK,SAAS,EAC9C,KAAKkB,GAAe,CAAE,eAAAlB,CAAe,CAAC,CAC1C,CACA,GAAI8B,EAAU,QAAUD,EAAU,MAAO,CACjC,OAAO,OAAOA,EAAU,KAAK,EAAE,KAAM,GAAM,CAAC,EAAE,SAAS,QAAQ,IAC9D,OAAO,OAAOC,EAAU,KAAK,EAAE,SAAW,GACvC,OAAO,OAAOA,EAAU,KAAK,EAAE,MAAO,GAAM,EAAE,SAAS,UAAY,CAAC,EAAE,KAAK,KAC/E,KAAK,KAAK,IAAI,oGAAoG,EAClH,KAAK,KAAK,SAAS,CAAE,eAAgB,IAAK,CAAC,GAI/C,IAAMC,EAAoB,OAAO,YAAY,OAAO,QAAQD,EAAU,KAAK,EAAE,IAAI,CAAC,CAAClB,EAAQ,CAAE,KAAAc,EAAM,QAAAM,EAAS,GAAGC,CAAS,CAAC,IAAM,CAACrB,EAAQqB,CAAQ,CAAC,CAAC,EAClJ,KAAKf,GAAe,CAAE,MAAOa,CAAkB,CAAC,EAChD,IAAMG,EAAa,OAAO,OAAOJ,EAAU,KAAK,EAAE,OAAQK,GAAaN,EAAU,MAAMM,EAAS,EAAE,GAAK,IAAI,EACrGC,EAAkB,OAAO,OAAON,EAAU,KAAK,EAAE,QAASK,GAAa,CACzE,IAAME,EAAWR,EAAU,MAAMM,EAAS,EAAE,EAC5C,OAAIE,GAAY,MAAQF,EAAS,OAASE,EAAS,KACxC,CAACF,CAAQ,EACb,CAAC,CACZ,CAAC,EAQKG,EAAgB,CAAC,GAPF,OAAO,OAAOT,EAAU,KAAK,EAAE,OAAQQ,GAAa,CACrE,IAAMF,EAAWL,EAAU,MAAMO,EAAS,EAAE,EAE5C,OAAQF,GAAY,MACfA,EAAS,SAAS,gBACf,CAACE,EAAS,SAAS,cAC/B,CAAC,EACuC,GAAGD,CAAe,EACpDG,EAAa,CAAC,GAAGL,EAAY,GAAGE,CAAe,GACpD,SAAY,CAET,MAAM,KAAKpB,GAAasB,EAAc,IAAK,GAAM,EAAE,EAAE,CAAC,EAEtD,QAAWxB,KAAQyB,EACf,MAAM,KAAKd,GAAiBX,CAAI,EAEhCyB,EAAW,OAAS,GACpB,KAAK,KAAK,IAAI,2BAA2BA,EAAW,MAAM,QAAQ,CAE1E,GAAG,CACP,CACJ,EA5CqB,sBA6CrBC,GAA0BpD,EAAA,IAAM,CAC5B,KAAK,KAAK,IAAI,oDAAoD,EAElE,GAAM,CAAE,eAAAY,CAAe,EAAI,KAAK,KAAK,SAAS,EAC1C,OAAO,KAAKA,CAAc,EAAE,OAAS,GACrC,KAAK,KAAK,UAAU,EACpB,OAAO,KAAKA,CAAc,EAAE,QAASyC,GAAa,CAC9C,KAAK,KAAK,QAAQA,CAAQ,CAC9B,CAAC,GAID,KAAK,KAAK,OAAO,EAErB,KAAK,KAAK,SAAS,CAAE,eAAgB,IAAK,CAAC,CAC/C,EAf0B,2BAgB1BC,GAA2BtD,EAACsC,GAAS,CACjC,KAAKR,GAAe,CAAE,WAAYQ,CAAK,CAAC,CAC5C,EAF2B,4BAG3B,SAAU,CACN,KAAK5B,GAAS,EACd,KAAK,KAAK,GAAG,eAAgB,KAAK8B,EAAkB,EACpD,KAAK,KAAK,GAAG,oBAAqB,KAAKY,EAAuB,EAC9D,KAAK,KAAK,GAAG,8BAA+B,KAAKE,EAAwB,CAC7E,CACA,WAAY,CACR,KAAK,KAAK,IAAI,eAAgB,KAAKd,EAAkB,EACrD,KAAK,KAAK,IAAI,oBAAqB,KAAKY,EAAuB,EAC/D,KAAK,KAAK,IAAI,8BAA+B,KAAKE,EAAwB,CAC9E,CACJ,ECjSA,IAAAC,GAAA,CACE,KAAQ,qBACR,YAAe,2FACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,eACA,gBACA,OACA,aACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,uBAAwB,cACxB,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,aAAc,cACd,WAAc,QAChB,CACF,EChDA,IAAqBC,GAArB,cAAgDC,EAAc,CAD9D,MAC8D,CAAAC,EAAA,2BAC1D,eAAeC,EAAMC,EAAmB,CAG/BD,EAAK,KAAK,QAAQ,eACnB,MAAM,eAAeA,EAAMC,CAAiB,CAEpD,CACJ,ECTA,IAAOC,GAAQ,CACX,QAAS,CACL,sBAAuB,cAC3B,CACJ,ECIA,IAAqBC,GAArB,cAAyCC,EAAS,CARlD,MAQkD,CAAAC,EAAA,oBAC9C,OAAO,QAAUC,GAAY,QAC7B,KACA,SACA,KACA,QACA,MACA,aAAe,OACf,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,KAAO,WACZ,KAAK,QAAU,KAAK,KAAK,SAAWC,GACpC,KAAK,MAAQ,CAAC,EACd,KAAK,GAAK,KAAK,KAAK,IAAM,cAC1B,KAAK,KAAO,IAAOC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,SAAU,UAAW,KAAM,OAAQ,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,mGAAoG,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,oGAAqG,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,2HAA4H,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,4FAA6F,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,0GAA2G,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,wHAAyH,KAAM,SAAU,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAChjC,KAAK,KAAK,sBAAwBC,GAAgB,KAAK,KAAK,sBAAuB,KAAK,KAAK,YAAY,EACzG,KAAK,SAAW,IAAIC,GAASL,EAAM,CAC/B,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,oBAAqB,KAAK,KAAK,oBAC/B,qBAAsB,KAAK,KAAK,qBAChC,SAAU,QACV,SAAU,KAAK,GACf,qBAAsB,EAC1B,CAAC,EACD,KAAK,cAAgBM,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,uBAAuB,EAC9C,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,CACvC,CACA,SAAU,CACN,KAAK,KAAO,IAAIC,GAAmB,KAAM,CACrC,SAAU,KAAK,SACf,aAAc,GACd,YAAa,EACjB,CAAC,EACD,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,KAAK,SAAS,EACnB,KAAK,QAAQ,CACjB,CACA,OAAOC,EAAO,CACV,OAAO,KAAK,KAAK,OAAOA,CAAK,CACjC,CACJ,ECxDA,IAAAC,GAAA,CACE,KAAQ,4BACR,YAAe,kGACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,eACA,gBACA,gBACA,OACA,aACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,uBAAwB,cACxB,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,aAAc,cACd,WAAc,QAChB,CACF,EClDA,IAAOC,GAAQ,CACX,QAAS,CACL,4BAA6B,cACjC,CACJ,ECEA,IAAqBC,GAArB,MAAqBC,UAA0BC,EAAS,CANxD,MAMwD,CAAAC,EAAA,0BACpD,OAAO,QAAUC,GAAY,QAC7B,OAAO,gBAAkBH,EAAkB,KAC3C,KAAO,WACP,KAAOI,GACP,QACA,cAAgBC,GAChB,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,GAAK,KAAK,KAAK,IAAM,oBAC1B,KAAK,QAAU,KAAK,KAAK,SAAWC,GACpC,KAAK,cAAgBH,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,6BAA6B,EACpD,IAAMI,EAAS,IAAIC,GAAcJ,EAAM,CACnC,SAAU,KAAK,GACf,SAAU,MACV,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,qBAAsB,KAAK,KAAK,oBACpC,CAAC,EACD,KAAK,KAAK,sBAAsBN,EAAkB,gBAAiBS,CAAM,CAC7E,CACA,SAAU,CACN,GAAM,CAAE,OAAAE,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,QAAQ,CACjB,CACA,kBAAoBT,EAAA,MAAOU,EAAOC,IAAgB,CAC9C,KAAK,KAAK,SAASD,EAAM,IAAI,CAAC,CAAE,GAAAE,EAAI,SAAAC,EAAU,KAAAC,EAAM,SAAAC,EAAU,GAAGC,CAAK,KAC3D,CACH,OAAQ,KAAK,GACb,KAAAF,EACA,KAAMD,EACN,KAAM,CACF,KAAM,IACV,EACA,SAAU,GACV,OAAQ,CACJ,aAAc,KAAK,KAAK,aACxB,IAAK,GAAG,KAAK,KAAK,YAAY,qBAC9B,KAAM,CACF,OAAQD,EACR,YAAAD,EACA,SAAAI,EACA,GAAI,QAASC,GAAQ,CAAE,IAAKA,EAAK,GAAI,CACzC,EACA,gBAAiBlB,EAAkB,eACvC,EACA,GAAI,aAAckB,GAAQ,CACtB,KAAMA,EAAK,QACf,CACJ,EACH,CAAC,CACN,EA1BoB,qBA2BpB,OAAShB,EAAA,IAAOiB,EAAKC,GAAkB,CAAE,QAAS,KAAK,QAAS,WAAY,QAAS,KAAM,KAAK,KAAM,KAAM,KAAK,KAAM,SAAU,KAAK,KAAK,SAAU,OAAQ,KAAK,KAAK,OAAQ,MAAO,KAAK,KAAK,MAAO,cAAe,KAAK,iBAAkB,CAAC,EAArO,SACb,EClEA,IAAAC,GAAA,CACE,KAAQ,6BACR,YAAe,oGACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,gBACA,gBACA,gBACA,OACA,aACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,uBAAwB,cACxB,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,aAAc,cACd,WAAc,QAChB,CACF,EClDA,IAAOC,GAAQ,CACX,QAAS,CACL,6BAA8B,eAClC,CACJ,ECEA,IAAqBC,GAArB,MAAqBC,UAA2BC,EAAS,CANzD,MAMyD,CAAAC,EAAA,2BACrD,OAAO,QAAUC,GAAY,QAC7B,OAAO,gBAAkBH,EAAmB,KAC5C,KAAO,WACP,KAAOI,GACP,QACA,cAAgBC,GAChB,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,GAAK,KAAK,KAAK,IAAM,qBAC1B,KAAK,QAAU,KAAK,KAAK,SAAWC,GACpC,KAAK,cAAgBH,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,8BAA8B,EACrD,IAAMI,EAAS,IAAIC,GAAcJ,EAAM,CACnC,SAAU,KAAK,GACf,SAAU,MACV,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,qBAAsB,KAAK,KAAK,oBACpC,CAAC,EACD,KAAK,KAAK,sBAAsBN,EAAmB,gBAAiBS,CAAM,CAC9E,CACA,SAAU,CACN,GAAM,CAAE,OAAAE,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,QAAQ,CACjB,CACA,kBAAoBT,EAAA,MAAOU,EAAOC,IAAgB,CAC9C,KAAK,KAAK,SAASD,EAAM,IAAI,CAAC,CAAE,GAAAE,EAAI,SAAAC,EAAU,KAAAC,EAAM,SAAAC,EAAU,GAAGC,CAAK,KAC3D,CACH,OAAQ,KAAK,GACb,KAAAF,EACA,KAAMD,EACN,KAAM,CACF,KAAM,IACV,EACA,SAAU,GACV,OAAQ,CACJ,aAAc,KAAK,KAAK,aACxB,IAAK,GAAG,KAAK,KAAK,YAAY,qBAC9B,KAAM,CACF,OAAQD,EACR,YAAAD,EACA,SAAAI,EACA,GAAI,QAASC,GAAQ,CAAE,IAAKA,EAAK,GAAI,CACzC,EACA,gBAAiBlB,EAAmB,eACxC,EACA,GAAI,aAAckB,GAAQ,CACtB,KAAMA,EAAK,QACf,CACJ,EACH,CAAC,CACN,EA1BoB,qBA2BpB,OAAShB,EAAA,IAAOiB,EAAKC,GAAkB,CAAE,QAAS,KAAK,QAAS,WAAY,SAAU,KAAM,KAAK,KAAM,KAAM,KAAK,KAAM,SAAU,KAAK,KAAK,SAAU,cAAe,KAAK,iBAAkB,CAAC,EAApL,SACb,EChEA,IAAAC,GAAoB,WCFpB,IAAAC,GAAA,CACE,KAAQ,qBACR,YAAe,+BACf,QAAW,QACX,QAAW,MACX,MAAS,qBACT,KAAQ,SACR,YAAe,CACb,OACF,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,aACf,EACA,SAAY,CACV,gBACA,SACA,OACA,cACA,eACA,UACA,OACA,SACA,QACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,kBAAmB,mBACnB,sBAAuB,uBACvB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,cACf,UAAa,SACb,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,cAAiB,CACf,OAAU,QACZ,EACA,gBAAmB,CACjB,QAAW,SACX,QAAW,SACX,cAAe,UACf,KAAQ,UACR,WAAc,QAChB,CACF,EC/DA,IAAqBC,GAArB,cAAoCC,EAAU,CAF9C,MAE8C,CAAAC,EAAA,eAC1C,WACA,mBAAoB,CAChB,GAAM,CAAE,YAAAC,CAAY,EAAI,KAAK,MACzB,KAAK,YACLA,EAAY,KAAK,UAAU,CAEnC,CACA,cAAgBD,EAAA,IAAM,CAClB,KAAK,MAAM,SAAS,GAAG,CAC3B,EAFgB,iBAGhB,iBAAmBA,EAACE,GAAO,CACvB,IAAMC,EAAmB,OAAOD,EAAG,OAAO,KAAK,EAC/C,KAAK,MAAM,eAAeC,CAAgB,CAC9C,EAHmB,oBAInB,sBAAuB,CACnB,GAAM,CAAE,KAAAC,CAAK,EAAI,KAAK,MAChB,CAAE,cAAAC,CAAc,EAAI,KAAK,MAC/B,OAAQC,EAAK,QAAS,CAAE,KAAM,UAAW,aAAc,GAAGD,CAAa,OAAK,yBAA0B,MAAO,UAAW,iCAAkC,SAAUC,EAAK,QAAS,CAAE,UAAW,uCAAwC,KAAM,QAAS,QAAS,KAAK,iBAAkB,SAAU,KAAK,iBAAkB,MAAOD,EAAe,IAAK,MAAO,IAAK,KAAM,aAAcD,EAAK,QAAQ,CAAE,CAAC,CAAE,CAAC,CACzY,CACA,cAAe,CACX,GAAM,CAAE,KAAAA,CAAK,EAAI,KAAK,MACtB,OAAQE,EAAK,SAAU,CAAE,yBAA0B,MAAO,KAAM,SAAU,UAAW,0BAA2B,aAAcF,EAAK,QAAQ,EAAG,QAASJ,EAAA,IAAM,CACrJ,KAAK,MAAM,MAAM,CACrB,EAFmJ,WAEhJ,SAAUM,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,gBAAiB,KAAM,MAAO,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,kOAAmO,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAClc,CACA,cAAe,CACX,GAAM,CAAE,KAAAF,CAAK,EAAI,KAAK,MACtB,OAAQE,EAAK,SAAU,CAAE,yBAA0B,MAAO,KAAM,SAAU,UAAW,0BAA2B,aAAcF,EAAK,QAAQ,EAAG,QAAS,KAAK,cAAe,SAAUE,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,iCAAkC,KAAM,MAAO,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,2XAA4X,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAChxB,CACA,YAAa,CACT,GAAM,CAAE,KAAAF,CAAK,EAAI,KAAK,MACtB,OAAQE,EAAK,SAAU,CAAE,yBAA0B,MAAO,KAAM,SAAU,UAAW,0BAA2B,aAAcF,EAAK,gBAAgB,EAAG,QAASJ,EAAA,IAAM,KAAK,MAAM,eAAe,EAAhC,WAAmC,SAAUM,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,gBAAiB,KAAM,MAAO,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,uMAAwM,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAClmB,CACA,cAAe,CACX,GAAM,CAAE,KAAAF,CAAK,EAAI,KAAK,MACtB,OAAQE,EAAK,SAAU,CAAE,yBAA0B,MAAO,KAAM,SAAU,UAAW,0BAA2B,aAAcF,EAAK,QAAQ,EAAG,QAASJ,EAAA,IAAM,KAAK,MAAM,KAAK,EAAG,EAAzB,WAA4B,SAAUM,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,cAAe,OAAQ,KAAM,QAAS,YAAa,MAAO,KAAM,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,kBAAmB,KAAM,MAAO,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,4OAA6O,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,mCAAoC,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CACprB,CACA,eAAgB,CACZ,GAAM,CAAE,KAAAF,CAAK,EAAI,KAAK,MACtB,OAAQE,EAAK,SAAU,CAAE,yBAA0B,MAAO,KAAM,SAAU,UAAW,0BAA2B,aAAcF,EAAK,SAAS,EAAG,QAASJ,EAAA,IAAM,KAAK,MAAM,KAAK,GAAI,EAA1B,WAA6B,SAAUM,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,kBAAmB,KAAM,MAAO,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,uPAAwP,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CACvoB,CACA,kBAAmB,CACf,GAAM,CAAE,KAAAF,CAAK,EAAI,KAAK,MACtB,OAAQE,EAAK,SAAU,CAAE,yBAA0B,MAAO,KAAM,SAAU,UAAW,0BAA2B,aAAcF,EAAK,mBAAmB,EAAG,QAASJ,EAAA,IAAM,KAAK,MAAM,eAAe,KAAK,EAArC,WAAwC,SAAUM,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,gBAAiB,KAAM,MAAO,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,4FAA6F,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAC/f,CACA,sBAAuB,CACnB,GAAM,CAAE,KAAAF,CAAK,EAAI,KAAK,MACtB,OAAQE,EAAK,SAAU,CAAE,yBAA0B,MAAO,KAAM,SAAU,UAAW,0BAA2B,aAAcF,EAAK,sBAAsB,EAAG,QAASJ,EAAA,IAAM,KAAK,MAAM,eAAe,MAAM,EAAtC,WAAyC,SAAUM,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,uOAAwO,CAAC,EAAGA,EAAK,OAAQ,CAAE,KAAM,OAAQ,EAAG,eAAgB,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAC9oB,CACA,8BAA+B,CAC3B,GAAM,CAAE,KAAAF,CAAK,EAAI,KAAK,MACtB,OAAQE,EAAK,SAAU,CAAE,yBAA0B,MAAO,KAAM,SAAU,aAAcF,EAAK,qBAAqB,EAAG,UAAW,0BAA2B,QAASJ,EAAA,IAAM,KAAK,MAAM,eAAe,MAAM,EAAtC,WAAyC,SAAUM,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,wMAAyM,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,gBAAiB,KAAM,MAAO,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAC9mB,CACA,QAAS,CACL,GAAM,CAAE,aAAAC,EAAc,UAAAC,EAAW,KAAAC,CAAK,EAAI,KAAK,MACzC,CAAE,QAAAC,CAAQ,EAAID,EACpB,OAAQH,EAAM,MAAO,CAAE,UAAW,oBAAqB,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,8BAA+B,SAAUA,EAAK,MAAO,CAAE,UAAW,0BAA2B,IAAKC,EAAa,KAAM,IAAKC,EAAW,IAAKR,EAACW,GAAQ,CAC1N,KAAK,WAAaA,CACtB,EAFqN,MAEnN,CAAC,CAAE,CAAC,EAAGL,EAAM,MAAO,CAAE,UAAW,6BAA8B,SAAU,CAACI,EAAQ,QAAU,KAAK,aAAa,EAAGA,EAAQ,QAAU,KAAK,aAAa,EAAGA,EAAQ,gBAAkB,KAAK,qBAAqB,EAAGA,EAAQ,MAAQ,KAAK,WAAW,EAAGA,EAAQ,QAAU,KAAK,aAAa,EAAGA,EAAQ,SAAW,KAAK,cAAc,EAAGA,EAAQ,YAAc,KAAK,iBAAiB,EAAGA,EAAQ,gBAAkB,KAAK,qBAAqB,EAAGA,EAAQ,wBAC9a,KAAK,6BAA6B,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAClE,CACJ,EChEA,IAAOE,GAAQ,CACX,QAAS,CACL,OAAQ,QACR,OAAQ,gBACR,OAAQ,UACR,QAAS,WACT,eAAgB,oBAChB,kBAAmB,cACnB,qBAAsB,wBACtB,oBAAqB,sBACzB,CACJ,ECRA,SAASC,GAA4CC,EAAeC,EAAY,CAE5E,IAAMC,EAAaF,EAAc,MAAQC,EAAW,MAC9CE,EAAcH,EAAc,OAASC,EAAW,OAChDG,EAAc,KAAK,IAAIF,EAAYC,CAAW,EAC9CE,EAAWJ,EAAW,MAAQG,EAC9BE,EAAYL,EAAW,OAASG,EAEhCG,GAAWP,EAAc,MAAQK,GAAY,EAC7CG,GAAUR,EAAc,OAASM,GAAa,EACpD,MAAO,CACH,MAAOD,EACP,OAAQC,EACR,KAAMC,EACN,IAAKC,CACT,CACJ,CAhBSC,EAAAV,GAAA,+CAiBT,IAAOW,GAAQX,GCpBf,SAASY,GAAUC,EAAO,CACtB,OAAOA,GAAS,KAAK,GAAK,IAC9B,CAFSC,EAAAF,GAAA,aAGT,SAASG,GAAqCC,EAAGC,EAAGC,EAAe,CAC/D,IAAMC,EAAI,KAAK,IAAIP,GAAUM,CAAa,CAAC,EAE3C,OADoB,KAAK,KAAK,KAAK,IAAIC,CAAC,EAAIH,EAAI,KAAK,IAAIG,CAAC,EAAIF,GAAKA,GAAI,KAAK,IAAIE,CAAC,EAAIF,EAAI,KAAK,IAAIE,CAAC,EAAIH,GAAKA,CAAC,CAEjH,CAJSF,EAAAC,GAAA,wCAKT,IAAOK,GAAQL,GCRf,SAASM,GAA2BC,EAAQC,EAASC,EAAa,CAE9D,OAAID,EAAQ,KAAOD,EAAO,KACf,CACH,KAAMA,EAAO,KACb,MAAOE,EAAY,KACvB,EAGAD,EAAQ,IAAMD,EAAO,IACd,CACH,IAAKA,EAAO,IACZ,OAAQE,EAAY,MACxB,EAGAD,EAAQ,KAAOA,EAAQ,MAAQD,EAAO,KAAOA,EAAO,MAC7C,CACH,KAAMA,EAAO,KAAOA,EAAO,MAAQE,EAAY,MAC/C,MAAOA,EAAY,KACvB,EAGAD,EAAQ,IAAMA,EAAQ,OAASD,EAAO,IAAMA,EAAO,OAC5C,CACH,IAAKA,EAAO,IAAMA,EAAO,OAASE,EAAY,OAC9C,OAAQA,EAAY,MACxB,EAEG,IACX,CA9BSC,EAAAJ,GAAA,8BA+BT,IAAOK,GAAQL,GC/Bf,SAASM,GAA6BC,EAAQC,EAAaC,EAAa,CAEpE,OAAID,EAAY,KAAOD,EAAO,KACnB,CACH,KAAMA,EAAO,KACb,MAAOE,EAAY,KAAOA,EAAY,MAAQF,EAAO,IACzD,EAGAC,EAAY,IAAMD,EAAO,IAClB,CACH,IAAKA,EAAO,IACZ,OAAQE,EAAY,IAAMA,EAAY,OAASF,EAAO,GAC1D,EAGAC,EAAY,KAAOA,EAAY,MAAQD,EAAO,KAAOA,EAAO,MACrD,CACH,KAAME,EAAY,KAClB,MAAOF,EAAO,KAAOA,EAAO,MAAQE,EAAY,IACpD,EAGAD,EAAY,IAAMA,EAAY,OAASD,EAAO,IAAMA,EAAO,OACpD,CACH,IAAKE,EAAY,IACjB,OAAQF,EAAO,IAAMA,EAAO,OAASE,EAAY,GACrD,EAEG,IACX,CA9BSC,EAAAJ,GAAA,gCA+BT,IAAOK,GAAQL,GPrBf,IAAMM,GAAqB,CACvB,MAAO,EACP,cAAe,EACf,sBAAuB,GACvB,YAAa,OACb,aAAc,EAClB,EACMC,GAAwB,CAC1B,SAAU,EACV,WAAY,GACZ,aAAc,EACd,WAAY,GACZ,gBAAiB,GACjB,iBAAkB,GAClB,qBAAsB,CAAC,EACvB,mBAAoB,CACxB,EACMC,GAAiB,CACnB,OAAQ,GACR,OAAQ,GACR,eAAgB,GAChB,KAAM,GACN,OAAQ,GACR,QAAS,GACT,WAAY,GACZ,eAAgB,GAChB,uBAAwB,EAC5B,EACMC,GAAiB,CAGnB,QAAS,GACT,QAASD,GACT,eAAgBD,EACpB,EACqBG,GAArB,cAAyCC,EAAS,CA7ClD,MA6CkD,CAAAC,EAAA,oBAC9C,OAAO,QAAUC,GAAY,QAC7B,QAAU,KACV,UAAY,KACZ,gBAAkB,KAClB,WAAa,KACb,iBAAmB,KACnB,eAAiB,KACjB,oBAAsB,KACtB,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CACR,GAAGL,GACH,GAAGM,EACH,QAAS,CACL,GAAGP,GACH,GAAGO,GAAM,OACb,EACA,eAAgB,CACZ,GAAGR,GACH,GAAGQ,GAAM,cACb,CACJ,CAAC,EACD,KAAK,GAAK,KAAK,KAAK,IAAM,cAC1B,KAAK,MAAQ,eACb,KAAK,KAAO,SACZ,KAAK,cAAgBC,GACrB,KAAK,SAAS,CAClB,CACA,YAAYC,EAAM,CACd,GAAI,CAACA,EAAK,MAAQA,EAAK,SACnB,MAAO,GAEX,IAAMC,EAAmBD,EAAK,KAAK,MAAM,GAAG,EAAE,CAAC,EAC/C,MAAI,+BAA6B,KAAKC,CAAgB,CAI1D,CACA,KAAON,EAAA,IAAM,CACT,GAAM,CAAE,aAAAO,CAAa,EAAI,KAAK,eAAe,EAG7C,GAFI,CAACA,GAED,CAAC,KAAK,QACN,OACJ,IAAMC,EAAmBR,EAACS,GAAS,CAC/B,GAAI,CAACA,EACD,OACJ,IAAMC,EAASH,EAAa,GAC5B,GAAI,CAAC,KAAK,KAAK,QAAQG,CAAM,EACzB,OACJ,KAAK,KAAK,aAAaA,EAAQ,CAE3B,KAAM,IAAI,KAAK,CAACD,CAAI,EAAGF,EAAa,MAAQ,KAAK,KAAK,SAAS,EAAG,CAC9D,KAAME,EAAK,IACf,CAAC,EACD,KAAMA,EAAK,KACX,QAAS,MACb,CAAC,EACD,IAAME,EAAc,KAAK,KAAK,QAAQD,CAAM,EACvCC,IAEL,KAAK,KAAK,KAAK,oBAAqBA,CAAW,EAC/C,KAAK,eAAe,CAChB,aAAcA,CAClB,CAAC,EACD,KAAK,KAAK,KAAK,uBAAwBA,CAAW,EACtD,EAtByB,oBA0BnBC,EAAgB,KAAK,QAAQ,iBAAiB,CAAC,CAAC,EAClDA,EAAc,MAAQ,IAAM,GAC5B,KAAK,QAAQ,QAAQ,CAAE,MAAOA,EAAc,MAAQ,CAAE,CAAC,EAEvDA,EAAc,OAAS,IAAM,GAC7B,KAAK,QAAQ,QAAQ,CAAE,OAAQA,EAAc,OAAS,CAAE,CAAC,EAE7D,KAAK,QACA,iBAAiB,KAAK,KAAK,eAAe,oBAAoB,EAC9D,OAAOJ,EAAkBD,EAAa,KAAM,KAAK,KAAK,OAAO,CACtE,EA1CO,QA2CP,qBAAuBP,EAACa,GAAY,CAChC,KAAK,QAAUA,CACnB,EAFuB,wBAGvB,WAAab,EAACK,GAAS,CACnB,KAAK,MAAMA,CAAI,CACnB,EAFa,cAGb,iBAAmBL,EAAA,CAACO,EAAe,KAAK,eAAe,EAAE,eAAiB,CACtE,KAAK,eAAe,CAChB,aAAAA,EACA,GAAGb,GAEH,aAAc,CAAC,CAAC,KAAK,OACzB,CAAC,CACL,EAPmB,oBAQnB,SAAWM,EAACc,GAAY,CACpB,GAAI,CAAC,KAAK,QACN,OACJ,GAAM,CAAE,MAAAC,EAAO,cAAAC,EAAe,sBAAAC,CAAsB,EAAI,KAAK,eAAe,EAEtEC,EADSH,EAAQC,EACGF,EAC1B,KAAK,QAAQ,MAAMG,EAAwB,GAAK,CAAC,EACjD,KAAK,QAAQ,SAASC,CAAQ,EAC9B,IAAMC,EAAa,KAAK,QAAQ,cAAc,EACxCC,EAAgB,KAAK,QAAQ,iBAAiB,EAC9CC,EAAgBC,GAA4CF,EAAeD,CAAU,EAC3F,KAAK,QAAQ,cAAcE,CAAa,EACxC,KAAK,QAAQ,eAAeA,CAAa,EACzC,KAAK,eAAe,CAChB,MAAOH,EACP,cAAe,CACnB,CAAC,CACL,EAjBW,YAkBX,eAAiBlB,EAACuB,GAAkB,CAChC,GAAI,CAAC,KAAK,QACN,OACJ,GAAM,CAAE,MAAAR,EAAO,cAAAC,EAAe,sBAAAC,CAAsB,EAAI,KAAK,eAAe,EAEtEC,EADSH,EAAQC,EACGO,EAC1B,KAAK,QAAQ,SAASL,CAAQ,EAC9B,IAAMM,EAAQ,KAAK,QAAQ,aAAa,EAClCC,EAAcC,GAAqCF,EAAM,aAAcA,EAAM,cAAeD,CAAa,EACzGI,EAAeV,EAAwB,CAACQ,EAAcA,EAC5D,KAAK,QAAQ,MAAME,EAAcF,CAAW,EAC5C,KAAK,eAAe,CAChB,MAAOP,EACP,cAAeK,CACnB,CAAC,CACL,EAfiB,kBAgBjB,eAAiBvB,EAAA,IAAM,CACnB,GAAI,CAAC,KAAK,QACN,OACJ,GAAM,CAAE,sBAAAiB,CAAsB,EAAI,KAAK,eAAe,EACtD,KAAK,QAAQ,OAAO,CAAC,KAAK,QAAQ,QAAQ,EAAE,QAAU,EAAE,EACxD,KAAK,eAAe,CAChB,sBAAuB,CAACA,CAC5B,CAAC,CACL,EARiB,kBASjB,KAAOjB,EAAC4B,GAAU,CACT,KAAK,SAEV,KAAK,QAAQ,KAAKA,CAAK,CAC3B,EAJO,QAKP,eAAiB5B,EAAC6B,GAAa,CAC3B,GAAI,CAAC,KAAK,QACN,OACJ,IAAMC,EAAW,CACb,KAAM,EACN,MAAO,EACP,OAAQ,GAAK,EACb,OAAQ,EAAI,EAChB,EACA,KAAK,QAAQ,eAAeA,EAASD,CAAQ,CAAC,EAC9C,KAAK,eAAe,CAChB,YAAaA,CACjB,CAAC,CACL,EAbiB,kBAcjB,MAAQ7B,EAAA,IAAM,CACL,KAAK,UAEV,KAAK,QAAQ,MAAM,EACnB,KAAK,QAAQ,eAAe,KAAK,KAAK,eAAe,oBAAsB,CAAC,EAC5E,KAAK,iBAAiB,EAC1B,EANQ,SAWR,MAAQA,EAACK,GAAS,CAEV,KAAK,YACL,IAAI,gBAAgB,KAAK,SAAS,EAClC,KAAK,UAAY,MAGrB,IAAI0B,EAAW1B,EAAK,KACd0B,aAAoB,OAEtBA,EADiB,KAAK,KAAK,QAAQ1B,EAAK,EAAE,GACrB,MAErB0B,aAAoB,KACpB,KAAK,UAAY,IAAI,gBAAgBA,CAAQ,EAI7C,QAAQ,KAAK,gEAAiE,QAAS1B,EAAM,aAAcA,EAAK,KAAM,oBAAqB,OAAOA,EAAK,IAAI,EAE/J,KAAK,KAAK,KAAK,oBAAqBA,CAAI,EACxC,KAAK,iBAAiBA,CAAI,CAC9B,EArBQ,SAyBR,KAAOL,EAAA,IAAM,CACT,KAAK,eAAe,EAChB,KAAK,YACL,IAAI,gBAAgB,KAAK,SAAS,EAClC,KAAK,UAAY,MAErB,KAAK,iBAAiB,IAAI,CAC9B,EAPO,QAYP,YAAcA,EAACgC,GAAe,CACtB,KAAK,UAET,KAAK,WAAaA,EAClB,KAAK,QAAU,IAAI,GAAAC,QAAQD,EAAY,KAAK,KAAK,cAAc,EAE/D,KAAK,iBAAmB,IAAM,CACtB,KAAK,UACL,KAAK,gBAAkB,KAAK,QAAQ,eAAe,EAE3D,EACA,KAAK,gBAAmBE,GAAU,CAC9B,GAAI,CAAC,KAAK,SAAW,CAAC,KAAK,gBACvB,OACJ,IAAMf,EAAa,KAAK,QAAQ,cAAc,EACxCgB,EAAc,KAAK,QAAQ,eAAe,EAChD,GAAID,EAAM,OAAO,SAAW,MAAO,CAC/B,IAAME,EAAiBC,GAA2BlB,EAAYgB,EAAa,KAAK,eAAe,EAC3FC,GACA,KAAK,QAAQ,eAAeA,CAAc,CAClD,KACK,CACD,IAAMA,EAAiBE,GAA6BnB,EAAYgB,EAAa,KAAK,eAAe,EAC7FC,GACA,KAAK,QAAQ,eAAeA,CAAc,CAClD,CACJ,GACA,KAAK,oBAAsB,IAAM,CAC7B,KAAK,eAAe,CAAE,aAAc,EAAK,CAAC,CAC9C,EACAJ,EAAW,iBAAiB,YAAa,KAAK,gBAAgB,EAC9DA,EAAW,iBAAiB,UAAW,KAAK,cAAc,EAC1DA,EAAW,iBAAiB,QAAS,KAAK,oBAAqB,CAC3D,KAAM,EACV,CAAC,EACL,EAnCc,eAuCd,eAAiBhC,EAAA,IAAM,CACd,KAAK,UAEV,KAAK,eAAe,CAAE,aAAc,EAAM,CAAC,EACvC,KAAK,kBAAoB,KAAK,YAC9B,KAAK,WAAW,oBAAoB,YAAa,KAAK,gBAAgB,EAEtE,KAAK,gBAAkB,KAAK,YAC5B,KAAK,WAAW,oBAAoB,UAAW,KAAK,cAAc,EAElE,KAAK,qBAAuB,KAAK,YACjC,KAAK,WAAW,oBAAoB,QAAS,KAAK,mBAAmB,EAEzE,KAAK,QAAQ,QAAQ,EACrB,KAAK,QAAU,KACf,KAAK,WAAa,KAClB,KAAK,iBAAmB,KACxB,KAAK,eAAiB,KACtB,KAAK,oBAAsB,KAC3B,KAAK,gBAAkB,KAC3B,EApBiB,kBAwBjB,aAAeA,EAAA,IACJ,KAAK,UADD,gBAGf,SAAU,CACN,KAAK,iBAAiB,IAAI,EAC1B,GAAM,CAAE,OAAAuC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,GAAM,CAAE,aAAAhC,CAAa,EAAI,KAAK,eAAe,EAC7C,GAAIA,EAAc,CACd,IAAMF,EAAO,KAAK,KAAK,QAAQE,EAAa,EAAE,EAC9C,KAAK,KAAK,KAAK,qBAAsBF,CAAI,CAC7C,CACA,KAAK,KAAK,EACV,KAAK,QAAQ,CACjB,CACA,QAAS,CACL,GAAM,CAAE,aAAAE,EAAc,cAAAS,CAAc,EAAI,KAAK,eAAe,EAC5D,OAAIT,IAAiB,MAAQA,EAAa,SAC/B,KAEHiC,EAAKC,GAAQ,CAAE,aAAclC,EAAc,UAAW,KAAK,WAAa,GAAI,YAAa,KAAK,YAAa,KAAM,KAAK,KAAM,KAAM,KAAK,KAAM,KAAM,KAAK,KAAM,cAAeS,EAAe,SAAU,KAAK,SAAU,eAAgB,KAAK,eAAgB,eAAgB,KAAK,eAAgB,KAAM,KAAK,KAAM,eAAgB,KAAK,eAAgB,MAAO,KAAK,KAAM,CAAC,CACpX,CACJ,EQnVA,IAAA0B,GAAA,CACE,KAAQ,kBACR,YAAe,sDACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,YACA,WACA,SACA,QACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,uBAAwB,cACxB,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,aAAc,cACd,WAAc,QAChB,CACF,ECnDA,IAAOC,GAAQ,CACX,QAAS,CACL,oBAAqB,WACzB,CACJ,ECIA,IAAqBC,GAArB,cAAuCC,EAAS,CARhD,MAQgD,CAAAC,EAAA,kBAC5C,OAAO,QAAUC,GAAY,QAC7B,KACA,SACA,KACA,QACA,MACA,aAAe,SACf,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,KAAO,WACZ,KAAK,MAAQ,CAAC,EACd,KAAK,QAAU,KAAK,KAAK,SAAWC,GACpC,KAAK,GAAK,KAAK,KAAK,IAAM,YAC1B,KAAK,KAAO,IAAOC,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,SAAUA,EAAK,OAAQ,CAAE,EAAG,u0DAAw0D,GAAI,GAAI,CAAC,CAAE,CAAC,EAAGA,EAAM,IAAK,CAAE,KAAM,OAAQ,YAAa,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,GAAI,IAAK,KAAM,OAAQ,SAAUA,EAAK,MAAO,CAAE,UAAW,IAAK,CAAC,CAAE,CAAC,EAAGA,EAAK,QAAS,CAAE,KAAM,UAAW,EAAG,IAAK,EAAG,IAAK,MAAO,KAAM,OAAQ,KAAM,UAAW,ohIAAqhI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,EACnxM,KAAK,cAAgBC,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,qBAAqB,EAC5C,KAAK,KAAK,sBAAwBC,GAAgB,KAAK,KAAK,sBAAuB,KAAK,KAAK,YAAY,EACzG,KAAK,SAAW,IAAIC,GAASN,EAAM,CAC/B,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,oBAAqB,KAAK,KAAK,oBAC/B,qBAAsB,KAAK,KAAK,qBAChC,SAAU,YACV,SAAU,KAAK,GACf,qBAAsB,EAC1B,CAAC,EACD,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,CACvC,CACA,SAAU,CACN,KAAK,KAAO,IAAIO,GAAc,KAAM,CAChC,SAAU,KAAK,SACf,SAAU,OACV,WAAY,GACZ,WAAY,GACZ,gBAAiB,EACrB,CAAC,EACD,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,KAAK,SAAS,EACnB,KAAK,QAAQ,CACjB,CACA,OAAOC,EAAO,CACV,OAAO,KAAK,KAAK,OAAOA,CAAK,CACjC,CACJ,EC1DA,IAAAC,GAAA,CACE,KAAQ,iBACR,YAAe,yCACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,UACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,uBAAwB,cACxB,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,aAAc,cACd,WAAc,QAChB,CACF,EChDA,IAAOC,GAAQ,CACX,QAAS,CACL,mBAAoB,UACxB,CACJ,ECIA,IAAqBC,GAArB,cAAsCC,EAAS,CAR/C,MAQ+C,CAAAC,EAAA,iBAC3C,OAAO,QAAUC,GAAY,QAC7B,KACA,SACA,KACA,QACA,MACA,aAAe,KACf,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,KAAO,WACZ,KAAK,MAAQ,CAAC,EACd,KAAK,QAAU,KAAK,KAAK,SAAWC,GACpC,KAAK,GAAK,KAAK,KAAK,IAAM,WAC1B,KAAK,KAAO,IAAOC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,KAAM,OAAQ,SAAU,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,0JAA2J,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,kKAAmK,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,yJAA0J,KAAM,SAAU,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,qKAAsK,KAAM,SAAU,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAC59B,KAAK,KAAK,sBAAwBC,GAAgB,KAAK,KAAK,sBAAuB,KAAK,KAAK,YAAY,EACzG,KAAK,SAAW,IAAIC,GAASL,EAAM,CAC/B,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,oBAAqB,KAAK,KAAK,oBAC/B,qBAAsB,KAAK,KAAK,qBAChC,SAAU,WACV,SAAU,KAAK,GACf,qBAAsB,EAC1B,CAAC,EACD,KAAK,cAAgBM,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,oBAAoB,EAC3C,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,CACvC,CACA,SAAU,CACN,KAAK,KAAO,IAAIC,GAAc,KAAM,CAChC,SAAU,KAAK,SACf,aAAc,GACd,YAAa,EACjB,CAAC,EACD,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,KAAK,SAAS,EACnB,KAAK,QAAQ,CACjB,CACA,OAAOC,EAAO,CACV,OAAO,KAAK,KAAK,OAAOA,CAAK,CACjC,CACJ,ECxDA,IAAAC,GAAA,CACE,KAAQ,iBACR,YAAe,6EACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,UACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,uBAAwB,cACxB,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,cAAiB,CACf,OAAU,QACZ,EACA,gBAAmB,CACjB,aAAc,cACd,WAAc,QAChB,CACF,ECnDA,IAAOC,GAAQ,CACX,QAAS,CACL,mBAAoB,UACxB,CACJ,ECIA,IAAqBC,GAArB,cAAsCC,EAAS,CAR/C,MAQ+C,CAAAC,EAAA,iBAC3C,OAAO,QAAUC,GAAY,QAC7B,KACA,SACA,KACA,QACA,MACA,SACA,YAAYC,EAAMC,EAAM,CAUpB,GATA,MAAMD,EAAMC,CAAI,EAChB,KAAK,KAAO,WACZ,KAAK,MAAQ,CAAC,EACd,KAAK,QAAU,KAAK,KAAK,SAAWC,GACpC,KAAK,GAAK,KAAK,KAAK,IAAM,WAC1B,KAAK,cAAgBC,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,oBAAoB,EAC3C,KAAK,KAAO,IAAOC,EAAK,MAAO,CAAE,UAAW,iCAAkC,QAAS,YAAa,OAAQ,KAAM,MAAO,KAAM,cAAe,OAAQ,SAAUA,EAAM,IAAK,CAAE,KAAM,eAAgB,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,qDAAsD,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,2CAA4C,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAC5V,CAAC,KAAK,KAAK,aACX,MAAM,IAAI,MAAM,+EAA+E,EAEnG,KAAK,SAAW,KAAK,KAAK,aAC1B,KAAK,KAAK,sBAAwBC,GAAgB,KAAK,KAAK,sBAAuB,KAAK,KAAK,YAAY,EACzG,KAAK,SAAW,IAAIC,GAAeN,EAAM,CACrC,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,qBAAsB,KAAK,KAAK,qBAChC,SAAU,WACV,SAAU,KAAK,EACnB,CAAC,CACL,CACA,SAAU,CACN,KAAK,KAAO,IAAIO,GAAoB,KAAM,CACtC,SAAU,KAAK,SACf,SAAU,WACV,WAAY,GACZ,UAAW,KAAK,KAAK,SACzB,CAAC,EACD,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,OAAOC,EAAO,CACV,OAAO,KAAK,KAAK,OAAOA,CAAK,CACjC,CACA,WAAY,CACR,KAAK,QAAQ,CACjB,CACJ,ECzDA,IAAAC,GAAA,CACE,KAAQ,YACR,YAAe,mGACf,QAAW,QACX,QAAW,MACX,MAAS,qBACT,KAAQ,SACR,YAAe,CACb,OACF,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,cACb,KAAQ,oCACR,WAAY,8BACd,EACA,SAAY,CACV,gBACA,MACA,kBACA,OACA,aACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,kBAAmB,mBACnB,sBAAuB,uBACvB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,cAAe,cACf,OAAU,SACV,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,aAAc,cACd,kBAAmB,SACnB,QAAW,SACX,WAAc,SACd,QAAW,SACX,cAAe,UACf,KAAQ,UACR,WAAc,SACd,OAAU,QACZ,CACF,ECjEA,IAAOC,GAAQ,CACX,QAAS,CACL,cAAe,OAEf,OAAQ,SAER,iBAAkB,6BAElB,cAAe,yEAEf,gBAAiB,0EACrB,CACJ,ECTA,IAAMC,GAAN,cAAoBC,EAAU,CAH9B,MAG8B,CAAAC,EAAA,cAC1B,KAAO,SAAS,cAAc,MAAM,EAEpC,MACA,YAAYC,EAAO,CACf,MAAMA,CAAK,EACX,KAAK,KAAK,GAAKC,GAAO,CAC1B,CACA,mBAAoB,CAChB,KAAK,MAAM,MAAQ,GACnB,KAAK,KAAK,iBAAiB,SAAU,KAAKC,EAAa,EACvD,SAAS,KAAK,YAAY,KAAK,IAAI,CACvC,CACA,sBAAuB,CACnB,KAAK,KAAK,oBAAoB,SAAU,KAAKA,EAAa,EAC1D,SAAS,KAAK,YAAY,KAAK,IAAI,CACvC,CACAA,GAAgBH,EAACI,GAAO,CACpBA,EAAG,eAAe,EAClB,GAAM,CAAE,QAAAC,CAAQ,EAAI,KAAK,MACnBC,EAAgB,KAAK,MAAM,MAAM,KAAK,EAC5CD,EAAQC,CAAa,CACzB,EALgB,iBAMhB,QAAS,CACL,GAAM,CAAE,KAAAC,CAAK,EAAI,KAAK,MACtB,OAAQC,EAAM,MAAO,CAAE,UAAW,WAAY,SAAU,CAACA,EAAK,QAAS,CAAE,UAAW,+CAAgD,KAAM,OAAQ,aAAcD,EAAK,kBAAkB,EAAG,YAAaA,EAAK,kBAAkB,EAAG,IAAKP,EAACS,GAAU,CACjO,KAAK,MAAQA,CACjB,EAF0N,OAEvN,4BAA6B,GAAM,KAAM,KAAK,KAAK,EAAG,CAAC,EAAGD,EAAK,SAAU,CAAE,UAAW,mEAAoE,KAAM,SAAU,KAAM,KAAK,KAAK,GAAI,SAAUD,EAAK,QAAQ,CAAE,CAAC,CAAC,CAAE,CAAC,CAC/O,CACJ,EACOG,GAAQZ,GCqBA,SAARa,GAA2CC,EAAcC,EAAeC,EAAU,CACrF,IAAMC,EAAQC,GAAQJ,EAAa,KAAK,EACpCK,EACJ,OAAQJ,EAAe,CACnB,IAAK,QAAS,CAEV,GADgCE,EAAM,KAAMG,GAASA,EAAK,OAAS,MAAM,EAErE,OAEJD,EAAWF,EAAM,OAAQG,GAASA,EAAK,OAAS,UAAYA,EAAK,OAAS,YAAY,EACtF,KACJ,CACA,IAAK,OAAQ,CACTD,EAAWF,EAAM,OAAQG,GAASA,EAAK,OAAS,UAAYA,EAAK,OAAS,eAAe,EACzF,KACJ,CACA,QACI,MAAM,IAAI,MAAM,4DAA4DL,CAAa,EAAE,CAEnG,CACAI,EAAS,QAASC,GAAS,CACvBA,EAAK,YAAaC,GAAcL,EAASK,CAAS,CAAC,CACvD,CAAC,CACL,CAvBwBC,EAAAT,GAAA,6BC5CxB,SAASU,IAAU,CACf,OAAQC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,k3BAAm3B,KAAM,UAAW,YAAa,SAAU,CAAC,CAAE,CAAC,CACjjC,CAFSC,EAAAF,GAAA,WAGT,SAASG,GAAiBC,EAAK,CAC3B,IAAMC,EAAgB,kBAChBC,EAAkB,UACxB,OAAID,EAAc,KAAKD,CAAG,EACfA,EAEJE,EAAkBF,CAC7B,CAPSF,EAAAC,GAAA,oBAQT,SAASI,GAAkBC,EAAG,CAG1B,OAFcC,GAAQD,EAAE,aAAa,KAAK,EACvB,OAAQE,GAASA,EAAK,OAAS,UAAYA,EAAK,OAAS,eAAe,EAC/E,OAAS,CACzB,CAJSR,EAAAK,GAAA,qBAKT,SAASI,GAAkBP,EAAK,CAC5B,OAAOA,GAAK,WAAW,SAAS,GAAKA,GAAK,WAAW,UAAU,CACnE,CAFSF,EAAAS,GAAA,qBAGT,SAASC,GAAmBR,EAAK,CAC7B,GAAM,CAAE,SAAAS,CAAS,EAAI,IAAI,IAAIT,CAAG,EAChC,OAAOS,EAAS,UAAUA,EAAS,YAAY,GAAG,EAAI,CAAC,CAC3D,CAHSX,EAAAU,GAAA,sBAIT,IAAqBE,GAArB,MAAqBC,UAAYC,EAAS,CAjC1C,MAiC0C,CAAAd,EAAA,YACtC,OAAO,QAAUe,GAAY,QAC7B,OAAO,gBAAkBF,EAAI,KAC7B,KACA,SACA,OACA,kBACA,YAAYG,EAAMC,EAAM,CAUpB,GATA,MAAMD,EAAMC,CAAI,EAChB,KAAK,GAAK,KAAK,KAAK,IAAM,MAC1B,KAAK,KAAO,WACZ,KAAK,KAAO,IAAMlB,EAAKD,GAAS,CAAC,CAAC,EAElC,KAAK,cAAgBoB,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,eAAe,EACtC,KAAK,SAAW,KAAK,KAAK,aACtB,CAAC,KAAK,SACN,MAAM,IAAI,MAAM,+EAA+E,EAEnG,KAAK,OAAS,IAAIC,GAAcH,EAAM,CAClC,SAAU,KAAK,GACf,SAAU,MACV,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,qBAAsB,KAAK,KAAK,oBACpC,CAAC,EACD,KAAK,KAAK,sBAAsBH,EAAI,gBAAiB,KAAK,MAAM,CACpE,CACA,QAAUb,EAACE,GACA,KAAK,OAAO,KAAK,WAAY,CAAE,IAAAA,CAAI,CAAC,EADrC,WAGV,QAAUF,EAAA,MAAOoB,EAAiBC,IAAiB,CAE/C,GAAID,EAAgB,WAAW,MAAM,EACjC,OAEJ,IAAMlB,EAAMD,GAAiBmB,CAAe,EAC5C,GAAI,CAACX,GAAkBP,CAAG,EAAG,CACzB,KAAK,KAAK,IAAI,gCAAgCA,CAAG,EAAE,EACnD,KAAK,KAAK,KAAK,KAAK,KAAK,iBAAiB,EAAG,QAAS,GAAI,EAC1D,MACJ,CACA,KAAK,KAAK,IAAI,8CAA8CA,CAAG,EAAE,EACjE,GAAI,CACA,IAAMoB,EAAO,MAAM,KAAK,QAAQpB,CAAG,EAC7BqB,EAAO,CACT,KAAMF,EACN,OAAQ,KAAK,GACb,KAAMC,EAAK,MAAQZ,GAAmBR,CAAG,EACzC,KAAMoB,EAAK,KACX,KAAM,CACF,KAAMA,EAAK,IACf,EACA,SAAU,GAEV,KAAM,CACF,IAAApB,CACJ,EACA,OAAQ,CACJ,aAAc,KAAK,KAAK,aACxB,IAAK,GAAG,KAAK,QAAQ,WACrB,KAAM,CACF,OAAQA,EACR,IAAAA,CACJ,EACA,gBAAiBW,EAAI,eACzB,CACJ,EACA,KAAK,KAAK,IAAI,0BAA0B,EACxC,GAAI,CACA,OAAO,KAAK,KAAK,QAAQU,CAAI,CACjC,OACOC,EAAK,CACR,OAAKA,EAAI,eACL,KAAK,KAAK,IAAIA,CAAG,EAEdA,CACX,CACJ,OACOA,EAAK,CACR,YAAK,KAAK,IAAIA,CAAG,EACjB,KAAK,KAAK,KAAK,CACX,QAAS,KAAK,KAAK,eAAe,EAClC,QAASA,CACb,EAAG,QAAS,GAAI,EACTA,CACX,CACJ,EAxDU,WAyDV,eAAiBxB,EAAC,GAAM,CACpByB,GAA0B,EAAE,aAAc,OAASvB,GAAQ,CACvD,KAAK,QAAQA,CAAG,CACpB,CAAC,CACL,EAJiB,kBAKjB,gBAAkBF,EAAC,GAAM,CACrByB,GAA0B,EAAE,cAAe,QAAUvB,GAAQ,CACzD,KAAK,QAAQA,CAAG,CACpB,CAAC,CACL,EAJkB,mBAKlB,QAAS,CACL,OAAOH,EAAK2B,GAAO,CAAE,KAAM,KAAK,KAAM,QAAS,KAAK,OAAQ,CAAC,CACjE,CACA,SAAU,CACN,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,QAAQ,CACjB,CACJ,EAGAf,GAAI,UAAU,kBAAoBP,GCnJlC,IAAAuB,GAAA,CACE,KAAQ,aACR,YAAe,qCACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,MACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,uBAAwB,cACxB,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,cAAiB,CACf,OAAU,QACZ,EACA,gBAAmB,CACjB,aAAc,cACd,WAAc,QAChB,CACF,ECnDA,IAAOC,GAAQ,CACX,QAAS,CACL,eAAgB,MACpB,CACJ,ECIA,IAAqBC,GAArB,cAAkCC,EAAS,CAR3C,MAQ2C,CAAAC,EAAA,aACvC,OAAO,QAAUC,GAAY,QAC7B,KACA,SACA,KACA,QACA,MACA,aAAe,KACf,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAMC,CAAI,EAChB,KAAK,KAAO,WACZ,KAAK,MAAQ,CAAC,EACd,KAAK,QAAU,KAAK,KAAK,SAAWC,GACpC,KAAK,GAAK,KAAK,KAAK,IAAM,OAC1B,KAAK,KAAO,IAAOC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,mRAAoR,KAAM,UAAW,YAAa,SAAU,CAAC,CAAE,CAAC,EACzd,KAAK,KAAK,sBAAwBC,GAAgB,KAAK,KAAK,sBAAuB,KAAK,KAAK,YAAY,EACzG,KAAK,SAAW,IAAIC,GAASL,EAAM,CAC/B,aAAc,KAAK,KAAK,aACxB,iBAAkB,KAAK,KAAK,iBAC5B,oBAAqB,KAAK,KAAK,oBAC/B,qBAAsB,KAAK,KAAK,qBAChC,SAAU,OACV,SAAU,KAAK,GACf,qBAAsB,EAC1B,CAAC,EACD,KAAK,cAAgBM,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,gBAAgB,EACvC,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,CACvC,CACA,SAAU,CACN,KAAK,KAAO,IAAIC,GAAc,KAAM,CAChC,SAAU,KAAK,QACnB,CAAC,EACD,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAE/B,CACA,WAAY,CACR,KAAK,KAAK,SAAS,EACnB,KAAK,QAAQ,CACjB,CACA,OAAOC,EAAO,CACV,OAAO,KAAK,KAAK,OAAOA,CAAK,CACjC,CACJ,ECtDA,IAAAC,GAAA,CACE,KAAQ,uBACR,YAAe,uIACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,cACb,KAAQ,uDACV,EACA,SAAY,CACV,gBACA,YACA,eACA,WACA,UACA,WACA,OACA,WACA,MACA,KACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,YAAa,cACb,kBAAmB,cACnB,gBAAiB,cACjB,iBAAkB,cAClB,qBAAsB,cACtB,kBAAmB,cACnB,iBAAkB,cAClB,iBAAkB,cAClB,YAAa,cACb,aAAc,aAChB,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,cAAiB,CACf,OAAU,QACZ,EACA,gBAAmB,CACjB,aAAc,cACd,MAAS,UACT,2BAA4B,SAC5B,WAAc,SACd,OAAU,QACZ,CACF,ECxDO,IAAMC,GAAmB,CAE5B,UAAW,KACX,IAAAC,GACA,QAAAC,GACA,SAAAC,GACA,YAAAC,GACA,UAAAC,GACA,SAAAC,GACA,SAAAC,GACA,IAAAC,GACA,KAAAC,EACJ,EACMC,GAAiB,CACnB,QAAS,OAAO,KAAKV,EAAgB,CACzC,EACqBW,GAArB,cAA2CC,EAAW,CA3BtD,MA2BsD,CAAAC,EAAA,sBAClD,OAAO,QAAUC,GAAY,QAC7BC,GAAoB,IAAI,IACxB,YAAYC,EAAMC,EAAM,CAIpB,GAHA,MAAMD,EAAM,CAAE,GAAGN,GAAgB,GAAGO,CAAK,CAAC,EAC1C,KAAK,GAAK,KAAK,KAAK,IAAM,gBAC1B,KAAK,KAAO,SACR,KAAK,KAAK,cAAgB,KAC1B,MAAM,IAAI,MAAM,6GAA6G,CAErI,CACA,WAAWC,EAAS,CAChB,KAAK,UAAU,EACf,MAAM,WAAWA,CAAO,EACxB,KAAK,QAAQ,CACjB,CACA,SAAU,CACN,KAAK,KAAK,QAAQ,QAASC,GAAa,CACpC,GAAM,CAAE,QAAAC,EAAS,GAAGC,CAAK,EAAI,KAAK,KAC5BC,EAA4B,CAC9B,GAAGD,EACH,oBAAqB,KAAK,KAAK,sBAAsBF,CAAQ,CACjE,EACMI,EAASvB,GAAiBmB,CAAQ,EACxC,GAAII,GAAU,KAAM,CAChB,IAAMC,EAAc,OAAO,KAAKxB,EAAgB,EAC1CyB,EAAY,IAAI,KAAK,WAAW,KAAM,CACxC,MAAO,OACP,KAAM,aACV,CAAC,EACD,MAAM,IAAI,MAAM,oBAAoBN,CAAQ,oBAAoBM,EAAU,OAAOD,CAAW,CAAC,GAAG,CACpG,CACA,KAAK,KAAK,IAAID,EAAQD,CAAyB,EAG/C,KAAKP,GAAkB,IAAI,KAAK,KAAK,UAAUI,CAAQ,CAAC,CAC5D,CAAC,CACL,CACA,WAAY,CACR,QAAWI,KAAU,KAAKR,GACtB,KAAK,KAAK,aAAaQ,CAAM,EAEjC,KAAKR,GAAkB,MAAM,CACjC,CACJ,ECvEA,IAAAW,GAAA,CACE,KAAQ,uBACR,YAAe,+DACf,QAAW,QACX,QAAW,MACX,MAAS,qBACT,KAAQ,SACR,YAAe,CACb,OACF,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,iBACA,QACA,SACA,eACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,kBAAmB,mBACnB,sBAAuB,uBACvB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,cACf,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,cAAiB,CACf,OAAU,QACZ,EACA,gBAAmB,CACjB,QAAW,SACX,QAAW,SACX,cAAe,UACf,KAAQ,UACR,WAAc,QAChB,CACF,EC9DA,IAAOC,GAAQ,CACX,QAAS,CACL,wBAAyB,aACzB,eAAgB,yBAChB,cAAe,wBACf,mBAAoB,uBACpB,aAAc,gBACd,cAAe,iBACf,YAAa,mCACb,UAAW,YACX,eAAgB,kBAChB,iBAAkB,eACtB,CACJ,ECZe,SAARC,GAA+B,CAAE,UAAAC,EAAW,KAAAC,CAAM,EAAG,CACxD,OAAQC,EAAK,SAAU,CAAE,UAAW,uFAAwF,KAAM,SAAU,MAAOD,EAAK,kBAAkB,EAAG,aAAcA,EAAK,kBAAkB,EAAG,QAASD,EAAW,4BAA6B,GAAM,SAAUE,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,KAAM,OAAQ,OAAQ,eAAgB,eAAgB,IAAK,iBAAkB,QAAS,kBAAmB,QAAS,SAAU,CAACA,EAAK,OAAQ,CAAE,GAAI,KAAM,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,CAAC,EAAGA,EAAK,OAAQ,CAAE,GAAI,IAAK,GAAI,IAAK,GAAI,KAAM,GAAI,IAAK,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAChpB,CAFwBC,EAAAJ,GAAA,iBCGT,SAARK,GAA8B,CAAE,UAAAC,EAAW,iBAAAC,EAAkB,gBAAAC,EAAiB,KAAAC,CAAM,EAAG,CAC1F,OAAIH,EACQI,EAAK,SAAU,CAAE,UAAW,yHAA0H,KAAM,SAAU,MAAOD,EAAK,eAAe,EAAG,aAAcA,EAAK,eAAe,EAAG,QAASD,EAAiB,4BAA6B,GAAM,SAAUE,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,MAAO,OAAQ,MAAO,QAAS,cAAe,SAAUA,EAAK,OAAQ,CAAE,EAAG,KAAM,EAAG,KAAM,MAAO,KAAM,OAAQ,IAAK,CAAC,CAAE,CAAC,CAAE,CAAC,EAExgBA,EAAK,SAAU,CAAE,UAAW,qFAAsF,KAAM,SAAU,MAAOD,EAAK,gBAAgB,EAAG,aAAcA,EAAK,gBAAgB,EAAG,QAASF,EAAkB,4BAA6B,GAAM,SAAUG,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,KAAM,eAAgB,SAAUA,EAAK,OAAQ,CAAE,EAAG,0LAA2L,CAAC,CAAE,CAAC,CAAE,CAAC,CACnpB,CALwBC,EAAAN,GAAA,gBCHT,SAARO,GAAkC,CAAE,aAAAC,EAAc,KAAAC,CAAM,EAAG,CAC9D,OAAQC,EAAK,SAAU,CAAE,UAAW,0FAA2F,KAAM,SAAU,MAAOD,EAAK,gBAAgB,EAAG,aAAcA,EAAK,gBAAgB,EAAG,QAASD,EAAc,4BAA6B,GAAM,SAAUE,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,KAAM,eAAgB,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,mDAAoD,CAAC,EAAGA,EAAK,OAAQ,CAAE,YAAa,UAAW,EAAG,gbAAib,YAAa,SAAU,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CACtgC,CAFwBC,EAAAJ,GAAA,oBCCxB,SAASK,GAAOC,EAAG,CAEf,OAAQA,GAAKA,GAAK,KAAO,IAAMA,EAAI,EAAI,IAAM,MAAQA,CACzD,CAHSC,EAAAF,GAAA,UAIT,IAAMG,GAAN,cAAwBC,EAAU,CANlC,MAMkC,CAAAF,EAAA,kBAC9B,aAAe,CACX,MAAO,OACP,OAAQ,OACR,QAAS,MACb,EACA,aAAe,CACX,SAAU,WACV,MAAO,OACP,OAAQ,OACR,WAAY,QACZ,QAAS,EACb,EACA,mBAAqB,CACjB,WAAY,OACZ,YAAa,OACb,UAAW,OACX,aAAc,OACd,OAAQ,EACR,MAAO,OACX,EACA,cAAgB,CACZ,WAAY,OACZ,YAAa,OACb,aAAc,OACd,SAAU,QACd,EACA,UAAY,CACR,QAAS,QACT,WAAY,OACZ,WAAY,OACZ,YAAa,OACb,SAAU,OACV,WAAY,aAChB,EACA,aAAe,GACf,MACA,YAAYG,EAAO,CACf,MAAMA,CAAK,EACX,KAAK,MAAQ,CAAE,YAAa,CAAE,CAClC,CACA,YAAa,CACT,KAAK,UAAU,EACf,KAAK,aAAe,EACxB,CACA,YAAa,CACT,aAAa,KAAK,KAAK,EACvB,KAAK,SAAS,CAAE,YAAa,CAAE,CAAC,EAChC,KAAK,aAAe,EACxB,CACA,WAAY,CACR,KAAK,MAAQ,WAAW,IAAM,CAC1B,KAAK,SAAUC,IAAW,CACtB,YAAaA,EAAM,YAAc,CACrC,EAAE,EACF,KAAK,UAAU,CACnB,EAAG,GAAI,CACX,CACA,QAAS,CACL,GAAM,CAAE,UAAAC,EAAW,KAAAC,CAAK,EAAI,CAAE,GAAG,KAAK,KAAM,EACtC,CAAE,YAAAC,CAAY,EAAI,KAAK,MAEvBC,EAAYV,GAAOS,CAAW,EAOpC,OANIF,GAAa,CAAC,KAAK,cACnB,KAAK,WAAW,EAEhB,CAACA,GAAa,KAAK,cACnB,KAAK,WAAW,EAEhBA,EACQI,EAAM,MAAO,CAAE,MAAO,KAAK,aAAc,SAAU,CAACA,EAAK,MAAO,CAAE,MAAO,KAAK,YAAa,CAAC,EAAGA,EAAM,MAAO,CAAE,MAAO,KAAK,mBAAoB,SAAU,CAACA,EAAK,MAAO,CAAE,MAAO,KAAK,cAAe,SAAUH,EAAK,WAAW,CAAE,CAAC,EAAGG,EAAK,MAAO,CAAE,MAAO,KAAK,UAAW,SAAUD,CAAU,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,EAEzS,IACX,CACJ,EACOE,GAAQT,GChFA,SAARU,GAA8B,CAAE,aAAAC,EAAc,KAAAC,CAAK,EAAG,CACzD,OAAID,EACQE,EAAK,MAAO,CAAE,MAAOD,EAAK,cAAc,EAAG,UAAW,wEAAyE,SAAUC,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,gBAAiB,QAAS,KAAM,KAAM,MAAO,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,gBAAiB,KAAM,MAAO,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,uPAAwP,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,EAE5oBA,EAAK,MAAO,CAAE,MAAOD,EAAK,eAAe,EAAG,UAAW,kCAAmC,SAAUC,EAAM,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,gBAAiB,QAAS,KAAM,KAAM,MAAO,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,gBAAiB,KAAM,MAAO,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,sMAAuM,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAC9jB,CALwBC,EAAAJ,GAAA,gBCGT,SAARK,GAA8B,CAAE,UAAAC,EAAW,cAAAC,EAAe,SAAAC,EAAU,sBAAAC,EAAuB,KAAAC,CAAM,EAAG,CACvG,OAAKH,GAAiBE,IAA0B,CAACH,EACrCK,EAAK,SAAU,CAAE,UAAW,sFAAuF,KAAM,SAAU,MAAOD,EAAK,oBAAoB,EAAG,aAAcA,EAAK,oBAAoB,EAAG,QAASF,EAAU,4BAA6B,GAAM,SAAUG,EAAK,MAAO,CAAE,MAAO,KAAM,OAAQ,IAAK,QAAS,WAAY,MAAO,6BAA8B,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,SAAUA,EAAK,OAAQ,CAAE,KAAM,OAAQ,SAAU,UAAW,EAAG,wDAAyD,CAAC,CAAE,CAAC,CAAE,CAAC,EAE3jB,IACX,CALwBC,EAAAP,GAAA,gBCIxB,IAAMQ,GAAN,cAA6BC,EAAU,CARvC,MAQuC,CAAAC,EAAA,uBACnC,aAAe,KACf,sBAAuB,CACnB,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,MACxBA,EAAO,CACX,CACA,QAAS,CACL,GAAM,CAAE,UAAAC,EAAW,OAAQC,EAAa,cAAAC,EAAe,kBAAAC,EAAmB,sBAAAC,CAAuB,EAAI,KAAK,MACpGC,EAAa,CACf,YAAa,EACjB,EAEA,OAAIL,GAAc,CAACE,GAAiB,CAACF,KACjCK,EAAW,MAAQ,GACnBA,EAAW,SAAW,GACtBA,EAAW,UAAYJ,GAGvBC,GAAiB,CAACF,IAClBK,EAAW,MAAQ,GACnBA,EAAW,SAAW,GACtBA,EAAW,IAAMH,EAEb,KAAK,eACL,KAAK,aAAa,UAAY,OAG9BI,EAAM,MAAO,CAAE,UAAW,oCAAqC,SAAU,CAACA,EAAM,MAAO,CAAE,UAAW,oCAAqC,SAAU,CAACA,EAAKC,GAAc,CAAE,GAAG,KAAK,KAAM,CAAC,EAAGH,GAAyB,CAACJ,GAAa,CAACE,EAAiBI,EAAK,MAAO,CAAE,UAAW,oCAAqC,SAAUA,EAAK,MAAO,CAAE,IAAKF,EAAuB,UAAW,2BAA4B,IAAK,mBAAoB,CAAC,CAAE,CAAC,EAAME,EAAK,QAAS,CAAE,IAAKR,EAACU,GAAiB,CACvc,KAAK,aAAeA,CACxB,EAFyb,OAEtb,UAAW,2BAA4B,GAAGH,CAAW,CAAC,EAAIC,EAAK,MAAO,CAAE,SAAUA,EAAKG,GAAW,CAAE,GAAG,KAAK,KAAM,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,EAAGH,EAAK,MAAO,CAAE,UAAW,qCAAsC,SAAUJ,GAAiBE,EAAyBE,EAAMI,GAAU,CAAE,SAAU,CAACJ,EAAKK,GAAc,CAAE,GAAG,KAAK,KAAM,CAAC,EAAGL,EAAKM,GAAe,CAAE,GAAG,KAAK,KAAM,CAAC,CAAC,CAAE,CAAC,EAAMN,EAAMI,GAAU,CAAE,SAAU,CAACP,GAAqB,CAACH,GAAcM,EAAKO,GAAkB,CAAE,GAAG,KAAK,KAAM,CAAC,EAAIP,EAAKQ,GAAc,CAAE,GAAG,KAAK,KAAM,CAAC,CAAC,CAAE,CAAC,CAAG,CAAC,CAAC,CAAE,CAAC,CAC3hB,CACJ,EACOC,GAAQnB,GCvCA,SAARoB,IAAiC,CACpC,OAAQC,EAAK,MAAO,CAAE,UAAW,kCAAmC,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,KAAM,eAAgB,SAAU,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,oLAAqL,CAAC,EAAGA,EAAK,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,GAAI,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAChf,CAFwBC,EAAAF,GAAA,iBCQxB,SAASG,IAA6B,CAClC,OAAO,OAAO,eAAiB,UAAU,cAAc,eAC3D,CAFSC,EAAAD,GAAA,8BAIT,SAASE,IAAkB,CACvB,OAAO,OAAO,eAAiB,UAAU,YAC7C,CAFSD,EAAAC,GAAA,mBAIT,IAAMC,GAAwB,CAAC,YAAa,aAAc,YAAY,EAEhEC,GAAiB,CAEnB,wBAAyB,CACrB,MAAO,CACH,MAAO,KACP,OAAQ,IACR,UAAW,CACP,MAAO,EACP,IAAK,CACT,EACA,OAAQ,SACR,eAAgB,SACpB,CACJ,EAEA,qBAAsB,CAClB,MAAO,EACX,EACA,uBAAwB,aACxB,uBAAwB,YACxB,kBAAmB,EACvB,EACqBC,GAArB,cAA2CC,EAAS,CAzCpD,MAyCoD,CAAAL,EAAA,sBAChD,OAAO,QAAUM,GAAY,QAC7B,aACA,SACA,KACA,kBACA,cACA,kBACA,YAAc,KACd,YAAc,KACd,WAAa,GACb,SAAW,KACX,aAAe,KACf,gBAAkB,KAClB,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CAAE,GAAGJ,GAAgB,GAAGK,CAAK,CAAC,EAC1C,KAAK,aAAeP,GAAgB,EACpC,KAAK,SAAW,SAAS,WAAa,SAAW,QAAU,OAC3D,KAAK,GAAK,KAAK,KAAK,IAAM,gBAC1B,KAAK,KAAO,WACZ,KAAK,KAAOQ,GACZ,KAAK,cAAgBC,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,yBAAyB,EAEhD,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EAEnC,KAAK,MAAQ,KAAK,MAAM,KAAK,IAAI,EACjC,KAAK,KAAO,KAAK,KAAK,KAAK,IAAI,EAC/B,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAE/D,KAAK,cAAgB,GACrB,KAAK,kBAAoB,KACzB,KAAK,eAAe,CAChB,aAAc,GACd,kBAAmB,GACnB,UAAW,GACX,cAAe,KACf,eAAgB,KAChB,sBAAuB,KACvB,OAAQ,MACZ,CAAC,CACL,CACA,SAAU,CACN,GAAI,CAACX,GAA2B,EAC5B,YAAK,KAAK,IAAI,0CAA2C,SAAS,EAC3D,KAEX,KAAK,eAAe,CAChB,aAAc,GACd,kBAAmB,GACnB,OAAQ,MACZ,CAAC,EACD,GAAM,CAAE,OAAAY,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,CAG/B,CACA,WAAY,CACJ,KAAK,aACL,KAAK,KAAK,EAEd,KAAK,QAAQ,CACjB,CACA,OAAQ,CACJ,OAAK,KAAK,cAGV,KAAK,cAAgB,GACrB,KAAK,wBAAwB,EACtB,KAAK,wBAAwB,EAAE,KAAMC,GAAQ,CAE5CA,IAAQ,IAIJ,KAAK,QAAQ,gBAEb,KAAK,OAAO,cAAc,EAC1B,KAAK,cAAgB,GAGjC,CAAC,GAhBU,QAAQ,OAAO,IAAI,MAAM,sCAAsC,CAAC,CAiB/E,CACA,yBAA0B,CAEtB,OAAI,KAAK,YACE,IAAI,QAASC,GAAYA,EAAQ,KAAK,WAAW,CAAC,EAGtD,KAAK,aACP,gBAAgB,KAAK,KAAK,uBAAuB,EACjD,KAAMC,IACP,KAAK,YAAcA,EAEnB,KAAK,YAAY,iBAAiB,WAAY,IAAM,CAChD,KAAK,kBAAkB,CAC3B,CAAC,EACD,KAAK,eAAe,CAChB,aAAc,GACd,OAAQ,QACR,eAAgB,IACpB,CAAC,EACMA,EACV,EACI,MAAOC,IACR,KAAK,eAAe,CAChB,eAAgBA,EAChB,OAAQ,OACZ,CAAC,EACD,KAAK,WAAa,GAClB,WAAW,IAAM,CACb,KAAK,WAAa,EACtB,EAAG,GAAI,EACA,GACV,CACL,CACA,yBAA0B,CAEtB,OAAI,KAAK,YACE,IAAI,QAASF,GAAYA,EAAQ,KAAK,WAAW,CAAC,EAGtD,KAAK,aACP,aAAa,KAAK,KAAK,oBAAoB,EAC3C,KAAMG,IACP,KAAK,YAAcA,EACnB,KAAK,eAAe,CAChB,kBAAmB,EACvB,CAAC,EACMA,EACV,EACI,MAAOD,IACJA,EAAI,OAAS,oBACb,KAAK,KAAK,KAAK,KAAK,KAAK,aAAa,EAAG,QAAS,GAAI,EACtD,KAAK,KAAK,IAAI,KAAK,KAAK,aAAa,EAAG,SAAS,GAE9C,GACV,CACL,CACA,gBAAiB,CACb,IAAME,EAAU,CAAC,EACjB,KAAK,kBAAoB,KACzB,KAAK,gBAAkB,CAAC,EACxB,GAAM,CAAE,uBAAAC,CAAuB,EAAI,KAAK,KACxC,KAAK,wBAAwB,EACxB,KAAMJ,GAAgB,CACvB,GAAIA,IAAgB,GAChB,MAAM,IAAI,MAAM,2BAA2B,EAI3CI,GACA,cAAc,gBAAgBA,CAAsB,GACpDC,GAAqBD,CAAsB,IAC3CD,EAAQ,SAAWC,GAGvB,IAAME,EAAS,CAACN,EAAY,eAAe,EAAE,CAAC,CAAC,EAE3C,KAAK,aACLM,EAAO,KAAK,KAAK,YAAY,eAAe,EAAE,CAAC,CAAC,EAGpD,KAAK,aAAe,IAAI,YAAYA,CAAM,EAE1C,KAAK,SAAW,IAAI,cAAc,KAAK,aAAcH,CAAO,EAE5D,KAAK,SAAS,iBAAiB,gBAAkBI,GAAU,CACvD,KAAK,gBAAgB,KAAKA,EAAM,IAAI,CACxC,CAAC,EAED,KAAK,SAAS,MAAM,EAEpB,KAAK,eAAe,CAChB,UAAW,GACX,OAAQ,WACZ,CAAC,CACL,CAAC,EACI,MAAON,GAAQ,CAChB,KAAK,KAAK,IAAIA,EAAK,OAAO,EAC1B,KAAK,eAAe,CAAE,eAAgBA,EAAK,OAAQ,OAAQ,CAAC,CAChE,CAAC,CACL,CACA,mBAAoB,CAEhB,GAAM,CAAE,cAAAO,EAAe,UAAAC,CAAU,EAAI,CAAE,GAAG,KAAK,eAAe,CAAE,EAC5D,CAACD,GAAiB,CAACC,GAIf,KAAK,QAAQ,eAEb,KAAK,OAAO,cAAc,EAE9B,KAAK,eAAe,CAAE,OAAQ,MAAO,CAAC,GAEjCA,IAEL,KAAK,KAAK,IAAI,+CAA0C,EACxD,KAAK,cAAc,GAEvB,KAAK,YAAc,KACnB,KAAK,YAAc,KACnB,KAAK,eAAe,CAChB,aAAc,GACd,kBAAmB,EACvB,CAAC,CACL,CACA,eAAgB,CAOZ,OANgB,IAAI,QAASV,GAAY,CACrC,KAAK,SAAS,iBAAiB,OAAQ,IAAM,CACzCA,EAAQ,CACZ,CAAC,EACD,KAAK,SAAS,KAAK,CACvB,CAAC,EAEI,KAAK,KAEN,KAAK,eAAe,CAChB,UAAW,EACf,CAAC,EAEM,KAAK,SAAS,EACxB,EACI,KAAMW,GAAS,CAEhB,KAAK,kBAAoBA,EAEzB,KAAK,eAAe,CAChB,cAAe,IAAI,gBAAgBA,EAAK,IAAI,EAC5C,OAAQ,UACZ,CAAC,CACL,CAAC,EACI,KAAK,IAAM,CACZ,KAAK,gBAAkB,KACvB,KAAK,SAAW,IACpB,EAAIC,GAAU,CACV,WAAK,gBAAkB,KACvB,KAAK,SAAW,KACVA,CACV,CAAC,CACL,CACA,sBAAuB,CACnB,GAAM,CAAE,sBAAAC,EAAuB,cAAAJ,CAAc,EAAI,KAAK,eAAe,EACjEI,GACA,IAAI,gBAAgBA,CAAqB,EAEzCJ,GACA,IAAI,gBAAgBA,CAAa,EAErC,KAAK,kBAAoB,KACzB,KAAK,eAAe,CAChB,cAAe,KACf,sBAAuB,KACvB,OAAQ,KAAK,eAAe,EAAE,aAAe,QAAU,MAC3D,CAAC,CACL,CACA,QAAS,CACL,GAAI,CAEI,KAAK,mBACL,KAAK,KAAK,QAAQ,KAAK,iBAAiB,CAEhD,OACOP,EAAK,CAEHA,EAAI,eACL,KAAK,KAAK,IAAIA,EAAK,SAAS,CAEpC,CACJ,CACA,MAAO,CAEC,KAAK,cACL,KAAK,YAAY,eAAe,EAAE,QAASY,GAAU,CACjDA,EAAM,KAAK,CACf,CAAC,EACD,KAAK,YAAY,eAAe,EAAE,QAASA,GAAU,CACjDA,EAAM,KAAK,CACf,CAAC,EACD,KAAK,YAAc,MAGnB,KAAK,cACL,KAAK,YAAY,eAAe,EAAE,QAASA,GAAU,CACjDA,EAAM,KAAK,CACf,CAAC,EACD,KAAK,YAAY,eAAe,EAAE,QAASA,GAAU,CACjDA,EAAM,KAAK,CACf,CAAC,EACD,KAAK,YAAc,MAGnB,KAAK,eACL,KAAK,aAAa,eAAe,EAAE,QAASA,GAAU,CAClDA,EAAM,KAAK,CACf,CAAC,EACD,KAAK,aAAa,eAAe,EAAE,QAASA,GAAU,CAClDA,EAAM,KAAK,CACf,CAAC,EACD,KAAK,aAAe,MAGxB,GAAM,CAAE,sBAAAD,EAAuB,cAAAJ,CAAc,EAAI,KAAK,eAAe,EACjEI,GACA,IAAI,gBAAgBA,CAAqB,EAEzCJ,GACA,IAAI,gBAAgBA,CAAa,EAGrC,KAAK,eAAe,CAChB,UAAW,GACX,aAAc,GACd,kBAAmB,GACnB,cAAe,KACf,sBAAuB,KACvB,OAAQ,MACZ,CAAC,EACD,KAAK,cAAgB,EACzB,CACA,UAAW,CACP,IAAMM,EAAW,KAAK,gBAAgB,CAAC,EAAE,KACnCC,EAAgBV,GAAqBS,CAAQ,EACnD,GAAI,CAACC,EACD,OAAO,QAAQ,OAAO,IAAI,MAAM,yDAAyDD,CAAQ,GAAG,CAAC,EAEzG,IAAME,EAAO,aAAa,KAAK,IAAI,CAAC,IAAID,CAAa,GAC/CE,EAAO,IAAI,KAAK,KAAK,gBAAiB,CAAE,KAAMH,CAAS,CAAC,EACxDJ,EAAO,CACT,OAAQ,KAAK,GACb,KAAAM,EACA,KAAM,IAAI,KAAK,CAACC,CAAI,EAAG,CAAE,KAAMH,CAAS,CAAC,EACzC,KAAMA,CACV,EACA,OAAO,QAAQ,QAAQJ,CAAI,CAC/B,CACA,MAAM,mBAAoB,CACtB,GAAI,CAAC,KAAK,cAAc,gBACpB,MAAM,IAAI,MAAM,iCAAiC,EAErD,GAAI,CACA,IAAIQ,EAAS,KAAK,YAElB,GAAI,CAACA,EAAQ,CACT,IAAMC,EAAY,MAAM,KAAK,wBAAwB,EACrD,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,qCAAqC,EAEzDD,EAASC,CACb,CACA,IAAMC,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,UAAYF,EAClB,MAAM,IAAI,QAASnB,GAAY,CAC3BqB,EAAM,iBAAmB,IAAM,CAC3BA,EAAM,KAAK,EACXrB,EAAQ,IAAI,CAChB,CACJ,CAAC,EACD,IAAMsB,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,MAAQD,EAAM,WACrBC,EAAO,OAASD,EAAM,YACtB,IAAME,EAAMD,EAAO,WAAW,IAAI,EAClC,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,8BAA8B,EAElDA,EAAI,UAAUF,EAAO,EAAG,EAAGC,EAAO,MAAOA,EAAO,MAAM,EAEtD,IAAIP,EAAW,KAAK,KAAK,wBACrB,CAACA,GAAY,CAAC1B,GAAsB,SAAS0B,CAAQ,KACrD,KAAK,KAAK,IAAI,2BAA2BA,CAAQ,+BAAgC,SAAS,EAC1FA,EAAW,aAEf,IAAMS,EAAU,EAChB,OAAO,IAAI,QAAQ,CAACxB,EAASyB,IAAW,CACpCH,EAAO,OAAQJ,GAAS,CACpB,GAAI,CAACA,EAAM,CACPO,EAAO,IAAI,MAAM,kCAAkC,CAAC,EACpD,MACJ,CACA,IAAMT,EAAgBV,GAAqBS,CAAQ,GAAK,MAClDJ,EAAO,CACT,OAAQ,KAAK,GACb,KAAM,cAAc,IAAI,KAAK,EAAE,YAAY,CAAC,IAAIK,CAAa,GAC7D,KAAMD,EACN,KAAMG,CACV,EACA,GAAI,CACA,KAAK,kBAAoBP,EACzB,IAAMe,EAAgB,IAAI,gBAAgBR,CAAI,EAC9C,KAAK,eAAe,CAChB,sBAAuBQ,EACvB,OAAQ,UACZ,CAAC,EACD1B,EAAQ,CACZ,OACOE,EAAK,CACJ,KAAK,eAAe,EAAE,uBACtB,KAAK,eAAe,CAAE,sBAAuB,IAAK,CAAC,EAElDA,EAAI,eACL,KAAK,KAAK,IAAIA,EAAK,OAAO,EAE9BuB,EAAOvB,CAAG,CACd,QACA,CAEImB,EAAM,UAAY,KAClBC,EAAO,OAAO,EACdD,EAAM,OAAO,CACjB,CACJ,EAAGN,EAAUS,CAAO,CACxB,CAAC,CACL,OACOtB,EAAK,CACR,WAAK,KAAK,IAAIA,EAAK,OAAO,EACpBA,CACV,CACJ,CACA,QAAS,CAEL,IAAMyB,EAAgB,KAAK,eAAe,EAC1C,MAAI,CAACA,EAAc,cACf,CAAC,KAAK,eACN,CAAC,KAAK,YACN,KAAK,MAAM,EAEPC,EAAKC,GAAgB,CAAE,GAAGF,EAAe,iBAAkB,KAAK,eAAgB,gBAAiB,KAAK,cAAe,kBAAmB,KAAK,KAAK,kBAAmB,aAAc,KAAK,kBAAmB,OAAQ,KAAK,KAAM,SAAU,KAAK,OAAQ,KAAM,KAAK,KAAM,OAAQ,KAAK,YAAa,UAAW,KAAK,oBAAqB,CAAC,CAClV,CACJ,EC/dA,IAAAG,GAAA,CACE,KAAQ,mBACR,YAAe,yDACf,QAAW,QACX,QAAW,MACX,MAAS,qBACT,KAAQ,SACR,YAAe,CACb,OACF,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,aACf,EACA,SAAY,CACV,gBACA,OACA,cACA,eACA,aACA,WACA,SACA,MACA,OACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,kBAAmB,mBACnB,sBAAuB,uBACvB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,8BAA+B,SAC/B,cAAe,cACf,WAAc,SACd,OAAU,WACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,QAAW,SACX,QAAW,SACX,cAAe,UACf,KAAQ,UACR,WAAc,QAChB,CACF,EC/DA,IAAOC,GAAQ,CACX,QAAS,CAEL,UAAW,YAEX,SAAU,WAEV,aAAc,gBAEd,OAAQ,SAER,MAAO,QAEP,OAAQ,SAER,MAAO,QAEP,OAAQ,SAER,KAAM,OAEN,qBAAsB,CAClB,EAAG,8CACH,EAAG,8CACP,EAEA,oBAAqB,0BACrB,sBAAuB,yBAEvB,UAAW,eAEX,aAAc,CACV,EAAG,6BACH,EAAG,6BACP,EAGA,gBAAiB,CACb,EAAG,8BACH,EAAG,8BACP,EACA,OAAQ,SACR,YAAa,eACb,gBAAiB,CACb,EAAG,iCACH,EAAG,iCACP,EACA,iBAAkB,qBAClB,iBAAkB,qBACtB,CACJ,EClDA,IAAOC,GAAQ,CACX,YAAa,QACb,cAAe,UACf,oBAAqB,gBACrB,gBAAiB,YACjB,qBAAsB,iBACtB,eAAgB,UACpB,ECNA,IAAAC,GAAuB,WCAvB,IAAAC,GAA0B,WAE1B,IAAAC,GAAuB,WAEvB,IAAMC,GAAM,OACNC,GAAYC,EAAA,IAAM,IAAIF,EAAG,IAAb,aAClB,SAASG,GAAUC,EAAO,CACtB,GAAM,CAAE,SAAAC,EAAU,gBAAAC,EAAiB,eAAAC,EAAgB,KAAAC,EAAM,YAAAC,EAAa,YAAAC,EAAa,YAAAC,CAAa,EAAIP,EAC9FQ,KAAsB,GAAAC,SAAW,eAAgB,aAAc,2BAA4B,mCAAoC,CACjI,qBAAsBJ,IAAgBK,GAAgB,aAC1D,EAAG,CAAE,qCAAsCJ,CAAY,CAAC,EAClDK,EAAgBV,GAAYC,GAAmB,CAACC,EAChDC,EAAK,kBAAmB,CAAE,YAAaH,CAAS,CAAC,EACjDG,EAAK,eAAgB,CAAE,YAAaH,CAAS,CAAC,EACpD,OAAQW,EAAK,SAAU,CAAE,KAAM,SAAU,UAAWJ,EAAqB,aAAcJ,EAAK,eAAgB,CAAE,YAAaH,CAAS,CAAC,EAAG,QAASM,EAAa,SAAUD,EAAa,4BAA6B,GAAM,SAAUK,CAAc,CAAC,CACrP,CATSb,EAAAC,GAAA,aAUT,SAASc,GAASb,EAAO,CACrB,GAAM,CAAE,KAAAI,EAAM,KAAAU,CAAK,EAAId,EACvB,OAAQY,EAAM,SAAU,CAAE,KAAM,SAAU,UAAW,mFAAoF,aAAcR,EAAK,aAAa,EAAG,QAASN,EAAA,IAAMgB,EAAK,SAAS,EAAE,MAAM,IAAM,CAEnN,CAAC,EAFgL,WAE7K,4BAA6B,GAAM,UAAW,QAAS,SAAU,CAACF,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,IAAK,OAAQ,KAAM,QAAS,WAAY,SAAUA,EAAK,OAAQ,CAAE,EAAG,oLAAqL,CAAC,CAAE,CAAC,EAAGR,EAAK,OAAO,CAAC,CAAE,CAAC,CACxb,CALSN,EAAAe,GAAA,YAMT,SAASE,GAAUf,EAAO,CACtB,GAAM,CAAE,KAAAI,EAAM,KAAAU,CAAK,EAAId,EACvB,OAAQY,EAAK,SAAU,CAAE,KAAM,SAAU,UAAW,8CAA+C,MAAOR,EAAK,QAAQ,EAAG,aAAcA,EAAK,QAAQ,EAAG,QAASN,EAAA,IAAMgB,EAAK,UAAU,EAArB,WAAwB,UAAW,SAAU,4BAA6B,GAAM,SAAUF,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,KAAM,OAAQ,SAAU,UAAW,SAAU,CAACA,EAAK,SAAU,CAAE,KAAM,OAAQ,GAAI,IAAK,GAAI,IAAK,EAAG,GAAI,CAAC,EAAGA,EAAK,OAAQ,CAAE,KAAM,OAAQ,EAAG,iIAAkI,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CACjrB,CAHSd,EAAAiB,GAAA,aAIT,SAASC,GAAkBhB,EAAO,CAC9B,GAAM,CAAE,YAAAiB,EAAa,KAAAb,EAAM,cAAAc,EAAe,iBAAAC,EAAkB,KAAAL,CAAK,EAAId,EAC/DoB,EAAsBhB,EAAda,EAAmB,SAAiB,OAAT,EACzC,SAASI,GAAoB,CACzB,GAAI,CAAAH,EAEJ,IAAI,CAACC,EAAkB,CACnBL,EAAK,UAAU,EACf,MACJ,CACA,GAAIG,EAAa,CACbH,EAAK,UAAU,EACf,MACJ,CACAA,EAAK,SAAS,EAClB,CAZS,OAAAhB,EAAAuB,EAAA,qBAaDT,EAAK,SAAU,CAAE,MAAOQ,EAAO,aAAcA,EAAO,UAAW,8CAA+C,KAAM,SAAU,QAASC,EAAmB,UAAW,oBAAqB,4BAA6B,GAAM,SAAUT,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAM,IAAK,CAAE,KAAM,OAAQ,SAAU,UAAW,SAAU,CAACA,EAAK,SAAU,CAAE,KAAM,OAAQ,GAAI,IAAK,GAAI,IAAK,EAAG,GAAI,CAAC,EAAGA,EAAK,OAAQ,CAAE,KAAM,OAAQ,EAAGK,EAC1f,0BACA,gCAAiC,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CAC1E,CAnBSnB,EAAAkB,GAAA,qBAoBT,SAASM,GAAQtB,EAAO,CACpB,GAAM,CAAE,KAAAI,EAAM,kBAAAmB,CAAkB,EAAIvB,EACpC,OAAQY,EAAK,SAAU,CAAE,KAAM,SAAU,UAAW,kFAAmF,QAASW,EAAmB,4BAA6B,GAAM,SAAUnB,EAAK,MAAM,CAAE,CAAC,CAClO,CAHSN,EAAAwB,GAAA,WAIT,SAASE,IAAiB,CACtB,OAAQZ,EAAK,MAAO,CAAE,UAAW,yBAA0B,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,SAAUA,EAAK,OAAQ,CAAE,EAAG,ubAAwb,SAAU,SAAU,CAAC,CAAE,CAAC,CACjnB,CAFSd,EAAA0B,GAAA,kBAGT,SAASC,GAAsBzB,EAAO,CAClC,GAAM,CAAE,SAAA0B,CAAS,EAAI1B,EACf,CAAE,MAAA2B,EAAO,KAAAC,EAAM,QAAAC,CAAQ,EAAIH,EAEjC,OAAQd,EAAM,MAAO,CAAE,UAAW,yBAA0B,SAAU,CAACA,EAAKY,GAAgB,CAAC,CAAC,EAAGI,IAAS,cAAgB,GAAG,KAAK,MAAMD,EAAQ,GAAG,CAAC,UAAc,GAAIE,CAAO,CAAE,CAAC,CACpL,CALS/B,EAAA2B,GAAA,yBAMT,SAASK,GAAgB9B,EAAO,CAC5B,GAAM,CAAE,WAAA+B,EAAY,SAAAC,EAAU,kBAAAC,EAAmB,UAAAC,EAAW,SAAAC,EAAU,KAAA/B,CAAK,EAAIJ,EACzEoC,EAA6BL,EAAa,EAC1CM,KAAuB,GAAAC,SAAcL,CAAiB,EAC5D,OAAQrB,EAAM,MAAO,CAAE,UAAW,iCAAkC,SAAU,CAACwB,GACnEhC,EAAK,uBAAwB,CACzB,SAAA4B,EACA,YAAaD,CACjB,CAAC,EAAGnB,EAAM,OAAQ,CAAE,UAAW,gCAAiC,SAAU,CAACwB,GAA8BvC,GAAU,EAAGqC,GAAa,KACzH9B,EAAK,sBAAuB,CAC1B,SAAUiC,EACV,SAAO,GAAAC,SAAcJ,CAAS,CAClC,CAAC,EACC9B,EAAK,wBAAyB,CAAE,SAAUiC,CAAqB,CAAC,EAAGxC,GAAU,EAAGsC,GAAY,MAC9F/B,EAAK,YAAa,CACd,KAAMmC,GAAUJ,CAAQ,CAC5B,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CACjC,CAjBSrC,EAAAgC,GAAA,mBAkBT,SAASU,GAAgBxC,EAAO,CAC5B,GAAM,CAAE,KAAAI,EAAM,SAAA4B,EAAU,WAAAD,CAAW,EAAI/B,EACvC,OAAQY,EAAK,MAAO,CAAE,UAAW,iCAAkC,SAAUR,EAAK,uBAAwB,CAAE,SAAA4B,EAAU,YAAaD,CAAW,CAAC,CAAE,CAAC,CACtJ,CAHSjC,EAAA0C,GAAA,mBAIT,SAASC,GAAsBzC,EAAO,CAClC,GAAM,CAAE,KAAAI,EAAM,SAAAH,EAAU,YAAAM,CAAY,EAAIP,EAClCQ,KAAsB,GAAAC,SAAW,eAAgB,aAAc,2BAA4B,4CAA4C,EAC7I,OAAQG,EAAM,MAAO,CAAE,UAAW,iCAAkC,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,qCAAsC,SAAUR,EAAK,kBAAmB,CAAE,YAAaH,CAAS,CAAC,CAAE,CAAC,EAAGW,EAAK,SAAU,CAAE,KAAM,SAAU,UAAWJ,EAAqB,aAAcJ,EAAK,eAAgB,CAAE,YAAaH,CAAS,CAAC,EAAG,QAASM,EAAa,SAAUH,EAAK,QAAQ,CAAE,CAAC,CAAC,CAAE,CAAC,CACvY,CAJSN,EAAA2C,GAAA,yBAKT,SAASC,GAAqB1C,EAAO,CACjC,GAAM,CAAE,KAAAI,EAAM,uBAAAuC,EAAwB,cAAAC,EAAe,oBAAAC,EAAqB,gBAAA3C,EAAiB,cAAAgB,EAAe,YAAAD,EAAa,SAAAhB,EAAU,WAAA8B,EAAY,SAAAC,EAAU,kBAAAC,EAAmB,UAAAC,EAAW,SAAAC,EAAU,YAAA5B,CAAa,EAAIP,EAC1M8C,EAA4B7C,GAAYC,EAC9C,GAAI,CAACA,GAAmBgB,EACpB,OAAO,KAEX,IAAME,EAAsBhB,EAAda,EAAmB,SAAiB,WAAT,EACzC,SAAS8B,GAAwB,CAC7B,MAAI,CAAC9B,GAAe,CAAC6B,GAA6BD,EAC1CF,EACQ/B,EAAKkB,GAAiB,CAAE,WAAYC,EAAY,SAAUC,EAAU,kBAAmBC,EAAmB,UAAWC,EAAW,SAAUC,EAAU,KAAM/B,CAAK,CAAC,EAEpKQ,EAAK4B,GAAiB,CAAE,KAAMpC,EAAM,SAAU4B,EAAU,WAAYD,CAAW,CAAC,EAErF,IACX,CARS,OAAAjC,EAAAiD,EAAA,yBASDnC,EAAM,MAAO,CAAE,UAAW,yBAA0B,MAAOQ,EAAO,SAAU,CAAEH,EAAyC,KAA3BL,EAAKY,GAAgB,CAAC,CAAC,EAAUZ,EAAM,MAAO,CAAE,UAAW,wBAAyB,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,+BAAgC,SAAU+B,GAA0BC,IAAkB,EACxR,GAAGxB,CAAK,KAAKwB,CAAa,IAC1BxB,CAAM,CAAC,EAAG2B,EAAsB,EAAGD,EAA6BlC,EAAK6B,GAAuB,CAAE,KAAMrC,EAAM,SAAUH,EAAU,YAAaM,CAAY,CAAC,EAAK,IAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CACtM,CAnBST,EAAA4C,GAAA,wBAoBT,SAASM,GAAoBhD,EAAO,CAChC,GAAM,CAAE,KAAAI,CAAK,EAAIJ,EACjB,OAAQY,EAAK,MAAO,CAAE,UAAW,yBAE7B,KAAM,SAAU,MAAOR,EAAK,UAAU,EAAG,SAAUQ,EAAK,MAAO,CAAE,UAAW,wBAAyB,SAAUA,EAAM,MAAO,CAAE,UAAW,+BAAgC,SAAU,CAACA,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,6CAA8C,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,qEAAsE,CAAC,CAAE,CAAC,EAAGR,EAAK,UAAU,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CACje,CALSN,EAAAkD,GAAA,uBAMT,SAASC,GAAiBjD,EAAO,CAC7B,GAAM,CAAE,MAAAkD,EAAO,KAAA9C,EAAM,SAAA4B,EAAU,WAAAD,CAAW,EAAI/B,EAC9C,SAASmD,GAAoB,CACzB,IAAMC,EAAe,GAAGhD,EAAK,cAAc,CAAC;AAAA;AAAA,GAAS8C,CAAK,GAC1D,MAAME,CAAY,CACtB,CAHS,OAAAtD,EAAAqD,EAAA,qBAIDvC,EAAM,MAAO,CAAE,UAAW,yBAA0B,MAAOR,EAAK,cAAc,EAAG,SAAU,CAACQ,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,6CAA8C,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,+GAAgH,CAAC,CAAE,CAAC,EAAGA,EAAM,MAAO,CAAE,UAAW,wBAAyB,SAAU,CAACA,EAAM,MAAO,CAAE,UAAW,+BAAgC,SAAU,CAACR,EAAK,cAAc,EAAGQ,EAAK,SAAU,CAAE,UAAW,sCAAuC,aAAcR,EAAK,kBAAkB,EAAG,yBAA0B,YAAa,qBAAsB,SAAU,QAAS+C,EAAmB,KAAM,SAAU,SAAU,GAAI,CAAC,CAAC,CAAE,CAAC,EAAGvC,EAAK4B,GAAiB,CAAE,KAAMpC,EAAM,SAAU4B,EAAU,WAAYD,CAAW,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CACn4B,CAPSjC,EAAAmD,GAAA,oBCjHM,SAARI,GAA6CC,EAAO,CACvD,IAAMC,EAAS,CAAC,EACZC,EAAO,gBACPC,EACJ,OAAW,CAAE,SAAAC,CAAS,IAAK,OAAO,OAAOJ,CAAK,EAAG,CAC7C,GAAM,CAAE,WAAAK,EAAY,YAAAC,CAAY,EAAIF,EAGhCD,GAAW,OAASE,GAAcC,KAEjC,CAAE,KAAAJ,EAAM,QAAAC,CAAQ,EAAIE,GAAcC,GAEnCD,GAAY,OAAS,eACrBJ,EAAO,KAAKI,EAAW,KAAK,EAC5BC,GAAa,OAAS,eACtBL,EAAO,KAAKK,EAAY,KAAK,CACrC,CACA,IAAMC,EAAQN,EAAO,OAAO,CAACO,EAAOC,IACzBD,EAAQC,EAAgBR,EAAO,OACvC,CAAC,EACJ,MAAO,CACH,KAAAC,EACA,QAAAC,EACA,MAAAI,CACJ,CACJ,CAzBwBG,EAAAX,GAAA,+BFKxB,GAAM,CAAE,YAAAY,GAAa,cAAAC,GAAe,oBAAAC,GAAqB,gBAAAC,GAAiB,qBAAAC,GAAsB,eAAAC,EAAgB,EAAIC,GACrG,SAARC,GAA6B,CAAE,SAAAC,EAAU,eAAAC,EAAgB,mBAAAC,EAAoB,YAAAC,EAAa,iBAAAC,EAAkB,MAAAC,EAAO,iBAAAC,EAAmB,OAAW,sBAAAC,EAAwB,GAAO,iBAAAC,EAAmB,GAAO,gBAAAC,EAAkB,GAAO,eAAAC,EAAgB,YAAAC,EAAa,cAAAC,EAAe,MAAAC,EAAO,uBAAAC,EAAwB,gBAAAC,EAAkB,GAAO,YAAAC,EAAa,kBAAAC,EAAoB,OAAW,gBAAAC,EAAiB,KAAAC,EAAM,YAAAC,EAAa,KAAAC,EAAM,cAAAC,EAAe,oBAAAC,EAAsB,OAAW,WAAAC,EAAY,SAAAC,EAAU,UAAAC,GAAW,SAAAC,GAAU,kBAAAC,EAAmB,EAAG,CACjhB,SAASC,IAAmB,CACxB,OAAQlB,EAAa,CACjB,KAAKf,GACL,KAAKF,GAAqB,CACtB,IAAMoC,GAAWC,GAA4BlB,CAAK,EAClD,OAAIiB,GAAS,OAAS,cACXA,GAAS,MAAQ,IAErBlB,CACX,CACA,KAAKpB,GACD,OAAO,KAEX,KAAKG,GACD,OAAKmB,EAGEF,EAFI,KAIf,QACI,OAAOA,CACf,CACJ,CAtBSoB,EAAAH,GAAA,oBAuBT,SAASI,IAAqB,CAC1B,OAAQtB,EAAa,CACjB,KAAKf,GACL,KAAKF,GAAqB,CACtB,GAAM,CAAE,KAAAwC,EAAK,EAAIH,GAA4BlB,CAAK,EAClD,OAAOqB,KAAS,eACpB,CACA,KAAKvC,GACD,MAAK,CAAAmB,EAKT,QACI,MAAO,EACf,CACJ,CAhBSkB,EAAAC,GAAA,sBAiBT,IAAME,GAAgBN,GAAiB,EACjCO,EAAQD,IAAiB,IACzBE,EAAgB,CAAChC,GACnBL,IACE,CAACE,GAAsB,CAACC,GAAgBO,IAC1CT,GACA,CAACK,EACCgC,EAAgB,CAAC9B,GACnBG,IAAgBlB,IAChBkB,IAAgBd,GACd0C,EAAqBnC,GACvB,CAACG,GACDI,IAAgBhB,GACd6C,EAAenC,GAAS,CAACiB,GAAiB,CAACb,EAC3CgC,EAAcxB,GAAqBN,IAAgBd,GACnD6C,KAAqB,GAAAC,SAAW,0BAA2B,CAC7D,mBAAoBV,GAAmB,CAC3C,CAAC,EACKW,KAAsB,GAAAD,SAAW,iBAAkB,MAAMhC,CAAW,GAAI,CAAE,aAAcK,CAAY,CAAC,EACrG6B,GAAsB,IAAM,CAC9B,OAAQlC,EAAa,CACjB,KAAKjB,GACL,KAAKE,GACD,OAAQkD,EAAKC,GAAuB,CAAE,SAAUhB,GAA4BlB,CAAK,CAAE,CAAC,EACxF,KAAKhB,GACD,OAAOiD,EAAKE,GAAqB,CAAE,KAAM7B,CAAK,CAAC,EACnD,KAAK3B,GACD,OAAQsD,EAAKG,GAAkB,CAAE,MAAO5C,EAAO,KAAMc,EAAM,WAAYK,EAAY,SAAUC,CAAS,CAAC,EAC3G,KAAK9B,GACD,OAAQmD,EAAKI,GAAsB,CAAE,KAAM/B,EAAM,uBAAwBL,EAAwB,cAAeF,EAAe,oBAAqBW,EAAqB,gBAAiBL,EAAiB,cAAeI,EAAe,YAAanB,EAAa,SAAUH,EAAU,WAAYwB,EAAY,SAAUC,EAAU,kBAAmBG,GAAmB,UAAWF,GAAW,SAAUC,GAAU,YAAaP,CAAY,CAAC,EACjb,QACI,OAAO,IACf,CACJ,GAAG,EAQH,MAF6B,EALJiB,GACrBG,GACAD,GACAD,GACAG,IAC8C,CAACI,GACTlC,IAAgBd,IAAkBkB,EAEjE,KAEH+B,EAAM,MAAO,CAAE,UAAWF,EAAqB,SAAU,CAACE,EAAK,MAAO,CAAE,UAAWJ,EAAoB,MAAO,CAAE,MAAO,GAAGN,CAAK,GAAI,EAAG,KAAM,cAAe,aAAc,GAAGA,CAAK,IAAK,iBAAkB,GAAGA,CAAK,IAAK,gBAAiB,EAAG,gBAAiB,IAAK,gBAAiBD,EAAc,CAAC,EAAGU,EAAoBC,EAAM,MAAO,CAAE,UAAW,yBAA0B,SAAU,CAACT,EAAiBS,EAAKK,GAAW,CAAE,SAAUnD,EAAU,gBAAiBkB,EAAiB,eAAgBR,EAAgB,KAAMS,EAAM,YAAaH,EAAa,YAAaI,EAAa,YAAaT,CAAY,CAAC,EAAK,KAAM6B,EAAeM,EAAKM,GAAU,CAAE,KAAMjC,EAAM,KAAME,CAAK,CAAC,EAAI,KAAMkB,EAAsBO,EAAKO,GAAmB,CAAE,YAAalD,EAAa,KAAMgB,EAAM,cAAeG,EAAe,iBAAkBlB,EAAkB,KAAMiB,CAAK,CAAC,EAAK,KAAMiB,EAAgBQ,EAAKQ,GAAW,CAAE,KAAMnC,EAAM,KAAME,CAAK,CAAC,EAAI,KAAMoB,EAAeK,EAAKS,GAAS,CAAE,KAAMpC,EAAM,kBAAmBF,CAAkB,CAAC,EAAK,IAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CACr/B,CAtFwBe,EAAAjC,GAAA,eGAxB,IAAMyD,GAAsB,IACtBC,GAAoB,IAC1B,SAASC,GAAkBC,EAAOC,EAAeC,EAAgBC,EAAO,CACpE,GAAIH,EACA,OAAOI,GAAgB,YAE3B,GAAIH,EACA,OAAOG,GAAgB,eAE3B,GAAIF,EACA,OAAOE,GAAgB,cAE3B,IAAIC,EAAQD,GAAgB,cACtBE,EAAU,OAAO,KAAKH,CAAK,EACjC,QAASI,EAAI,EAAGA,EAAID,EAAQ,OAAQC,IAAK,CACrC,GAAM,CAAE,SAAAC,CAAS,EAAIL,EAAMG,EAAQC,CAAC,CAAC,EAErC,GAAIC,EAAS,eAAiB,CAACA,EAAS,eACpC,OAAOJ,GAAgB,gBAIvBI,EAAS,aACTH,EAAQD,GAAgB,qBAIxBI,EAAS,aAAeH,IAAUD,GAAgB,sBAClDC,EAAQD,GAAgB,qBAEhC,CACA,OAAOC,CACX,CA9BSI,EAAAV,GAAA,qBA+BT,IAAMW,GAAiB,CACnB,iBAAkB,GAClB,gBAAiB,GACjB,sBAAuB,GACvB,iBAAkB,GAClB,oBAAqB,GACrB,gBAAiB,GACjB,kBAAmB,IACvB,EAKqBC,GAArB,cAAuCC,EAAS,CApDhD,MAoDgD,CAAAH,EAAA,kBAC5C,OAAO,QAAUI,GAAY,QAC7BC,GACAC,GACAC,GACAC,GACA,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CAAE,GAAGR,GAAgB,GAAGS,CAAK,CAAC,EAC1C,KAAK,GAAK,KAAK,KAAK,IAAM,YAC1B,KAAK,MAAQ,YACb,KAAK,KAAO,oBACZ,KAAK,cAAgBC,GACrB,KAAK,SAAS,EACd,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,CACzC,CACAC,GAAkBC,EAAY,CAC1B,GAAIA,EAAW,OAAS,MAAQA,EAAW,QAAU,EACjD,OAAO,KAEX,IAAMC,EAAYD,EAAW,MAAQA,EAAW,SAChD,GAAIC,GAAa,EACb,OAAO,KAGX,KAAKT,KAAoB,YAAY,IAAI,EACzC,IAAMU,EAAK,YAAY,IAAI,EAAI,KAAKV,GACpC,GAAIU,IAAO,EACP,OAAO,KAAK,OAAO,KAAKP,IAAgB,GAAK,GAAG,EAAI,GAExD,IAAMQ,EAA6BH,EAAW,SAAW,KAAKP,GAI9D,GAHA,KAAKA,GAAyBO,EAAW,SAGrCG,GAA8B,EAC9B,OAAO,KAAK,OAAO,KAAKR,IAAgB,GAAK,GAAG,EAAI,GAExD,IAAMS,EAAeD,EAA6BD,EAC5CG,EAAgB,KAAKX,IAAkB,KACvCU,EACAE,GAAUF,EAAc,KAAKV,GAAgBnB,GAAqB2B,CAAE,EAC1E,KAAKR,GAAiBW,EACtB,IAAME,EAAaN,EAAYI,EACzBG,EAAqB,KAAK,IAAI,KAAKb,GAAeO,EAAI,CAAC,EACvDO,EAAc,KAAKd,IAAgB,KACnCY,EACAD,GAAUC,EAAYC,EAAoBhC,GAAmB0B,CAAE,EACrE,YAAKP,GAAec,EACpB,KAAKjB,GAAkB,YAAY,IAAI,EAChC,KAAK,MAAMiB,EAAc,GAAG,EAAI,EAC3C,CACA,YAActB,EAAA,IACH,KAAK,KAAK,OAAO,EAAE,OAAO,IAAM,CAEvC,EAAE,EAHQ,eAKd,OAAOJ,EAAO,CACV,GAAM,CAAE,aAAA2B,EAAc,MAAA7B,EAAO,eAAA8B,EAAgB,cAAAC,EAAe,MAAAlC,EAAO,eAAAE,CAAgB,EAAIG,EACjF,CAAE,SAAA8B,EAAU,aAAAC,EAAc,cAAAC,EAAe,gBAAAC,EAAiB,cAAArC,EAAe,YAAAsC,EAAa,mBAAAC,EAAoB,YAAAC,CAAa,EAAI,KAAK,KAAK,yBAAyB,EAI9JC,EAAsBxC,EAAiB,OAAO,OAAOC,CAAK,EAAIgC,EAC9DQ,EAAmB,CAAC,CAACX,EAAa,iBAClCY,EAAyBZ,EAAa,iBAAmB,GAC3Da,EAAY,KACZC,EAAoB,EAEpBV,EAAa,MAAOW,GAAMA,EAAE,SAAS,YAAc,MAAQA,EAAE,SAAS,aAAe,CAAC,GACtFF,EAAY,EACZT,EAAa,QAASY,GAAS,CAC3BH,GAAaG,EAAK,SAAS,YAAc,EACzCF,GAAqBE,EAAK,SAAS,eAAiB,CACxD,CAAC,GAIDZ,EAAa,QAASY,GAAS,CAC3BF,GAAqBE,EAAK,SAAS,eAAiB,CACxD,CAAC,EAEL,IAAMC,EAAW,KAAK5B,GAAkB,CACpC,SAAUyB,EACV,MAAOD,CACX,CAAC,EACD,OAAOK,GAAY,CACf,MAAAlD,EACA,YAAaD,GAAkBC,EAAOC,EAAeC,EAAgBG,EAAM,OAAS,CAAC,CAAC,EACtF,eAAA4B,EACA,cAAAC,EACA,UAAAW,EACA,kBAAAC,EACA,cAAe,GACf,YAAAP,EACA,gBAAAD,EACA,mBAAAE,EACA,YAAAC,EACA,eAAAvC,EACA,SAAUmC,EAAc,OACxB,SAAUK,EAAoB,OAC9B,WAAYN,EAAa,OACzB,SAAAa,EACA,MAAA9C,EACA,KAAM,KAAK,KACX,KAAM,KAAK,KACX,YAAa,KAAK,YAClB,kBAAmB,KAAK,KAAK,kBAC7B,iBAAAwC,EACA,uBAAAC,EACA,oBAAqB,KAAK,KAAK,oBAC/B,iBAAkB,KAAK,KAAK,iBAC5B,gBAAiB,KAAK,KAAK,gBAC3B,sBAAuB,KAAK,KAAK,sBACjC,iBAAkB,KAAK,KAAK,iBAC5B,gBAAiB,KAAK,KAAK,eAC/B,CAAC,CACL,CACA,SAAU,CAEN,IAAMO,EAAU,KAAK,GACHC,GAAiBD,CAAO,IAEtCA,EAAQ,IAAM,MAEtB,CACAE,GAAiB5C,EAAA,IAAM,CACnB,GAAM,CAAE,eAAAP,CAAe,EAAI,KAAK,KAAK,SAAS,EAG9C,GAFA,KAAKc,GAAiB,KACtB,KAAKC,GAAe,KAChBf,EAAgB,CAChB,KAAKa,GAAyB,OAAO,OAAOb,EAAe,KAAK,EAAE,OAAO,CAACoD,EAAI,CAAE,SAAA9C,CAAS,IAAM8C,EAAK9C,EAAS,cAAe,CAAC,EAG7H,KAAK,KAAK,KAAK,mBAAmB,EAClC,MACJ,CACA,KAAKM,GAAkB,YAAY,IAAI,EACvC,KAAKC,GAAyB,CAClC,EAbiB,kBAcjB,SAAU,CACN,GAAM,CAAE,OAAAwC,CAAO,EAAI,KAAK,KACpBA,GACA,KAAK,MAAMA,EAAQ,IAAI,EAE3B,KAAK,KAAK,GAAG,SAAU,KAAKF,EAAc,EAG1C,KAAKvC,GAAkB,YAAY,IAAI,EACvC,KAAKC,GAAyB,KAAK,KAC9B,SAAS,EACT,OAAO,CAACuC,EAAIN,IAASM,EAAKN,EAAK,SAAS,cAAe,CAAC,CACjE,CACA,WAAY,CACR,KAAK,QAAQ,EACb,KAAK,KAAK,IAAI,SAAU,KAAKK,EAAc,CAC/C,CACJ,EChNA,SAASG,GAAQC,EAAG,CAAE,0BAA2B,OAAOD,GAAwB,OAAO,QAArB,YAA2C,OAAO,OAAO,UAA1B,SAAqC,SAAUC,EAAG,CAAE,OAAO,OAAOA,CAAG,EAAI,SAAUA,EAAG,CAAE,OAAOA,GAAmB,OAAO,QAArB,YAA+BA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CAAG,EAAGD,GAAQC,CAAC,CAAG,CAApTC,EAAAF,GAAA,WACT,SAASG,GAAkBC,EAAQC,EAAO,CAAE,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CAAE,IAAIC,EAAaF,EAAMC,CAAC,EAAGC,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeH,EAAQI,GAAeD,EAAW,GAAG,EAAGA,CAAU,CAAG,CAAE,CAAnUL,EAAAC,GAAA,qBACT,SAASM,GAAaC,EAAaC,EAAYC,EAAa,CAAE,OAAID,GAAYR,GAAkBO,EAAY,UAAWC,CAAU,EAAOC,GAAaT,GAAkBO,EAAaE,CAAW,EAAG,OAAO,eAAeF,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAAnRR,EAAAO,GAAA,gBACT,SAASD,GAAeK,EAAG,CAAE,IAAIP,EAAIQ,GAAaD,EAAG,QAAQ,EAAG,OAAmBb,GAAQM,CAAC,GAArB,SAAyBA,EAAIA,EAAI,EAAI,CAAnGJ,EAAAM,GAAA,kBACT,SAASM,GAAaD,EAAGE,EAAG,CAAE,GAAgBf,GAAQa,CAAC,GAArB,UAA0B,CAACA,EAAG,OAAOA,EAAG,IAAIG,EAAIH,EAAE,OAAO,WAAW,EAAG,GAAeG,IAAX,OAAc,CAAE,IAAIV,EAAIU,EAAE,KAAKH,EAAGE,GAAK,SAAS,EAAG,GAAgBf,GAAQM,CAAC,GAArB,SAAwB,OAAOA,EAAG,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAqBS,IAAb,SAAiB,OAAS,QAAQF,CAAC,CAAG,CAAlTX,EAAAY,GAAA,gBACT,SAASG,GAAgBC,EAAUR,EAAa,CAAE,GAAI,EAAEQ,aAAoBR,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAA/IR,EAAAe,GAAA,mBACT,SAASE,GAAWN,EAAGZ,EAAGe,EAAG,CAAE,OAAOf,EAAImB,GAAgBnB,CAAC,EAAGoB,GAA2BR,EAAGS,GAA0B,EAAI,QAAQ,UAAUrB,EAAGe,GAAK,CAAC,EAAGI,GAAgBP,CAAC,EAAE,WAAW,EAAIZ,EAAE,MAAMY,EAAGG,CAAC,CAAC,CAAG,CAAjMd,EAAAiB,GAAA,cACT,SAASE,GAA2BE,EAAMC,EAAM,CAAE,GAAIA,IAASxB,GAAQwB,CAAI,IAAM,UAAY,OAAOA,GAAS,YAAe,OAAOA,EAAa,GAAIA,IAAS,OAAU,MAAM,IAAI,UAAU,0DAA0D,EAAK,OAAOC,GAAuBF,CAAI,CAAG,CAAtRrB,EAAAmB,GAAA,8BACT,SAASI,GAAuBF,EAAM,CAAE,GAAIA,IAAS,OAAU,MAAM,IAAI,eAAe,2DAA2D,EAAK,OAAOA,CAAM,CAA5JrB,EAAAuB,GAAA,0BACT,SAASC,GAAUC,EAAUC,EAAY,CAAE,GAAI,OAAOA,GAAe,YAAcA,IAAe,KAAQ,MAAM,IAAI,UAAU,oDAAoD,EAAKD,EAAS,UAAY,OAAO,OAAOC,GAAcA,EAAW,UAAW,CAAE,YAAa,CAAE,MAAOD,EAAU,SAAU,GAAM,aAAc,EAAK,CAAE,CAAC,EAAG,OAAO,eAAeA,EAAU,YAAa,CAAE,SAAU,EAAM,CAAC,EAAOC,GAAYC,GAAgBF,EAAUC,CAAU,CAAG,CAA1b1B,EAAAwB,GAAA,aACT,SAASI,GAAiBC,EAAO,CAAE,IAAIC,EAAS,OAAO,KAAQ,WAAa,IAAI,IAAQ,OAAW,OAAAF,GAAmB5B,EAAA,SAA0B6B,EAAO,CAAE,GAAIA,IAAU,MAAQ,CAACE,GAAkBF,CAAK,EAAG,OAAOA,EAAO,GAAI,OAAOA,GAAU,WAAc,MAAM,IAAI,UAAU,oDAAoD,EAAK,GAAI,OAAOC,EAAW,IAAa,CAAE,GAAIA,EAAO,IAAID,CAAK,EAAG,OAAOC,EAAO,IAAID,CAAK,EAAGC,EAAO,IAAID,EAAOG,CAAO,CAAG,CAAE,SAASA,GAAU,CAAE,OAAOC,GAAWJ,EAAO,UAAWX,GAAgB,IAAI,EAAE,WAAW,CAAG,CAApF,OAAAlB,EAAAgC,EAAA,WAAsFA,EAAQ,UAAY,OAAO,OAAOH,EAAM,UAAW,CAAE,YAAa,CAAE,MAAOG,EAAS,WAAY,GAAO,SAAU,GAAM,aAAc,EAAK,CAAE,CAAC,EAAUL,GAAgBK,EAASH,CAAK,CAAG,EAA7lB,oBAAumBD,GAAiBC,CAAK,CAAG,CAA7uB7B,EAAA4B,GAAA,oBACT,SAASK,GAAWtB,EAAG,EAAGE,EAAG,CAAE,GAAIO,GAA0B,EAAG,OAAO,QAAQ,UAAU,MAAM,KAAM,SAAS,EAAG,IAAIrB,EAAI,CAAC,IAAI,EAAGA,EAAE,KAAK,MAAMA,EAAG,CAAC,EAAG,IAAImC,EAAI,IAAKvB,EAAE,KAAK,MAAMA,EAAGZ,CAAC,GAAM,OAAOc,GAAKc,GAAgBO,EAAGrB,EAAE,SAAS,EAAGqB,CAAG,CAAhOlC,EAAAiC,GAAA,cACT,SAASb,IAA4B,CAAE,GAAI,CAAE,IAAIT,EAAI,CAAC,QAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,QAAS,CAAC,EAAG,UAAY,CAAC,CAAC,CAAC,CAAG,MAAY,CAAC,CAAE,OAAQS,GAA4BpB,EAAA,UAAqC,CAAE,MAAO,CAAC,CAACW,CAAG,EAAnD,8BAAsD,CAAG,CAAzOX,EAAAoB,GAAA,6BACT,SAASW,GAAkBI,EAAI,CAAE,GAAI,CAAE,OAAO,SAAS,SAAS,KAAKA,CAAE,EAAE,QAAQ,eAAe,IAAM,EAAI,MAAY,CAAE,OAAO,OAAOA,GAAO,UAAY,CAAE,CAAlJnC,EAAA+B,GAAA,qBACT,SAASJ,GAAgB5B,EAAGmC,EAAG,CAAE,OAAAP,GAAkB,OAAO,eAAiB,OAAO,eAAe,KAAK,EAAI3B,EAAA,SAAyBD,EAAGmC,EAAG,CAAE,OAAAnC,EAAE,UAAYmC,EAAUnC,CAAG,EAA5D,mBAAsE4B,GAAgB5B,EAAGmC,CAAC,CAAG,CAA9LlC,EAAA2B,GAAA,mBACT,SAAST,GAAgBnB,EAAG,CAAE,OAAAmB,GAAkB,OAAO,eAAiB,OAAO,eAAe,KAAK,EAAIlB,EAAA,SAAyBD,EAAG,CAAE,OAAOA,EAAE,WAAa,OAAO,eAAeA,CAAC,CAAG,EAA9E,mBAAwFmB,GAAgBnB,CAAC,CAAG,CAA1MC,EAAAkB,GAAA,mBACT,IAAIkB,IAA6B,SAAUC,EAAQ,CACjD,SAASD,EAAcE,EAAS,CAC9B,IAAIC,EACAC,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACjFC,EAAM,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAC1EC,EAAM,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAS9E,GARA3B,GAAgB,KAAMqB,CAAa,EACnCG,EAAQtB,GAAW,KAAMmB,EAAe,CAACE,CAAO,CAAC,EACjDC,EAAM,gBAAkBE,EACxBF,EAAM,iBAAmBG,EACzBH,EAAM,aAAeC,EACjBA,GAAc,OAChBF,GAAW,eAAe,OAAOE,EAAW,SAAS,CAAC,GAEpDC,GAAO,KAAM,CACf,IAAIE,EAAYF,EAAI,UAAU,cAAc,GAAK,MAC7CG,EAASH,EAAI,UAAU,EACvBI,EAAMJ,EAAI,OAAO,EACjBK,EAASJ,EAAMA,EAAI,UAAU,EAAI,MACjCK,EAAOL,EAAMA,EAAI,QAAQ,GAAK,GAAK,MACvCJ,GAAW,sCAAsC,OAAOM,EAAQ,SAAS,EAAE,OAAOC,EAAK,mBAAmB,EAAE,OAAOC,EAAQ,mBAAmB,EAAE,OAAOC,EAAM,gBAAgB,EAAE,OAAOJ,EAAW,GAAG,CACtM,CACA,OAAAJ,EAAM,QAAUD,EACTC,CACT,CAvBS,OAAAvC,EAAAoC,EAAA,iBAwBTZ,GAAUY,EAAeC,CAAM,EACxB9B,GAAa6B,CAAa,CACnC,GAAgBR,GAAiB,KAAK,CAAC,EAChCoB,GAAQZ,GC5Cf,IAAIa,GAAY,GAIT,SAASC,GAAIC,EAAK,CAClBC,IACL,QAAQ,IAAID,CAAG,CACjB,CAHgBE,EAAAH,GAAA,OCJhB,SAASI,GAAQC,EAAG,CAAE,0BAA2B,OAAOD,GAAwB,OAAO,QAArB,YAA2C,OAAO,OAAO,UAA1B,SAAqC,SAAUC,EAAG,CAAE,OAAO,OAAOA,CAAG,EAAI,SAAUA,EAAG,CAAE,OAAOA,GAAmB,OAAO,QAArB,YAA+BA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CAAG,EAAGD,GAAQC,CAAC,CAAG,CAApTC,EAAAF,GAAA,WACT,SAASG,GAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAA/IH,EAAAC,GAAA,mBACT,SAASG,GAAkBC,EAAQC,EAAO,CAAE,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CAAE,IAAIC,EAAaF,EAAMC,CAAC,EAAGC,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeH,EAAQI,GAAeD,EAAW,GAAG,EAAGA,CAAU,CAAG,CAAE,CAAnUR,EAAAI,GAAA,qBACT,SAASM,GAAaP,EAAaQ,EAAYC,EAAa,CAAE,OAAID,GAAYP,GAAkBD,EAAY,UAAWQ,CAAU,EAAOC,GAAaR,GAAkBD,EAAaS,CAAW,EAAG,OAAO,eAAeT,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAAnRH,EAAAU,GAAA,gBACT,SAASD,GAAeI,EAAG,CAAE,IAAIN,EAAIO,GAAaD,EAAG,QAAQ,EAAG,OAAmBf,GAAQS,CAAC,GAArB,SAAyBA,EAAIA,EAAI,EAAI,CAAnGP,EAAAS,GAAA,kBACT,SAASK,GAAaD,EAAGE,EAAG,CAAE,GAAgBjB,GAAQe,CAAC,GAArB,UAA0B,CAACA,EAAG,OAAOA,EAAG,IAAIG,EAAIH,EAAE,OAAO,WAAW,EAAG,GAAeG,IAAX,OAAc,CAAE,IAAIT,EAAIS,EAAE,KAAKH,EAAGE,GAAK,SAAS,EAAG,GAAgBjB,GAAQS,CAAC,GAArB,SAAwB,OAAOA,EAAG,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAqBQ,IAAb,SAAiB,OAAS,QAAQF,CAAC,CAAG,CAAlTb,EAAAc,GAAA,gBACT,IAAIG,IAA8B,UAAY,CAC5C,SAASA,GAAiB,CACxBhB,GAAgB,KAAMgB,CAAc,CACtC,CAFS,OAAAjB,EAAAiB,EAAA,kBAGFP,GAAaO,EAAgB,CAAC,CACnC,IAAK,iBACL,MAAOjB,EAAA,UAA0B,CAC/B,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAC3B,EAFO,iBAGT,EAAG,CACD,IAAK,2BACL,MAAOA,EAAA,SAAkCkB,EAAc,CACrD,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAC3B,EAFO,2BAGT,EAAG,CACD,IAAK,eACL,MAAOlB,EAAA,SAAsBmB,EAAgB,CAC3C,OAAO,QAAQ,QAAQ,CACzB,EAFO,eAGT,EAAG,CACD,IAAK,YACL,MAAOnB,EAAA,SAAmBkB,EAAcE,EAAS,CAC/C,OAAO,QAAQ,QAAQ,IAAI,CAC7B,EAFO,YAGT,CAAC,CAAC,CACJ,GAAE,ECpBF,IAAMC,GAAU,QAIVC,GAAUD,GACVE,GAAa,OAAO,QAAW,WAC/BC,GAAM,OAAO,aAAgB,WAAa,IAAI,YAAgB,OAC9DC,GAAM,OAAO,aAAgB,WAAa,IAAI,YAAgB,OAC9DC,GAAQ,oEACRC,GAAS,MAAM,UAAU,MAAM,KAAKD,EAAK,EACzCE,IAAWC,GAAM,CACnB,IAAIC,EAAM,CAAC,EACX,OAAAD,EAAE,QAAQ,CAACE,EAAGC,IAAMF,EAAIC,CAAC,EAAIC,CAAC,EACvBF,CACX,GAAGH,EAAM,EACHM,GAAQ,0EACRC,GAAU,OAAO,aAAa,KAAK,MAAM,EACzCC,GAAW,OAAO,WAAW,MAAS,WACtC,WAAW,KAAK,KAAK,UAAU,EAC9BC,GAAO,IAAI,WAAW,MAAM,UAAU,MAAM,KAAKA,EAAI,CAAC,CAAC,EACxDC,GAAaC,EAACC,GAAQA,EACvB,QAAQ,KAAM,EAAE,EAAE,QAAQ,SAAWC,GAAOA,GAAM,IAAM,IAAM,GAAG,EADnD,cAEbC,GAAWH,EAACI,GAAMA,EAAE,QAAQ,oBAAqB,EAAE,EAAxC,YAIXC,GAAeL,EAACM,GAAQ,CAE1B,IAAIC,EAAKC,EAAIC,EAAIC,EAAIC,EAAM,GACrBC,EAAMN,EAAI,OAAS,EACzB,QAASZ,EAAI,EAAGA,EAAIY,EAAI,QAAS,CAC7B,IAAKE,EAAKF,EAAI,WAAWZ,GAAG,GAAK,MAC5Be,EAAKH,EAAI,WAAWZ,GAAG,GAAK,MAC5BgB,EAAKJ,EAAI,WAAWZ,GAAG,GAAK,IAC7B,MAAM,IAAI,UAAU,yBAAyB,EACjDa,EAAOC,GAAM,GAAOC,GAAM,EAAKC,EAC/BC,GAAOtB,GAAOkB,GAAO,GAAK,EAAE,EACtBlB,GAAOkB,GAAO,GAAK,EAAE,EACrBlB,GAAOkB,GAAO,EAAI,EAAE,EACpBlB,GAAOkB,EAAM,EAAE,CACzB,CACA,OAAOK,EAAMD,EAAI,MAAM,EAAGC,EAAM,CAAC,EAAI,MAAM,UAAUA,CAAG,EAAID,CAChE,EAhBqB,gBAsBfE,GAAQ,OAAO,MAAS,WAAcP,GAAQ,KAAKA,CAAG,EACtDrB,GAAcqB,GAAQ,OAAO,KAAKA,EAAK,QAAQ,EAAE,SAAS,QAAQ,EAC9DD,GACJS,GAAkB7B,GACjB8B,GAAQ,OAAO,KAAKA,CAAG,EAAE,SAAS,QAAQ,EAC1CA,GAAQ,CAGP,IAAIC,EAAO,CAAC,EACZ,QAAStB,EAAI,EAAGuB,EAAIF,EAAI,OAAQrB,EAAIuB,EAAGvB,GAAK,KACxCsB,EAAK,KAAKpB,GAAQ,MAAM,KAAMmB,EAAI,SAASrB,EAAGA,EAAI,IAAO,CAAC,CAAC,EAE/D,OAAOmB,GAAMG,EAAK,KAAK,EAAE,CAAC,CAC9B,EAMEE,GAAiBlB,EAAA,CAACe,EAAKI,EAAU,KAAUA,EAAUpB,GAAWe,GAAgBC,CAAG,CAAC,EAAID,GAAgBC,CAAG,EAA1F,kBAIjBK,GAAUpB,EAACP,GAAM,CACnB,GAAIA,EAAE,OAAS,EAAG,CACd,IAAI4B,EAAK5B,EAAE,WAAW,CAAC,EACvB,OAAO4B,EAAK,IAAO5B,EACb4B,EAAK,KAASzB,GAAQ,IAAQyB,IAAO,CAAE,EACnCzB,GAAQ,IAAQyB,EAAK,EAAK,EACzBzB,GAAQ,IAASyB,IAAO,GAAM,EAAK,EAChCzB,GAAQ,IAASyB,IAAO,EAAK,EAAK,EAClCzB,GAAQ,IAAQyB,EAAK,EAAK,CAC5C,KACK,CACD,IAAIA,EAAK,OACF5B,EAAE,WAAW,CAAC,EAAI,OAAU,MAC5BA,EAAE,WAAW,CAAC,EAAI,OACzB,OAAQG,GAAQ,IAASyB,IAAO,GAAM,CAAK,EACrCzB,GAAQ,IAASyB,IAAO,GAAM,EAAK,EACnCzB,GAAQ,IAASyB,IAAO,EAAK,EAAK,EAClCzB,GAAQ,IAAQyB,EAAK,EAAK,CACpC,CACJ,EAnBgB,WAoBVC,GAAU,gDAMVC,GAAOvB,EAACwB,GAAMA,EAAE,QAAQF,GAASF,EAAO,EAAjC,QAEPK,GAAUxC,GACTmB,GAAM,OAAO,KAAKA,EAAG,MAAM,EAAE,SAAS,QAAQ,EAC/CjB,GACKiB,GAAMU,GAAgB3B,GAAI,OAAOiB,CAAC,CAAC,EACnCA,GAAMS,GAAMU,GAAKnB,CAAC,CAAC,EAMxBsB,GAAS1B,EAAA,CAACC,EAAKkB,EAAU,KAAUA,EACnCpB,GAAW0B,GAAQxB,CAAG,CAAC,EACvBwB,GAAQxB,CAAG,EAFF,UAOT0B,GAAY3B,EAACC,GAAQyB,GAAOzB,EAAK,EAAI,EAAzB,aAIZ2B,GAAU,8EACVC,GAAU7B,EAAC8B,GAAS,CACtB,OAAQA,EAAK,OAAQ,CACjB,IAAK,GACD,IAAIC,GAAO,EAAOD,EAAK,WAAW,CAAC,IAAM,IACjC,GAAOA,EAAK,WAAW,CAAC,IAAM,IAC9B,GAAOA,EAAK,WAAW,CAAC,IAAM,EAC/B,GAAOA,EAAK,WAAW,CAAC,EAAIE,EAASD,EAAK,MACjD,OAAQnC,IAASoC,IAAW,IAAM,KAAM,EAClCpC,IAASoC,EAAS,MAAS,KAAM,EAC3C,IAAK,GACD,OAAOpC,IAAU,GAAOkC,EAAK,WAAW,CAAC,IAAM,IACvC,GAAOA,EAAK,WAAW,CAAC,IAAM,EAC/B,GAAOA,EAAK,WAAW,CAAC,CAAE,EACrC,QACI,OAAOlC,IAAU,GAAOkC,EAAK,WAAW,CAAC,IAAM,EACxC,GAAOA,EAAK,WAAW,CAAC,CAAE,CACzC,CACJ,EAjBgB,WAuBVG,GAAOjC,EAACkC,GAAMA,EAAE,QAAQN,GAASC,EAAO,EAAjC,QAIPM,GAAenC,EAACW,GAAQ,CAG1B,GADAA,EAAMA,EAAI,QAAQ,OAAQ,EAAE,EACxB,CAAChB,GAAM,KAAKgB,CAAG,EACf,MAAM,IAAI,UAAU,mBAAmB,EAC3CA,GAAO,KAAK,MAAM,GAAKA,EAAI,OAAS,EAAE,EACtC,IAAIyB,EAAK9B,EAAM,GAAI+B,EAAIC,EACvB,QAAS5C,EAAI,EAAGA,EAAIiB,EAAI,QACpByB,EAAM9C,GAAOqB,EAAI,OAAOjB,GAAG,CAAC,GAAK,GAC3BJ,GAAOqB,EAAI,OAAOjB,GAAG,CAAC,GAAK,IAC1B2C,EAAK/C,GAAOqB,EAAI,OAAOjB,GAAG,CAAC,IAAM,GACjC4C,EAAKhD,GAAOqB,EAAI,OAAOjB,GAAG,CAAC,GAClCY,GAAO+B,IAAO,GAAKzC,GAAQwC,GAAO,GAAK,GAAG,EACpCE,IAAO,GAAK1C,GAAQwC,GAAO,GAAK,IAAKA,GAAO,EAAI,GAAG,EAC/CxC,GAAQwC,GAAO,GAAK,IAAKA,GAAO,EAAI,IAAKA,EAAM,GAAG,EAEhE,OAAO9B,CACX,EAjBqB,gBAuBfiC,GAAQ,OAAO,MAAS,WAAc5B,GAAQ,KAAKR,GAASQ,CAAG,CAAC,EAChE1B,GAAc0B,GAAQ,OAAO,KAAKA,EAAK,QAAQ,EAAE,SAAS,QAAQ,EAC9DwB,GAEJK,GAAgBvD,GACfM,GAAMM,GAAS,OAAO,KAAKN,EAAG,QAAQ,CAAC,EACvCA,GAAMM,GAAS0C,GAAMhD,CAAC,EAAE,MAAM,EAAE,EAAE,IAAIE,GAAKA,EAAE,WAAW,CAAC,CAAC,CAAC,EAI5DgD,GAAezC,EAACT,GAAMiD,GAAcE,GAAOnD,CAAC,CAAC,EAA9B,gBAEfoD,GAAU1D,GACTM,GAAM,OAAO,KAAKA,EAAG,QAAQ,EAAE,SAAS,MAAM,EAC/CL,GACKK,GAAML,GAAI,OAAOsD,GAAcjD,CAAC,CAAC,EACjCA,GAAM0C,GAAKM,GAAMhD,CAAC,CAAC,EACxBmD,GAAS1C,EAACT,GAAMY,GAASZ,EAAE,QAAQ,QAAUW,GAAOA,GAAM,IAAM,IAAM,GAAG,CAAC,EAAjE,UAMT0C,GAAS5C,EAACC,GAAQ0C,GAAQD,GAAOzC,CAAG,CAAC,EAA5B,UAKT4C,GAAU7C,EAACC,GAAQ,CACrB,GAAI,OAAOA,GAAQ,SACf,MAAO,GACX,IAAMG,EAAIH,EAAI,QAAQ,OAAQ,EAAE,EAAE,QAAQ,UAAW,EAAE,EACvD,MAAO,CAAC,oBAAoB,KAAKG,CAAC,GAAK,CAAC,oBAAoB,KAAKA,CAAC,CACtE,EALgB,WAOV0C,GAAU9C,EAAC+C,IACN,CACH,MAAOA,EAAG,WAAY,GAAO,SAAU,GAAM,aAAc,EAC/D,GAHY,WAQVC,GAAehD,EAAA,UAAY,CAC7B,IAAMiD,EAAOjD,EAAA,CAACkD,EAAMC,IAAS,OAAO,eAAe,OAAO,UAAWD,EAAMJ,GAAQK,CAAI,CAAC,EAA3E,QACbF,EAAK,aAAc,UAAY,CAAE,OAAOL,GAAO,IAAI,CAAG,CAAC,EACvDK,EAAK,WAAY,SAAU9B,EAAS,CAAE,OAAOO,GAAO,KAAMP,CAAO,CAAG,CAAC,EACrE8B,EAAK,cAAe,UAAY,CAAE,OAAOvB,GAAO,KAAM,EAAI,CAAG,CAAC,EAC9DuB,EAAK,cAAe,UAAY,CAAE,OAAOvB,GAAO,KAAM,EAAI,CAAG,CAAC,EAC9DuB,EAAK,eAAgB,UAAY,CAAE,OAAOR,GAAa,IAAI,CAAG,CAAC,CACnE,EAPqB,gBAWfW,GAAmBpD,EAAA,UAAY,CACjC,IAAMiD,EAAOjD,EAAA,CAACkD,EAAMC,IAAS,OAAO,eAAe,WAAW,UAAWD,EAAMJ,GAAQK,CAAI,CAAC,EAA/E,QACbF,EAAK,WAAY,SAAU9B,EAAS,CAAE,OAAOD,GAAe,KAAMC,CAAO,CAAG,CAAC,EAC7E8B,EAAK,cAAe,UAAY,CAAE,OAAO/B,GAAe,KAAM,EAAI,CAAG,CAAC,EACtE+B,EAAK,cAAe,UAAY,CAAE,OAAO/B,GAAe,KAAM,EAAI,CAAG,CAAC,CAC1E,EALyB,oBASnBmC,GAAiBrD,EAAA,IAAM,CACzBgD,GAAa,EACbI,GAAiB,CACrB,EAHuB,kBAIjBE,GAAU,CACZ,QAASvE,GACT,QAASC,GACT,KAAMuD,GACN,aAAcJ,GACd,KAAMtB,GACN,aAAcR,GACd,WAAYuC,GACZ,SAAUlB,GACV,OAAQA,GACR,UAAWC,GACX,UAAWA,GACX,KAAMJ,GACN,KAAMU,GACN,OAAQW,GACR,QAASC,GACT,eAAgB3B,GAChB,aAAcuB,GACd,aAAcO,GACd,iBAAkBI,GAClB,eAAgBC,EACpB,EC1PA,IAAAE,GAAgB,SCRD,SAARC,IAAwB,CAC7B,MAAO,uCAAuC,QAAQ,QAAS,SAAUC,EAAG,CAC1E,IAAIC,EAAI,KAAK,OAAO,EAAI,GAAK,EACzBC,EAAIF,IAAM,IAAMC,EAAIA,EAAI,EAAM,EAClC,OAAOC,EAAE,SAAS,EAAE,CACtB,CAAC,CACH,CANwBC,EAAAJ,GAAA,QDZxB,SAASK,IAAsB,CAAE,aAAmKA,GAAsBC,EAAA,UAA+B,CAAE,OAAO,CAAG,EAA3C,uBAA8C,IAAIC,EAAG,EAAI,CAAC,EAAGC,EAAI,OAAO,UAAWC,EAAID,EAAE,eAAgBE,EAAI,OAAO,gBAAkB,SAAUH,EAAGI,EAAGH,EAAG,CAAED,EAAEI,CAAC,EAAIH,EAAE,KAAO,EAAGI,EAAkB,OAAO,QAArB,WAA8B,OAAS,CAAC,EAAG,EAAIA,EAAE,UAAY,aAAcC,EAAID,EAAE,eAAiB,kBAAmBE,EAAIF,EAAE,aAAe,gBAAiB,SAASG,EAAOR,EAAGI,EAAGH,EAAG,CAAE,OAAO,OAAO,eAAeD,EAAGI,EAAG,CAAE,MAAOH,EAAG,WAAY,GAAI,aAAc,GAAI,SAAU,EAAG,CAAC,EAAGD,EAAEI,CAAC,CAAG,CAA1HL,EAAAS,EAAA,UAA4H,GAAI,CAAEA,EAAO,CAAC,EAAG,EAAE,CAAG,MAAY,CAAEA,EAAST,EAAA,SAAgBC,EAAGI,EAAGH,EAAG,CAAE,OAAOD,EAAEI,CAAC,EAAIH,CAAG,EAA5C,SAA+C,CAAE,SAASQ,EAAKT,EAAGI,EAAGH,EAAGC,EAAG,CAAE,IAAIG,EAAID,GAAKA,EAAE,qBAAqBM,EAAYN,EAAIM,EAAWC,EAAI,OAAO,OAAON,EAAE,SAAS,EAAGC,EAAI,IAAIM,GAAQV,GAAK,CAAC,CAAC,EAAG,OAAOC,EAAEQ,EAAG,UAAW,CAAE,MAAOE,GAAiBb,EAAGC,EAAGK,CAAC,CAAE,CAAC,EAAGK,CAAG,CAA7MZ,EAAAU,EAAA,QAA+M,SAASK,EAASd,EAAGI,EAAGH,EAAG,CAAE,GAAI,CAAE,MAAO,CAAE,KAAM,SAAU,IAAKD,EAAE,KAAKI,EAAGH,CAAC,CAAE,CAAG,OAASD,EAAG,CAAE,MAAO,CAAE,KAAM,QAAS,IAAKA,CAAE,CAAG,CAAE,CAA1HD,EAAAe,EAAA,YAA4H,EAAE,KAAOL,EAAM,IAAIM,EAAI,iBAAkBC,EAAI,iBAAkBC,EAAI,YAAaC,EAAI,YAAaC,EAAI,CAAC,EAAG,SAAST,GAAY,CAAC,CAAbX,EAAAW,EAAA,aAAe,SAASU,GAAoB,CAAC,CAArBrB,EAAAqB,EAAA,qBAAuB,SAASC,GAA6B,CAAC,CAA9BtB,EAAAsB,EAAA,8BAAgC,IAAIC,EAAI,CAAC,EAAGd,EAAOc,EAAG,EAAG,UAAY,CAAE,OAAO,IAAM,CAAC,EAAG,IAAIC,EAAI,OAAO,eAAgBC,EAAID,GAAKA,EAAEA,EAAEE,GAAO,CAAC,CAAC,CAAC,CAAC,EAAGD,GAAKA,IAAMvB,GAAKC,EAAE,KAAKsB,EAAG,CAAC,IAAMF,EAAIE,GAAI,IAAIE,EAAIL,EAA2B,UAAYX,EAAU,UAAY,OAAO,OAAOY,CAAC,EAAG,SAASK,EAAsB3B,EAAG,CAAE,CAAC,OAAQ,QAAS,QAAQ,EAAE,QAAQ,SAAUI,EAAG,CAAEI,EAAOR,EAAGI,EAAG,SAAUJ,EAAG,CAAE,OAAO,KAAK,QAAQI,EAAGJ,CAAC,CAAG,CAAC,CAAG,CAAC,CAAG,CAA7ID,EAAA4B,EAAA,yBAA+I,SAASC,EAAc5B,EAAGI,EAAG,CAAE,SAASyB,EAAO5B,EAAGE,EAAGE,EAAGM,EAAG,CAAE,IAAIL,EAAIQ,EAASd,EAAEC,CAAC,EAAGD,EAAGG,CAAC,EAAG,GAAgBG,EAAE,OAAd,QAAoB,CAAE,IAAIC,EAAID,EAAE,IAAKS,EAAIR,EAAE,MAAO,OAAOQ,GAAiBe,GAAQf,CAAC,GAArB,UAA0Bb,EAAE,KAAKa,EAAG,SAAS,EAAIX,EAAE,QAAQW,EAAE,OAAO,EAAE,KAAK,SAAUf,EAAG,CAAE6B,EAAO,OAAQ7B,EAAGK,EAAGM,CAAC,CAAG,EAAG,SAAUX,EAAG,CAAE6B,EAAO,QAAS7B,EAAGK,EAAGM,CAAC,CAAG,CAAC,EAAIP,EAAE,QAAQW,CAAC,EAAE,KAAK,SAAUf,EAAG,CAAEO,EAAE,MAAQP,EAAGK,EAAEE,CAAC,CAAG,EAAG,SAAUP,EAAG,CAAE,OAAO6B,EAAO,QAAS7B,EAAGK,EAAGM,CAAC,CAAG,CAAC,CAAG,CAAEA,EAAEL,EAAE,GAAG,CAAG,CAAhZP,EAAA8B,EAAA,UAAkZ,IAAI5B,EAAGE,EAAE,KAAM,UAAW,CAAE,MAAOJ,EAAA,SAAeC,EAAGE,EAAG,CAAE,SAAS6B,GAA6B,CAAE,OAAO,IAAI3B,EAAE,SAAUA,EAAGH,EAAG,CAAE4B,EAAO7B,EAAGE,EAAGE,EAAGH,CAAC,CAAG,CAAC,CAAG,CAAtF,OAAAF,EAAAgC,EAAA,8BAA+F9B,EAAIA,EAAIA,EAAE,KAAK8B,EAA4BA,CAA0B,EAAIA,EAA2B,CAAG,EAAtO,QAAwO,CAAC,CAAG,CAAhsBhC,EAAA6B,EAAA,iBAAksB,SAASf,GAAiBT,EAAGH,EAAGC,EAAG,CAAE,IAAIC,EAAIY,EAAG,OAAO,SAAUV,EAAGM,EAAG,CAAE,GAAIR,IAAMc,EAAG,MAAM,MAAM,8BAA8B,EAAG,GAAId,IAAMe,EAAG,CAAE,GAAgBb,IAAZ,QAAe,MAAMM,EAAG,MAAO,CAAE,MAAOX,EAAG,KAAM,EAAG,CAAG,CAAE,IAAKE,EAAE,OAASG,EAAGH,EAAE,IAAMS,IAAK,CAAE,IAAIL,EAAIJ,EAAE,SAAU,GAAII,EAAG,CAAE,IAAIC,EAAIyB,GAAoB1B,EAAGJ,CAAC,EAAG,GAAIK,EAAG,CAAE,GAAIA,IAAMY,EAAG,SAAU,OAAOZ,CAAG,CAAE,CAAE,GAAeL,EAAE,SAAb,OAAqBA,EAAE,KAAOA,EAAE,MAAQA,EAAE,YAAyBA,EAAE,SAAd,QAAsB,CAAE,GAAIC,IAAMY,EAAG,MAAMZ,EAAIe,EAAGhB,EAAE,IAAKA,EAAE,kBAAkBA,EAAE,GAAG,CAAG,MAAoBA,EAAE,SAAf,UAAyBA,EAAE,OAAO,SAAUA,EAAE,GAAG,EAAGC,EAAIc,EAAG,IAAIK,EAAIR,EAASV,EAAGH,EAAGC,CAAC,EAAG,GAAiBoB,EAAE,OAAf,SAAqB,CAAE,GAAInB,EAAID,EAAE,KAAOgB,EAAIF,EAAGM,EAAE,MAAQH,EAAG,SAAU,MAAO,CAAE,MAAOG,EAAE,IAAK,KAAMpB,EAAE,IAAK,CAAG,CAAcoB,EAAE,OAAd,UAAuBnB,EAAIe,EAAGhB,EAAE,OAAS,QAASA,EAAE,IAAMoB,EAAE,IAAM,CAAE,CAAG,CAA7vBvB,EAAAc,GAAA,oBAA+vB,SAASmB,GAAoB5B,EAAGH,EAAG,CAAE,IAAIC,EAAID,EAAE,OAAQE,EAAIC,EAAE,SAASF,CAAC,EAAG,GAAIC,IAAMH,EAAG,OAAOC,EAAE,SAAW,KAAkBC,IAAZ,SAAiBE,EAAE,SAAS,SAAcH,EAAE,OAAS,SAAUA,EAAE,IAAMD,EAAGgC,GAAoB5B,EAAGH,CAAC,EAAeA,EAAE,SAAd,UAAsCC,IAAb,WAAmBD,EAAE,OAAS,QAASA,EAAE,IAAM,IAAI,UAAU,oCAAsCC,EAAI,UAAU,GAAIiB,EAAG,IAAId,EAAIS,EAASX,EAAGC,EAAE,SAAUH,EAAE,GAAG,EAAG,GAAgBI,EAAE,OAAd,QAAoB,OAAOJ,EAAE,OAAS,QAASA,EAAE,IAAMI,EAAE,IAAKJ,EAAE,SAAW,KAAMkB,EAAG,IAAIR,EAAIN,EAAE,IAAK,OAAOM,EAAIA,EAAE,MAAQV,EAAEG,EAAE,UAAU,EAAIO,EAAE,MAAOV,EAAE,KAAOG,EAAE,QAAsBH,EAAE,SAAf,WAA0BA,EAAE,OAAS,OAAQA,EAAE,IAAMD,GAAIC,EAAE,SAAW,KAAMkB,GAAKR,GAAKV,EAAE,OAAS,QAASA,EAAE,IAAM,IAAI,UAAU,kCAAkC,EAAGA,EAAE,SAAW,KAAMkB,EAAI,CAA7uBpB,EAAAiC,GAAA,uBAA+uB,SAASC,GAAajC,EAAG,CAAE,IAAII,EAAI,CAAE,OAAQJ,EAAE,CAAC,CAAE,EAAG,KAAKA,IAAMI,EAAE,SAAWJ,EAAE,CAAC,GAAI,KAAKA,IAAMI,EAAE,WAAaJ,EAAE,CAAC,EAAGI,EAAE,SAAWJ,EAAE,CAAC,GAAI,KAAK,WAAW,KAAKI,CAAC,CAAG,CAAxJL,EAAAkC,GAAA,gBAA0J,SAASC,GAAclC,EAAG,CAAE,IAAII,EAAIJ,EAAE,YAAc,CAAC,EAAGI,EAAE,KAAO,SAAU,OAAOA,EAAE,IAAKJ,EAAE,WAAaI,CAAG,CAAlGL,EAAAmC,GAAA,iBAAoG,SAAStB,GAAQZ,EAAG,CAAE,KAAK,WAAa,CAAC,CAAE,OAAQ,MAAO,CAAC,EAAGA,EAAE,QAAQiC,GAAc,IAAI,EAAG,KAAK,MAAM,EAAE,CAAG,CAApGlC,EAAAa,GAAA,WAAsG,SAASa,GAAOrB,EAAG,CAAE,GAAIA,GAAYA,IAAP,GAAU,CAAE,IAAIH,EAAIG,EAAE,CAAC,EAAG,GAAIH,EAAG,OAAOA,EAAE,KAAKG,CAAC,EAAG,GAAkB,OAAOA,EAAE,MAAvB,WAA6B,OAAOA,EAAG,GAAI,CAAC,MAAMA,EAAE,MAAM,EAAG,CAAE,IAAID,EAAI,GAAIE,EAAIN,EAAA,SAASoC,GAAO,CAAE,KAAO,EAAEhC,EAAIC,EAAE,QAAS,GAAIF,EAAE,KAAKE,EAAGD,CAAC,EAAG,OAAOgC,EAAK,MAAQ/B,EAAED,CAAC,EAAGgC,EAAK,KAAO,GAAIA,EAAM,OAAOA,EAAK,MAAQnC,EAAGmC,EAAK,KAAO,GAAIA,CAAM,EAAzJ,QAA4J,OAAO9B,EAAE,KAAOA,CAAG,CAAE,CAAE,MAAM,IAAI,UAAUyB,GAAQ1B,CAAC,EAAI,kBAAkB,CAAG,CAApY,OAAAL,EAAA0B,GAAA,UAA6YL,EAAkB,UAAYC,EAA4BlB,EAAEuB,EAAG,cAAe,CAAE,MAAOL,EAA4B,aAAc,EAAG,CAAC,EAAGlB,EAAEkB,EAA4B,cAAe,CAAE,MAAOD,EAAmB,aAAc,EAAG,CAAC,EAAGA,EAAkB,YAAcZ,EAAOa,EAA4Bd,EAAG,mBAAmB,EAAG,EAAE,oBAAsB,SAAUP,EAAG,CAAE,IAAII,EAAkB,OAAOJ,GAArB,YAA0BA,EAAE,YAAa,MAAO,CAAC,CAACI,IAAMA,IAAMgB,IAA8ChB,EAAE,aAAeA,EAAE,QAA5C,oBAAoD,EAAG,EAAE,KAAO,SAAUJ,EAAG,CAAE,OAAO,OAAO,eAAiB,OAAO,eAAeA,EAAGqB,CAA0B,GAAKrB,EAAE,UAAYqB,EAA4Bb,EAAOR,EAAGO,EAAG,mBAAmB,GAAIP,EAAE,UAAY,OAAO,OAAO0B,CAAC,EAAG1B,CAAG,EAAG,EAAE,MAAQ,SAAUA,EAAG,CAAE,MAAO,CAAE,QAASA,CAAE,CAAG,EAAG2B,EAAsBC,EAAc,SAAS,EAAGpB,EAAOoB,EAAc,UAAWtB,EAAG,UAAY,CAAE,OAAO,IAAM,CAAC,EAAG,EAAE,cAAgBsB,EAAe,EAAE,MAAQ,SAAU5B,EAAGC,EAAGC,EAAGC,EAAGE,EAAG,CAAaA,IAAX,SAAiBA,EAAI,SAAU,IAAIM,EAAI,IAAIiB,EAAcnB,EAAKT,EAAGC,EAAGC,EAAGC,CAAC,EAAGE,CAAC,EAAG,OAAO,EAAE,oBAAoBJ,CAAC,EAAIU,EAAIA,EAAE,KAAK,EAAE,KAAK,SAAUX,EAAG,CAAE,OAAOA,EAAE,KAAOA,EAAE,MAAQW,EAAE,KAAK,CAAG,CAAC,CAAG,EAAGgB,EAAsBD,CAAC,EAAGlB,EAAOkB,EAAGnB,EAAG,WAAW,EAAGC,EAAOkB,EAAG,EAAG,UAAY,CAAE,OAAO,IAAM,CAAC,EAAGlB,EAAOkB,EAAG,WAAY,UAAY,CAAE,MAAO,oBAAsB,CAAC,EAAG,EAAE,KAAO,SAAU1B,EAAG,CAAE,IAAII,EAAI,OAAOJ,CAAC,EAAGC,EAAI,CAAC,EAAG,QAASC,KAAKE,EAAGH,EAAE,KAAKC,CAAC,EAAG,OAAOD,EAAE,QAAQ,EAAGF,EAAA,SAASoC,GAAO,CAAE,KAAOlC,EAAE,QAAS,CAAE,IAAID,EAAIC,EAAE,IAAI,EAAG,GAAID,KAAKI,EAAG,OAAO+B,EAAK,MAAQnC,EAAGmC,EAAK,KAAO,GAAIA,CAAM,CAAE,OAAOA,EAAK,KAAO,GAAIA,CAAM,EAA/I,OAAkJ,EAAG,EAAE,OAASV,GAAQb,GAAQ,UAAY,CAAE,YAAaA,GAAS,MAAOb,EAAA,SAAeK,EAAG,CAAE,GAAI,KAAK,KAAO,EAAG,KAAK,KAAO,EAAG,KAAK,KAAO,KAAK,MAAQJ,EAAG,KAAK,KAAO,GAAI,KAAK,SAAW,KAAM,KAAK,OAAS,OAAQ,KAAK,IAAMA,EAAG,KAAK,WAAW,QAAQkC,EAAa,EAAG,CAAC9B,EAAG,QAASH,KAAK,KAAcA,EAAE,OAAO,CAAC,IAAlB,KAAuBC,EAAE,KAAK,KAAMD,CAAC,GAAK,CAAC,MAAM,CAACA,EAAE,MAAM,CAAC,CAAC,IAAM,KAAKA,CAAC,EAAID,EAAI,EAA5S,SAA+S,KAAMD,EAAA,UAAgB,CAAE,KAAK,KAAO,GAAI,IAAIC,EAAI,KAAK,WAAW,CAAC,EAAE,WAAY,GAAgBA,EAAE,OAAd,QAAoB,MAAMA,EAAE,IAAK,OAAO,KAAK,IAAM,EAAhI,QAAmI,kBAAmBD,EAAA,SAA2BK,EAAG,CAAE,GAAI,KAAK,KAAM,MAAMA,EAAG,IAAIH,EAAI,KAAM,SAASmC,EAAOlC,EAAGC,EAAG,CAAE,OAAOQ,EAAE,KAAO,QAASA,EAAE,IAAMP,EAAGH,EAAE,KAAOC,EAAGC,IAAMF,EAAE,OAAS,OAAQA,EAAE,IAAMD,GAAI,CAAC,CAACG,CAAG,CAAzGJ,EAAAqC,EAAA,UAA2G,QAASjC,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CAAE,IAAIE,EAAI,KAAK,WAAWF,CAAC,EAAGQ,EAAIN,EAAE,WAAY,GAAeA,EAAE,SAAb,OAAqB,OAAO+B,EAAO,KAAK,EAAG,GAAI/B,EAAE,QAAU,KAAK,KAAM,CAAE,IAAIC,EAAIJ,EAAE,KAAKG,EAAG,UAAU,EAAGE,EAAIL,EAAE,KAAKG,EAAG,YAAY,EAAG,GAAIC,GAAKC,EAAG,CAAE,GAAI,KAAK,KAAOF,EAAE,SAAU,OAAO+B,EAAO/B,EAAE,SAAU,EAAE,EAAG,GAAI,KAAK,KAAOA,EAAE,WAAY,OAAO+B,EAAO/B,EAAE,UAAU,CAAG,SAAWC,GAAK,GAAI,KAAK,KAAOD,EAAE,SAAU,OAAO+B,EAAO/B,EAAE,SAAU,EAAE,MAAU,CAAE,GAAI,CAACE,EAAG,MAAM,MAAM,wCAAwC,EAAG,GAAI,KAAK,KAAOF,EAAE,WAAY,OAAO+B,EAAO/B,EAAE,UAAU,CAAG,CAAE,CAAE,CAAE,EAAhwB,qBAAmwB,OAAQN,EAAA,SAAgBC,EAAGI,EAAG,CAAE,QAASH,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CAAE,IAAIE,EAAI,KAAK,WAAWF,CAAC,EAAG,GAAIE,EAAE,QAAU,KAAK,MAAQD,EAAE,KAAKC,EAAG,YAAY,GAAK,KAAK,KAAOA,EAAE,WAAY,CAAE,IAAIE,EAAIF,EAAG,KAAO,CAAE,CAAEE,IAAkBL,IAAZ,SAAgCA,IAAf,aAAqBK,EAAE,QAAUD,GAAKA,GAAKC,EAAE,aAAeA,EAAI,MAAO,IAAIM,EAAIN,EAAIA,EAAE,WAAa,CAAC,EAAG,OAAOM,EAAE,KAAOX,EAAGW,EAAE,IAAMP,EAAGC,GAAK,KAAK,OAAS,OAAQ,KAAK,KAAOA,EAAE,WAAYc,GAAK,KAAK,SAASR,CAAC,CAAG,EAA7b,UAAgc,SAAUZ,EAAA,SAAkBC,EAAGI,EAAG,CAAE,GAAgBJ,EAAE,OAAd,QAAoB,MAAMA,EAAE,IAAK,OAAmBA,EAAE,OAAd,SAAqCA,EAAE,OAAjB,WAAwB,KAAK,KAAOA,EAAE,IAAmBA,EAAE,OAAf,UAAuB,KAAK,KAAO,KAAK,IAAMA,EAAE,IAAK,KAAK,OAAS,SAAU,KAAK,KAAO,OAAsBA,EAAE,OAAf,UAAuBI,IAAM,KAAK,KAAOA,GAAIe,CAAG,EAA1R,YAA6R,OAAQpB,EAAA,SAAgBC,EAAG,CAAE,QAASI,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CAAE,IAAIH,EAAI,KAAK,WAAWG,CAAC,EAAG,GAAIH,EAAE,aAAeD,EAAG,OAAO,KAAK,SAASC,EAAE,WAAYA,EAAE,QAAQ,EAAGiC,GAAcjC,CAAC,EAAGkB,CAAG,CAAE,EAAxM,UAA2M,MAASpB,EAAA,SAAgBC,EAAG,CAAE,QAASI,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CAAE,IAAIH,EAAI,KAAK,WAAWG,CAAC,EAAG,GAAIH,EAAE,SAAWD,EAAG,CAAE,IAAIE,EAAID,EAAE,WAAY,GAAgBC,EAAE,OAAd,QAAoB,CAAE,IAAIC,EAAID,EAAE,IAAKgC,GAAcjC,CAAC,CAAG,CAAE,OAAOE,CAAG,CAAE,CAAE,MAAM,MAAM,uBAAuB,CAAG,EAAtQ,UAAyQ,cAAeJ,EAAA,SAAuBK,EAAGH,EAAGC,EAAG,CAAE,OAAO,KAAK,SAAW,CAAE,SAAUuB,GAAOrB,CAAC,EAAG,WAAYH,EAAG,QAASC,CAAE,EAAc,KAAK,SAAhB,SAA2B,KAAK,IAAMF,GAAImB,CAAG,EAA1J,gBAA4J,EAAG,CAAG,CAA/0RpB,EAAAD,GAAA,uBACT,SAASuC,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQC,EAAKC,EAAK,CAAE,GAAI,CAAE,IAAIC,EAAOP,EAAIK,CAAG,EAAEC,CAAG,EAAOE,EAAQD,EAAK,KAAO,OAASE,EAAO,CAAEP,EAAOO,CAAK,EAAG,MAAQ,CAAMF,EAAK,KAAQN,EAAQO,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKL,EAAOC,CAAM,CAAK,CAA/P3C,EAAAsC,GAAA,sBACT,SAASW,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUZ,EAASC,EAAQ,CAAE,IAAIF,EAAMW,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASV,EAAMK,EAAO,CAAET,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQI,CAAK,CAAG,CAAvF/C,EAAA0C,EAAA,SAAyF,SAASC,EAAOU,EAAK,CAAEf,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASU,CAAG,CAAG,CAArFrD,EAAA2C,EAAA,UAAuFD,EAAM,MAAS,CAAG,CAAC,CAAG,CAAG,CAA3X1C,EAAAiD,GAAA,qBACT,SAASK,GAAeC,EAAKjD,EAAG,CAAE,OAAOkD,GAAgBD,CAAG,GAAKE,GAAsBF,EAAKjD,CAAC,GAAKoD,GAA4BH,EAAKjD,CAAC,GAAKqD,GAAiB,CAAG,CAApJ3D,EAAAsD,GAAA,kBACT,SAASK,IAAmB,CAAE,MAAM,IAAI,UAAU;AAAA,mFAA2I,CAAG,CAAvL3D,EAAA2D,GAAA,oBACT,SAASF,GAAsBvD,EAAGe,EAAG,CAAE,IAAI,EAAYf,GAAR,KAAY,KAAsB,OAAO,OAAtB,KAAgCA,EAAE,OAAO,QAAQ,GAAKA,EAAE,YAAY,EAAG,GAAY,GAAR,KAAW,CAAE,IAAIG,EAAGF,EAAGG,EAAGE,EAAGI,EAAI,CAAC,EAAGM,EAAI,GAAId,EAAI,GAAI,GAAI,CAAE,GAAIE,GAAK,EAAI,EAAE,KAAKJ,CAAC,GAAG,KAAYe,IAAN,EAAS,CAAE,GAAI,OAAO,CAAC,IAAM,EAAG,OAAQC,EAAI,EAAI,KAAO,MAAO,EAAEA,GAAKb,EAAIC,EAAE,KAAK,CAAC,GAAG,QAAUM,EAAE,KAAKP,EAAE,KAAK,EAAGO,EAAE,SAAWK,GAAIC,EAAI,GAAG,CAAE,OAAShB,EAAG,CAAEE,EAAI,GAAID,EAAID,CAAG,QAAE,CAAU,GAAI,CAAE,GAAI,CAACgB,GAAa,EAAE,QAAV,OAAwBV,EAAI,EAAE,OAAU,EAAG,OAAOA,CAAC,IAAMA,GAAI,MAAQ,QAAE,CAAU,GAAIJ,EAAG,MAAMD,CAAG,CAAE,CAAE,OAAOS,CAAG,CAAE,CAAhhBZ,EAAAyD,GAAA,yBACT,SAASD,GAAgBD,EAAK,CAAE,GAAI,MAAM,QAAQA,CAAG,EAAG,OAAOA,CAAK,CAA3DvD,EAAAwD,GAAA,mBACT,SAASzB,GAAQ3B,EAAG,CAAE,0BAA2B,OAAO2B,GAAwB,OAAO,QAArB,YAA2C,OAAO,OAAO,UAA1B,SAAqC,SAAU3B,EAAG,CAAE,OAAO,OAAOA,CAAG,EAAI,SAAUA,EAAG,CAAE,OAAOA,GAAmB,OAAO,QAArB,YAA+BA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CAAG,EAAG2B,GAAQ3B,CAAC,CAAG,CAApTJ,EAAA+B,GAAA,WACT,SAAS6B,GAA2BxD,EAAGyD,EAAgB,CAAE,IAAIC,EAAK,OAAO,OAAW,KAAe1D,EAAE,OAAO,QAAQ,GAAKA,EAAE,YAAY,EAAG,GAAI,CAAC0D,EAAI,CAAE,GAAI,MAAM,QAAQ1D,CAAC,IAAM0D,EAAKJ,GAA4BtD,CAAC,IAAMyD,GAAkBzD,GAAK,OAAOA,EAAE,QAAW,SAAU,CAAM0D,IAAI1D,EAAI0D,GAAI,IAAIxD,EAAI,EAAOyD,EAAI/D,EAAA,UAAa,CAAC,EAAd,KAAiB,MAAO,CAAE+D,EAAM,EAAG/D,EAAA,UAAa,CAAE,OAAIM,GAAKF,EAAE,OAAe,CAAE,KAAM,EAAK,EAAU,CAAE,KAAM,GAAO,MAAOA,EAAEE,GAAG,CAAE,CAAG,EAAhG,KAAmG,EAAGN,EAAA,SAAWgE,EAAI,CAAE,MAAMA,CAAI,EAA3B,KAA8B,EAAGD,CAAE,CAAG,CAAE,MAAM,IAAI,UAAU;AAAA,mFAAuI,CAAG,CAAE,IAAIE,EAAmB,GAAMC,EAAS,GAAOb,EAAK,MAAO,CAAE,EAAGrD,EAAA,UAAa,CAAE8D,EAAKA,EAAG,KAAK1D,CAAC,CAAG,EAAhC,KAAmC,EAAGJ,EAAA,UAAa,CAAE,IAAImE,EAAOL,EAAG,KAAK,EAAG,OAAAG,EAAmBE,EAAK,KAAaA,CAAM,EAAhF,KAAmF,EAAGnE,EAAA,SAAWoE,EAAK,CAAEF,EAAS,GAAMb,EAAMe,CAAK,EAA5C,KAA+C,EAAGpE,EAAA,UAAa,CAAE,GAAI,CAAM,CAACiE,GAAoBH,EAAG,QAAa,MAAMA,EAAG,OAAU,CAAG,QAAE,CAAU,GAAII,EAAQ,MAAMb,CAAK,CAAE,EAAzH,IAA2H,CAAG,CAAl+BrD,EAAA4D,GAAA,8BACT,SAASF,GAA4BtD,EAAGiE,EAAQ,CAAE,GAAKjE,EAAW,IAAI,OAAOA,GAAM,SAAU,OAAOkE,GAAkBlE,EAAGiE,CAAM,EAAG,IAAIlE,EAAI,OAAO,UAAU,SAAS,KAAKC,CAAC,EAAE,MAAM,EAAG,EAAE,EAAgE,GAAzDD,IAAM,UAAYC,EAAE,cAAaD,EAAIC,EAAE,YAAY,MAAUD,IAAM,OAASA,IAAM,MAAO,OAAO,MAAM,KAAKC,CAAC,EAAG,GAAID,IAAM,aAAe,2CAA2C,KAAKA,CAAC,EAAG,OAAOmE,GAAkBlE,EAAGiE,CAAM,EAAG,CAAtZrE,EAAA0D,GAAA,+BACT,SAASY,GAAkBf,EAAKgB,EAAK,EAAMA,GAAO,MAAQA,EAAMhB,EAAI,UAAQgB,EAAMhB,EAAI,QAAQ,QAASjD,EAAI,EAAGkE,EAAO,IAAI,MAAMD,CAAG,EAAGjE,EAAIiE,EAAKjE,IAAKkE,EAAKlE,CAAC,EAAIiD,EAAIjD,CAAC,EAAG,OAAOkE,CAAM,CAAzKxE,EAAAsE,GAAA,qBACT,SAASG,GAAQpE,EAAGH,EAAG,CAAE,IAAI,EAAI,OAAO,KAAKG,CAAC,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAID,EAAI,OAAO,sBAAsBC,CAAC,EAAGH,IAAME,EAAIA,EAAE,OAAO,SAAUF,EAAG,CAAE,OAAO,OAAO,yBAAyBG,EAAGH,CAAC,EAAE,UAAY,CAAC,GAAI,EAAE,KAAK,MAAM,EAAGE,CAAC,CAAG,CAAE,OAAO,CAAG,CAArPJ,EAAAyE,GAAA,WACT,SAASC,GAAcrE,EAAG,CAAE,QAASH,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAI,EAAY,UAAUA,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAC,EAAGA,EAAI,EAAIuE,GAAQ,OAAO,CAAC,EAAG,EAAE,EAAE,QAAQ,SAAU,EAAG,CAAEE,GAAgBtE,EAAG,EAAG,EAAE,CAAC,CAAC,CAAG,CAAC,EAAI,OAAO,0BAA4B,OAAO,iBAAiBA,EAAG,OAAO,0BAA0B,CAAC,CAAC,EAAIoE,GAAQ,OAAO,CAAC,CAAC,EAAE,QAAQ,SAAU,EAAG,CAAE,OAAO,eAAepE,EAAG,EAAG,OAAO,yBAAyB,EAAG,CAAC,CAAC,CAAG,CAAC,CAAG,CAAE,OAAOA,CAAG,CAA7aL,EAAA0E,GAAA,iBACT,SAASC,GAAgBC,EAAKhC,EAAKG,EAAO,CAAE,OAAAH,EAAMiC,GAAejC,CAAG,EAAOA,KAAOgC,EAAO,OAAO,eAAeA,EAAKhC,EAAK,CAAE,MAAOG,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAK,CAAC,EAAY6B,EAAIhC,CAAG,EAAIG,EAAgB6B,CAAK,CAAlO5E,EAAA2E,GAAA,mBACT,SAASG,GAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAA/IhF,EAAA8E,GAAA,mBACT,SAASG,GAAkBC,EAAQC,EAAO,CAAE,QAAS7E,EAAI,EAAGA,EAAI6E,EAAM,OAAQ7E,IAAK,CAAE,IAAI8E,EAAaD,EAAM7E,CAAC,EAAG8E,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeF,EAAQL,GAAeO,EAAW,GAAG,EAAGA,CAAU,CAAG,CAAE,CAAnUpF,EAAAiF,GAAA,qBACT,SAASI,GAAaL,EAAaM,EAAYC,EAAa,CAAE,OAAID,GAAYL,GAAkBD,EAAY,UAAWM,CAAU,EAAOC,GAAaN,GAAkBD,EAAaO,CAAW,EAAG,OAAO,eAAeP,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAAnRhF,EAAAqF,GAAA,gBACT,SAASR,GAAe5E,EAAG,CAAE,IAAIK,EAAIkF,GAAavF,EAAG,QAAQ,EAAG,OAAmB8B,GAAQzB,CAAC,GAArB,SAAyBA,EAAIA,EAAI,EAAI,CAAnGN,EAAA6E,GAAA,kBACT,SAASW,GAAavF,EAAGC,EAAG,CAAE,GAAgB6B,GAAQ9B,CAAC,GAArB,UAA0B,CAACA,EAAG,OAAOA,EAAG,IAAII,EAAIJ,EAAE,OAAO,WAAW,EAAG,GAAeI,IAAX,OAAc,CAAE,IAAIC,EAAID,EAAE,KAAKJ,EAAGC,GAAK,SAAS,EAAG,GAAgB6B,GAAQzB,CAAC,GAArB,SAAwB,OAAOA,EAAG,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAqBJ,IAAb,SAAiB,OAAS,QAAQD,CAAC,CAAG,CAAlTD,EAAAwF,GAAA,gBAMT,IAAIC,GAAkB,SAClBC,GAAyB,gBACzBC,GAAyB,gBACzBC,GAAiB,CACnB,SAAU,KACV,UAAW,KACX,SAAU,CAAC,EACX,0BAA2B,CAAC,EAC5B,YAAa,KACb,WAAY,KACZ,WAAY,KACZ,gBAAiB,KACjB,UAAW,KACX,QAAS,KACT,qBAAsB,KACtB,oBAAqB,GACrB,QAAS,CAAC,EACV,aAAc,GACd,gBAAiB,KACjB,gBAAiB,KACjB,cAAeC,GACf,UAAW,OAAO,kBAClB,YAAa,CAAC,EAAG,IAAM,IAAM,GAAI,EACjC,gBAAiB,EACjB,yBAA0B,KAC1B,4BAA6B,GAC7B,2BAA4B,GAC5B,qBAAsB,GACtB,yBAA0B,GAC1B,WAAY,KACZ,WAAY,KACZ,UAAW,KACX,SAAUJ,EACZ,EACIK,IAA0B,UAAY,CACxC,SAASA,EAAWC,EAAMC,EAAS,CACjClB,GAAgB,KAAMgB,CAAU,EAE5B,WAAYE,GACd,QAAQ,IAAI,wGAAwG,EAItH,KAAK,QAAUA,EAGf,KAAK,QAAQ,UAAY,OAAO,KAAK,QAAQ,SAAS,EAGtD,KAAK,YAAc,KAAK,QAAQ,WAGhC,KAAK,KAAOD,EAGZ,KAAK,IAAM,KAGX,KAAK,KAAO,KAGZ,KAAK,aAAe,KAGpB,KAAK,eAAiB,KAGtB,KAAK,QAAU,KAGf,KAAK,SAAW,GAGhB,KAAK,MAAQ,KAKb,KAAK,QAAU,KAGf,KAAK,cAAgB,EAGrB,KAAK,cAAgB,KAGrB,KAAK,mBAAqB,EAI1B,KAAK,iBAAmB,KAIxB,KAAK,oBAAsB,IAC7B,CA7DS,OAAA/F,EAAA8F,EAAA,cAyEFT,GAAaS,EAAY,CAAC,CAC/B,IAAK,sBACL,MAAO9F,EAAA,UAA+B,CACpC,IAAIiG,EAAQ,KACZ,OAAO,KAAK,QAAQ,YAAY,KAAK,KAAM,KAAK,OAAO,EAAE,KAAK,SAAUC,EAAa,CACnF,OAAOD,EAAM,YAAY,yBAAyBC,CAAW,CAC/D,CAAC,CACH,EALO,sBAMT,EAAG,CACD,IAAK,2BACL,MAAOlG,EAAA,SAAkCmG,EAAgB,CACvD,KAAK,IAAMA,EAAe,WAAa,KACvC,KAAK,oBAAsBA,EAAe,oBAAsB,KAChE,KAAK,eAAiBA,EAAe,aACvC,EAJO,2BAKT,EAAG,CACD,IAAK,QACL,MAAOnG,EAAA,UAAiB,CACtB,IAAIoG,EAAS,KACTL,EAAO,KAAK,KAChB,GAAI,CAACA,EAAM,CACT,KAAK,WAAW,IAAI,MAAM,2CAA2C,CAAC,EACtE,MACF,CACA,GAAI,CAAC,CAACN,GAAiBC,GAAwBC,EAAsB,EAAE,SAAS,KAAK,QAAQ,QAAQ,EAAG,CACtG,KAAK,WAAW,IAAI,MAAM,6BAA6B,OAAO,KAAK,QAAQ,QAAQ,CAAC,CAAC,EACrF,MACF,CACA,GAAI,CAAC,KAAK,QAAQ,UAAY,CAAC,KAAK,QAAQ,WAAa,CAAC,KAAK,IAAK,CAClE,KAAK,WAAW,IAAI,MAAM,uDAAuD,CAAC,EAClF,MACF,CACA,IAAIU,EAAc,KAAK,QAAQ,YAC/B,GAAIA,GAAe,MAAQ,OAAO,UAAU,SAAS,KAAKA,CAAW,IAAM,iBAAkB,CAC3F,KAAK,WAAW,IAAI,MAAM,+DAA+D,CAAC,EAC1F,MACF,CACA,GAAI,KAAK,QAAQ,gBAAkB,EAEjC,QAASC,EAAK,EAAGC,EAAO,CAAC,YAAa,aAAc,sBAAsB,EAAGD,EAAKC,EAAK,OAAQD,IAAM,CACnG,IAAIE,EAAaD,EAAKD,CAAE,EACxB,GAAI,KAAK,QAAQE,CAAU,EAAG,CAC5B,KAAK,WAAW,IAAI,MAAM,uBAAuB,OAAOA,EAAY,yCAAyC,CAAC,CAAC,EAC/G,MACF,CACF,CAEF,GAAI,KAAK,QAAQ,yBAA0B,CACzC,GAAI,KAAK,QAAQ,iBAAmB,EAAG,CACrC,KAAK,WAAW,IAAI,MAAM,0FAA0F,CAAC,EACrH,MACF,CACA,GAAI,KAAK,QAAQ,kBAAoB,KAAK,QAAQ,yBAAyB,OAAQ,CACjF,KAAK,WAAW,IAAI,MAAM,iGAAiG,CAAC,EAC5H,MACF,CACF,CACA,KAAK,QAAQ,YAAYT,EAAM,KAAK,OAAO,EAAE,KAAK,SAAUG,EAAa,CAOvE,OANIA,GAAe,KACjBO,GAAI,4FAA4F,EAEhGA,GAAI,2BAA2B,OAAOP,CAAW,CAAC,EAEpDE,EAAO,aAAeF,EAClBE,EAAO,QACFA,EAAO,QAETA,EAAO,QAAQ,WAAW,SAASL,EAAMK,EAAO,QAAQ,SAAS,CAC1E,CAAC,EAAE,KAAK,SAAUM,EAAQ,CAMxB,GALAN,EAAO,QAAUM,EAKbN,EAAO,QAAQ,qBACjBA,EAAO,MAAQ,aACNA,EAAO,QAAQ,YAAc,MAEtC,GADAA,EAAO,MAAQ,OAAOA,EAAO,QAAQ,UAAU,EAC3C,OAAO,MAAMA,EAAO,KAAK,EAAG,CAC9BA,EAAO,WAAW,IAAI,MAAM,uDAAuD,CAAC,EACpF,MACF,UAEAA,EAAO,MAAQA,EAAO,QAAQ,KAC1BA,EAAO,OAAS,KAAM,CACxBA,EAAO,WAAW,IAAI,MAAM,uJAAuJ,CAAC,EACpL,MACF,CAKEA,EAAO,QAAQ,gBAAkB,GAAKA,EAAO,qBAAuB,KACtEA,EAAO,qBAAqB,EAE5BA,EAAO,mBAAmB,CAE9B,CAAC,EAAE,MAAS,SAAU/C,EAAK,CACzB+C,EAAO,WAAW/C,CAAG,CACvB,CAAC,CACH,EAnFO,QA2FT,EAAG,CACD,IAAK,uBACL,MAAOrD,EAAA,UAAgC,CACrC,IAAI2G,EACFC,EAAS,KACPC,EAAY,KAAK,MACjBC,EAAgB,EACpB,KAAK,iBAAmB,CAAC,EACzB,IAAIC,EAAY,KAAK,qBAAuB,KAAO,KAAK,oBAAoB,OAAS,KAAK,QAAQ,gBAI9FC,GAASL,EAAwB,KAAK,QAAQ,4BAA8B,MAAQA,IAA0B,OAASA,EAAwBM,GAAmB,KAAK,QAAQ,KAAMF,CAAS,EAG9L,KAAK,qBACPC,EAAM,QAAQ,SAAUE,EAAMC,EAAO,CACnCD,EAAK,UAAYN,EAAO,oBAAoBO,CAAK,GAAK,IACxD,CAAC,EAIH,KAAK,oBAAsB,IAAI,MAAMH,EAAM,MAAM,EAIjD,IAAII,EAAUJ,EAAM,IAAI,SAAUE,EAAMC,EAAO,CAC7C,IAAIE,EAAmB,EACvB,OAAOT,EAAO,QAAQ,MAAMM,EAAK,MAAOA,EAAK,GAAG,EAAE,KAAK,SAAUI,EAAM,CACrE,IAAIvE,EAAQuE,EAAK,MACjB,OAAO,IAAI,QAAQ,SAAU9E,EAASC,EAAQ,CAE5C,IAAIuD,EAAUtB,GAAcA,GAAc,CAAC,EAAGkC,EAAO,OAAO,EAAG,CAAC,EAAG,CAEjE,UAAWM,EAAK,WAAa,KAG7B,4BAA6B,GAC7B,2BAA4B,GAE5B,gBAAiB,EAEjB,yBAA0B,KAC1B,SAAUN,EAAO,QAAQ,0BAEzB,QAASlC,GAAcA,GAAc,CAAC,EAAGkC,EAAO,QAAQ,OAAO,EAAG,CAAC,EAAG,CACpE,gBAAiB,SACnB,CAAC,EAED,UAAWpE,EACX,QAASC,EAGT,WAAYzC,EAAA,SAAoBuH,EAAiB,CAC/CT,EAAgBA,EAAgBO,EAAmBE,EACnDF,EAAmBE,EACnBX,EAAO,cAAcE,EAAeD,CAAS,CAC/C,EAJY,cAOZ,qBAAsB7G,EAAA,UAAgC,CACpD4G,EAAO,oBAAoBO,CAAK,EAAIK,EAAO,IAEvCZ,EAAO,oBAAoB,OAAO,SAAUpG,EAAG,CACjD,MAAO,EAAQA,CACjB,CAAC,EAAE,SAAWwG,EAAM,QAClBJ,EAAO,wBAAwB,CAEnC,EARsB,uBASxB,CAAC,EACGY,EAAS,IAAI1B,EAAW/C,EAAOiD,CAAO,EAC1CwB,EAAO,MAAM,EAGbZ,EAAO,iBAAiB,KAAKY,CAAM,CACrC,CAAC,CACH,CAAC,CACH,CAAC,EACGC,EAGJ,QAAQ,IAAIL,CAAO,EAAE,KAAK,UAAY,CACpCK,EAAMb,EAAO,aAAa,OAAQA,EAAO,QAAQ,QAAQ,EACzDa,EAAI,UAAU,gBAAiB,SAAS,OAAOb,EAAO,oBAAoB,KAAK,GAAG,CAAC,CAAC,EAGpF,IAAIc,EAAWC,GAAef,EAAO,QAAQ,QAAQ,EACrD,OAAIc,IAAa,IACfD,EAAI,UAAU,kBAAmBC,CAAQ,EAEpCd,EAAO,aAAaa,EAAK,IAAI,CACtC,CAAC,EAAE,KAAK,SAAUG,EAAK,CACrB,GAAI,CAACC,GAAiBD,EAAI,UAAU,EAAG,GAAG,EAAG,CAC3ChB,EAAO,eAAea,EAAKG,EAAK,gDAAgD,EAChF,MACF,CACA,IAAIE,EAAWF,EAAI,UAAU,UAAU,EACvC,GAAIE,GAAY,KAAM,CACpBlB,EAAO,eAAea,EAAKG,EAAK,yCAAyC,EACzE,MACF,CACAhB,EAAO,IAAMmB,GAAWnB,EAAO,QAAQ,SAAUkB,CAAQ,EACzDrB,GAAI,qBAAqB,OAAOG,EAAO,GAAG,CAAC,EAC3CA,EAAO,aAAagB,CAAG,CACzB,CAAC,EAAE,MAAS,SAAUvE,EAAK,CACzBuD,EAAO,WAAWvD,CAAG,CACvB,CAAC,CACH,EAzGO,uBAiHT,EAAG,CACD,IAAK,qBACL,MAAOrD,EAAA,UAA8B,CAOnC,GAHA,KAAK,SAAW,GAGZ,KAAK,KAAO,KAAM,CACpByG,GAAI,sCAAsC,OAAO,KAAK,GAAG,CAAC,EAC1D,KAAK,cAAc,EACnB,MACF,CAGA,GAAI,KAAK,QAAQ,WAAa,KAAM,CAClCA,GAAI,sCAAsC,OAAO,KAAK,QAAQ,SAAS,CAAC,EACxE,KAAK,IAAM,KAAK,QAAQ,UACxB,KAAK,cAAc,EACnB,MACF,CAGAA,GAAI,uBAAuB,EAC3B,KAAK,cAAc,CACrB,EAxBO,qBAoCT,EAAG,CACD,IAAK,QACL,MAAOzG,EAAA,SAAegI,EAAiB,CACrC,IAAIC,EAAS,KAEb,GAAI,KAAK,kBAAoB,KAAM,CACjC,IAAIC,EAAYtE,GAA2B,KAAK,gBAAgB,EAC9DuE,EACF,GAAI,CACF,IAAKD,EAAU,EAAE,EAAG,EAAEC,EAAQD,EAAU,EAAE,GAAG,MAAO,CAClD,IAAIV,EAASW,EAAM,MACnBX,EAAO,MAAMQ,CAAe,CAC9B,CACF,OAAS3E,EAAK,CACZ6E,EAAU,EAAE7E,CAAG,CACjB,QAAE,CACA6E,EAAU,EAAE,CACd,CACF,CAcA,OAXI,KAAK,OAAS,MAChB,KAAK,KAAK,MAAM,EAGlB,KAAK,SAAW,GAGZ,KAAK,eAAiB,OACxB,aAAa,KAAK,aAAa,EAC/B,KAAK,cAAgB,MAEnB,CAACF,GAAmB,KAAK,KAAO,KAC3B,QAAQ,QAAQ,EAElBlC,EAAW,UAAU,KAAK,IAAK,KAAK,OAAO,EAEjD,KAAK,UAAY,CAChB,OAAOmC,EAAO,sBAAsB,CACtC,CAAC,CACH,EAtCO,QAuCT,EAAG,CACD,IAAK,iBACL,MAAOjI,EAAA,SAAwByH,EAAKG,EAAKQ,EAASC,EAAY,CAC5D,KAAK,WAAW,IAAIC,GAAcF,EAASC,EAAYZ,EAAKG,CAAG,CAAC,CAClE,EAFO,iBAGT,EAAG,CACD,IAAK,aACL,MAAO5H,EAAA,SAAoBqD,EAAK,CAC9B,IAAIkF,EAAS,KAEb,GAAI,MAAK,SAGT,IAAI,KAAK,QAAQ,aAAe,KAAM,CAIpC,IAAIC,EAAoB,KAAK,SAAW,MAAQ,KAAK,QAAU,KAAK,mBAIpE,GAHIA,IACF,KAAK,cAAgB,GAEnBC,GAAYpF,EAAK,KAAK,cAAe,KAAK,OAAO,EAAG,CACtD,IAAIqF,EAAQ,KAAK,QAAQ,YAAY,KAAK,eAAe,EACzD,KAAK,mBAAqB,KAAK,QAC/B,KAAK,cAAgB,WAAW,UAAY,CAC1CH,EAAO,MAAM,CACf,EAAGG,CAAK,EACR,MACF,CACF,CACA,GAAI,OAAO,KAAK,QAAQ,SAAY,WAClC,KAAK,QAAQ,QAAQrF,CAAG,MAExB,OAAMA,EAEV,EA5BO,aAoCT,EAAG,CACD,IAAK,eACL,MAAOrD,EAAA,SAAsB2I,EAAc,CACrC,KAAK,QAAQ,4BAGf,KAAK,sBAAsB,EAEzB,OAAO,KAAK,QAAQ,WAAc,YACpC,KAAK,QAAQ,UAAU,CACrB,aAAcA,CAChB,CAAC,CAEL,EAXO,eAqBT,EAAG,CACD,IAAK,gBACL,MAAO3I,EAAA,SAAuB4I,EAAWC,EAAY,CAC/C,OAAO,KAAK,QAAQ,YAAe,YACrC,KAAK,QAAQ,WAAWD,EAAWC,CAAU,CAEjD,EAJO,gBAeT,EAAG,CACD,IAAK,qBACL,MAAO7I,EAAA,SAA4B8I,EAAWC,EAAeF,EAAY,CACnE,OAAO,KAAK,QAAQ,iBAAoB,YAC1C,KAAK,QAAQ,gBAAgBC,EAAWC,EAAeF,CAAU,CAErE,EAJO,qBAaT,EAAG,CACD,IAAK,gBACL,MAAO7I,EAAA,UAAyB,CAC9B,IAAIgJ,EAAS,KACb,GAAI,CAAC,KAAK,QAAQ,SAAU,CAC1B,KAAK,WAAW,IAAI,MAAM,8DAA8D,CAAC,EACzF,MACF,CACA,IAAIvB,EAAM,KAAK,aAAa,OAAQ,KAAK,QAAQ,QAAQ,EACrD,KAAK,QAAQ,qBACfA,EAAI,UAAU,sBAAuB,GAAG,EAExCA,EAAI,UAAU,gBAAiB,GAAG,OAAO,KAAK,KAAK,CAAC,EAItD,IAAIC,EAAWC,GAAe,KAAK,QAAQ,QAAQ,EAC/CD,IAAa,IACfD,EAAI,UAAU,kBAAmBC,CAAQ,EAE3C,IAAIuB,EACA,KAAK,QAAQ,0BAA4B,CAAC,KAAK,QAAQ,sBACzD,KAAK,QAAU,EACfA,EAAU,KAAK,mBAAmBxB,CAAG,KAEjC,KAAK,QAAQ,WAAa/B,IAA0B,KAAK,QAAQ,WAAaC,KAChF8B,EAAI,UAAU,kBAAmB,IAAI,EAEvCwB,EAAU,KAAK,aAAaxB,EAAK,IAAI,GAEvCwB,EAAQ,KAAK,SAAUrB,EAAK,CAC1B,GAAI,CAACC,GAAiBD,EAAI,UAAU,EAAG,GAAG,EAAG,CAC3CoB,EAAO,eAAevB,EAAKG,EAAK,gDAAgD,EAChF,MACF,CACA,IAAIE,EAAWF,EAAI,UAAU,UAAU,EACvC,GAAIE,GAAY,KAAM,CACpBkB,EAAO,eAAevB,EAAKG,EAAK,yCAAyC,EACzE,MACF,CAMA,GALAoB,EAAO,IAAMjB,GAAWiB,EAAO,QAAQ,SAAUlB,CAAQ,EACzDrB,GAAI,qBAAqB,OAAOuC,EAAO,GAAG,CAAC,EACvC,OAAOA,EAAO,QAAQ,sBAAyB,YACjDA,EAAO,QAAQ,qBAAqB,EAElCA,EAAO,QAAU,EAAG,CAEtBA,EAAO,aAAapB,CAAG,EACvBoB,EAAO,QAAQ,MAAM,EACrB,MACF,CACAA,EAAO,wBAAwB,EAAE,KAAK,UAAY,CAC5CA,EAAO,QAAQ,yBACjBA,EAAO,sBAAsBvB,EAAKG,CAAG,GAErCoB,EAAO,QAAU,EACjBA,EAAO,eAAe,EAE1B,CAAC,CACH,CAAC,EAAE,MAAS,SAAU3F,EAAK,CACzB2F,EAAO,eAAevB,EAAK,KAAM,+BAAgCpE,CAAG,CACtE,CAAC,CACH,EA5DO,gBAqET,EAAG,CACD,IAAK,gBACL,MAAOrD,EAAA,UAAyB,CAC9B,IAAIkJ,EAAS,KACTzB,EAAM,KAAK,aAAa,OAAQ,KAAK,GAAG,EACxCwB,EAAU,KAAK,aAAaxB,EAAK,IAAI,EACzCwB,EAAQ,KAAK,SAAUrB,EAAK,CAC1B,IAAIuB,EAASvB,EAAI,UAAU,EAC3B,GAAI,CAACC,GAAiBsB,EAAQ,GAAG,EAAG,CAMlC,GAAIA,IAAW,IAAK,CAClBD,EAAO,eAAezB,EAAKG,EAAK,8CAA8C,EAC9E,MACF,CAMA,GALIC,GAAiBsB,EAAQ,GAAG,GAG9BD,EAAO,sBAAsB,EAE3B,CAACA,EAAO,QAAQ,SAAU,CAE5BA,EAAO,eAAezB,EAAKG,EAAK,iFAAiF,EACjH,MACF,CAGAsB,EAAO,IAAM,KACbA,EAAO,cAAc,EACrB,MACF,CACA,IAAIE,EAAS,OAAO,SAASxB,EAAI,UAAU,eAAe,EAAG,EAAE,EAC/D,GAAI,OAAO,MAAMwB,CAAM,EAAG,CACxBF,EAAO,eAAezB,EAAKG,EAAK,sCAAsC,EACtE,MACF,CACA,IAAIyB,EAAS,OAAO,SAASzB,EAAI,UAAU,eAAe,EAAG,EAAE,EAC/D,GAAI,OAAO,MAAMyB,CAAM,GAAK,CAACH,EAAO,QAAQ,sBAAwBA,EAAO,QAAQ,WAAazD,GAAiB,CAC/GyD,EAAO,eAAezB,EAAKG,EAAK,sCAAsC,EACtE,MACF,CACI,OAAOsB,EAAO,QAAQ,sBAAyB,YACjDA,EAAO,QAAQ,qBAAqB,EAEtCA,EAAO,wBAAwB,EAAE,KAAK,UAAY,CAGhD,GAAIE,IAAWC,EAAQ,CACrBH,EAAO,cAAcG,EAAQA,CAAM,EACnCH,EAAO,aAAatB,CAAG,EACvB,MACF,CACAsB,EAAO,QAAUE,EACjBF,EAAO,eAAe,CACxB,CAAC,CACH,CAAC,EAAE,MAAS,SAAU7F,EAAK,CACzB6F,EAAO,eAAezB,EAAK,KAAM,+BAAgCpE,CAAG,CACtE,CAAC,CACH,EA3DO,gBAoET,EAAG,CACD,IAAK,iBACL,MAAOrD,EAAA,UAA0B,CAC/B,IAAIsJ,EAAS,KAIb,GAAI,MAAK,SAGT,KAAI7B,EAKA,KAAK,QAAQ,qBACfA,EAAM,KAAK,aAAa,OAAQ,KAAK,GAAG,EACxCA,EAAI,UAAU,yBAA0B,OAAO,GAE/CA,EAAM,KAAK,aAAa,QAAS,KAAK,GAAG,EAE3CA,EAAI,UAAU,gBAAiB,GAAG,OAAO,KAAK,OAAO,CAAC,EACtD,IAAIwB,EAAU,KAAK,mBAAmBxB,CAAG,EACzCwB,EAAQ,KAAK,SAAUrB,EAAK,CAC1B,GAAI,CAACC,GAAiBD,EAAI,UAAU,EAAG,GAAG,EAAG,CAC3C0B,EAAO,eAAe7B,EAAKG,EAAK,gDAAgD,EAChF,MACF,CACA0B,EAAO,sBAAsB7B,EAAKG,CAAG,CACvC,CAAC,EAAE,MAAS,SAAUvE,EAAK,CAErBiG,EAAO,UAGXA,EAAO,eAAe7B,EAAK,KAAM,yCAAyC,OAAO6B,EAAO,OAAO,EAAGjG,CAAG,CACvG,CAAC,EACH,EAlCO,iBA0CT,EAAG,CACD,IAAK,qBACL,MAAOrD,EAAA,SAA4ByH,EAAK,CACtC,IAAI8B,EAAS,KACTC,EAAQ,KAAK,QACbC,EAAM,KAAK,QAAU,KAAK,QAAQ,UACtC,OAAAhC,EAAI,mBAAmB,SAAUmB,EAAW,CAC1CW,EAAO,cAAcC,EAAQZ,EAAWW,EAAO,KAAK,CACtD,CAAC,EACG,KAAK,QAAQ,WAAa9D,GAC5BgC,EAAI,UAAU,eAAgB,iCAAiC,EACtD,KAAK,QAAQ,WAAa9B,IACnC8B,EAAI,UAAU,eAAgB,4BAA4B,GAMvDgC,IAAQ,OAAO,mBAAqBA,EAAM,KAAK,QAAU,CAAC,KAAK,QAAQ,uBAC1EA,EAAM,KAAK,OAEN,KAAK,QAAQ,MAAMD,EAAOC,CAAG,EAAE,KAAK,SAAUC,EAAO,CAC1D,IAAI3G,EAAQ2G,EAAM,MAChBC,EAAOD,EAAM,KACXE,EAAY7G,GAAU,MAA4BA,EAAM,KAAOA,EAAM,KAAO,EAK5EwG,EAAO,QAAQ,sBAAwBI,IACzCJ,EAAO,MAAQA,EAAO,QAAUK,EAChCnC,EAAI,UAAU,gBAAiB,GAAG,OAAO8B,EAAO,KAAK,CAAC,GAQxD,IAAIM,EAAUN,EAAO,QAAUK,EAC/B,MAAI,CAACL,EAAO,QAAQ,sBAAwBI,GAAQE,IAAYN,EAAO,MAC9D,QAAQ,OAAO,IAAI,MAAM,wCAAwC,OAAOA,EAAO,MAAO,uCAAuC,EAAE,OAAOM,EAAS,QAAQ,CAAC,CAAC,EAE9J9G,IAAU,KACLwG,EAAO,aAAa9B,CAAG,IAE5B8B,EAAO,QAAQ,WAAa7D,IAA0B6D,EAAO,QAAQ,WAAa5D,KACpF8B,EAAI,UAAU,kBAAmBkC,EAAO,KAAO,IAAI,EAErDJ,EAAO,cAAcA,EAAO,QAASA,EAAO,KAAK,EAC1CA,EAAO,aAAa9B,EAAK1E,CAAK,EACvC,CAAC,CACH,EAlDO,qBA0DT,EAAG,CACD,IAAK,wBACL,MAAO/C,EAAA,SAA+ByH,EAAKG,EAAK,CAC9C,IAAIwB,EAAS,OAAO,SAASxB,EAAI,UAAU,eAAe,EAAG,EAAE,EAC/D,GAAI,OAAO,MAAMwB,CAAM,EAAG,CACxB,KAAK,eAAe3B,EAAKG,EAAK,sCAAsC,EACpE,MACF,CAIA,GAHA,KAAK,cAAcwB,EAAQ,KAAK,KAAK,EACrC,KAAK,mBAAmBA,EAAS,KAAK,QAASA,EAAQ,KAAK,KAAK,EACjE,KAAK,QAAUA,EACXA,IAAW,KAAK,MAAO,CAEzB,KAAK,aAAaxB,CAAG,EACrB,KAAK,QAAQ,MAAM,EACnB,MACF,CACA,KAAK,eAAe,CACtB,EAhBO,wBAuBT,EAAG,CACD,IAAK,eACL,MAAO5H,EAAA,SAAsB8J,EAAQC,EAAK,CACxC,IAAItC,EAAMuC,GAAYF,EAAQC,EAAK,KAAK,OAAO,EAC/C,YAAK,KAAOtC,EACLA,CACT,EAJO,eAWT,EAAG,CACD,IAAK,wBACL,MAAOzH,EAAA,UAAiC,CACtC,IAAIiK,EAAU,KACT,KAAK,iBACV,KAAK,YAAY,aAAa,KAAK,cAAc,EAAE,MAAS,SAAU5G,EAAK,CACzE4G,EAAQ,WAAW5G,CAAG,CACxB,CAAC,EACD,KAAK,eAAiB,KACxB,EAPO,wBAcT,EAAG,CACD,IAAK,0BACL,MAAOrD,EAAA,UAAmC,CACxC,IAAIkK,EAAU,KAKd,GAAI,CAAC,KAAK,QAAQ,6BAA+B,CAAC,KAAK,cAAgB,KAAK,iBAAmB,KAC7F,OAAO,QAAQ,QAAQ,EAEzB,IAAIC,EAAe,CACjB,KAAM,KAAK,MACX,SAAU,KAAK,QAAQ,SACvB,aAAc,IAAI,KAAK,EAAE,SAAS,CACpC,EACA,OAAI,KAAK,iBAEPA,EAAa,mBAAqB,KAAK,oBAGvCA,EAAa,UAAY,KAAK,IAEzB,KAAK,YAAY,UAAU,KAAK,aAAcA,CAAY,EAAE,KAAK,SAAUC,EAAe,CAC/FF,EAAQ,eAAiBE,CAC3B,CAAC,CACH,EAxBO,0BA+BT,EAAG,CACD,IAAK,eACL,MAAOpK,EAAA,SAAsByH,EAAK,CAChC,IAAI4C,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAC/E,OAAOC,GAAY7C,EAAK4C,EAAM,KAAK,OAAO,CAC5C,EAHO,eAIT,CAAC,EAAG,CAAC,CACH,IAAK,YACL,MAAOrK,EAAA,SAAmB+J,EAAK,CAC7B,IAAI/D,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC/EyB,EAAMuC,GAAY,SAAUD,EAAK/D,CAAO,EAC5C,OAAOsE,GAAY7C,EAAK,KAAMzB,CAAO,EAAE,KAAK,SAAU4B,EAAK,CAEzD,GAAIA,EAAI,UAAU,IAAM,IAGxB,MAAM,IAAIU,GAAc,oDAAqD,KAAMb,EAAKG,CAAG,CAC7F,CAAC,EAAE,MAAS,SAAUvE,EAAK,CAIzB,GAHMA,aAAeiF,KACnBjF,EAAM,IAAIiF,GAAc,kCAAmCjF,EAAKoE,EAAK,IAAI,GAEvE,CAACgB,GAAYpF,EAAK,EAAG2C,CAAO,EAC9B,MAAM3C,EAMR,IAAIqF,EAAQ1C,EAAQ,YAAY,CAAC,EAC7BuE,EAAkBvE,EAAQ,YAAY,MAAM,CAAC,EAC7CwE,EAAa9F,GAAcA,GAAc,CAAC,EAAGsB,CAAO,EAAG,CAAC,EAAG,CAC7D,YAAauE,CACf,CAAC,EACD,OAAO,IAAI,QAAQ,SAAU/H,EAAS,CACpC,OAAO,WAAWA,EAASkG,CAAK,CAClC,CAAC,EAAE,KAAK,UAAY,CAClB,OAAO5C,EAAW,UAAUiE,EAAKS,CAAU,CAC7C,CAAC,CACH,CAAC,CACH,EA/BO,YAgCT,CAAC,CAAC,CACJ,GAAE,EACF,SAAS7C,GAAeD,EAAU,CAChC,OAAO,OAAO,QAAQA,CAAQ,EAAE,IAAI,SAAU+C,EAAO,CACnD,IAAIC,EAAQpH,GAAemH,EAAO,CAAC,EACjC7H,EAAM8H,EAAM,CAAC,EACb3H,EAAQ2H,EAAM,CAAC,EACjB,MAAO,GAAG,OAAO9H,EAAK,GAAG,EAAE,OAAO+H,GAAO,OAAO,OAAO5H,CAAK,CAAC,CAAC,CAChE,CAAC,EAAE,KAAK,GAAG,CACb,CAPS/C,EAAA2H,GAAA,kBAeT,SAASE,GAAiBsB,EAAQyB,EAAU,CAC1C,OAAOzB,GAAUyB,GAAYzB,EAASyB,EAAW,GACnD,CAFS5K,EAAA6H,GAAA,oBAWT,SAASmC,GAAYF,EAAQC,EAAK/D,EAAS,CACzC,IAAIyB,EAAMzB,EAAQ,UAAU,cAAc8D,EAAQC,CAAG,EACjD/D,EAAQ,WAAaN,GACvB+B,EAAI,UAAU,+BAAgC,GAAG,EACxCzB,EAAQ,WAAaL,GAC9B8B,EAAI,UAAU,+BAAgC,GAAG,EAEjDA,EAAI,UAAU,gBAAiB,OAAO,EAGxC,QADIoD,EAAU7E,EAAQ,SAAW,CAAC,EACzB8E,EAAM,EAAGC,EAAkB,OAAO,QAAQF,CAAO,EAAGC,EAAMC,EAAgB,OAAQD,IAAO,CAChG,IAAIE,EAAqB1H,GAAeyH,EAAgBD,CAAG,EAAG,CAAC,EAC7DG,EAAOD,EAAmB,CAAC,EAC3BjI,EAAQiI,EAAmB,CAAC,EAC9BvD,EAAI,UAAUwD,EAAMlI,CAAK,CAC3B,CACA,GAAIiD,EAAQ,aAAc,CACxB,IAAIkF,EAAYC,GAAK,EACrB1D,EAAI,UAAU,eAAgByD,CAAS,CACzC,CACA,OAAOzD,CACT,CArBSzH,EAAAgK,GAAA,eA6BT,SAASM,GAAYc,EAAIC,EAAKC,EAAK,CACjC,OAAOC,GAAc,MAAM,KAAM,SAAS,CAC5C,CAFSvL,EAAAsK,GAAA,eAST,SAASiB,IAAgB,CACvB,OAAAA,GAAgBtI,GAAgClD,GAAoB,EAAE,KAAKC,EAAA,SAASwL,EAAQ/D,EAAK4C,EAAMrE,EAAS,CAC9G,IAAI4B,EACJ,OAAO7H,GAAoB,EAAE,KAAKC,EAAA,SAAkByL,EAAU,CAC5D,OAAU,OAAQA,EAAS,KAAOA,EAAS,KAAM,CAC/C,IAAK,GACH,GAAM,OAAOzF,EAAQ,iBAAoB,WAAa,CACpDyF,EAAS,KAAO,EAChB,KACF,CACA,OAAAA,EAAS,KAAO,EACTzF,EAAQ,gBAAgByB,CAAG,EACpC,IAAK,GACH,OAAAgE,EAAS,KAAO,EACThE,EAAI,KAAK4C,CAAI,EACtB,IAAK,GAEH,GADAzC,EAAM6D,EAAS,KACT,OAAOzF,EAAQ,iBAAoB,WAAa,CACpDyF,EAAS,KAAO,EAChB,KACF,CACA,OAAAA,EAAS,KAAO,EACTzF,EAAQ,gBAAgByB,EAAKG,CAAG,EACzC,IAAK,GACH,OAAO6D,EAAS,OAAO,SAAU7D,CAAG,EACtC,IAAK,IACL,IAAK,MACH,OAAO6D,EAAS,KAAK,CACzB,CACF,EA1BkC,YA0B/BD,CAAO,CACZ,EA7B2E,UA6B1E,CAAC,EACKD,GAAc,MAAM,KAAM,SAAS,CAC5C,CAhCSvL,EAAAuL,GAAA,iBAiCT,SAASG,IAAW,CAClB,IAAIC,EAAS,GAGb,OAAI,OAAO,UAAc,KAAe,UAAU,SAAW,KAC3DA,EAAS,IAEJA,CACT,CARS3L,EAAA0L,GAAA,YAkBT,SAASjD,GAAYpF,EAAKuI,EAAc5F,EAAS,CAQ/C,OAAIA,EAAQ,aAAe,MAAQ4F,GAAgB5F,EAAQ,YAAY,QAAU3C,EAAI,iBAAmB,KAC/F,GAEL2C,GAAW,OAAOA,EAAQ,eAAkB,WACvCA,EAAQ,cAAc3C,EAAKuI,EAAc5F,CAAO,EAElDH,GAAqBxC,CAAG,CACjC,CAfSrD,EAAAyI,GAAA,eAsBT,SAAS5C,GAAqBxC,EAAK,CACjC,IAAI8F,EAAS9F,EAAI,iBAAmBA,EAAI,iBAAiB,UAAU,EAAI,EACvE,OAAQ,CAACwE,GAAiBsB,EAAQ,GAAG,GAAKA,IAAW,KAAOA,IAAW,MAAQuC,GAAS,CAC1F,CAHS1L,EAAA6F,GAAA,wBAWT,SAASkC,GAAW8D,EAAQC,EAAM,CAChC,OAAO,IAAI,GAAAC,QAAID,EAAMD,CAAM,EAAE,SAAS,CACxC,CAFS7L,EAAA+H,GAAA,cAaT,SAASd,GAAmBJ,EAAWE,EAAW,CAGhD,QAFIiF,EAAW,KAAK,MAAMnF,EAAYE,CAAS,EAC3CC,EAAQ,CAAC,EACJ1G,EAAI,EAAGA,EAAIyG,EAAWzG,IAC7B0G,EAAM,KAAK,CACT,MAAOgF,EAAW1L,EAClB,IAAK0L,GAAY1L,EAAI,EACvB,CAAC,EAEH,OAAA0G,EAAMD,EAAY,CAAC,EAAE,IAAMF,EACpBG,CACT,CAXShH,EAAAiH,GAAA,sBAYTnB,GAAW,eAAiBF,GAC5B,IAAOqG,GAAQnG,GExjCf,IAAIoG,GAAgBC,EAAA,UAAyB,CAC3C,OAAO,OAAO,UAAc,KAAe,OAAO,UAAU,SAAY,UAAY,UAAU,QAAQ,YAAY,IAAM,aAC1H,EAFoB,iBAGbC,GAAQF,GCEA,SAARG,GAA2BC,EAAK,CACrC,OAAO,IAAI,QAAQ,SAAUC,EAASC,EAAQ,CAC5C,IAAIC,EAAM,IAAI,eACdA,EAAI,aAAe,OACnBA,EAAI,OAAS,UAAY,CACvB,IAAIC,EAAOD,EAAI,SACfF,EAAQG,CAAI,CACd,EACAD,EAAI,QAAU,SAAUE,EAAK,CAC3BH,EAAOG,CAAG,CACZ,EACAF,EAAI,KAAK,MAAOH,CAAG,EACnBG,EAAI,KAAK,CACX,CAAC,CACH,CAdwBG,EAAAP,GAAA,aCLxB,IAAIQ,GAAYC,EAAA,UAAqB,CACnC,OAAO,OAAO,OAAW,MAAgB,OAAO,OAAO,SAAa,KAAe,OAAO,OAAO,QAAY,KAAe,OAAO,OAAO,QAAY,IACxJ,EAFgB,aAGTC,GAAQF,GCEA,SAARG,GAAiCC,EAAO,CAC7C,OAAO,IAAI,QAAQ,SAAUC,EAASC,EAAQ,CAC5C,IAAIC,EAAS,IAAI,WACjBA,EAAO,OAAS,UAAY,CAC1B,IAAIC,EAAQ,IAAI,WAAWD,EAAO,MAAM,EACxCF,EAAQ,CACN,MAAOG,CACT,CAAC,CACH,EACAD,EAAO,QAAU,SAAUE,EAAK,CAC9BH,EAAOG,CAAG,CACZ,EACAF,EAAO,kBAAkBH,CAAK,CAChC,CAAC,CACH,CAdwBM,EAAAP,GAAA,mBCLxB,SAASQ,GAAQC,EAAG,CAAE,0BAA2B,OAAOD,GAAwB,OAAO,QAArB,YAA2C,OAAO,OAAO,UAA1B,SAAqC,SAAUC,EAAG,CAAE,OAAO,OAAOA,CAAG,EAAI,SAAUA,EAAG,CAAE,OAAOA,GAAmB,OAAO,QAArB,YAA+BA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CAAG,EAAGD,GAAQC,CAAC,CAAG,CAApTC,EAAAF,GAAA,WACT,SAASG,GAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAA/IH,EAAAC,GAAA,mBACT,SAASG,GAAkBC,EAAQC,EAAO,CAAE,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CAAE,IAAIC,EAAaF,EAAMC,CAAC,EAAGC,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeH,EAAQI,GAAeD,EAAW,GAAG,EAAGA,CAAU,CAAG,CAAE,CAAnUR,EAAAI,GAAA,qBACT,SAASM,GAAaP,EAAaQ,EAAYC,EAAa,CAAE,OAAID,GAAYP,GAAkBD,EAAY,UAAWQ,CAAU,EAAOC,GAAaR,GAAkBD,EAAaS,CAAW,EAAG,OAAO,eAAeT,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAAnRH,EAAAU,GAAA,gBACT,SAASD,GAAeI,EAAG,CAAE,IAAIN,EAAIO,GAAaD,EAAG,QAAQ,EAAG,OAAmBf,GAAQS,CAAC,GAArB,SAAyBA,EAAIA,EAAI,EAAI,CAAnGP,EAAAS,GAAA,kBACT,SAASK,GAAaD,EAAGE,EAAG,CAAE,GAAgBjB,GAAQe,CAAC,GAArB,UAA0B,CAACA,EAAG,OAAOA,EAAG,IAAIG,EAAIH,EAAE,OAAO,WAAW,EAAG,GAAeG,IAAX,OAAc,CAAE,IAAIT,EAAIS,EAAE,KAAKH,EAAGE,GAAK,SAAS,EAAG,GAAgBjB,GAAQS,CAAC,GAArB,SAAwB,OAAOA,EAAG,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAqBQ,IAAb,SAAiB,OAAS,QAAQF,CAAC,CAAG,CAAlTb,EAAAc,GAAA,gBAGT,IAAIG,IAA0B,UAAY,CAExC,SAASA,EAAWC,EAAM,CACxBjB,GAAgB,KAAMgB,CAAU,EAChC,KAAK,MAAQC,EACb,KAAK,KAAOA,EAAK,IACnB,CAJS,OAAAlB,EAAAiB,EAAA,cAKFP,GAAaO,EAAY,CAAC,CAC/B,IAAK,QACL,MAAOjB,EAAA,SAAemB,EAAOC,EAAK,CAIhC,GAAIC,GAAU,EACZ,OAAOC,GAAgB,KAAK,MAAM,MAAMH,EAAOC,CAAG,CAAC,EAErD,IAAIG,EAAQ,KAAK,MAAM,MAAMJ,EAAOC,CAAG,EACnCI,EAAOJ,GAAO,KAAK,KACvB,OAAO,QAAQ,QAAQ,CACrB,MAAOG,EACP,KAAMC,CACR,CAAC,CACH,EAbO,QAcT,EAAG,CACD,IAAK,QACL,MAAOxB,EAAA,UAAiB,CAExB,EAFO,QAGT,CAAC,CAAC,CACJ,GAAE,ECrCF,SAASyB,GAAQC,EAAG,CAAE,0BAA2B,OAAOD,GAAwB,OAAO,QAArB,YAA2C,OAAO,OAAO,UAA1B,SAAqC,SAAUC,EAAG,CAAE,OAAO,OAAOA,CAAG,EAAI,SAAUA,EAAG,CAAE,OAAOA,GAAmB,OAAO,QAArB,YAA+BA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CAAG,EAAGD,GAAQC,CAAC,CAAG,CAApTC,EAAAF,GAAA,WACT,SAASG,GAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAA/IH,EAAAC,GAAA,mBACT,SAASG,GAAkBC,EAAQC,EAAO,CAAE,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CAAE,IAAIC,EAAaF,EAAMC,CAAC,EAAGC,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeH,EAAQI,GAAeD,EAAW,GAAG,EAAGA,CAAU,CAAG,CAAE,CAAnUR,EAAAI,GAAA,qBACT,SAASM,GAAaP,EAAaQ,EAAYC,EAAa,CAAE,OAAID,GAAYP,GAAkBD,EAAY,UAAWQ,CAAU,EAAOC,GAAaR,GAAkBD,EAAaS,CAAW,EAAG,OAAO,eAAeT,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAAnRH,EAAAU,GAAA,gBACT,SAASD,GAAeI,EAAG,CAAE,IAAIN,EAAIO,GAAaD,EAAG,QAAQ,EAAG,OAAmBf,GAAQS,CAAC,GAArB,SAAyBA,EAAIA,EAAI,EAAI,CAAnGP,EAAAS,GAAA,kBACT,SAASK,GAAaD,EAAGE,EAAG,CAAE,GAAgBjB,GAAQe,CAAC,GAArB,UAA0B,CAACA,EAAG,OAAOA,EAAG,IAAIG,EAAIH,EAAE,OAAO,WAAW,EAAG,GAAeG,IAAX,OAAc,CAAE,IAAIT,EAAIS,EAAE,KAAKH,EAAGE,GAAK,SAAS,EAAG,GAAgBjB,GAAQS,CAAC,GAArB,SAAwB,OAAOA,EAAG,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAqBQ,IAAb,SAAiB,OAAS,QAAQF,CAAC,CAAG,CAAlTb,EAAAc,GAAA,gBACT,SAASG,GAAIC,EAAa,CACxB,OAAIA,IAAgB,OAAkB,EAClCA,EAAY,OAAS,OAAkBA,EAAY,KAChDA,EAAY,MACrB,CAJSlB,EAAAiB,GAAA,OAUT,SAASE,GAAOC,EAAGC,EAAG,CACpB,GAAID,EAAE,OAEJ,OAAOA,EAAE,OAAOC,CAAC,EAEnB,GAAID,aAAa,KACf,OAAO,IAAI,KAAK,CAACA,EAAGC,CAAC,EAAG,CACtB,KAAMD,EAAE,IACV,CAAC,EAEH,GAAIA,EAAE,IAAK,CAET,IAAIE,EAAI,IAAIF,EAAE,YAAYA,EAAE,OAASC,EAAE,MAAM,EAC7C,OAAAC,EAAE,IAAIF,CAAC,EACPE,EAAE,IAAID,EAAGD,EAAE,MAAM,EACVE,CACT,CACA,MAAM,IAAI,MAAM,mBAAmB,CACrC,CAlBStB,EAAAmB,GAAA,UAmBT,IAAII,IAA4B,UAAY,CAC1C,SAASA,EAAaC,EAAQ,CAC5BvB,GAAgB,KAAMsB,CAAY,EAClC,KAAK,QAAU,OACf,KAAK,cAAgB,EACrB,KAAK,QAAUC,EACf,KAAK,MAAQ,EACf,CANS,OAAAxB,EAAAuB,EAAA,gBAOFb,GAAaa,EAAc,CAAC,CACjC,IAAK,QACL,MAAOvB,EAAA,SAAeyB,EAAOC,EAAK,CAChC,OAAID,EAAQ,KAAK,cACR,QAAQ,OAAO,IAAI,MAAM,sDAAsD,CAAC,EAElF,KAAK,2BAA2BA,EAAOC,CAAG,CACnD,EALO,QAMT,EAAG,CACD,IAAK,6BACL,MAAO1B,EAAA,SAAoCyB,EAAOC,EAAK,CACrD,IAAIC,EAAQ,KACRC,EAAgBF,GAAO,KAAK,cAAgBT,GAAI,KAAK,OAAO,EAChE,GAAI,KAAK,OAASW,EAAe,CAC/B,IAAIC,EAAQ,KAAK,mBAAmBJ,EAAOC,CAAG,EAC1CI,EAAOD,GAAS,KAAO,KAAK,MAAQ,GACxC,OAAO,QAAQ,QAAQ,CACrB,MAAOA,EACP,KAAMC,CACR,CAAC,CACH,CACA,OAAO,KAAK,QAAQ,KAAK,EAAE,KAAK,SAAUC,EAAM,CAC9C,IAAIF,EAAQE,EAAK,MACfD,EAAOC,EAAK,KACd,OAAID,EACFH,EAAM,MAAQ,GACLA,EAAM,UAAY,OAC3BA,EAAM,QAAUE,EAEhBF,EAAM,QAAUR,GAAOQ,EAAM,QAASE,CAAK,EAEtCF,EAAM,2BAA2BF,EAAOC,CAAG,CACpD,CAAC,CACH,EAvBO,6BAwBT,EAAG,CACD,IAAK,qBACL,MAAO1B,EAAA,SAA4ByB,EAAOC,EAAK,CAIzCD,EAAQ,KAAK,gBACf,KAAK,QAAU,KAAK,QAAQ,MAAMA,EAAQ,KAAK,aAAa,EAC5D,KAAK,cAAgBA,GAGvB,IAAIO,EAAqBf,GAAI,KAAK,OAAO,IAAM,EAC/C,OAAI,KAAK,OAASe,EACT,KAIF,KAAK,QAAQ,MAAM,EAAGN,EAAMD,CAAK,CAC1C,EAhBO,qBAiBT,EAAG,CACD,IAAK,QACL,MAAOzB,EAAA,UAAiB,CAClB,KAAK,QAAQ,QACf,KAAK,QAAQ,OAAO,CAExB,EAJO,QAKT,CAAC,CAAC,CACJ,GAAE,ECxGF,SAASiC,GAAQC,EAAG,CAAE,0BAA2B,OAAOD,GAAwB,OAAO,QAArB,YAA2C,OAAO,OAAO,UAA1B,SAAqC,SAAUC,EAAG,CAAE,OAAO,OAAOA,CAAG,EAAI,SAAUA,EAAG,CAAE,OAAOA,GAAmB,OAAO,QAArB,YAA+BA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CAAG,EAAGD,GAAQC,CAAC,CAAG,CAApTC,EAAAF,GAAA,WACT,SAASG,IAAsB,CAAE,aAAmKA,GAAsBD,EAAA,UAA+B,CAAE,OAAO,CAAG,EAA3C,uBAA8C,IAAIE,EAAG,EAAI,CAAC,EAAGC,EAAI,OAAO,UAAWC,EAAID,EAAE,eAAgBJ,EAAI,OAAO,gBAAkB,SAAUG,EAAGG,EAAGF,EAAG,CAAED,EAAEG,CAAC,EAAIF,EAAE,KAAO,EAAGG,EAAkB,OAAO,QAArB,WAA8B,OAAS,CAAC,EAAG,EAAIA,EAAE,UAAY,aAAcC,EAAID,EAAE,eAAiB,kBAAmBE,EAAIF,EAAE,aAAe,gBAAiB,SAASG,EAAOP,EAAGG,EAAGF,EAAG,CAAE,OAAO,OAAO,eAAeD,EAAGG,EAAG,CAAE,MAAOF,EAAG,WAAY,GAAI,aAAc,GAAI,SAAU,EAAG,CAAC,EAAGD,EAAEG,CAAC,CAAG,CAA1HL,EAAAS,EAAA,UAA4H,GAAI,CAAEA,EAAO,CAAC,EAAG,EAAE,CAAG,MAAY,CAAEA,EAAST,EAAA,SAAgBE,EAAGG,EAAGF,EAAG,CAAE,OAAOD,EAAEG,CAAC,EAAIF,CAAG,EAA5C,SAA+C,CAAE,SAASO,EAAKR,EAAGG,EAAGF,EAAGC,EAAG,CAAE,IAAIE,EAAID,GAAKA,EAAE,qBAAqBM,EAAYN,EAAIM,EAAWC,EAAI,OAAO,OAAON,EAAE,SAAS,EAAGC,EAAI,IAAIM,GAAQT,GAAK,CAAC,CAAC,EAAG,OAAOL,EAAEa,EAAG,UAAW,CAAE,MAAOE,GAAiBZ,EAAGC,EAAGI,CAAC,CAAE,CAAC,EAAGK,CAAG,CAA7MZ,EAAAU,EAAA,QAA+M,SAASK,EAASb,EAAGG,EAAGF,EAAG,CAAE,GAAI,CAAE,MAAO,CAAE,KAAM,SAAU,IAAKD,EAAE,KAAKG,EAAGF,CAAC,CAAE,CAAG,OAASD,EAAG,CAAE,MAAO,CAAE,KAAM,QAAS,IAAKA,CAAE,CAAG,CAAE,CAA1HF,EAAAe,EAAA,YAA4H,EAAE,KAAOL,EAAM,IAAIM,EAAI,iBAAkBC,EAAI,iBAAkBC,EAAI,YAAaC,EAAI,YAAaC,EAAI,CAAC,EAAG,SAAST,GAAY,CAAC,CAAbX,EAAAW,EAAA,aAAe,SAASU,GAAoB,CAAC,CAArBrB,EAAAqB,EAAA,qBAAuB,SAASC,GAA6B,CAAC,CAA9BtB,EAAAsB,EAAA,8BAAgC,IAAIC,EAAI,CAAC,EAAGd,EAAOc,EAAG,EAAG,UAAY,CAAE,OAAO,IAAM,CAAC,EAAG,IAAIC,EAAI,OAAO,eAAgBC,EAAID,GAAKA,EAAEA,EAAEE,GAAO,CAAC,CAAC,CAAC,CAAC,EAAGD,GAAKA,IAAMtB,GAAKC,EAAE,KAAKqB,EAAG,CAAC,IAAMF,EAAIE,GAAI,IAAIE,EAAIL,EAA2B,UAAYX,EAAU,UAAY,OAAO,OAAOY,CAAC,EAAG,SAASK,EAAsB1B,EAAG,CAAE,CAAC,OAAQ,QAAS,QAAQ,EAAE,QAAQ,SAAUG,EAAG,CAAEI,EAAOP,EAAGG,EAAG,SAAUH,EAAG,CAAE,OAAO,KAAK,QAAQG,EAAGH,CAAC,CAAG,CAAC,CAAG,CAAC,CAAG,CAA7IF,EAAA4B,EAAA,yBAA+I,SAASC,EAAc3B,EAAGG,EAAG,CAAE,SAASyB,EAAO3B,EAAGJ,EAAGO,EAAGM,EAAG,CAAE,IAAIL,EAAIQ,EAASb,EAAEC,CAAC,EAAGD,EAAGH,CAAC,EAAG,GAAgBQ,EAAE,OAAd,QAAoB,CAAE,IAAIC,EAAID,EAAE,IAAKS,EAAIR,EAAE,MAAO,OAAOQ,GAAiBlB,GAAQkB,CAAC,GAArB,UAA0BZ,EAAE,KAAKY,EAAG,SAAS,EAAIX,EAAE,QAAQW,EAAE,OAAO,EAAE,KAAK,SAAUd,EAAG,CAAE4B,EAAO,OAAQ5B,EAAGI,EAAGM,CAAC,CAAG,EAAG,SAAUV,EAAG,CAAE4B,EAAO,QAAS5B,EAAGI,EAAGM,CAAC,CAAG,CAAC,EAAIP,EAAE,QAAQW,CAAC,EAAE,KAAK,SAAUd,EAAG,CAAEM,EAAE,MAAQN,EAAGI,EAAEE,CAAC,CAAG,EAAG,SAAUN,EAAG,CAAE,OAAO4B,EAAO,QAAS5B,EAAGI,EAAGM,CAAC,CAAG,CAAC,CAAG,CAAEA,EAAEL,EAAE,GAAG,CAAG,CAAhZP,EAAA8B,EAAA,UAAkZ,IAAI3B,EAAGJ,EAAE,KAAM,UAAW,CAAE,MAAOC,EAAA,SAAeE,EAAGE,EAAG,CAAE,SAAS2B,GAA6B,CAAE,OAAO,IAAI1B,EAAE,SAAUA,EAAGF,EAAG,CAAE2B,EAAO5B,EAAGE,EAAGC,EAAGF,CAAC,CAAG,CAAC,CAAG,CAAtF,OAAAH,EAAA+B,EAAA,8BAA+F5B,EAAIA,EAAIA,EAAE,KAAK4B,EAA4BA,CAA0B,EAAIA,EAA2B,CAAG,EAAtO,QAAwO,CAAC,CAAG,CAAhsB/B,EAAA6B,EAAA,iBAAksB,SAASf,GAAiBT,EAAGF,EAAGC,EAAG,CAAE,IAAIL,EAAIiB,EAAG,OAAO,SAAUV,EAAGM,EAAG,CAAE,GAAIb,IAAMmB,EAAG,MAAM,MAAM,8BAA8B,EAAG,GAAInB,IAAMoB,EAAG,CAAE,GAAgBb,IAAZ,QAAe,MAAMM,EAAG,MAAO,CAAE,MAAOV,EAAG,KAAM,EAAG,CAAG,CAAE,IAAKE,EAAE,OAASE,EAAGF,EAAE,IAAMQ,IAAK,CAAE,IAAIL,EAAIH,EAAE,SAAU,GAAIG,EAAG,CAAE,IAAIC,EAAIwB,GAAoBzB,EAAGH,CAAC,EAAG,GAAII,EAAG,CAAE,GAAIA,IAAMY,EAAG,SAAU,OAAOZ,CAAG,CAAE,CAAE,GAAeJ,EAAE,SAAb,OAAqBA,EAAE,KAAOA,EAAE,MAAQA,EAAE,YAAyBA,EAAE,SAAd,QAAsB,CAAE,GAAIL,IAAMiB,EAAG,MAAMjB,EAAIoB,EAAGf,EAAE,IAAKA,EAAE,kBAAkBA,EAAE,GAAG,CAAG,MAAoBA,EAAE,SAAf,UAAyBA,EAAE,OAAO,SAAUA,EAAE,GAAG,EAAGL,EAAImB,EAAG,IAAIK,EAAIR,EAASV,EAAGF,EAAGC,CAAC,EAAG,GAAiBmB,EAAE,OAAf,SAAqB,CAAE,GAAIxB,EAAIK,EAAE,KAAOe,EAAIF,EAAGM,EAAE,MAAQH,EAAG,SAAU,MAAO,CAAE,MAAOG,EAAE,IAAK,KAAMnB,EAAE,IAAK,CAAG,CAAcmB,EAAE,OAAd,UAAuBxB,EAAIoB,EAAGf,EAAE,OAAS,QAASA,EAAE,IAAMmB,EAAE,IAAM,CAAE,CAAG,CAA7vBvB,EAAAc,GAAA,oBAA+vB,SAASkB,GAAoB3B,EAAGF,EAAG,CAAE,IAAIC,EAAID,EAAE,OAAQJ,EAAIM,EAAE,SAASD,CAAC,EAAG,GAAIL,IAAMG,EAAG,OAAOC,EAAE,SAAW,KAAkBC,IAAZ,SAAiBC,EAAE,SAAS,SAAcF,EAAE,OAAS,SAAUA,EAAE,IAAMD,EAAG8B,GAAoB3B,EAAGF,CAAC,EAAeA,EAAE,SAAd,UAAsCC,IAAb,WAAmBD,EAAE,OAAS,QAASA,EAAE,IAAM,IAAI,UAAU,oCAAsCC,EAAI,UAAU,GAAIgB,EAAG,IAAId,EAAIS,EAAShB,EAAGM,EAAE,SAAUF,EAAE,GAAG,EAAG,GAAgBG,EAAE,OAAd,QAAoB,OAAOH,EAAE,OAAS,QAASA,EAAE,IAAMG,EAAE,IAAKH,EAAE,SAAW,KAAMiB,EAAG,IAAIR,EAAIN,EAAE,IAAK,OAAOM,EAAIA,EAAE,MAAQT,EAAEE,EAAE,UAAU,EAAIO,EAAE,MAAOT,EAAE,KAAOE,EAAE,QAAsBF,EAAE,SAAf,WAA0BA,EAAE,OAAS,OAAQA,EAAE,IAAMD,GAAIC,EAAE,SAAW,KAAMiB,GAAKR,GAAKT,EAAE,OAAS,QAASA,EAAE,IAAM,IAAI,UAAU,kCAAkC,EAAGA,EAAE,SAAW,KAAMiB,EAAI,CAA7uBpB,EAAAgC,GAAA,uBAA+uB,SAASC,GAAa/B,EAAG,CAAE,IAAIG,EAAI,CAAE,OAAQH,EAAE,CAAC,CAAE,EAAG,KAAKA,IAAMG,EAAE,SAAWH,EAAE,CAAC,GAAI,KAAKA,IAAMG,EAAE,WAAaH,EAAE,CAAC,EAAGG,EAAE,SAAWH,EAAE,CAAC,GAAI,KAAK,WAAW,KAAKG,CAAC,CAAG,CAAxJL,EAAAiC,GAAA,gBAA0J,SAASC,GAAchC,EAAG,CAAE,IAAIG,EAAIH,EAAE,YAAc,CAAC,EAAGG,EAAE,KAAO,SAAU,OAAOA,EAAE,IAAKH,EAAE,WAAaG,CAAG,CAAlGL,EAAAkC,GAAA,iBAAoG,SAASrB,GAAQX,EAAG,CAAE,KAAK,WAAa,CAAC,CAAE,OAAQ,MAAO,CAAC,EAAGA,EAAE,QAAQ+B,GAAc,IAAI,EAAG,KAAK,MAAM,EAAE,CAAG,CAApGjC,EAAAa,GAAA,WAAsG,SAASa,GAAOrB,EAAG,CAAE,GAAIA,GAAYA,IAAP,GAAU,CAAE,IAAIF,EAAIE,EAAE,CAAC,EAAG,GAAIF,EAAG,OAAOA,EAAE,KAAKE,CAAC,EAAG,GAAkB,OAAOA,EAAE,MAAvB,WAA6B,OAAOA,EAAG,GAAI,CAAC,MAAMA,EAAE,MAAM,EAAG,CAAE,IAAIN,EAAI,GAAIO,EAAIN,EAAA,SAASmC,GAAO,CAAE,KAAO,EAAEpC,EAAIM,EAAE,QAAS,GAAID,EAAE,KAAKC,EAAGN,CAAC,EAAG,OAAOoC,EAAK,MAAQ9B,EAAEN,CAAC,EAAGoC,EAAK,KAAO,GAAIA,EAAM,OAAOA,EAAK,MAAQjC,EAAGiC,EAAK,KAAO,GAAIA,CAAM,EAAzJ,QAA4J,OAAO7B,EAAE,KAAOA,CAAG,CAAE,CAAE,MAAM,IAAI,UAAUR,GAAQO,CAAC,EAAI,kBAAkB,CAAG,CAApY,OAAAL,EAAA0B,GAAA,UAA6YL,EAAkB,UAAYC,EAA4BvB,EAAE4B,EAAG,cAAe,CAAE,MAAOL,EAA4B,aAAc,EAAG,CAAC,EAAGvB,EAAEuB,EAA4B,cAAe,CAAE,MAAOD,EAAmB,aAAc,EAAG,CAAC,EAAGA,EAAkB,YAAcZ,EAAOa,EAA4Bd,EAAG,mBAAmB,EAAG,EAAE,oBAAsB,SAAUN,EAAG,CAAE,IAAIG,EAAkB,OAAOH,GAArB,YAA0BA,EAAE,YAAa,MAAO,CAAC,CAACG,IAAMA,IAAMgB,IAA8ChB,EAAE,aAAeA,EAAE,QAA5C,oBAAoD,EAAG,EAAE,KAAO,SAAUH,EAAG,CAAE,OAAO,OAAO,eAAiB,OAAO,eAAeA,EAAGoB,CAA0B,GAAKpB,EAAE,UAAYoB,EAA4Bb,EAAOP,EAAGM,EAAG,mBAAmB,GAAIN,EAAE,UAAY,OAAO,OAAOyB,CAAC,EAAGzB,CAAG,EAAG,EAAE,MAAQ,SAAUA,EAAG,CAAE,MAAO,CAAE,QAASA,CAAE,CAAG,EAAG0B,EAAsBC,EAAc,SAAS,EAAGpB,EAAOoB,EAAc,UAAWtB,EAAG,UAAY,CAAE,OAAO,IAAM,CAAC,EAAG,EAAE,cAAgBsB,EAAe,EAAE,MAAQ,SAAU3B,EAAGC,EAAGC,EAAGL,EAAGO,EAAG,CAAaA,IAAX,SAAiBA,EAAI,SAAU,IAAIM,EAAI,IAAIiB,EAAcnB,EAAKR,EAAGC,EAAGC,EAAGL,CAAC,EAAGO,CAAC,EAAG,OAAO,EAAE,oBAAoBH,CAAC,EAAIS,EAAIA,EAAE,KAAK,EAAE,KAAK,SAAUV,EAAG,CAAE,OAAOA,EAAE,KAAOA,EAAE,MAAQU,EAAE,KAAK,CAAG,CAAC,CAAG,EAAGgB,EAAsBD,CAAC,EAAGlB,EAAOkB,EAAGnB,EAAG,WAAW,EAAGC,EAAOkB,EAAG,EAAG,UAAY,CAAE,OAAO,IAAM,CAAC,EAAGlB,EAAOkB,EAAG,WAAY,UAAY,CAAE,MAAO,oBAAsB,CAAC,EAAG,EAAE,KAAO,SAAUzB,EAAG,CAAE,IAAIG,EAAI,OAAOH,CAAC,EAAGC,EAAI,CAAC,EAAG,QAASC,KAAKC,EAAGF,EAAE,KAAKC,CAAC,EAAG,OAAOD,EAAE,QAAQ,EAAGH,EAAA,SAASmC,GAAO,CAAE,KAAOhC,EAAE,QAAS,CAAE,IAAID,EAAIC,EAAE,IAAI,EAAG,GAAID,KAAKG,EAAG,OAAO8B,EAAK,MAAQjC,EAAGiC,EAAK,KAAO,GAAIA,CAAM,CAAE,OAAOA,EAAK,KAAO,GAAIA,CAAM,EAA/I,OAAkJ,EAAG,EAAE,OAAST,GAAQb,GAAQ,UAAY,CAAE,YAAaA,GAAS,MAAOb,EAAA,SAAeK,EAAG,CAAE,GAAI,KAAK,KAAO,EAAG,KAAK,KAAO,EAAG,KAAK,KAAO,KAAK,MAAQH,EAAG,KAAK,KAAO,GAAI,KAAK,SAAW,KAAM,KAAK,OAAS,OAAQ,KAAK,IAAMA,EAAG,KAAK,WAAW,QAAQgC,EAAa,EAAG,CAAC7B,EAAG,QAASF,KAAK,KAAcA,EAAE,OAAO,CAAC,IAAlB,KAAuBC,EAAE,KAAK,KAAMD,CAAC,GAAK,CAAC,MAAM,CAACA,EAAE,MAAM,CAAC,CAAC,IAAM,KAAKA,CAAC,EAAID,EAAI,EAA5S,SAA+S,KAAMF,EAAA,UAAgB,CAAE,KAAK,KAAO,GAAI,IAAIE,EAAI,KAAK,WAAW,CAAC,EAAE,WAAY,GAAgBA,EAAE,OAAd,QAAoB,MAAMA,EAAE,IAAK,OAAO,KAAK,IAAM,EAAhI,QAAmI,kBAAmBF,EAAA,SAA2BK,EAAG,CAAE,GAAI,KAAK,KAAM,MAAMA,EAAG,IAAIF,EAAI,KAAM,SAASiC,EAAOhC,EAAGL,EAAG,CAAE,OAAOa,EAAE,KAAO,QAASA,EAAE,IAAMP,EAAGF,EAAE,KAAOC,EAAGL,IAAMI,EAAE,OAAS,OAAQA,EAAE,IAAMD,GAAI,CAAC,CAACH,CAAG,CAAzGC,EAAAoC,EAAA,UAA2G,QAASrC,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CAAE,IAAIO,EAAI,KAAK,WAAWP,CAAC,EAAGa,EAAIN,EAAE,WAAY,GAAeA,EAAE,SAAb,OAAqB,OAAO8B,EAAO,KAAK,EAAG,GAAI9B,EAAE,QAAU,KAAK,KAAM,CAAE,IAAIC,EAAIH,EAAE,KAAKE,EAAG,UAAU,EAAGE,EAAIJ,EAAE,KAAKE,EAAG,YAAY,EAAG,GAAIC,GAAKC,EAAG,CAAE,GAAI,KAAK,KAAOF,EAAE,SAAU,OAAO8B,EAAO9B,EAAE,SAAU,EAAE,EAAG,GAAI,KAAK,KAAOA,EAAE,WAAY,OAAO8B,EAAO9B,EAAE,UAAU,CAAG,SAAWC,GAAK,GAAI,KAAK,KAAOD,EAAE,SAAU,OAAO8B,EAAO9B,EAAE,SAAU,EAAE,MAAU,CAAE,GAAI,CAACE,EAAG,MAAM,MAAM,wCAAwC,EAAG,GAAI,KAAK,KAAOF,EAAE,WAAY,OAAO8B,EAAO9B,EAAE,UAAU,CAAG,CAAE,CAAE,CAAE,EAAhwB,qBAAmwB,OAAQN,EAAA,SAAgBE,EAAGG,EAAG,CAAE,QAASF,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CAAE,IAAIJ,EAAI,KAAK,WAAWI,CAAC,EAAG,GAAIJ,EAAE,QAAU,KAAK,MAAQK,EAAE,KAAKL,EAAG,YAAY,GAAK,KAAK,KAAOA,EAAE,WAAY,CAAE,IAAIO,EAAIP,EAAG,KAAO,CAAE,CAAEO,IAAkBJ,IAAZ,SAAgCA,IAAf,aAAqBI,EAAE,QAAUD,GAAKA,GAAKC,EAAE,aAAeA,EAAI,MAAO,IAAIM,EAAIN,EAAIA,EAAE,WAAa,CAAC,EAAG,OAAOM,EAAE,KAAOV,EAAGU,EAAE,IAAMP,EAAGC,GAAK,KAAK,OAAS,OAAQ,KAAK,KAAOA,EAAE,WAAYc,GAAK,KAAK,SAASR,CAAC,CAAG,EAA7b,UAAgc,SAAUZ,EAAA,SAAkBE,EAAGG,EAAG,CAAE,GAAgBH,EAAE,OAAd,QAAoB,MAAMA,EAAE,IAAK,OAAmBA,EAAE,OAAd,SAAqCA,EAAE,OAAjB,WAAwB,KAAK,KAAOA,EAAE,IAAmBA,EAAE,OAAf,UAAuB,KAAK,KAAO,KAAK,IAAMA,EAAE,IAAK,KAAK,OAAS,SAAU,KAAK,KAAO,OAAsBA,EAAE,OAAf,UAAuBG,IAAM,KAAK,KAAOA,GAAIe,CAAG,EAA1R,YAA6R,OAAQpB,EAAA,SAAgBE,EAAG,CAAE,QAASG,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CAAE,IAAIF,EAAI,KAAK,WAAWE,CAAC,EAAG,GAAIF,EAAE,aAAeD,EAAG,OAAO,KAAK,SAASC,EAAE,WAAYA,EAAE,QAAQ,EAAG+B,GAAc/B,CAAC,EAAGiB,CAAG,CAAE,EAAxM,UAA2M,MAASpB,EAAA,SAAgBE,EAAG,CAAE,QAASG,EAAI,KAAK,WAAW,OAAS,EAAGA,GAAK,EAAG,EAAEA,EAAG,CAAE,IAAIF,EAAI,KAAK,WAAWE,CAAC,EAAG,GAAIF,EAAE,SAAWD,EAAG,CAAE,IAAIE,EAAID,EAAE,WAAY,GAAgBC,EAAE,OAAd,QAAoB,CAAE,IAAIL,EAAIK,EAAE,IAAK8B,GAAc/B,CAAC,CAAG,CAAE,OAAOJ,CAAG,CAAE,CAAE,MAAM,MAAM,uBAAuB,CAAG,EAAtQ,UAAyQ,cAAeC,EAAA,SAAuBK,EAAGF,EAAGC,EAAG,CAAE,OAAO,KAAK,SAAW,CAAE,SAAUsB,GAAOrB,CAAC,EAAG,WAAYF,EAAG,QAASC,CAAE,EAAc,KAAK,SAAhB,SAA2B,KAAK,IAAMF,GAAIkB,CAAG,EAA1J,gBAA4J,EAAG,CAAG,CAA/0RpB,EAAAC,GAAA,uBACT,SAASoC,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQC,EAAKC,EAAK,CAAE,GAAI,CAAE,IAAIC,EAAOP,EAAIK,CAAG,EAAEC,CAAG,EAAOE,EAAQD,EAAK,KAAO,OAASE,EAAO,CAAEP,EAAOO,CAAK,EAAG,MAAQ,CAAMF,EAAK,KAAQN,EAAQO,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKL,EAAOC,CAAM,CAAK,CAA/P1C,EAAAqC,GAAA,sBACT,SAASW,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUZ,EAASC,EAAQ,CAAE,IAAIF,EAAMW,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASV,EAAMK,EAAO,CAAET,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQI,CAAK,CAAG,CAAvF9C,EAAAyC,EAAA,SAAyF,SAASC,EAAOU,EAAK,CAAEf,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASU,CAAG,CAAG,CAArFpD,EAAA0C,EAAA,UAAuFD,EAAM,MAAS,CAAG,CAAC,CAAG,CAAG,CAA3XzC,EAAAgD,GAAA,qBACT,SAASK,GAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAA/IvD,EAAAqD,GAAA,mBACT,SAASG,GAAkBC,EAAQC,EAAO,CAAE,QAASpD,EAAI,EAAGA,EAAIoD,EAAM,OAAQpD,IAAK,CAAE,IAAIqD,EAAaD,EAAMpD,CAAC,EAAGqD,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeF,EAAQG,GAAeD,EAAW,GAAG,EAAGA,CAAU,CAAG,CAAE,CAAnU3D,EAAAwD,GAAA,qBACT,SAASK,GAAaN,EAAaO,EAAYC,EAAa,CAAE,OAAID,GAAYN,GAAkBD,EAAY,UAAWO,CAAU,EAAOC,GAAaP,GAAkBD,EAAaQ,CAAW,EAAG,OAAO,eAAeR,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAAnRvD,EAAA6D,GAAA,gBACT,SAASD,GAAe1D,EAAG,CAAE,IAAII,EAAI0D,GAAa9D,EAAG,QAAQ,EAAG,OAAmBJ,GAAQQ,CAAC,GAArB,SAAyBA,EAAIA,EAAI,EAAI,CAAnGN,EAAA4D,GAAA,kBACT,SAASI,GAAa9D,EAAGC,EAAG,CAAE,GAAgBL,GAAQI,CAAC,GAArB,UAA0B,CAACA,EAAG,OAAOA,EAAG,IAAIG,EAAIH,EAAE,OAAO,WAAW,EAAG,GAAeG,IAAX,OAAc,CAAE,IAAIC,EAAID,EAAE,KAAKH,EAAGC,GAAK,SAAS,EAAG,GAAgBL,GAAQQ,CAAC,GAArB,SAAwB,OAAOA,EAAG,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAqBH,IAAb,SAAiB,OAAS,QAAQD,CAAC,CAAG,CAAlTF,EAAAgE,GAAA,gBAKT,IAAIC,IAA0B,UAAY,CACxC,SAASA,GAAa,CACpBZ,GAAgB,KAAMY,CAAU,CAClC,CAFS,OAAAjE,EAAAiE,EAAA,cAGFJ,GAAaI,EAAY,CAAC,CAC/B,IAAK,WACL,OAAO,UAAY,CACjB,IAAIC,EAAYlB,GAAgC/C,GAAoB,EAAE,KAAKD,EAAA,SAASmE,EAAQC,EAAOC,EAAW,CAC5G,IAAIC,EACJ,OAAOrE,GAAoB,EAAE,KAAKD,EAAA,SAAkBuE,EAAU,CAC5D,OAAU,OAAQA,EAAS,KAAOA,EAAS,KAAM,CAC/C,IAAK,GACH,GAAI,EAAEC,GAAc,GAAKJ,GAAS,OAAOA,EAAM,IAAQ,KAAc,CACnEG,EAAS,KAAO,GAChB,KACF,CACA,OAAAA,EAAS,KAAO,EAChBA,EAAS,KAAO,EACTE,GAAUL,EAAM,GAAG,EAC5B,IAAK,GACH,OAAAE,EAAOC,EAAS,KACTA,EAAS,OAAO,SAAU,IAAIG,GAAWJ,CAAI,CAAC,EACvD,IAAK,GACH,MAAAC,EAAS,KAAO,EAChBA,EAAS,GAAKA,EAAS,MAAS,CAAC,EAC3B,IAAI,MAAM,sFAAsF,OAAOA,EAAS,EAAE,CAAC,EAC3H,IAAK,IACH,GAAI,EAAE,OAAOH,EAAM,OAAU,YAAc,OAAOA,EAAM,KAAS,KAAc,CAC7EG,EAAS,KAAO,GAChB,KACF,CACA,OAAOA,EAAS,OAAO,SAAU,QAAQ,QAAQ,IAAIG,GAAWN,CAAK,CAAC,CAAC,EACzE,IAAK,IACH,GAAM,OAAOA,EAAM,MAAS,WAAa,CACvCG,EAAS,KAAO,GAChB,KACF,CAEA,GADAF,EAAY,OAAOA,CAAS,EACxB,OAAO,SAASA,CAAS,EAAG,CAC9BE,EAAS,KAAO,GAChB,KACF,CACA,OAAOA,EAAS,OAAO,SAAU,QAAQ,OAAO,IAAI,MAAM,mFAAmF,CAAC,CAAC,EACjJ,IAAK,IACH,OAAOA,EAAS,OAAO,SAAU,QAAQ,QAAQ,IAAII,GAAaP,EAAOC,CAAS,CAAC,CAAC,EACtF,IAAK,IACH,OAAOE,EAAS,OAAO,SAAU,QAAQ,OAAO,IAAI,MAAM,oFAAoF,CAAC,CAAC,EAClJ,IAAK,IACL,IAAK,MACH,OAAOA,EAAS,KAAK,CACzB,CACF,EA1CkC,YA0C/BJ,EAAS,KAAM,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,CAC5B,EA7C2E,UA6C1E,CAAC,EACF,SAASS,EAASC,EAAIC,EAAK,CACzB,OAAOZ,EAAU,MAAM,KAAM,SAAS,CACxC,CAFS,OAAAlE,EAAA4E,EAAA,YAGFA,CACT,GAAE,CACJ,CAAC,CAAC,CACJ,GAAE,EC7Da,SAARG,GAA6BC,EAAMC,EAAS,CACjD,OAAIC,GAAc,EACT,QAAQ,QAAQC,GAAuBH,EAAMC,CAAO,CAAC,EAEvD,QAAQ,QAAQ,CAAC,SAAUD,EAAK,KAAMA,EAAK,KAAMA,EAAK,KAAMA,EAAK,aAAcC,EAAQ,QAAQ,EAAE,KAAK,GAAG,CAAC,CACnH,CALwBG,EAAAL,GAAA,eAMxB,SAASI,GAAuBH,EAAMC,EAAS,CAC7C,IAAII,EAAWL,EAAK,KAAOM,GAAS,KAAK,UAAUN,EAAK,IAAI,CAAC,EAAI,SACjE,MAAO,CAAC,SAAUA,EAAK,MAAQ,SAAUA,EAAK,MAAQ,SAAUK,EAAUJ,EAAQ,QAAQ,EAAE,KAAK,GAAG,CACtG,CAHSG,EAAAD,GAAA,0BAIT,SAASG,GAASC,EAAK,CAErB,IAAIC,EAAO,EACX,GAAID,EAAI,SAAW,EACjB,OAAOC,EAET,QAASC,EAAI,EAAGA,EAAIF,EAAI,OAAQE,IAAK,CACnC,IAAIC,EAAQH,EAAI,WAAWE,CAAC,EAC5BD,GAAQA,GAAQ,GAAKA,EAAOE,EAC5BF,GAAQA,CACV,CACA,OAAOA,CACT,CAZSJ,EAAAE,GAAA,YCrBT,SAASK,GAAQC,EAAG,CAAE,0BAA2B,OAAOD,GAAwB,OAAO,QAArB,YAA2C,OAAO,OAAO,UAA1B,SAAqC,SAAUC,EAAG,CAAE,OAAO,OAAOA,CAAG,EAAI,SAAUA,EAAG,CAAE,OAAOA,GAAmB,OAAO,QAArB,YAA+BA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CAAG,EAAGD,GAAQC,CAAC,CAAG,CAApTC,EAAAF,GAAA,WACT,SAASG,GAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAA/IH,EAAAC,GAAA,mBACT,SAASG,GAAkBC,EAAQC,EAAO,CAAE,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CAAE,IAAIC,EAAaF,EAAMC,CAAC,EAAGC,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeH,EAAQI,GAAeD,EAAW,GAAG,EAAGA,CAAU,CAAG,CAAE,CAAnUR,EAAAI,GAAA,qBACT,SAASM,GAAaP,EAAaQ,EAAYC,EAAa,CAAE,OAAID,GAAYP,GAAkBD,EAAY,UAAWQ,CAAU,EAAOC,GAAaR,GAAkBD,EAAaS,CAAW,EAAG,OAAO,eAAeT,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAAnRH,EAAAU,GAAA,gBACT,SAASD,GAAeI,EAAG,CAAE,IAAIN,EAAIO,GAAaD,EAAG,QAAQ,EAAG,OAAmBf,GAAQS,CAAC,GAArB,SAAyBA,EAAIA,EAAI,EAAI,CAAnGP,EAAAS,GAAA,kBACT,SAASK,GAAaD,EAAGE,EAAG,CAAE,GAAgBjB,GAAQe,CAAC,GAArB,UAA0B,CAACA,EAAG,OAAOA,EAAG,IAAIG,EAAIH,EAAE,OAAO,WAAW,EAAG,GAAeG,IAAX,OAAc,CAAE,IAAIT,EAAIS,EAAE,KAAKH,EAAGE,GAAK,SAAS,EAAG,GAAgBjB,GAAQS,CAAC,GAArB,SAAwB,OAAOA,EAAG,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAqBQ,IAAb,SAAiB,OAAS,QAAQF,CAAC,CAAG,CAAlTb,EAAAc,GAAA,gBACT,IAAIG,IAA4B,UAAY,CAC1C,SAASA,GAAe,CACtBhB,GAAgB,KAAMgB,CAAY,CACpC,CAFS,OAAAjB,EAAAiB,EAAA,gBAGFP,GAAaO,EAAc,CAAC,CACjC,IAAK,gBACL,MAAOjB,EAAA,SAAuBkB,EAAQC,EAAK,CACzC,OAAO,IAAIC,GAAQF,EAAQC,CAAG,CAChC,EAFO,gBAGT,EAAG,CACD,IAAK,UACL,MAAOnB,EAAA,UAAmB,CACxB,MAAO,cACT,EAFO,UAGT,CAAC,CAAC,CACJ,GAAE,EAEF,IAAIqB,IAAuB,UAAY,CACrC,SAASA,EAAQC,EAAQC,EAAK,CAC5BC,GAAgB,KAAMH,CAAO,EAC7B,KAAK,KAAO,IAAI,eAChB,KAAK,KAAK,KAAKC,EAAQC,EAAK,EAAI,EAChC,KAAK,QAAUD,EACf,KAAK,KAAOC,EACZ,KAAK,SAAW,CAAC,CACnB,CAPS,OAAAE,EAAAJ,EAAA,WAQFK,GAAaL,EAAS,CAAC,CAC5B,IAAK,YACL,MAAOI,EAAA,UAAqB,CAC1B,OAAO,KAAK,OACd,EAFO,YAGT,EAAG,CACD,IAAK,SACL,MAAOA,EAAA,UAAkB,CACvB,OAAO,KAAK,IACd,EAFO,SAGT,EAAG,CACD,IAAK,YACL,MAAOA,EAAA,SAAmBE,EAAQC,EAAO,CACvC,KAAK,KAAK,iBAAiBD,EAAQC,CAAK,EACxC,KAAK,SAASD,CAAM,EAAIC,CAC1B,EAHO,YAIT,EAAG,CACD,IAAK,YACL,MAAOH,EAAA,SAAmBE,EAAQ,CAChC,OAAO,KAAK,SAASA,CAAM,CAC7B,EAFO,YAGT,EAAG,CACD,IAAK,qBACL,MAAOF,EAAA,SAA4BI,EAAiB,CAE5C,WAAY,KAAK,OAGvB,KAAK,KAAK,OAAO,WAAa,SAAUC,EAAG,CACpCA,EAAE,kBAGPD,EAAgBC,EAAE,MAAM,CAC1B,EACF,EAXO,qBAYT,EAAG,CACD,IAAK,OACL,MAAOL,EAAA,UAAgB,CACrB,IAAIM,EAAQ,KACRC,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAC/E,OAAO,IAAI,QAAQ,SAAUC,EAASC,EAAQ,CAC5CH,EAAM,KAAK,OAAS,UAAY,CAC9BE,EAAQ,IAAIE,GAASJ,EAAM,IAAI,CAAC,CAClC,EACAA,EAAM,KAAK,QAAU,SAAUK,EAAK,CAClCF,EAAOE,CAAG,CACZ,EACAL,EAAM,KAAK,KAAKC,CAAI,CACtB,CAAC,CACH,EAZO,OAaT,EAAG,CACD,IAAK,QACL,MAAOP,EAAA,UAAiB,CACtB,YAAK,KAAK,MAAM,EACT,QAAQ,QAAQ,CACzB,EAHO,QAIT,EAAG,CACD,IAAK,sBACL,MAAOA,EAAA,UAA+B,CACpC,OAAO,KAAK,IACd,EAFO,sBAGT,CAAC,CAAC,CACJ,GAAE,EACEU,IAAwB,UAAY,CACtC,SAASA,EAASE,EAAK,CACrBb,GAAgB,KAAMW,CAAQ,EAC9B,KAAK,KAAOE,CACd,CAHS,OAAAZ,EAAAU,EAAA,YAIFT,GAAaS,EAAU,CAAC,CAC7B,IAAK,YACL,MAAOV,EAAA,UAAqB,CAC1B,OAAO,KAAK,KAAK,MACnB,EAFO,YAGT,EAAG,CACD,IAAK,YACL,MAAOA,EAAA,SAAmBE,EAAQ,CAChC,OAAO,KAAK,KAAK,kBAAkBA,CAAM,CAC3C,EAFO,YAGT,EAAG,CACD,IAAK,UACL,MAAOF,EAAA,UAAmB,CACxB,OAAO,KAAK,KAAK,YACnB,EAFO,UAGT,EAAG,CACD,IAAK,sBACL,MAAOA,EAAA,UAA+B,CACpC,OAAO,KAAK,IACd,EAFO,sBAGT,CAAC,CAAC,CACJ,GAAE,ECzHF,SAASa,GAAQC,EAAG,CAAE,0BAA2B,OAAOD,GAAwB,OAAO,QAArB,YAA2C,OAAO,OAAO,UAA1B,SAAqC,SAAUC,EAAG,CAAE,OAAO,OAAOA,CAAG,EAAI,SAAUA,EAAG,CAAE,OAAOA,GAAmB,OAAO,QAArB,YAA+BA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CAAG,EAAGD,GAAQC,CAAC,CAAG,CAApTC,EAAAF,GAAA,WACT,SAASG,GAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAA/IH,EAAAC,GAAA,mBACT,SAASG,GAAkBC,EAAQC,EAAO,CAAE,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CAAE,IAAIC,EAAaF,EAAMC,CAAC,EAAGC,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeH,EAAQI,GAAeD,EAAW,GAAG,EAAGA,CAAU,CAAG,CAAE,CAAnUR,EAAAI,GAAA,qBACT,SAASM,GAAaP,EAAaQ,EAAYC,EAAa,CAAE,OAAID,GAAYP,GAAkBD,EAAY,UAAWQ,CAAU,EAAOC,GAAaR,GAAkBD,EAAaS,CAAW,EAAG,OAAO,eAAeT,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAAnRH,EAAAU,GAAA,gBACT,SAASD,GAAeI,EAAG,CAAE,IAAIN,EAAIO,GAAaD,EAAG,QAAQ,EAAG,OAAmBf,GAAQS,CAAC,GAArB,SAAyBA,EAAIA,EAAI,EAAI,CAAnGP,EAAAS,GAAA,kBACT,SAASK,GAAaD,EAAGE,EAAG,CAAE,GAAgBjB,GAAQe,CAAC,GAArB,UAA0B,CAACA,EAAG,OAAOA,EAAG,IAAIG,EAAIH,EAAE,OAAO,WAAW,EAAG,GAAeG,IAAX,OAAc,CAAE,IAAIT,EAAIS,EAAE,KAAKH,EAAGE,GAAK,SAAS,EAAG,GAAgBjB,GAAQS,CAAC,GAArB,SAAwB,OAAOA,EAAG,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAqBQ,IAAb,SAAiB,OAAS,QAAQF,CAAC,CAAG,CAAlTb,EAAAc,GAAA,gBACT,IAAIG,GAAa,GACjB,GAAI,CAEFA,GAAa,iBAAkB,OAM3BC,GAAM,aACNC,GAAgB,aAAa,QAAQD,EAAG,EAC5C,aAAa,QAAQA,GAAKC,EAAa,EACnCA,KAAkB,MAAM,aAAa,WAAWD,EAAG,CACzD,OAASF,EAAG,CAIV,GAAIA,EAAE,OAASA,EAAE,cAAgBA,EAAE,OAASA,EAAE,mBAC5CC,GAAa,OAEb,OAAMD,CAEV,CAbM,IAAAE,GACAC,GAaKC,GAAeH,GACfI,IAAoC,UAAY,CACzD,SAASA,GAAuB,CAC9BpB,GAAgB,KAAMoB,CAAoB,CAC5C,CAFS,OAAArB,EAAAqB,EAAA,wBAGFX,GAAaW,EAAsB,CAAC,CACzC,IAAK,iBACL,MAAOrB,EAAA,UAA0B,CAC/B,IAAIsB,EAAU,KAAK,aAAa,OAAO,EACvC,OAAO,QAAQ,QAAQA,CAAO,CAChC,EAHO,iBAIT,EAAG,CACD,IAAK,2BACL,MAAOtB,EAAA,SAAkCuB,EAAa,CACpD,IAAID,EAAU,KAAK,aAAa,QAAQ,OAAOC,EAAa,IAAI,CAAC,EACjE,OAAO,QAAQ,QAAQD,CAAO,CAChC,EAHO,2BAIT,EAAG,CACD,IAAK,eACL,MAAOtB,EAAA,SAAsBwB,EAAe,CAC1C,oBAAa,WAAWA,CAAa,EAC9B,QAAQ,QAAQ,CACzB,EAHO,eAIT,EAAG,CACD,IAAK,YACL,MAAOxB,EAAA,SAAmBuB,EAAaE,EAAQ,CAC7C,IAAIC,EAAK,KAAK,MAAM,KAAK,OAAO,EAAI,IAAI,EACpCR,EAAM,QAAQ,OAAOK,EAAa,IAAI,EAAE,OAAOG,CAAE,EACrD,oBAAa,QAAQR,EAAK,KAAK,UAAUO,CAAM,CAAC,EACzC,QAAQ,QAAQP,CAAG,CAC5B,EALO,YAMT,EAAG,CACD,IAAK,eACL,MAAOlB,EAAA,SAAsB2B,EAAQ,CAEnC,QADIL,EAAU,CAAC,EACNf,EAAI,EAAGA,EAAI,aAAa,OAAQA,IAAK,CAC5C,IAAIqB,EAAO,aAAa,IAAIrB,CAAC,EAC7B,GAAIqB,EAAK,QAAQD,CAAM,IAAM,EAC7B,GAAI,CACF,IAAIF,EAAS,KAAK,MAAM,aAAa,QAAQG,CAAI,CAAC,EAClDH,EAAO,cAAgBG,EACvBN,EAAQ,KAAKG,CAAM,CACrB,MAAa,CAGb,CACF,CACA,OAAOH,CACT,EAfO,eAgBT,CAAC,CAAC,CACJ,GAAE,EC/EF,SAASO,GAAQC,EAAG,CAAE,0BAA2B,OAAOD,GAAwB,OAAO,QAArB,YAA2C,OAAO,OAAO,UAA1B,SAAqC,SAAUC,EAAG,CAAE,OAAO,OAAOA,CAAG,EAAI,SAAUA,EAAG,CAAE,OAAOA,GAAmB,OAAO,QAArB,YAA+BA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CAAG,EAAGD,GAAQC,CAAC,CAAG,CAApTC,EAAAF,GAAA,WACT,SAASG,GAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAA/IH,EAAAC,GAAA,mBACT,SAASG,GAAkBC,EAAQC,EAAO,CAAE,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CAAE,IAAIC,EAAaF,EAAMC,CAAC,EAAGC,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeH,EAAQI,GAAeD,EAAW,GAAG,EAAGA,CAAU,CAAG,CAAE,CAAnUR,EAAAI,GAAA,qBACT,SAASM,GAAaP,EAAaQ,EAAYC,EAAa,CAAE,OAAID,GAAYP,GAAkBD,EAAY,UAAWQ,CAAU,EAAOC,GAAaR,GAAkBD,EAAaS,CAAW,EAAG,OAAO,eAAeT,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAAnRH,EAAAU,GAAA,gBACT,SAASG,GAAWC,EAAGf,EAAGgB,EAAG,CAAE,OAAOhB,EAAIiB,GAAgBjB,CAAC,EAAGkB,GAA2BH,EAAGI,GAA0B,EAAI,QAAQ,UAAUnB,EAAGgB,GAAK,CAAC,EAAGC,GAAgBF,CAAC,EAAE,WAAW,EAAIf,EAAE,MAAMe,EAAGC,CAAC,CAAC,CAAG,CAAjMf,EAAAa,GAAA,cACT,SAASI,GAA2BE,EAAMC,EAAM,CAAE,GAAIA,IAAStB,GAAQsB,CAAI,IAAM,UAAY,OAAOA,GAAS,YAAe,OAAOA,EAAa,GAAIA,IAAS,OAAU,MAAM,IAAI,UAAU,0DAA0D,EAAK,OAAOC,GAAuBF,CAAI,CAAG,CAAtRnB,EAAAiB,GAAA,8BACT,SAASI,GAAuBF,EAAM,CAAE,GAAIA,IAAS,OAAU,MAAM,IAAI,eAAe,2DAA2D,EAAK,OAAOA,CAAM,CAA5JnB,EAAAqB,GAAA,0BACT,SAASH,IAA4B,CAAE,GAAI,CAAE,IAAIJ,EAAI,CAAC,QAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,QAAS,CAAC,EAAG,UAAY,CAAC,CAAC,CAAC,CAAG,MAAY,CAAC,CAAE,OAAQI,GAA4BlB,EAAA,UAAqC,CAAE,MAAO,CAAC,CAACc,CAAG,EAAnD,8BAAsD,CAAG,CAAzOd,EAAAkB,GAAA,6BACT,SAASF,GAAgBjB,EAAG,CAAE,OAAAiB,GAAkB,OAAO,eAAiB,OAAO,eAAe,KAAK,EAAIhB,EAAA,SAAyBD,EAAG,CAAE,OAAOA,EAAE,WAAa,OAAO,eAAeA,CAAC,CAAG,EAA9E,mBAAwFiB,GAAgBjB,CAAC,CAAG,CAA1MC,EAAAgB,GAAA,mBACT,SAASM,GAAUC,EAAUC,EAAY,CAAE,GAAI,OAAOA,GAAe,YAAcA,IAAe,KAAQ,MAAM,IAAI,UAAU,oDAAoD,EAAKD,EAAS,UAAY,OAAO,OAAOC,GAAcA,EAAW,UAAW,CAAE,YAAa,CAAE,MAAOD,EAAU,SAAU,GAAM,aAAc,EAAK,CAAE,CAAC,EAAG,OAAO,eAAeA,EAAU,YAAa,CAAE,SAAU,EAAM,CAAC,EAAOC,GAAYC,GAAgBF,EAAUC,CAAU,CAAG,CAA1bxB,EAAAsB,GAAA,aACT,SAASG,GAAgB1B,EAAG2B,EAAG,CAAE,OAAAD,GAAkB,OAAO,eAAiB,OAAO,eAAe,KAAK,EAAIzB,EAAA,SAAyBD,EAAG2B,EAAG,CAAE,OAAA3B,EAAE,UAAY2B,EAAU3B,CAAG,EAA5D,mBAAsE0B,GAAgB1B,EAAG2B,CAAC,CAAG,CAA9L1B,EAAAyB,GAAA,mBACT,SAASE,GAAQZ,EAAGa,EAAG,CAAE,IAAI,EAAI,OAAO,KAAKb,CAAC,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIhB,EAAI,OAAO,sBAAsBgB,CAAC,EAAGa,IAAM7B,EAAIA,EAAE,OAAO,SAAU6B,EAAG,CAAE,OAAO,OAAO,yBAAyBb,EAAGa,CAAC,EAAE,UAAY,CAAC,GAAI,EAAE,KAAK,MAAM,EAAG7B,CAAC,CAAG,CAAE,OAAO,CAAG,CAArPC,EAAA2B,GAAA,WACT,SAASE,GAAcd,EAAG,CAAE,QAASa,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAI,EAAY,UAAUA,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAC,EAAGA,EAAI,EAAID,GAAQ,OAAO,CAAC,EAAG,EAAE,EAAE,QAAQ,SAAU,EAAG,CAAEG,GAAgBf,EAAG,EAAG,EAAE,CAAC,CAAC,CAAG,CAAC,EAAI,OAAO,0BAA4B,OAAO,iBAAiBA,EAAG,OAAO,0BAA0B,CAAC,CAAC,EAAIY,GAAQ,OAAO,CAAC,CAAC,EAAE,QAAQ,SAAU,EAAG,CAAE,OAAO,eAAeZ,EAAG,EAAG,OAAO,yBAAyB,EAAG,CAAC,CAAC,CAAG,CAAC,CAAG,CAAE,OAAOA,CAAG,CAA7af,EAAA6B,GAAA,iBACT,SAASC,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAMvB,GAAeuB,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAK,CAAC,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAK,CAAlO/B,EAAA8B,GAAA,mBACT,SAASrB,GAAeK,EAAG,CAAE,IAAIP,EAAI2B,GAAapB,EAAG,QAAQ,EAAG,OAAmBhB,GAAQS,CAAC,GAArB,SAAyBA,EAAIA,EAAI,EAAI,CAAnGP,EAAAS,GAAA,kBACT,SAASyB,GAAapB,EAAGc,EAAG,CAAE,GAAgB9B,GAAQgB,CAAC,GAArB,UAA0B,CAACA,EAAG,OAAOA,EAAG,IAAIC,EAAID,EAAE,OAAO,WAAW,EAAG,GAAeC,IAAX,OAAc,CAAE,IAAIR,EAAIQ,EAAE,KAAKD,EAAGc,GAAK,SAAS,EAAG,GAAgB9B,GAAQS,CAAC,GAArB,SAAwB,OAAOA,EAAG,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAqBqB,IAAb,SAAiB,OAAS,QAAQd,CAAC,CAAG,CAAlTd,EAAAkC,GAAA,gBAST,IAAIC,GAAiBN,GAAcA,GAAc,CAAC,EAAGO,GAAW,cAAc,EAAG,CAAC,EAAG,CACnF,UAAW,IAAIC,GACf,WAAY,IAAIC,GAChB,WAAYC,GAAe,IAAIC,GAAyB,IAAIC,GAC5D,YAAaC,EACf,CAAC,EACGC,IAAsB,SAAUC,EAAa,CAC/C,SAASD,GAAS,CAChB,IAAIE,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAC3EC,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EACnF,OAAA7C,GAAgB,KAAM0C,CAAM,EAC5BG,EAAUjB,GAAcA,GAAc,CAAC,EAAGM,EAAc,EAAGW,CAAO,EAC3DjC,GAAW,KAAM8B,EAAQ,CAACE,EAAMC,CAAO,CAAC,CACjD,CANS,OAAA9C,EAAA2C,EAAA,UAOTrB,GAAUqB,EAAQC,CAAW,EACtBlC,GAAaiC,EAAQ,KAAM,CAAC,CACjC,IAAK,YACL,MAAO3C,EAAA,SAAmB+C,EAAK,CAC7B,IAAID,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EACnF,OAAAA,EAAUjB,GAAcA,GAAc,CAAC,EAAGM,EAAc,EAAGW,CAAO,EAC3DV,GAAW,UAAUW,EAAKD,CAAO,CAC1C,EAJO,YAKT,CAAC,CAAC,CACJ,GAAEV,EAAU,EACRY,GAAc,OAAO,gBAAmB,YAAc,OAAO,MAAS,YAAc,OAAO,KAAK,UAAU,OAAU,WChDxH,IAAAC,GAAA,CACE,KAAQ,YACR,YAAe,0CACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,cACb,KAAQ,uDACV,EACA,SAAY,CACV,gBACA,OACA,cACA,SACA,YACA,KACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,cAAe,cACf,gBAAiB,QACnB,EACA,gBAAmB,CACjB,aAAc,cACd,MAAS,UACT,WAAc,SACd,OAAU,QACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,CACF,ECnDA,SAASC,IAAY,CACjB,OAAQ,OAAO,OAAW,MAErB,OAAO,OAAO,SAAa,KAExB,OAAO,OAAO,QAAY,KAE1B,OAAO,OAAO,QAAY,IACtC,CARSC,EAAAD,GAAA,aAST,SAASE,IAAgB,CACrB,OAAQ,OAAO,UAAc,KACzB,OAAO,UAAU,SAAY,UAC7B,UAAU,QAAQ,YAAY,IAAM,aAC5C,CAJSD,EAAAC,GAAA,iBAaM,SAARC,GAAgCC,EAAU,CAC7C,MAAO,CAACC,EAAMC,IAAY,CACtB,GAAIN,GAAU,GAAKE,GAAc,EAC7B,OAAWK,GAAe,YAAYF,EAAMC,CAAO,EAEvD,IAAME,EAAkB,CAAC,MAAOJ,EAAS,GAAIE,EAAQ,QAAQ,EAAE,KAAK,GAAG,EACvE,OAAO,QAAQ,QAAQE,CAAe,CAC1C,CACJ,CARwBP,EAAAE,GAAA,kBCdxB,IAAMM,GAAoB,CACtB,SAAU,GACV,UAAW,KACX,SAAU,CAAC,EACX,WAAY,KACZ,WAAY,KACZ,gBAAiB,KACjB,UAAW,KACX,QAAS,KACT,oBAAqB,GACrB,QAAS,CAAC,EACV,aAAc,GACd,UAAW,IACX,YAAa,CAAC,IAAK,IAAM,IAAM,GAAI,EACnC,gBAAiB,EACjB,2BAA4B,GAC5B,qBAAsB,GACtB,yBAA0B,EAC9B,EACMC,GAAiB,CACnB,MAAO,GACP,YAAaD,GAAkB,YAC/B,gBAAiB,GACjB,kBAAmB,EACvB,EAIqBE,GAArB,cAAiCC,EAAW,CArC5C,MAqC4C,CAAAC,EAAA,YACxC,OAAO,QAAUC,GAAY,QAC7BC,GACA,SACA,UACA,eACA,YAAYC,EAAMC,EAAM,CAIpB,GAHA,MAAMD,EAAM,CAAE,GAAGN,GAAgB,GAAGO,CAAK,CAAC,EAC1C,KAAK,KAAO,WACZ,KAAK,GAAK,KAAK,KAAK,IAAM,MACtBA,GAAM,oBAAsB,QAAa,eAAgB,KAAK,KAC9D,MAAM,IAAI,MAAM,kEAAkE,EAEtF,GAAI,cAAeA,EACf,MAAM,IAAI,MAAM,6DAA6D,EAOjF,KAAK,SACD,KAAK,KAAK,kBAAoB,IAAIC,GAAiB,KAAK,KAAK,KAAK,EACtE,KAAKH,GAAsB,KAAK,KAAK,aAAa,OAAO,EACzD,KAAK,UAAY,OAAO,OAAO,IAAI,EACnC,KAAK,eAAiB,OAAO,OAAO,IAAI,CAC5C,CAKA,wBAAwBI,EAAQF,EAAM,CAClC,IAAMG,EAAW,KAAK,UAAUD,CAAM,EAClCC,IACAA,EAAS,MAAM,EACXH,GAAM,OACNG,EAAS,MAAM,EAAI,EAEvB,KAAK,UAAUD,CAAM,EAAI,MAEzB,KAAK,eAAeA,CAAM,IAC1B,KAAK,eAAeA,CAAM,EAAE,OAAO,EACnC,KAAK,eAAeA,CAAM,EAAI,KAEtC,CAkCA,KAAME,GAAiBC,EAAM,CACzB,YAAK,wBAAwBA,EAAK,EAAE,EAE7B,IAAI,QAAQ,CAACC,EAASC,IAAW,CACpC,IAAIC,EAEAC,EAEAC,EACEV,EAAO,CACT,GAAG,KAAK,KACR,GAAIK,EAAK,KAAO,CAAC,CACrB,EACI,OAAOL,EAAK,SAAY,aACxBA,EAAK,QAAUA,EAAK,QAAQK,CAAI,GAEpC,GAAM,CAAE,cAAAM,EAAe,gBAAAC,EAAiB,GAAGC,CAAW,EAAIb,EACpDc,EAAgB,CAClB,GAAGtB,GACH,GAAGqB,CACP,EAKAC,EAAc,YAAcC,GAAeV,CAAI,EAC/CS,EAAc,gBAAkB,MAAOE,GAAQ,CAC3C,IAAMC,EAAMD,EAAI,oBAAoB,EAChCC,IACAA,EAAI,gBAAkB,CAAC,CAACjB,EAAK,iBAEjC,IAAIkB,EAIJ,GAHI,OAAON,GAAoB,aAC3BM,EAAsBN,EAAgBI,EAAKX,CAAI,GAE/Cc,GAAYX,EAAe,kBAAkB,EAAG,CAChD,GAAI,CAACA,EAAc,iBACf,OAAO,QAAQ,OAAO,EAE1B,IAAIY,EACEC,EAAI,IAAI,QAASC,GAAQ,CAC3BF,EAAOE,CACX,CAAC,EACDd,EAAgB,KAAK,SAAS,IAAI,KAC1BH,EAAK,UACLG,EAAc,MAAM,EAExBY,EAAK,EACE,IAAM,CAAE,EAClB,EAUD,MAAM,QAAQ,IAAI,CAACC,EAAGH,CAAmB,CAAC,EAC1C,MACJ,CAEA,OAAOA,CACX,EACAJ,EAAc,QAAWS,GAAQ,CAC7B,KAAK,KAAK,IAAIA,CAAG,EACjB,IAAMN,EAAMM,EAAI,iBAAmB,KAC7BA,EAAI,gBAAgB,oBAAoB,EACxC,KACFC,GAAeP,CAAG,IAClBM,EAAM,IAAIE,GAAaF,EAAKN,CAAG,GAEnC,KAAK,wBAAwBZ,EAAK,EAAE,EACpCG,GAAe,MAAM,EACjB,OAAOR,EAAK,SAAY,YACxBA,EAAK,QAAQuB,CAAG,EAEpBhB,EAAOgB,CAAG,CACd,EACAT,EAAc,WAAa,CAACY,EAAeC,IAAe,CACtD,KAAK,mBAAmBtB,EAAMK,EAAO,GAAG,EACpC,OAAOV,EAAK,YAAe,YAC3BA,EAAK,WAAW0B,EAAeC,CAAU,EAE7C,IAAMC,EAAa,KAAK,KAAK,QAAQvB,EAAK,EAAE,EAC5C,KAAK,KAAK,KAAK,kBAAmBuB,EAAY,CAC1C,cAAeA,EAAW,SAAS,eAAiB,EACpD,cAAAF,EACA,WAAAC,CACJ,CAAC,CACL,EACAb,EAAc,UAAae,GAAY,CACnC,IAAMC,EAAa,CACf,UAAWpB,EAAO,KAAO,OACzB,OAAQ,IACR,KAAM,CAIF,IAAKmB,EAAQ,aAAa,oBAAoB,CAIlD,CACJ,EACA,KAAK,KAAK,KAAK,iBAAkB,KAAK,KAAK,QAAQxB,EAAK,EAAE,EAAGyB,CAAU,EACvE,KAAK,wBAAwBzB,EAAK,EAAE,EACpCG,EAAc,KAAK,EACfE,EAAO,KACP,KAAK,KAAK,IAAI,YAAYA,EAAO,GAAG,EAAE,EAEtC,OAAOV,EAAK,WAAc,YAC1BA,EAAK,UAAU6B,CAAO,EAE1BvB,EAAQI,CAAM,CAClB,EACA,IAAMqB,EAAuBnC,EAAC2B,GAAQ,CAClC,IAAMS,EAAST,GAAK,kBAAkB,UAAU,EAChD,GAAIS,IAAW,KAEX,GAAI,CAAC,KAAK,SAAS,SAAU,CACzB,IAAMC,EAAO,KAAKnC,IAAqB,KAAK,EAC5C,GAAImC,GAAQ,MAAQA,EAAK,KACrB,MAAO,GAEX,KAAK,SAAS,UAAUA,EAAK,KAAK,CACtC,MAEC,IAAID,GAAU,MACfA,GAAU,KACVA,EAAS,KACTA,IAAW,KACXA,IAAW,IAIX,MAAO,GAEF,OAAO,UAAc,KAC1B,UAAU,SAAW,KAEhB,KAAK,SAAS,WACf,KAAK,SAAS,MAAM,EACpB,OAAO,iBAAiB,SAAU,IAAM,CACpC,KAAK,SAAS,OAAO,CACzB,EAAG,CAAE,KAAM,EAAK,CAAC,IAGzB,OAAAxB,EAAc,MAAM,EACpBA,EAAgB,CACZ,iBAAkB,GAClB,OAAQ,CACJ,KAAK,iBAAmB,EAC5B,EACA,MAAO,CACH,MAAM,IAAI,MAAM,4DAA4D,CAChF,EACA,IAAK,CACD,MAAM,IAAI,MAAM,mDAAmD,CACvE,CACJ,EACO,EACX,EA9C6B,wBA+CzBG,GAAiB,KACjBG,EAAc,cAAgB,CAACoB,EAAOC,IAAiBxB,EAAcuB,EAAOC,EAAcnC,EAAM+B,CAAoB,EAGpHjB,EAAc,cAAgBiB,EAElC,IAAMK,EAAWxC,EAAA,CAACyC,EAAKC,EAASC,IAAa,CACrCpB,GAAYkB,EAAKC,CAAO,GAAK,CAACnB,GAAYkB,EAAKE,CAAQ,IACvDF,EAAIE,CAAQ,EAAIF,EAAIC,CAAO,EAEnC,EAJiB,YAQXE,EAAO,CAAC,EAad,GAZ0BC,GAAqBzC,EAAK,kBAAmBK,EAAK,IAAI,EAC9D,QAASqC,GAAS,CAKhCF,EAAKE,CAAI,EAAI,OAAOrC,EAAK,KAAKqC,CAAI,CAAC,CACvC,CAAC,EAEDN,EAASI,EAAM,OAAQ,UAAU,EACjCJ,EAASI,EAAM,OAAQ,UAAU,EACjC1B,EAAc,SAAW0B,EACrBnC,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EACxCK,EAAS,IAAQiC,GAAOtC,EAAK,KAAMS,CAAa,EAChD,KAAK,UAAUT,EAAK,EAAE,EAAIK,EAC1B,IAAMkC,EAAe,IAAIC,GAAa,KAAK,IAAI,EAC/C,KAAK,eAAexC,EAAK,EAAE,EAAIuC,EAC/BnC,EAAWb,EAAA,KACFS,EAAK,UACNK,EAAO,MAAM,EAQV,IAAM,CAAE,GAVR,YAYXA,EAAO,oBAAoB,EAAE,KAAMoC,GAAoB,CACnD,IAAMC,EAAiBD,EAAgB,CAAC,EACpCC,IACA,KAAK,KAAK,IAAI,4BAA4B1C,EAAK,EAAE,eAAe0C,EAAe,YAAY,EAAE,EAC7FrC,EAAO,yBAAyBqC,CAAc,GAElDvC,EAAgB,KAAK,SAAS,IAAIC,CAAQ,CAC9C,CAAC,EACDmC,EAAa,aAAavC,EAAK,GAAK2C,GAAiB,CACjDxC,EAAc,MAAM,EACpB,KAAK,wBAAwBH,EAAK,GAAI,CAAE,MAAO,CAAC,CAACK,EAAO,GAAI,CAAC,EAC7DJ,EAAQ,UAAU0C,CAAY,cAAc,CAChD,CAAC,EACDJ,EAAa,QAAQvC,EAAK,GAAK4C,GAAa,CACxCzC,EAAc,MAAM,EAChByC,EAEAvC,EAAO,MAAM,EAKbF,EAAgB,KAAK,SAAS,IAAIC,CAAQ,CAElD,CAAC,EACDmC,EAAa,WAAWvC,EAAK,GAAI,IAAM,CACnCG,EAAc,MAAM,EACpBE,EAAO,MAAM,CACjB,CAAC,EACDkC,EAAa,YAAYvC,EAAK,GAAI,IAAM,CACpCG,EAAc,MAAM,EACpB,KAAK,wBAAwBH,EAAK,GAAI,CAAE,MAAO,CAAC,CAACK,EAAO,GAAI,CAAC,EAC7DJ,EAAQ,UAAUD,EAAK,EAAE,eAAe,CAC5C,CAAC,EACDuC,EAAa,YAAYvC,EAAK,GAAI,IAAM,CACpCG,EAAc,MAAM,EAChBH,EAAK,OACLK,EAAO,MAAM,EAEjBF,EAAgB,KAAK,SAAS,IAAIC,CAAQ,CAC9C,CAAC,CACL,CAAC,EAAE,MAAOc,GAAQ,CACd,WAAK,KAAK,KAAK,eAAgBlB,EAAMkB,CAAG,EAClCA,CACV,CAAC,CACL,CAKA,mBAAmBlB,EAAM6C,EAAW,CAChC,IAAMC,EAAc,KAAK,KAAK,QAAQ9C,EAAK,EAAE,EACxC8C,IAGD,CAACA,EAAY,KAAOA,EAAY,IAAI,YAAcD,KAClD,KAAK,KAAK,IAAI,0BAA0B,EACxC,KAAK,KAAK,aAAaC,EAAY,GAAI,CACnC,IAAK,CAAE,GAAGA,EAAY,IAAK,UAAWD,CAAU,CACpD,CAAC,EAET,CACAE,GAAwB/C,EAAM,CAC1B,IAAML,EAAO,CAAE,GAAG,KAAK,IAAK,EAC5B,OAAIK,EAAK,KAEL,OAAO,OAAOL,EAAMK,EAAK,GAAG,EAE5B,OAAOL,EAAK,SAAY,aACxBA,EAAK,QAAUA,EAAK,QAAQK,CAAI,GAE7B,CACH,GAAI,WAAYA,GAAQA,EAAK,OAAO,KACpC,SAAUL,EAAK,SACf,UAAWA,EAAK,UAChB,SAAU,MACV,KAAMK,EAAK,KAAK,KAChB,QAASL,EAAK,QACd,SAAUK,EAAK,IACnB,CACJ,CACA,KAAMgD,GAAaC,EAAO,CACtB,IAAMC,EAAgBC,GAAoBF,CAAK,EACzCG,EAAcC,GAA+BH,CAAa,EAChE,KAAK,KAAK,KAAK,eAAgBE,CAAW,EAC1C,MAAM,QAAQ,WAAWF,EAAc,IAAKlD,GAAS,CACjD,GAAIA,EAAK,SAAU,CACf,IAAMsD,EAAW/D,EAAA,IAAM,KAAK,SAAX,YACXgE,EAAa,IAAI,gBACjBC,EAAiBjE,EAACkE,GAAgB,CAChCA,EAAY,KAAOzD,EAAK,IACxBuD,EAAW,MAAM,CACzB,EAHuB,kBAIvB,KAAK,KAAK,GAAG,eAAgBC,CAAc,EAC3C,IAAME,EAAgB,KAAK,KACtB,wBAAwB1D,CAAI,EAC5B,iBAAiBA,EAAM,KAAK+C,GAAwB/C,CAAI,EAAG,CAC5D,OAAQuD,EAAW,OACnB,SAAAD,CACJ,CAAC,EACD,YAAK,SAAS,iBAAiB,IAAM,CACjC,KAAK,KAAK,IAAI,eAAgBE,CAAc,CAChD,EAAG,CAAE,SAAU,EAAG,CAAC,EAAE,EACdE,CACX,CACA,OAAO,KAAK3D,GAAiBC,CAAI,CACrC,CAAC,CAAC,CACN,CACA2D,GAAgBpE,EAAA,MAAOqE,GAAY,CAC/B,GAAIA,EAAQ,SAAW,EAAG,CACtB,KAAK,KAAK,IAAI,0BAA0B,EACxC,MACJ,CACI,KAAK,KAAK,QAAU,GACpB,KAAK,KAAK,IAAI,sOAAuO,SAAS,EAElQ,KAAK,KAAK,IAAI,oBAAoB,EAClC,IAAMC,EAAgB,KAAK,KAAK,cAAcD,CAAO,EACrD,MAAM,KAAKZ,GAAaa,CAAa,CACzC,EAXgB,iBAYhB,SAAU,CACN,KAAK,KAAK,SAAS,CACf,aAAc,CACV,GAAG,KAAK,KAAK,SAAS,EAAE,aACxB,iBAAkB,EACtB,CACJ,CAAC,EACD,KAAK,KAAK,YAAY,KAAKF,EAAa,CAC5C,CACA,WAAY,CACR,KAAK,KAAK,SAAS,CACf,aAAc,CACV,GAAG,KAAK,KAAK,SAAS,EAAE,aACxB,iBAAkB,EACtB,CACJ,CAAC,EACD,KAAK,KAAK,eAAe,KAAKA,EAAa,CAC/C,CACJ,EC9cA,IAAAG,GAAA,CACE,KAAQ,oBACR,YAAe,yKACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,cACb,KAAQ,uDACV,EACA,SAAY,CACV,gBACA,cACA,gBACA,WACA,kBACA,iBACA,OACA,SACA,YACA,OACA,aACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,qBAAsB,SACtB,YAAa,cACb,cAAe,cACf,oBAAqB,QACvB,EACA,iBAAoB,CAClB,aAAc,aAChB,EACA,gBAAmB,CACjB,aAAc,cACd,MAAS,UACT,IAAO,UACP,WAAc,SACd,OAAU,SACV,eAAgB,QAClB,CACF,EC3DA,IAAAC,GAAoB,WAEpB,IAAMC,GAAqB,qBACrBC,GAAqB,qBACrBC,GAAqB,qBACrBC,GAAc,CAACH,GAAoBC,GAAoBC,EAAkB,EAW/E,SAASE,GAASC,EAAQC,EAAM,CAC5B,OAAI,OAAOD,GAAW,SACX,GAEJF,GAAY,QAAQE,CAAM,GAAKF,GAAY,QAAQG,CAAI,CAClE,CALSC,EAAAH,GAAA,YAMT,IAAMI,GAAN,cAAkC,GAAAC,OAAQ,CAvB1C,MAuB0C,CAAAF,EAAA,4BACtCG,GACAC,GACAC,GAAmC,GACnCC,GAAO,KACPC,GACA,aACA,OACA,YAAYC,EAAUC,EAAkB,CACpC,MAAM,EAEN,KAAKF,GAAUC,EAEf,KAAK,aAAe,KAEpB,KAAK,OAAS,GACd,KAAKL,GAAoBM,EACzB,KAAKL,GAAyBK,EAAiB,oBAAoBC,EAAqB,CAC5F,CACA,SAAU,CACN,KAAKC,GAAyB,EAC9B,KAAKC,GAAc,CACvB,CACAC,IAAc,CACV,KAAK,KAAK,UAAU,EACpB,KAAK,MAAM,CACf,CACA,IAAI,QAAS,CACT,OAAO,KAAKN,EAChB,CACA,IAAI,OAAOT,EAAQ,CACf,KAAKS,GAAUT,EACf,KAAK,KAAK,SAAUA,CAAM,CAC9B,CACAa,IAA2B,CACvB,KAAKL,GAAO,IAAI,YAAY,GAAG,KAAK,OAAO,aAAa,aAAa,KAAK,OAAO,WAAW,EAAE,EAC9F,KAAKA,GAAK,iBAAiB,OAAQ,IAAM,CACrC,cAAc,KAAK,YAAY,EAC/B,KAAK,aAAe,IACxB,CAAC,EAOD,KAAKA,GAAK,iBAAiB,UAAY,GAAM,CACrC,EAAE,OAAS,qBACX,KAAKO,GAAY,EAEjB,EAAE,OAAS,+BACX,KAAK,KAAK,WAAW,EAErB,EAAE,OAAS,wCACX,KAAK,KAAK,UAAU,EACpB,KAAKC,GAAa,CAAE,KAAM,EAAM,CAAC,EAEzC,CAAC,EACD,KAAKR,GAAK,iBAAiB,2BAA6B,GAAM,CAC1D,IAAMS,EAAO,KAAK,MAAM,EAAE,IAAI,EAC9B,KAAK,OAAS,CACV,GAAG,KAAK,OACR,QAAS,CAAC,GAAI,KAAK,OAAO,SAAW,CAAC,EAAIA,CAAI,CAClD,EACA,KAAK,KAAK,SAAUA,CAAI,CAC5B,CAAC,EACD,KAAKT,GAAK,iBAAiB,2BAA6B,GAAM,CAC1D,GAAM,CAACU,EAAUC,CAAM,EAAI,KAAK,MAAM,EAAE,IAAI,EAC5C,KAAK,OAAS,CACV,GAAG,KAAK,OACR,QAAS,CACL,GAAG,KAAK,OAAO,QACf,CAACD,CAAQ,EAAG,CAAC,GAAI,KAAK,OAAO,UAAUA,CAAQ,GAAK,CAAC,EAAIC,CAAM,CACnE,CACJ,EACA,KAAK,KAAK,SAAUD,EAAUC,CAAM,CACxC,CAAC,EACD,KAAKX,GAAK,iBAAiB,8BAAgC,GAAM,CAC7D,IAAMY,EAAU,KAAK,MAAM,EAAE,IAAI,EACjC,KAAK,KAAK,qBAAsBA,CAAO,CAC3C,CAAC,EACD,KAAKZ,GAAK,iBAAiB,iBAAmB,GAAM,CAChD,GAAI,CACA,KAAKa,GAAS,KAAK,MAAM,EAAE,IAAI,CAAC,CACpC,MACM,CACF,KAAKA,GAAS,IAAI,MAAM,EAAE,IAAI,CAAC,CACnC,CAEA,KAAKL,GAAa,CAAE,KAAM,EAAM,CAAC,CACrC,CAAC,CACL,CACAK,GAASC,EAAiB,CACtB,KAAK,KAAK,QAAS,OAAO,OAAO,IAAI,MAAMA,EAAgB,OAAO,EAAGA,CAAe,CAAC,EACrF,KAAK,MAAM,CACf,CAOAR,IAAgB,CACZ,KAAK,aAAe,YAAY,IAAM,CAClC,KAAKE,GAAa,CACtB,EAAG,GAAI,CACX,CAOA,KAAMA,GAAa,CAAE,KAAAO,EAAO,EAAK,EAAI,CAAC,EAAG,CACrC,GAAI,OAAK,QACL,KAAKlB,GAAkB,UACvB,KAAKE,IAET,GAAI,CACA,KAAKA,GAAmC,GACxC,IAAMiB,EAAYC,GAAkB,KAAK,MAAM,EACzCC,EAAW,MAAM,KAAKpB,GAAuBkB,CAAS,EAE5D,GADA,KAAKjB,GAAmC,GACpC,KAAK,OACL,OACJ,GAAImB,EAAS,SAAW,IAAK,CACzB,KAAKrB,GAAkB,UAAU,GAAK,EACtC,MACJ,CACA,GAAI,CAACqB,EAAS,GAAI,CACd,KAAKL,GAAS,IAAIM,GAAaD,EAAS,UAAU,CAAC,EACnD,MACJ,CACA,IAAM1B,EAAS,MAAM0B,EAAS,KAAK,EAEnC,GAAI,KAAK,OACL,OACAH,EACA,KAAK,aAAavB,CAAM,EAGxB,KAAK,OAASA,CAEtB,OACO4B,EAAK,CACR,KAAKP,GAASO,CAAG,CACrB,CACJ,CACA,QAAS,CACL,OAAO,KAAKZ,GAAa,CAAE,KAAM,EAAK,CAAC,CAC3C,CAKA,aAAaa,EAAM,CACf,KAAKC,GAAY,KAAK,OAAQD,CAAI,EAClC,KAAK,OAASA,CAClB,CAKAC,GAAYC,EAAMF,EAAM,CACpB,IAAMG,EAAaD,EAAK,GAClBE,EAAaJ,EAAK,GACxB,GAAIA,EAAK,OAAS,CAACE,EAAK,MACpB,OAAO,KAAKV,GAASQ,CAAI,EAU7B,IAAMK,EAAenC,GAASkC,EAAYrC,EAAkB,GACxD,CAACG,GAASiC,EAAYpC,EAAkB,EACxCsC,GAKA,KAAK,KAAK,WAAW,EAGzB,IAAMC,EAAcJ,EAAK,QACnBK,EAAcP,EAAK,QACrBO,GAAe,MAAQD,GAAe,MACtC,OAAO,KAAKC,CAAW,EAClB,OAAQC,GAAW,CAACC,GAAIH,EAAaE,CAAM,CAAC,EAC5C,QAASA,GAAW,CAErB,KAAK,KAAK,SAAUD,EAAYC,CAAM,CAAC,CAC3C,CAAC,EAEDH,GACA,KAAK,KAAK,UAAU,EAGxB,IAAMK,EAAiBV,EAAK,QACtBW,EAAiBT,EAAK,QACxBQ,GAAkB,MAAQC,GAAkB,MAC5C,OAAO,KAAKD,CAAc,EAAE,QAASrB,GAAa,CAC9C,IAAMuB,EAAcF,EAAerB,CAAQ,GAAK,CAAC,EAC3CwB,EAAcF,EAAetB,CAAQ,GAAK,CAAC,EACjDuB,EACK,OAAQE,GAAM,CAACD,GAAe,CAACA,EAAY,KAAME,GAAMA,EAAE,KAAOD,EAAE,EAAE,CAAC,EACrE,QAASxB,GAAW,CACrB,KAAK,KAAK,SAAUD,EAAUC,CAAM,CACxC,CAAC,CACL,CAAC,EAEDpB,GAASkC,EAAYpC,EAAkB,GACvC,CAACE,GAASiC,EAAYnC,EAAkB,GACxC,KAAK,KAAK,UAAU,CAG5B,CAIA,OAAQ,CACJ,KAAK,OAAS,GACV,KAAKW,KACL,KAAKA,GAAK,MAAM,EAChB,KAAKA,GAAO,MAEhB,cAAc,KAAK,YAAY,EAC/B,KAAK,aAAe,IACxB,CACJ,EACOqC,GAAQ1C,GChQf,IAAA2C,GAAoB,WASpB,IAAMC,GAAN,cAAyC,GAAAC,OAAQ,CATjD,MASiD,CAAAC,EAAA,mCAC7CC,GACAC,GACA,QACAC,GACAC,GACAC,GACA,YAAYC,EAAMC,EAAa,CAC3B,MAAM,EACN,KAAKF,GAAQC,EACb,KAAKL,GAAeM,EACpB,KAAKL,GAAaK,EAAY,OAC9B,KAAK,QAAU,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC5C,KAAKN,GAAWK,EAChB,KAAKJ,GAAUK,CACnB,CAAC,EACD,KAAKC,GAAc,CACvB,CAIAC,GAAUC,EAAI,CACV,OAAO,KAAKX,GAAa,QAAQW,CAAE,IAAM,EAC7C,CACAC,GAAsBb,EAACc,GAAa,CAChC,IAAMC,EAAaD,EAAS,YACxBC,GAAc,MAAQ,CAAC,KAAKJ,GAAUI,CAAU,IAGpD,KAAKV,GAAM,IAAI,sDAAsDU,CAAU,EAAE,EACjF,KAAK,KAAK,oBAAqBA,CAAU,EACzC,KAAKC,GAAkB,EAC3B,EARsB,uBAStBC,GAAoBjB,EAACc,GAAa,CAC9B,IAAMC,EAAaD,EAAS,YACxBC,GAAc,MAAQ,CAAC,KAAKJ,GAAUI,CAAU,GAGpD,KAAKC,GAAkB,CAC3B,EANoB,qBAOpBE,GAAmBlB,EAAA,CAACc,EAAUK,IAAU,CACpC,IAAMJ,EAAaD,EAAS,YACxBC,GAAc,MAAQ,CAAC,KAAKJ,GAAUI,CAAU,IAGpD,KAAKV,GAAM,IAAI,qDAAqDU,CAAU,EAAE,EAChF,KAAKV,GAAM,IAAIc,CAAK,EACpB,KAAK,KAAK,iBAAkBJ,EAAYI,CAAK,EAC7C,KAAKH,GAAkB,EAC3B,EATmB,oBAUnBI,GAAiBpB,EAAA,CAACc,EAAUO,EAAQF,IAAU,CAC1C,IAAMJ,EAAaD,EAAS,YACxBC,GAAc,MAAQ,CAAC,KAAKJ,GAAUI,CAAU,GAQpD,KAAKG,GAAiBJ,EAAUK,CAAK,CACzC,EAXiB,kBAYjBH,IAAoB,CAChB,KAAKd,IAAc,EACf,KAAKA,KAAe,IAEpB,KAAKoB,GAAiB,EACtB,KAAKnB,GAAS,EAEtB,CACAmB,IAAmB,CACf,KAAKjB,GAAM,IAAI,uBAAwB,KAAKQ,EAAmB,EAC/D,KAAKR,GAAM,IAAI,8BAA+B,KAAKY,EAAiB,EACpE,KAAKZ,GAAM,IAAI,6BAA8B,KAAKa,EAAgB,EAClE,KAAKb,GAAM,IAAI,2BAA4B,KAAKe,EAAc,CAClE,CACAV,IAAgB,CACZ,KAAKL,GAAM,GAAG,uBAAwB,KAAKQ,EAAmB,EAC9D,KAAKR,GAAM,GAAG,8BAA+B,KAAKY,EAAiB,EACnE,KAAKZ,GAAM,GAAG,6BAA8B,KAAKa,EAAgB,EACjE,KAAKb,GAAM,GAAG,2BAA4B,KAAKe,EAAc,CACjE,CACJ,EACOG,GAAQzB,GC1Ff,IAAM0B,GAAsB,cACfC,GAAN,cAA4B,KAAM,CAHzC,MAGyC,CAAAC,EAAA,sBACrC,QACA,SACA,YAAYC,EAASC,EAASC,EAAU,CACpC,MAAMF,CAAO,EACb,KAAK,QAAUC,EACf,KAAK,SAAWC,CACpB,CACJ,EAIqBC,GAArB,KAA4B,CAf5B,MAe4B,CAAAJ,EAAA,eACxBK,GAAW,CAAC,EACZC,GACA,KACA,YAAYC,EAAM,CACd,KAAK,KAAOA,EACR,KAAK,KAAK,QAAU,OACpB,KAAKF,GAAS,oBAAoB,EAAI,KAAK,KAAK,QAEpD,KAAKC,GACD,KAAK,KAAK,iBAAiB,oBAAoBE,EAAqB,CAC5E,CACA,KAAMC,MAAcC,EAAM,CACtB,IAAMC,EAAW,MAAM,KAAKL,GAAuB,GAAGI,CAAI,EAC1D,GAAIC,EAAS,SAAW,IACpB,YAAK,KAAK,iBAAiB,UAAU,GAAK,EACnC,KAAKF,GAAW,GAAGC,CAAI,EAElC,GAAI,CAACC,EAAS,GAAI,CACd,IAAMC,EAAc,IAAI,MAAMD,EAAS,UAAU,EAGjD,OADAC,EAAY,WAAaD,EAAS,OAC7B,GAAGD,EAAK,CAAC,CAAC,GAAG,SAASZ,EAAmB,EAGvCa,EAAS,KAAK,EAAE,KAAMR,GAAa,CACtC,GAAI,CAACA,EAAS,MACV,MAAMS,EACV,IAAMC,EAAQ,IAAId,GAAcI,EAAS,MAAOA,EAAS,QAASA,CAAQ,EAC1E,MAAIA,EAAS,cACTU,EAAM,SAAW,iBAAiBV,EAAS,WAAW,IAEpDU,CACV,EAAIC,GAAQ,CACR,MAAAA,EAAI,MAAQF,EACNE,CACV,CAAC,EAbU,QAAQ,OAAOF,CAAW,CAczC,CACA,OAAOD,EAAS,KAAK,CACzB,CACA,MAAM,eAAe,CAAE,OAAAI,EAAQ,OAAAC,EAAQ,UAAAC,EAAW,cAAAC,CAAe,EAAG,CAChE,IAAMC,EAAO,IAAI,SACjBA,EAAK,OAAO,SAAU,OAAOJ,GAAW,SAAWA,EAAS,KAAK,UAAUA,CAAM,CAAC,EAC9EE,GACAE,EAAK,OAAO,YAAaF,CAAS,EAEtC,OAAO,KAAKD,CAAM,EAAE,QAASI,GAAQ,CACjCD,EAAK,OAAOC,EAAK,OAAOJ,EAAOI,CAAG,CAAC,CAAC,CACxC,CAAC,EACDD,EAAK,OAAO,4BAA6B,OAAOD,CAAa,CAAC,EAC9D,IAAMG,EAAM,IAAI,IAAIvB,GAAqB,GAAG,KAAK,KAAK,OAAO,EAAE,EAAE,KACjE,OAAO,KAAKW,GAAWY,EAAK,CACxB,OAAQ,OACR,QAAS,KAAKhB,GACd,KAAMc,CACV,CAAC,EAAE,MAAOL,GAAQ,KAAKQ,GAAaR,EAAK,CAAE,IAAAO,EAAK,KAAM,WAAY,CAAC,CAAC,CACxE,CAIA,MAAM,YAAYlB,EAAUoB,EAAM,CAC9B,IAAMC,EAAO,mBAAmBD,EAAK,IAAI,EAEnCF,EAAM,GADQI,GAAkBtB,CAAQ,CACpB,sBAAsBqB,CAAI,GACpD,OAAO,KAAKf,GAAWY,EAAK,CACxB,OAAQ,OACR,QAAS,KAAKhB,EAClB,CAAC,EAAE,MAAOS,GAAQ,KAAKQ,GAAaR,EAAK,CAAE,SAAAX,EAAU,KAAAoB,EAAM,IAAAF,EAAK,KAAM,WAAY,CAAC,CAAC,CACxF,CAIA,MAAM,QAAQlB,EAAUoB,EAAM,CAC1B,GAAI,CAACA,EAAK,UACN,OAAO,QAAQ,OAAO,IAAI,MAAM,oCAAoC,CAAC,EAEzE,IAAMC,EAAO,mBAAmBD,EAAK,IAAI,EACnCG,EAAY,mBAAmBH,EAAK,SAAS,EAC7CI,EAAW,mBAAmBJ,EAAK,MAAQ,SAAS,EAEpDK,EAAK,QAAQJ,CAAI,aAAaG,CAAQ,yBAAiCD,CAAS,GAEhFL,EAAM,GADQI,GAAkBtB,CAAQ,CACpB,aAAayB,CAAE,GACzC,OAAO,KAAKnB,GAAWY,EAAK,CACxB,OAAQ,OACR,QAAS,KAAKhB,EAClB,CAAC,EAAE,MAAOS,GAAQ,KAAKQ,GAAaR,EAAK,CAAE,SAAAX,EAAU,KAAAoB,EAAM,IAAAF,EAAK,KAAM,WAAY,CAAC,CAAC,CACxF,CAIA,MAAM,eAAelB,EAAU,CAC3B,IAAMkB,EAAMI,GAAkBtB,CAAQ,EACtC,MAAM,KAAKG,GAAuBe,EAAK,CACnC,OAAQ,SACR,QAAS,KAAKhB,EAClB,CAAC,EAAE,MAAOS,GAAQ,KAAKQ,GAAaR,EAAK,CAAE,IAAAO,EAAK,KAAM,WAAY,CAAC,CAAC,CACxE,CAIA,MAAM,kBAAkBA,EAAK,CACzB,OAAO,KAAKZ,GAAWY,EAAK,CAAE,QAAS,KAAKhB,EAAS,CAAC,EAAE,MAAOS,GAAQ,KAAKQ,GAAaR,EAAK,CAAE,IAAAO,EAAK,KAAM,cAAe,CAAC,CAAC,CAChI,CACA,MAAM,YAAYP,EAAK,CAAE,SAAAe,EAAU,SAAAC,EAAU,SAAA3B,CAAU,EAAI,CAAC,EAAG,CAC3D,IAAMF,EAAUa,EAAI,QACd,GAAGA,EAAI,OAAO,KAAKA,EAAI,OAAO,IAC9BA,EAAI,QACV,OAAO,KAAKL,GAAW,6CAA8C,CACjE,OAAQ,OACR,KAAM,KAAK,UAAU,CACjB,SAAAoB,EACA,SAAAC,EACA,YAAa3B,EACb,MAAO,OAAO,UAAc,IAAc,UAAU,UAAY,GAChE,OAAQ,KAAK,KAAK,OAClB,MAAOF,CACX,CAAC,CACL,CAAC,CACL,CACAqB,GAAetB,EAAA,CAACc,EAAKC,IAAW,CAC5B,GAAI,KAAK,KAAK,iBAAmB,GAC7B,MAAMD,EAEV,IAAMP,EAAO,CACT,KAAMQ,EAAO,IACjB,EACA,MAAIA,EAAO,WACPR,EAAK,SAAWQ,EAAO,SAAS,YAChCR,EAAK,SAAWQ,EAAO,SAAS,UAEhCA,EAAO,MACPR,EAAK,SAAWQ,EAAO,KAE3B,KAAK,YAAYD,EAAKP,CAAI,EAAE,MAAM,IAAM,CAExC,CAAC,EACKO,CACV,EAlBe,eAmBnB,EC1JA,IAAOiB,GAAQ,CACX,QAAS,CAEL,iBAAkB,sBAElB,uBAAwB,yCAGxB,SAAU,aACd,CACJ,ECFA,IAAMC,GAAiB,CACnB,QAAS,+BACT,eAAgB,GAChB,gBAAiB,GACjB,gBAAiB,GACjB,kBAAmB,GACnB,qBAAsB,GACtB,MAAO,GACP,YAAa,CAAC,IAAO,IAAQ,KAAQ,GAAM,EAC3C,WAAY,IAChB,EACMC,GAAqBC,EAACC,GAAiBC,GAAQ,CACjD,IAAMC,EAAQ,IAAIC,GAAe,qCAAsC,CACnE,MAAOF,CACX,CAAC,EACD,QAAQ,MAAMC,EAAOF,CAAW,CACpC,EAL2B,sBAM3B,SAASI,GAAeC,EAAQ,CAC5B,GAAIA,GAAU,KACV,MAAM,IAAI,MAAM,+CAA+C,EAEnE,IAAIC,EACJ,GAAI,OAAOD,GAAW,SAClB,GAAI,CACAC,EAAS,KAAK,MAAMD,CAAM,CAC9B,OACOJ,EAAK,CAER,MAAM,IAAIE,GAAe,+DAAgE,CAAE,MAAOF,CAAI,CAAC,CAC3G,MAGAK,EAASD,EAEb,GAAI,CAACC,EAAO,MAAQ,CAACA,EAAO,KAAK,IAC7B,MAAM,IAAI,MAAM,gJAC6E,CAErG,CArBSP,EAAAK,GAAA,kBAsBT,SAASG,GAAiBC,EAAQ,CAC9B,GAAI,CAACA,EAAO,YACR,cAAQ,KAAK,4CAA6CA,CAAM,EAC1D,IAAI,MAAM,wDAAwD,EAE5E,OAAOA,EAAO,WAClB,CANST,EAAAQ,GAAA,oBAOT,SAASE,GAAUC,KAAUC,EAAY,CACrC,QAAWC,KAASD,EAChB,GAAI,OAAOC,GAAU,UAAYA,EAAM,OAAS,EAC5C,OAAOA,EAGf,MAAM,IAAI,MAAM,2CAA2CF,CAAK,GAAG,CACvE,CAPSX,EAAAU,GAAA,aAQF,SAASI,GAAeC,EAAU,CACrC,OAAOL,GAAU,iBAAkBK,EAAS,aAAcA,EAAS,gBAAgB,CACvF,CAFgBf,EAAAc,GAAA,kBAGT,SAASE,GAAkBD,EAAU,CACxC,OAAOL,GAAU,qBAAsBK,EAAS,iBAAkBA,EAAS,YAAY,CAC3F,CAFgBf,EAAAgB,GAAA,qBAGhB,IAAMC,GAAgB,yCAEhBC,GAA0B,sBAE1BC,GAAe,wDAIAC,GAArB,cAAyCC,EAAW,CA5EpD,MA4EoD,CAAArB,EAAA,oBAChD,OAAO,QAAUsB,GAAY,QAC7B,OAAO,cAAgBL,GACvB,OAAO,wBAA0BC,GACjCK,GACA,OACAC,GACAC,GACA,eACA,SAAW,KACX,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CAAE,GAAG5B,GAAgB,GAAG6B,CAAK,CAAC,EAC1C,KAAK,KAAO,WACZ,KAAK,GAAK,KAAK,KAAK,IAAM,cAC1B,KAAK,cAAgBC,GACrB,KAAKL,GAAoB,IAAIM,GAAiB,KAAK,KAAK,KAAK,EAC7D,KAAK,SAAS,EACd,KAAK,OAAS,IAAIC,GAAO,CACrB,QAAS,KAAK,KAAK,QACnB,OAAQ,KAAKC,GAAkB,EAC/B,eAAgB,KAAK,KAAK,eAC1B,iBAAkB,KAAKR,EAC3B,CAAC,EAGD,KAAK,eAAiB,OAAO,OAAO,IAAI,CAC5C,CACAQ,IAAoB,CAChB,IAAMC,EAAO,CAET,aAAa,KAAK,KAAK,YAAY,OAAO,GAE1C,oBAAoB,KAAK,YAAY,OAAO,GAC5C,YAAYC,GAAI,OAAO,EAC3B,EACMC,EAAmBlC,EAAA,CAACmC,EAAYC,IAAgB,CAClD,IAAMC,EAAS,KAAK,KAAK,UAAUF,CAAU,EACzCE,GAEAL,EAAK,KAAK,GAAGI,CAAW,IAAIC,EAAO,YAAY,OAAO,EAAE,CAEhE,EANyB,oBAOzB,OAAI,KAAK,KAAK,uBACVH,EAAiB,YAAa,iBAAiB,EAC/CA,EAAiB,QAAS,aAAa,EACvCA,EAAiB,iBAAkB,uBAAuB,GAE9DA,EAAiB,UAAW,cAAc,EAC1CA,EAAiB,MAAO,UAAU,EAClCA,EAAiB,WAAY,eAAe,EAC5CA,EAAiB,cAAe,mBAAmB,EACnDA,EAAiB,oBAAqB,0BAA0B,EAChEA,EAAiB,qBAAsB,2BAA2B,EAClEA,EAAiB,YAAa,gBAAgB,EAC9CA,EAAiB,WAAY,eAAe,EAC5CA,EAAiB,OAAQ,WAAW,EACpCA,EAAiB,MAAO,UAAU,EAC9B,KAAK,KAAK,YAAc,MACxBF,EAAK,KAAK,KAAK,KAAK,UAAU,EAE3BA,EAAK,KAAK,GAAG,CACxB,CAOAM,GAAwBC,EAAM9B,EAAQ,CAElC,IAAM+B,EAAc1B,GAAeL,CAAM,EACnCgC,EAAc/B,GAAU,YAAaD,EAAO,OAAO,EACnDiC,EAAalC,GAAiBC,CAAM,EACpCkC,EAAO,CACT,GAAGJ,EAAK,KAER,aAAcC,EACd,SAAUD,EAAK,KACf,UAAW,MACf,EAEMK,EAAM,CACR,GAAGL,EAAK,IACR,SAAUE,EAEV,aAAc,EAClB,EAKII,EACJ,GAAI,WAAYN,GAAQA,EAAK,SAExB,CAAE,OAAAM,CAAO,EAAIN,EACV9B,EAAO,eAAiBU,GAAa,KAAKoB,EAAK,OAAO,YAAY,GAAG,CACrE,IAAMO,EAAUrC,EAAO,cAAc,QAAQ,MAAO,EAAE,EAChDsC,EAAOR,EAAK,OAAO,IACpB,QAAQA,EAAK,OAAO,aAAc,EAAE,EACpC,QAAQ,MAAO,EAAE,EACtBM,EAAS,CACL,GAAGN,EAAK,OACR,aAAcO,EACd,IAAK,GAAGA,CAAO,IAAIC,CAAI,EAC3B,CACJ,CAGJ,IAAMC,EAAU,CACZ,GAAGT,EACH,YAAa,CACT,SAAUG,CACd,CACJ,EAEA,OAAK,KAAK,KAAK,sBACX,OAAO,OAAOM,EAAS,CAAE,KAAAL,EAAM,IAAAC,EAAK,OAAAC,CAAO,CAAC,EAEzCG,CACX,CACA,KAAMC,GAAgBC,EAASC,EAAiB,CAC5C,KAAK,KAAK,IAAI,+BAA+B,EAC7C,GAAI,CACA,IAAMC,EAAc,MAAM,KAAK,OAAO,eAAe,CACjD,GAAGD,EACH,cAAeD,EAAQ,MAC3B,CAAC,EACKG,EAAQ,KAAK,KACd,SAAS,EACT,OAAO,CAAC,CAAE,GAAAC,CAAG,IAAMJ,EAAQ,SAASI,CAAE,CAAC,EAC5C,GAAID,EAAM,SAAW,GAAKH,EAAQ,SAAW,EAEzC,aAAM,KAAK,OAAO,eAAeE,CAAW,EACrC,KAEX,IAAMrC,EAAW,IAAIwC,GAASH,EAAa,KAAK7B,EAAiB,EAC3D,CAAE,OAAAd,CAAO,EAAIM,EACbyC,EAAahD,GAAiBC,CAAM,EACpCgD,EAAe,CAAC,EACtB,OAAAJ,EAAM,QAASd,GAAS,CACpBkB,EAAalB,EAAK,EAAE,EAAI,KAAKD,GAAwBC,EAAM9B,CAAM,CACrE,CAAC,EACD,KAAK,KAAK,SAAS,CACf,MAAO,CACH,GAAG,KAAK,KAAK,SAAS,EAAE,MACxB,GAAGgD,CACP,CACJ,CAAC,EACD,KAAK,KAAK,KAAK,+BAAgChD,EAAQyC,CAAO,EAC9D,KAAK,KAAK,IAAI,kCAAkCM,CAAU,EAAE,EACrDzC,CACX,OACOb,EAAK,CAER,IAAMwD,EAAU,IAAItD,GAAe,GAAG,KAAK,KAAK,wBAAwB,CAAC,KAAKF,EAAI,OAAO,GAAI,CAAE,MAAOA,CAAI,CAAC,EAC3G,KAAI,YAAaA,IAEbwD,EAAQ,QAAUxD,EAAI,SAEtB,aAAcA,IAEdwD,EAAQ,SAAWxD,EAAI,UAErBwD,CACV,CACJ,CACAC,GAAuBC,EAAgB,CAEnC,IAAMC,EAAM,MAAM,QAAQD,CAAc,EAClCA,EACA,CAACA,CAAc,EACfE,EAAU,IAAIC,GAAgB,KAAK,KAAMF,CAAG,EAClDC,EAAQ,GAAG,oBAAsBR,GAAO,CACtB,KAAK,iBAAiBA,CAAE,EAChC,QAASf,GAAS,CACpB,KAAK,eAAeA,EAAK,EAAE,EAAI,GAC/B,KAAK,KAAK,KAAK,uBAAwBA,CAAI,CAC/C,CAAC,CACL,CAAC,EACDuB,EAAQ,GAAG,iBAAkB,CAACR,EAAInD,IAAU,CAExC,IAAM6D,EAAoB,KAAK,iBAAiBV,CAAE,EAClDU,EAAkB,QAASzB,GAAS,CAEhC,KAAK,KAAK,KAAK,eAAgBA,EAAMpC,CAAK,EAC1C,KAAK,KAAK,KAAK,uBAAwBoC,CAAI,CAC/C,CAAC,EAKD,IAAMc,EAAQ,CAAE,GAAG,KAAK,KAAK,SAAS,EAAE,KAAM,EAC9CW,EAAkB,QAASzB,GAAS,OAAOc,EAAMd,EAAK,EAAE,EAAE,GAAG,EAC7D,KAAK,KAAK,SAAS,CAAE,MAAAc,CAAM,CAAC,EAC5B,KAAK,KAAK,KAAK,QAASlD,CAAK,CACjC,CAAC,EACD,KAAKsB,GAAWqC,CACpB,CACAG,IAAyB,CACrB,OAAO,KAAK,KAAK,iBAAmB,KAAK,KAAK,eAClD,CAKAC,GAAcnD,EAAUmC,EAAS,CAC7B,OAAO,QAAQ,IAAIA,EAAQ,IAAKiB,GAAW,CACvC,IAAM5B,EAAO,KAAK,KAAK,QAAQ4B,CAAM,EACrC,OAAO,KAAK,OAAO,YAAYpD,EAAS,OAAQwB,CAAI,CACxD,CAAC,CAAC,CACN,CAIA6B,GAA8BpE,EAACqE,GAAqB,CAChD,KAAK,KAAK,KAAK,8BAA+B,CAC1C,CAAC,KAAK,EAAE,EAAGA,EAAmB,CAAE,iBAAAA,CAAiB,EAAI,MACzD,CAAC,CACL,EAJ8B,+BAK9B,IAAI,UAAW,CACX,OAAO,KAAK7C,EAChB,CACA,IAAI,SAAS4B,EAAa,CAClB,CAACA,GAAe,KAAK,UACrB,KAAK,SAAS,IAAI,SAAU,KAAKgB,EAA2B,EAEhE,KAAK5C,GAAY4B,EACjB,KAAKgB,GAA4BhB,GAAa,MAAM,EAChDA,GACAA,EAAY,GAAG,SAAU,KAAKgB,EAA2B,CAEjE,CAKAE,GAA4BtE,EAACuE,GAAY,CACrC,IAAMhC,EAAO,KAAK,KAAK,QAAQgC,EAAQ,EAAE,EACzC,GAAI,CAAChC,GAAM,aAAa,SACpB,OAEJ,GAAM,CAAE,OAAA9B,CAAO,EAAI,KAAK,SACxB,KAAK,OAAO,QAAQA,EAAQ8B,CAAI,EAAE,MAAOrC,GAAQ,CAC7C,KAAK,KAAK,IAAIA,CAAG,EACjB,KAAK,KAAK,KAAK,2BAA4BO,EAAQ8B,EAAK,GAAIrC,CAAG,CACnE,CAAC,CACL,EAV4B,6BAW5BsE,GAAUC,EAAc,CACpB,IAAMpB,EAAQ,KAAK,KAAK,SAAS,EACjC,QAASqB,EAAI,EAAGA,EAAIrB,EAAM,OAAQqB,IAAK,CACnC,IAAMnC,EAAOc,EAAMqB,CAAC,EASpB,GAPInC,EAAK,YAAckC,EAAa,gBAIhClC,EAAK,KAAOA,EAAK,IAAI,YAAckC,EAAa,gBAGhD,CAACA,EAAa,aAEVlC,EAAK,OAASkC,EAAa,MAC3BlC,EAAK,OAASkC,EAAa,KAC3B,OAAOlC,CAGnB,CAEJ,CACAoC,GAAsBjC,EAAY+B,EAAc,CAC5C,IAAMG,EAAQ,KAAK,eAAe,EAC5BrC,EAAO,KAAKiC,GAAUC,CAAY,EACxC,GAAI,CAAClC,EAAM,CACP,KAAK,KAAK,IAAI,iFAA4E,EAC1F,MACJ,CACA,KAAK,eAAe,CAChB,MAAO,CACH,GAAGqC,EAAM,MACT,CAACH,EAAa,EAAE,EAAG,CACf,SAAU/B,EACV,GAAIH,EAAK,GACT,aAAAkC,CACJ,CACJ,CACJ,CAAC,EACD,KAAK,KAAK,KAAK,qBAAsBA,EAAc,KAAK,YAAY,CAAC,CACzE,CACAI,GAAUnC,EAAYoC,EAAUC,EAAQ,CACpC,IAAMH,EAAQ,KAAK,eAAe,EAClC,GAAI,EAAE,OAAQG,GAAS,CACnB,QAAQ,KAAK,mBAAoBA,CAAM,EACvC,MACJ,CACA,GAAI,OAAOA,EAAO,IAAO,SAAU,CAC/B,QAAQ,KAAK,kCAAmCA,CAAM,EACtD,MACJ,CACA,IAAMC,EAAQ,CACV,OAAAD,EACA,SAAAD,EACA,GAAIC,EAAO,GACX,SAAUrC,CACd,EACA,KAAK,eAAe,CAChB,QAAS,CAAC,GAAGkC,EAAM,QAASI,CAAK,CACrC,CAAC,EACD,KAAK,KAAK,KAAK,qBAAsBF,EAAUE,EAAM,OAAQ,KAAK,YAAY,CAAC,CACnF,CAKAC,GAAoBlE,EAAU,CAC1B,IAAMmE,EAAMlE,GAAkBD,EAAS,MAAM,EAC7C,KAAK,OAAO,kBAAkBmE,CAAG,EAAE,KAAMC,GAAgB,CACrDpE,EAAS,OAASoE,EAClB,KAAK,KAAK,KAAK,uBAAwBA,CAAW,CACtD,CAAC,CACL,CACA,KAAMC,GAAgBrE,EAAU,CAC5B,MAAM,KAAK,OAAO,eAAeA,CAAQ,EAEzC,KAAK,KAAK,KAAK,iCAAkCA,CAAQ,EACzD,KAAK,SAAW,MACpB,CAIAsE,GAAerF,EAAA,SAAY,CACvB,GAAI,KAAK,SACL,GAAI,CACA,MAAM,KAAKoF,GAAgB,KAAK,SAAS,MAAM,CACnD,OACOlF,EAAK,CACR,KAAK,KAAK,IAAIA,CAAG,CACrB,CAGJ,KAAK,KAAK,SAAS,CAAE,eAAgB,EAAK,CAAC,CAC/C,EAXe,gBAYfoF,GAActF,EAACuF,GAAe,CAE1B,IAAMC,GADaD,IAAa,KAAK,EAAE,EAAIA,EAAW,KAAK,EAAE,EAAI,CAAC,GAC9B,iBACpC,GAAI,CAACC,EAED,OAGJ,IAAMC,EAAezF,EAAA,IAAM,CACvB,IAAMqD,EAAQ,CAAC,EACTqC,EAAU,CAAC,EACXpC,EAAK9C,GAAiBgF,CAAgB,EAC5CA,EAAiB,SAAS,QAASf,GAAiB,CAChD,IAAMlC,EAAO,KAAKiC,GAAUC,CAAY,EACxCpB,EAAMoB,EAAa,EAAE,EAAI,CACrB,GAAIlC,EAAK,GACT,SAAUe,EACV,aAAAmB,CACJ,CACJ,CAAC,EACD,IAAMG,EAAQ,KAAK,eAAe,EAC5Be,EAAkBH,EAAiB,SAAW,CAAC,EACrD,OAAO,KAAKG,CAAe,EAAE,QAASb,GAAa,CAC/C,IAAMc,EAAcD,EAAgBb,CAAQ,GAAK,CAAC,EAClD,QAAWC,KAAUa,EAAa,CAC9B,GAAI,EAAE,OAAQb,GAAS,CACnB,QAAQ,KAAK,mBAAoBA,CAAM,EACvC,QACJ,CACA,GAAI,OAAOA,EAAO,IAAO,SAAU,CAC/B,QAAQ,KAAK,kCAAmCA,CAAM,EACtD,QACJ,CACA,GAAI,EAAE,gBAAiBA,GAAS,CAC5B,QAAQ,KAAK,4BAA6BA,CAAM,EAChD,QACJ,CACA,GAAI,OAAOA,EAAO,aAAgB,SAAU,CACxC,QAAQ,KAAK,2CAA4CA,CAAM,EAC/D,QACJ,CACA,IAAMxC,EAAOqC,EAAM,MAAMG,EAAO,WAAW,EAC3CW,EAAQ,KAAK,CACT,GAAIX,EAAO,GACX,OAAQ,CAAE,GAAGA,EAAQ,QAASxC,EAAOA,EAAK,GAAK,IAAK,EACpD,SAAAuC,EACA,SAAUxB,CACd,CAAC,CACL,CACJ,CAAC,EACD,IAAMvC,EAAW,IAAIwC,GAASiC,EAAkB,KAAKjE,EAAiB,EACtE,OAAAR,EAAS,OAASyE,EAClB,KAAK,SAAWzE,EAChB,KAAK,eAAe,CAAE,MAAAsC,EAAO,QAAAqC,CAAQ,CAAC,EAC/BrC,CACX,EA/CqB,gBAiDfwC,EAAoB7F,EAAC6D,GAAQ,CAC/B,KAAKF,GAAuBnD,GAAiBgF,CAAgB,CAAC,EAC9D,KAAKM,GAAiB,KAAK,SAAUjC,CAAG,CAC5C,EAH0B,qBAKpBkC,EAAiB/F,EAAA,IACZ,KAAK,UAAU,OAAO,EADV,kBAIvB,KAAK,UAAY,SAAY,CACzB,IAAMqD,EAAQoC,EAAa,EAC3BI,EAAkB,OAAO,KAAKxC,CAAK,CAAC,EACpC,MAAM0C,EAAe,EACrB,KAAK,SAAW,IACpB,GAAG,EACH,KAAK,SAAS,MAAO7F,GAAQ,CACzB,KAAK,KAAK,IAAI,oBAAqBA,CAAG,CAC1C,CAAC,CACL,EA3Ec,eA4Ed4F,GAAiB/E,EAAU8C,EAAK,CAC5B,GAAM,CAAE,OAAApD,CAAO,EAAIM,EACbuC,EAAK9C,GAAiBC,CAAM,EAiDlC,OAhDAM,EAAS,GAAG,SAAWwB,GAAS,CAC5B,KAAKoC,GAAsBrB,EAAIf,CAAI,CACvC,CAAC,EACDxB,EAAS,GAAG,QAAUZ,GAAU,CAC5BA,EAAM,SAAWY,EAAS,OAC1B,KAAK,KAAK,KAAK,6BAA8BA,EAAS,OAAQZ,CAAK,CACvE,CAAC,EACDY,EAAS,GAAG,YAAa,IAAM,CAC3B,KAAK,KAAK,KAAK,iCAAkCA,EAAS,MAAM,CACpE,CAAC,EACDA,EAAS,GAAG,qBAAuBiF,GAAY,CAE3C,GADA,KAAK,KAAK,KAAK,iCAAkCA,CAAO,EACpDA,EAAQ,mBAAqB,KAU7B,QAAWzD,KAAQ,KAAK,KAAK,cAAcsB,CAAG,EAC1C,KAAK,KAAK,KAAK,uBAAwBtB,EAAM,CACzC,KAAM,cACN,MAAOyD,EAAQ,kBAAoB,IACnC,QAAS,KAAK,KAAK,UAAU,CACjC,CAAC,CAGb,CAAC,EACG,KAAK,KAAK,iBACVjF,EAAS,GAAG,SAAU,CAAC+D,EAAUC,IAAW,CACxC,KAAKF,GAAUvB,EAAIwB,EAAUC,CAAM,CACvC,CAAC,EAED,KAAK,KAAK,gBACVhE,EAAS,GAAG,WAAY,IAAM,CAC1B,KAAKkE,GAAoBlE,CAAQ,CACrC,CAAC,EAEI,KAAK,KAAK,iBACfA,EAAS,GAAG,WAAY,IAAM,CAC1B,KAAKkE,GAAoBlE,CAAQ,CACrC,CAAC,EAIDA,EAAS,KAAO,qBAGpBA,EAAS,QAAQ,EACVA,CACX,CACAkF,GAAiBjG,EAAA,MAAOkD,GAAY,CAGhC,KAAK,KAAK,SAAS,CAAE,eAAgB,EAAM,CAAC,EAC5C,IAAMC,EAAmB,OAAO,KAAK,KAAK,iBAAoB,WACxD,MAAM,KAAK,KAAK,gBAAgB,EAChC,KAAK,KAAK,gBAChBA,EAAgB,OAAS,CACrB,GAAIA,EAAgB,QAAU,CAAC,CACnC,EACA9C,GAAe8C,EAAgB,MAAM,EACrC,GAAI,CACA,IAAMpC,EAEN,KAAK,UAAa,MAAM,KAAKkC,GAAgBC,EAASC,CAAe,EACrE,GAAIpC,GAAY,KACZ,MAAM,IAAI,MAAM,oDAAoD,EACpE,KAAK,KAAK,sBACV,MAAM,KAAKmD,GAAcnD,EAAUmC,CAAO,EAE9CA,EAAQ,QAASiB,GAAW,CACxB,IAAM5B,EAAO,KAAK,KAAK,QAAQ4B,CAAM,EACrC,KAAK,KAAK,KAAK,sBAAuB5B,CAAI,CAC9C,CAAC,EACD,KAAKoB,GAAuBnD,GAAiBO,EAAS,MAAM,CAAC,EAC7D,KAAK,SAAWA,EAChB,KAAK+E,GAAiB/E,EAAUmC,CAAO,CAC3C,OACOhD,EAAK,CACR,MAAAgD,EAAQ,QAASiB,GAAW,CACxB,IAAM5B,EAAO,KAAK,KAAK,QAAQ4B,CAAM,EAGrC,KAAK,KAAK,KAAK,sBAAuB5B,CAAI,EAC1C,KAAK,KAAK,KAAK,eAAgBA,EAAMrC,CAAG,CAC5C,CAAC,EAED,KAAK,KAAK,SAAS,CAAE,eAAgB,EAAK,CAAC,EACrCA,CACV,CACJ,EAxCiB,kBAyCjBgG,GAAelG,EAAA,MAAOkD,EAASiD,IAAa,CACxC,GAAI,CAEA,MAAM,KAAK,SACX,IAAM9C,EAAQH,EACT,IAAKiB,GAAW,KAAK,KAAK,QAAQA,CAAM,CAAC,EAEzC,OAAQ5B,GAAS,CAACA,EAAK,KAAK,EAC3BiB,EAAa,KAAK,SAClBhD,GAAiB,KAAK,SAAS,MAAM,EACrC,OACA4F,EAAyBpG,EAAA,IAAM,CACjC,KAAK,UAAU,MAAM,CACzB,EAF+B,0BAK/B,GAAI,CAAC,KAAKiE,GAAuB,EAAG,CAChCmC,EAAuB,EACvB,IAAM3F,EAAS,KAAK,UAAU,OAC1BA,GAAU,MACV,KAAK,KAAK,cAAc0F,EAAU,CAC9B,YAAa,CAAC1F,CAAM,CACxB,CAAC,EAEL,MACJ,CAGA,GAAI,CAAC+C,EAAY,CACb,KAAK,KAAK,cAAc2C,EAAU,CAAE,YAAa,CAAC,CAAE,CAAC,EACrD,MACJ,CACwB9C,EAAM,OAAQd,GAAS,CAAC8D,GAAY,KAAK,eAAgB9D,EAAK,EAAE,CAAC,EACzE,QAASA,GAAS,CAC9B,KAAK,KAAK,KAAK,uBAAwBA,EAAM,CACzC,KAAM,gBACN,QAAS,KAAK,KAAK,UAAU,CACjC,CAAC,CACL,CAAC,EACD,MAAM,KAAKd,GAAS,QAEpB2E,EAAuB,EACvB,IAAM3F,EAAS,KAAK,UAAU,OAC1BA,GAAU,MACV,KAAK,KAAK,cAAc0F,EAAU,CAC9B,YAAa,CAAC1F,CAAM,CACxB,CAAC,CAET,QACA,CAII,KAAK,SAAW,OAEhB,KAAK,KAAK,SAAS,CAAE,eAAgB,EAAK,CAAC,CAC/C,CACJ,EAzDe,gBA0Df6F,GAAyBtG,EAAA,IAAM,CAC3B,KAAK,UAAU,MAAM,CACzB,EAFyB,0BAGzBuG,GAAWvG,EAACE,GAAQ,CAChB,KAAKoG,GAAuB,EAC5B,KAAK,SAAW,OAChB,KAAK,OACA,YAAYpG,CAAG,EAEf,MAAMH,GAAmBG,CAAG,CAAC,EAElC,KAAK,KAAK,SAAS,CAAE,eAAgB,EAAK,CAAC,CAC/C,EATW,YAUXsG,GAAcxG,EAAA,CAACyG,EAAGvG,IAAQ,CAEtB,GADA,KAAKoG,GAAuB,EACxBpG,GAAK,SAAS,WAAW,OAAO,EAAG,CACnC,IAAMwG,EAAWxG,EAAI,iBAAiB,oBAAoB,GAAG,YAC7D,KAAK,OACA,YAAYA,EAAK,CAAE,SAAAwG,CAAS,CAAC,EAE7B,MAAM3G,GAAmBG,CAAG,CAAC,CACtC,CACJ,EATc,eAUd,SAAU,CACN,KAAK,KAAK,gBAAgB,KAAK+F,EAAc,EAC7C,KAAK,KAAK,iBAAiB,KAAKC,EAAY,EAE5C,KAAK,KAAK,GAAG,QAAS,KAAKK,EAAQ,EAEnC,KAAK,KAAK,GAAG,aAAc,KAAKlB,EAAY,EAC5C,KAAK,KAAK,GAAG,eAAgB,KAAKmB,EAAW,EACzC,KAAK,KAAK,qBAEV,KAAK,KAAK,GAAG,iBAAkB,KAAKlC,EAAyB,EAK7D,KAAK,KAAK,IAAIrC,GAAK,CAUf,4BAA6B,GAG7B,kBAAmB,GAEnB,MAAO,KAAK,KAAK,MACjB,iBAAkB,KAAKV,GACvB,YAAa,KAAK,KAAK,WAC3B,CAAC,EAEL,KAAK,KAAK,GAAG,WAAY,KAAK+D,EAAW,EACzC,KAAK,eAAe,CAEhB,MAAO,CAAC,EAER,QAAS,CAAC,CACd,CAAC,EAED,GAAM,CAAE,aAAAqB,CAAa,EAAI,KAAK,KAAK,SAAS,EAC5C,KAAK,KAAK,SAAS,CACf,aAAc,CACV,GAAGA,EACH,uBAAwB,EAC5B,CACJ,CAAC,CACL,CACA,WAAY,CACR,KAAK,KAAK,mBAAmB,KAAKV,EAAc,EAChD,KAAK,KAAK,oBAAoB,KAAKC,EAAY,EAC/C,KAAK,KAAK,IAAI,QAAS,KAAKK,EAAQ,EACpC,KAAK,KAAK,IAAI,aAAc,KAAKlB,EAAY,EACzC,KAAK,KAAK,sBACV,KAAK,KAAK,IAAI,iBAAkB,KAAKf,EAAyB,EAElE,GAAM,CAAE,aAAAqC,CAAa,EAAI,KAAK,KAAK,SAAS,EAC5C,KAAK,KAAK,SAAS,CACf,aAAc,CACV,GAAGA,EACH,uBAAwB,EAC5B,CACJ,CAAC,CACL,CACA,aAAc,CACV,OAAO,KAAK,UAAU,MAC1B,CACA,iBAAiBnD,EAAY,CACzB,OAAO,KAAK,KAAK,SAAS,EAAE,OAAQjB,GACzBA,GAAM,aAAa,WAAaiB,CAC1C,CACL,CACJ,ECxuBA,IAAAoD,GAAyB,WCHzB,IAAAC,GAAA,CACE,KAAQ,eACR,YAAe,6EACf,QAAW,QACX,QAAW,MACX,MAAS,qBACT,KAAQ,SACR,YAAe,CACb,OACF,EACA,QAAW,CACT,MAAS,kCACT,YAAa,mHACb,UAAa,cACb,KAAQ,uDACV,EACA,SAAY,CACV,gBACA,OACA,cACA,SACA,UACA,QACA,QACA,SACA,eACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,kBAAmB,mBACnB,sBAAuB,uBACvB,mBAAoB,mBACpB,iBAAkB,gBACpB,EACA,aAAgB,CACd,cAAe,cACf,YAAa,SACb,OAAU,WACZ,EACA,gBAAmB,CACjB,QAAW,SACX,MAAS,UACT,QAAW,SACX,cAAe,UACf,KAAQ,UACR,WAAc,SACd,OAAU,QACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,CACF,EChEe,SAARC,IAA8B,CACjC,OAAQC,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,KAAM,UAAW,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,ueAAwe,SAAU,SAAU,CAAC,CAAE,CAAC,CACnqB,CAFwBC,EAAAF,GAAA,cCAxB,SAASG,GAAc,CAAE,UAAAC,EAAW,KAAAC,CAAK,EAAG,CACxC,OAAQC,EAAK,SAAU,CAAE,UAAW,yEAA0E,KAAM,SAAU,MAAOD,EAAK,qBAAqB,EAAG,aAAcA,EAAK,qBAAqB,EAAG,QAASD,EAAW,4BAA6B,GAAM,SAAUE,EAAK,MAAO,CAAE,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,MAAO,6BAA8B,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,SAAUA,EAAM,IAAK,CAAE,KAAM,OAAQ,SAAU,UAAW,SAAU,CAACA,EAAK,OAAQ,CAAE,EAAG,kDAAmD,CAAC,EAAGA,EAAK,OAAQ,CAAE,EAAG,mDAAoD,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CAC1pB,CAFSC,EAAAJ,GAAA,iBAGT,IAAOK,GAAQL,GCHA,SAARM,GAA8B,CAAE,UAAAC,EAAW,iBAAAC,EAAkB,gBAAAC,EAAiB,KAAAC,CAAM,EAAG,CAC1F,OAAIH,EACQI,EAAK,SAAU,CAAE,UAAW,6CAA8C,KAAM,SAAU,MAAOD,EAAK,eAAe,EAAG,aAAcA,EAAK,eAAe,EAAG,QAASD,EAAiB,4BAA6B,GAAM,SAAUE,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,MAAO,OAAQ,MAAO,QAAS,cAAe,SAAUA,EAAK,OAAQ,CAAE,EAAG,KAAM,EAAG,KAAM,MAAO,KAAM,OAAQ,IAAK,CAAC,CAAE,CAAC,CAAE,CAAC,EAE5bA,EAAK,SAAU,CAAE,UAAW,6CAA8C,KAAM,SAAU,MAAOD,EAAK,gBAAgB,EAAG,aAAcA,EAAK,gBAAgB,EAAG,QAASF,EAAkB,4BAA6B,GAAM,SAAUG,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,MAAO,MAAO,OAAQ,MAAO,QAAS,cAAe,SAAUA,EAAK,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,CAAC,CAAE,CAAC,CAAE,CAAC,CACzb,CALwBC,EAAAN,GAAA,gBCGT,SAARO,GAA+BC,EAAS,CAC3C,MAAO,GAAG,KAAK,MAAMA,EAAU,EAAE,CAAC,IAAI,OAAOA,EAAU,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAC/E,CAFwBC,EAAAF,GAAA,iBCFT,SAARG,GAAiC,CAAE,uBAAAC,CAAwB,EAAG,CACjE,IAAMC,EAAkCC,GAAcF,CAAsB,EAC5E,OAAOG,EAAK,OAAQ,CAAE,SAAUF,CAAgC,CAAC,CACrE,CAHwBG,EAAAL,GAAA,mBCAT,SAARM,GAAgC,CAAE,WAAAC,EAAY,KAAAC,CAAM,EAAG,CAC1D,OAAQC,EAAK,SAAU,CAAE,UAAW,yEAA0E,KAAM,SAAU,MAAOD,EAAK,aAAa,EAAG,aAAcA,EAAK,aAAa,EAAG,QAASD,EAAY,4BAA6B,GAAM,SAAUG,GAAW,CAAE,CAAC,CACjR,CAFwBC,EAAAL,GAAA,kBCDxB,SAASM,GAAa,CAAE,SAAAC,EAAU,KAAAC,CAAK,EAAG,CACtC,OAAQC,EAAK,SAAU,CAAE,UAAW,wEAAyE,KAAM,SAAU,MAAOD,EAAK,oBAAoB,EAAG,aAAcA,EAAK,oBAAoB,EAAG,QAASD,EAAU,4BAA6B,GAAM,SAAUE,EAAK,MAAO,CAAE,MAAO,KAAM,OAAQ,IAAK,QAAS,WAAY,MAAO,6BAA8B,cAAe,OAAQ,UAAW,QAAS,UAAW,cAAe,SAAUA,EAAK,OAAQ,CAAE,KAAM,OAAQ,SAAU,UAAW,EAAG,wDAAyD,CAAC,CAAE,CAAC,CAAE,CAAC,CACpjB,CAFSC,EAAAJ,GAAA,gBAGT,IAAOK,GAAQL,GCHA,SAARM,GAAmC,CAAE,gBAAAC,EAAiB,aAAAC,EAAc,oBAAAC,CAAqB,EAAG,CAC/F,OAAQC,EAAK,MAAO,CAAE,UAAW,0BAA2B,SAAUA,EAAK,SAAU,CAAE,UAAW,8CAA+C,SAAUC,EAACC,GAAU,CAC1JH,EAAoBG,EAAM,OAAO,KAAK,CAC1C,EAFmJ,YAEhJ,SAAUJ,EAAa,IAAKK,GAAiBH,EAAK,SAAU,CAAE,MAAOG,EAAY,SAAU,SAAUA,EAAY,WAAaN,EAAiB,SAAUM,EAAY,KAAM,EAAGA,EAAY,QAAQ,CAAE,CAAE,CAAC,CAAE,CAAC,CACzN,CAJwBF,EAAAL,GAAA,qBCOxB,SAASQ,GAAgBC,EAAOC,EAAM,CAClC,OAAOD,EAAM,SAASC,CAAI,CAC9B,CAFSC,EAAAH,GAAA,mBAGT,IAAMI,GAAN,cAA2BC,EAAU,CAXrC,MAWqC,CAAAF,EAAA,qBACjC,aACA,KACA,mBAAoB,CAChB,GAAM,CAAE,QAAAG,CAAQ,EAAI,KAAK,MACzBA,EAAQ,CACZ,CACA,sBAAuB,CACnB,GAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,MACxBA,EAAO,CACX,CACA,QAAS,CACL,GAAM,CAAE,IAAAC,EAAK,cAAAC,EAAe,iBAAAC,EAAkB,UAAAC,EAAW,MAAAV,EAAO,kBAAAW,EAAmB,aAAAC,EAAc,wBAAAC,EAAyB,oBAAAC,EAAqB,SAAAC,EAAU,KAAAC,EAAM,OAAAC,EAAQ,WAAAC,EAAY,iBAAAC,EAAkB,gBAAAC,EAAiB,uBAAAC,EAAwB,uBAAAC,CAAwB,EAAI,KAAK,MACzQC,EAAmB,CAAC,CAACf,EACrBgB,EAAsB,CAAC,CAACf,EACxBgB,EAAmBF,GAAoBC,EACvCE,EAAyB,CAACD,GAC5Bd,IACCZ,GAAgBC,EAAO,YAAY,GAChCD,GAAgBC,EAAO,YAAY,GACnCD,GAAgBC,EAAO,aAAa,GACtC2B,EAA2B,CAACF,GAAoB1B,GAAgBC,EAAO,SAAS,EAChF4B,EAA4BjB,GAAqBG,GAAuB,CAACS,EACzEM,EAAgChB,GAA2BD,GAAgBA,EAAa,OAAS,EACjGkB,EAAa,CACf,YAAa,EACjB,EACA,OAAItB,GACAsB,EAAW,MAAQ,GACnBA,EAAW,SAAW,GACtBA,EAAW,IAAMtB,EAEb,KAAK,eACL,KAAK,aAAa,UAAY,QAIlCsB,EAAW,MAAQ,GACnBA,EAAW,SAAW,GACtBA,EAAW,UAAYvB,GAEnBwB,EAAM,MAAO,CAAE,UAAW,6BAA8B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,6BAA8B,SAAUtB,GAAoB,CAACC,GAAa,CAACF,EAAiBuB,EAAK,MAAO,CAAE,UAAW,6BAA8B,SAAUA,EAAK,MAAO,CAAE,IAAKtB,EAAkB,UAAW,oBAAqB,IAAK,kBAAmB,CAAC,CAAE,CAAC,EAAMsB,EAAK,QAAS,CAAE,IAAK7B,EAAC8B,IAAiB,CAC3X,KAAK,aAAeA,EACxB,EAF6W,OAE1W,UAAW,sBAAsBf,EAAS,8BAAgC,EAAE,GAAI,GAAGa,CAAW,CAAC,CAAG,CAAC,EAAGC,EAAM,MAAO,CAAE,UAAW,qBAAsB,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,mCAAoC,SAAUF,EACjOI,GAAkB,KAAK,KAAK,EAC5B,IAAK,CAAC,EAAGF,EAAM,MAAO,CAAE,UAAW,8BAA+B,SAAU,CAACJ,GAA6BI,EAAKG,GAAgB,CAAE,WAAYhB,EAAY,KAAMF,CAAK,CAAC,EAAIU,GAA2BK,EAAKI,GAAc,CAAE,UAAWzB,EAAW,iBAAkBS,EAAkB,gBAAiBC,EAAiB,KAAMJ,CAAK,CAAC,GAAKO,GAAoBC,IAAyBO,EAAKK,GAAc,CAAE,SAAUrB,EAAU,KAAMC,CAAK,CAAC,GAAKO,GAAoBC,IAAyBO,EAAKM,GAAe,CAAE,UAAWhB,EAAwB,KAAML,CAAK,CAAC,CAAE,CAAE,CAAC,EAAGe,EAAK,MAAO,CAAE,UAAW,8BAA+B,SAAUH,GAA8BG,EAAKO,GAAiB,CAAE,uBAAwBhB,CAAuB,CAAC,CAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CACzvB,CACJ,EACOiB,GAAQpC,GC3Df,IAAOqC,GAAQ,CACX,QAAS,CACL,iBAAkB,SAClB,cAAe,uBACf,oBAAqB,4EACrB,wBAAyB,uEACzB,mBAAoB,uBACpB,oBAAqB,wBAErB,MAAO,SAGP,YAAa,iBAGb,eAAgB,wBAGhB,cAAe,uBAGf,gBAAiB,uCAEjB,iBAAkB,qCAElB,uBAAwB,uGAC5B,CACJ,EC1Be,SAARC,GAAmC,CAAE,KAAAC,EAAM,KAAAC,EAAM,UAAAC,CAAW,EAAG,CAClE,OAAQC,EAAM,MAAO,CAAE,UAAW,yBAA0B,SAAU,CAACA,EAAK,MAAO,CAAE,UAAW,6BAA8B,SAAUH,EAAK,CAAE,CAAC,EAAGG,EAAK,MAAO,CAAE,UAAW,oBAAqB,SAAsBF,EAAZC,EAAiB,mBAA2B,eAAT,CAA0B,CAAC,EAAGC,EAAK,IAAK,CAAE,SACtQF,EADgRC,EAC3Q,yBACA,qBADwB,CACD,CAAC,CAAC,CAAE,CAAC,CACvD,CAJwBE,EAAAL,GAAA,qBCDT,SAARM,IAAyC,CAC5C,OAAQ,OAAO,eAAkB,YAC7B,CAAC,CAAC,cAAc,WAChB,OAAO,cAAc,UAAU,OAAU,UACjD,CAJwBC,EAAAD,GAAA,yBbkBxB,SAASE,GAAWC,EAAU,CAC1B,OAAIA,EAAS,CAAC,IAAM,IACTC,GAAUD,EAAS,MAAM,CAAC,CAAC,EAE/BA,CACX,CALSE,EAAAH,GAAA,cAST,SAASI,GAAgBC,EAAU,CAC/B,MAAO,iBAAiB,KAAKA,CAAQ,CACzC,CAFSF,EAAAC,GAAA,mBAMT,SAASE,GAAgBD,EAAU,CAC/B,MAAO,iBAAiB,KAAKA,CAAQ,CACzC,CAFSF,EAAAG,GAAA,mBAGT,SAASC,IAAkB,CAEvB,OAAO,UAAU,YACrB,CAHSJ,EAAAI,GAAA,mBAIT,SAASC,GAAgBC,EAAOC,EAAM,CAClC,OAAOD,EAAM,SAASC,CAAI,CAC9B,CAFSP,EAAAK,GAAA,mBAIF,IAAMG,GAAiB,CAC1B,iBAAkBR,EAAA,IAAM,QAAQ,QAAQ,EAAtB,oBAClB,UAAW,GACX,MAAO,CAAC,cAAe,aAAc,aAAc,SAAS,EAC5D,OAAQ,GACR,wBAAyB,GACzB,uBAAwB,KACxB,uBAAwB,KACxB,oBAAqB,GACrB,sBAAoB,aAAS,CAAE,OAAQ,EAAK,CAAC,CACjD,EAIqBS,GAArB,cAAoCC,EAAS,CA1D7C,MA0D6C,CAAAV,EAAA,eACzC,OAAO,QAAUW,GAAY,QAG7BC,GACA,aACA,kBACA,SACA,kBACA,KACA,aACA,OAAS,KACT,SAAW,KACX,gBAAkB,KAClB,qBACA,kBAAoB,GACpB,YAAYC,EAAMC,EAAM,CACpB,MAAMD,EAAM,CAAE,GAAGL,GAAgB,GAAGM,CAAK,CAAC,EAC1C,KAAK,aAAeV,GAAgB,EACpC,KAAK,kBAAoB,CAAC,CAAC,KAAK,aAChC,KAAK,SAAW,SAAS,SAAS,MAAM,QAAQ,EAAI,QAAU,OAC9D,KAAK,GAAK,KAAK,KAAK,IAAM,SAC1B,KAAK,KAAO,WACZ,KAAK,kBAAoB,KACzB,KAAK,KAAO,IAAOW,EAAK,MAAO,CAAE,cAAe,OAAQ,UAAW,QAAS,MAAO,KAAM,OAAQ,KAAM,QAAS,YAAa,SAAUA,EAAK,OAAQ,CAAE,EAAG,4cAA6c,KAAM,UAAW,SAAU,SAAU,CAAC,CAAE,CAAC,EAC/oB,KAAK,cAAgBC,GACrB,KAAK,SAAS,EACd,KAAK,MAAQ,KAAK,KAAK,kBAAkB,EACzC,KAAKJ,GAAgB,KAAK,KAAK,OAC/B,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EAEnC,KAAK,MAAQ,KAAK,MAAM,KAAK,IAAI,EACjC,KAAK,KAAO,KAAK,KAAK,KAAK,IAAI,EAC/B,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,MAAQ,KAAK,MAAM,KAAK,IAAI,EACjC,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,aAAe,GAChB,KAAK,KAAK,YACV,KAAK,KAAK,iBAAmB,KAAK,kBAEtC,KAAK,eAAe,CAChB,UAAW,GACX,YAAa,GACb,YAAa,KACb,uBAAwB,EACxB,aAAc,CAAC,EACf,gBAAiB,KACjB,iBAAkB,IACtB,CAAC,CACL,CACA,WAAY,CACR,GAAM,CAAE,cAAAK,EAAe,iBAAAC,EAAkB,YAAAC,EAAa,YAAAC,EAAa,YAAAC,CAAa,EAAI,KAAK,eAAe,EACxG,OAAIF,EACO,YACPF,GAAiB,MAAQC,GAAoB,KACtC,WACPE,EACO,QACPC,EACO,QACJ,MACX,CACA,WAAWC,EAAS,CAChB,MAAM,WAAW,CACb,GAAGA,EACH,iBAAkB,CAEd,GAAG,KAAK,KAAK,iBACb,GAAGA,GAAS,gBAChB,CACJ,CAAC,CACL,CACA,gBAAiB,CACb,OAAK,KAAK,aAGH,KAAK,aAAa,iBAAiB,EAAE,KAAMC,GACvCA,EAAQ,KAAMC,GAAWA,EAAO,OAAS,YAAY,CAC/D,EAJU,QAAQ,QAAQ,EAAK,CAKpC,CACA,aAAc,CACV,OAAO,KAAK,KAAK,MAAM,SAAW,GAAK,KAAK,KAAK,MAAM,CAAC,IAAM,YAClE,CACA,eAAeC,EAAW,KAAM,CAC5B,IAAMC,EAAe,KAAK,KAAK,MAAM,QAAQ,aAAa,IAAM,IAC5D,KAAK,KAAK,MAAM,QAAQ,YAAY,IAAM,GACxCC,EAAe,CAAC,KAAK,YAAY,IAClC,KAAK,KAAK,MAAM,QAAQ,aAAa,IAAM,IACxC,KAAK,KAAK,MAAM,QAAQ,YAAY,IAAM,IAC1C,KAAK,KAAK,MAAM,QAAQ,SAAS,IAAM,IACzCC,EAAmB,CACrB,GAAI,KAAK,KAAK,kBAAoB,CAAC,EACnC,GAAIH,GAAY,MAAQ,CAAE,SAAAA,CAAS,CACvC,EACA,MAAO,CACH,MAAOC,EACP,MAAOC,EAAeC,EAAmB,EAC7C,CACJ,CACA,MAAMC,EAAU,KAAM,CAClB,GAAI,CAAC,KAAK,kBACN,OAAO,QAAQ,OAAO,IAAI,MAAM,6BAA6B,CAAC,EAElE,KAAK,aAAe,GAChB,KAAK,KAAK,SACV,KAAKjB,GAAgB,IAEzB,IAAMkB,EAAc,KAAK,eAAeD,GAAS,QAAQ,EAEzD,KAAK,eAAe,EAAE,KAAME,IACxB,KAAK,eAAe,CAChB,UAAAA,CACJ,CAAC,EAEM,KAAK,aACP,aAAaD,CAAW,EACxB,KAAME,GAAW,CAClB,KAAK,OAASA,EACd,IAAIC,EAAkB,KAChBC,EAAS,KAAK,YAAY,EAC1BF,EAAO,eAAe,EACtBA,EAAO,eAAe,EACxB,CAACH,GAAW,CAACA,EAAQ,SACrBI,EAAkBC,EAAO,CAAC,EAAE,YAAY,EAAE,SAG1CA,EAAO,QAASC,GAAU,CAClBA,EAAM,YAAY,EAAE,WAAaN,EAAQ,WACzCI,EAAkBE,EAAM,YAAY,EAAE,SAE9C,CAAC,EAGL,KAAK,mBAAmB,EACxB,KAAK,eAAe,CAChB,gBAAAF,EACA,YAAa,EACjB,CAAC,CACL,CAAC,EACI,MAAOG,GAAQ,CAChB,KAAK,eAAe,CAChB,YAAa,GACb,YAAaA,CACjB,CAAC,EACD,KAAK,KAAK,KAAKA,EAAI,QAAS,OAAO,CACvC,CAAC,EACJ,CACL,CACA,yBAA0B,CACtB,IAAMP,EAAU,CAAC,EAIjB,GAAI,cAAc,gBAAiB,CAC/B,GAAM,CAAE,aAAAQ,CAAa,EAAI,KAAK,KAAK,KAC/BC,EAA0B,CAAC,EAC3B,KAAK,KAAK,uBACVA,EAA0B,CAAC,KAAK,KAAK,sBAAsB,EAEtDD,EAAa,mBAClBC,EAA0BD,EAAa,iBAClC,IAAIxC,EAAU,EACd,OAAOI,EAAe,GAE/B,IAAMsC,EAAuBvC,EAACwC,GAAkB,cAAc,gBAAgBA,CAAa,GACvFC,GAAqBD,CAAa,EADT,wBAEvBE,EAAsBJ,EAAwB,OAAOC,CAAoB,EAC3EG,EAAoB,OAAS,IAC7Bb,EAAQ,SAAWa,EAAoB,CAAC,EAEhD,CACA,OAAOb,CACX,CACA,gBAAiB,CAEb,KAAK,SAAW,IAAI,cAAc,KAAK,OAAQ,KAAK,wBAAwB,CAAC,EAC7E,KAAK,gBAAkB,CAAC,EACxB,IAAIc,EAA2B,GAC/B,KAAK,SAAS,iBAAiB,gBAAkBC,GAAU,CACvD,KAAK,gBAAgB,KAAKA,EAAM,IAAI,EACpC,GAAM,CAAE,aAAAP,CAAa,EAAI,KAAK,KAAK,KACnC,GAAI,KAAK,gBAAgB,OAAS,GAC9BA,EAAa,aAAe,MAC5B,CAACM,EAA0B,CAC3B,IAAME,EAAY,KAAK,gBAAgB,OAAO,CAACC,EAAKC,IAAUD,EAAMC,EAAM,KAAM,CAAC,EAI3EC,GAFoBH,EAAY,KAAK,gBAAgB,CAAC,EAAE,OACzD,KAAK,gBAAgB,OAAS,GACa,EAC1CI,EAAU,KAAK,IAAI,EAAGZ,EAAa,YAAcW,CAAoB,EACvEH,EAAYI,IACZN,EAA2B,GAC3B,KAAK,KAAK,KAAK,KAAK,KAAK,yBAAyB,EAAG,UAAW,GAAI,EACpE,KAAK,cAAc,EAE3B,CACJ,CAAC,EAGD,KAAK,SAAS,MAAM,GAAG,EACnB,KAAK,KAAK,sBAEV,KAAK,qBAAuB,YAAY,IAAM,CAC1C,IAAMO,EAAyB,KAAK,eAAe,EAAE,uBACrD,KAAK,eAAe,CAChB,uBAAwBA,EAAyB,CACrD,CAAC,CACL,EAAG,GAAI,GAEX,KAAK,eAAe,CAChB,YAAa,EACjB,CAAC,CACL,CACA,eAAgB,CAYZ,OAXgB,IAAI,QAASC,GAAY,CACrC,KAAK,SAAS,iBAAiB,OAAQ,IAAM,CACzCA,EAAQ,CACZ,CAAC,EACD,KAAK,SAAS,KAAK,EACf,KAAK,KAAK,sBAEV,cAAc,KAAK,oBAAoB,EACvC,KAAK,eAAe,CAAE,uBAAwB,CAAE,CAAC,EAEzD,CAAC,EAEI,KAAK,KACN,KAAK,eAAe,CAChB,YAAa,EACjB,CAAC,EACM,KAAK,SAAS,EACxB,EACI,KAAMC,GAAS,CAChB,GAAI,CACA,KAAK,kBAAoBA,EAEzB,KAAK,eAAe,CAChB,cAAe,IAAI,gBAAgBA,EAAK,IAAI,CAChD,CAAC,EACD,KAAKxC,GAAgB,EACzB,OACOwB,EAAK,CAEHA,EAAI,eACL,KAAK,KAAK,IAAIA,CAAG,CAEzB,CACJ,CAAC,EACI,KAAK,IAAM,CACZ,KAAK,gBAAkB,KACvB,KAAK,SAAW,IACpB,EAAIiB,GAAU,CACV,WAAK,gBAAkB,KACvB,KAAK,SAAW,KACVA,CACV,CAAC,CACL,CACA,sBAAuB,CACnB,GAAM,CAAE,cAAApC,EAAe,iBAAAC,CAAiB,EAAI,KAAK,eAAe,EAC5DD,GACA,IAAI,gBAAgBA,CAAa,EAEjCC,GACA,IAAI,gBAAgBA,CAAgB,EAExC,KAAK,eAAe,CAChB,cAAe,KACf,iBAAkB,IACtB,CAAC,EACG,KAAK,KAAK,SACV,KAAKN,GAAgB,IAEzB,KAAK,kBAAoB,IAC7B,CACA,QAAS,CACL,GAAI,CACI,KAAK,mBACL,KAAK,KAAK,QAAQ,KAAK,iBAAiB,CAEhD,OACOwB,EAAK,CAEHA,EAAI,eACL,KAAK,KAAK,IAAIA,EAAK,OAAO,CAElC,CACJ,CACA,MAAM,MAAO,CACT,GAAI,KAAK,OAAQ,CACb,IAAMkB,EAAc,KAAK,OAAO,eAAe,EACzCC,EAAc,KAAK,OAAO,eAAe,EAC/CD,EAAY,OAAOC,CAAW,EAAE,QAASpB,GAAUA,EAAM,KAAK,CAAC,CACnE,CACI,KAAK,UACL,MAAM,IAAI,QAASgB,GAAY,CAC3B,KAAK,SAAS,iBAAiB,OAAQA,EAAS,CAAE,KAAM,EAAK,CAAC,EAC9D,KAAK,SAAS,KAAK,EACf,KAAK,KAAK,qBACV,cAAc,KAAK,oBAAoB,CAE/C,CAAC,EAEL,KAAK,gBAAkB,KACvB,KAAK,SAAW,KAChB,KAAK,aAAe,GACpB,KAAK,OAAS,KACd,KAAK,eAAe,CAChB,cAAe,KACf,iBAAkB,KAClB,YAAa,GACb,uBAAwB,CAC5B,CAAC,CACL,CACA,iBAAkB,CACd,OAAO,KAAK,GAAG,cAAc,oBAAoB,CACrD,CACA,kBAAmB,CACf,OAAO,IAAI,QAAQ,CAACA,EAASK,IAAW,CACpC,IAAIC,EAAQ,KAAK,KAAK,UAChBC,EAAY,YAAY,IAAM,CAChC,GAAI,CAAC,KAAK,aACN,qBAAcA,CAAS,EACvB,KAAK,kBAAoB,GAClBF,EAAO,IAAI,MAAM,sBAAsB,CAAC,EAE/CC,GACA,KAAK,KAAK,KAAK,GAAGA,CAAK,MAAO,UAAW,GAAG,EAC5CA,MAGA,cAAcC,CAAS,EACvB,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,EAAG,UAAW,IAAI,EAClD,WAAW,IAAMP,EAAQ,EAAG,IAAI,EAExC,EAAG,GAAI,CACX,CAAC,CACL,CACA,MAAM,cAAe,CACjB,GAAI,MAAK,kBAET,MAAK,kBAAoB,GACzB,GAAI,CACA,MAAM,KAAK,KAAK,iBAAiB,CACrC,OACOf,EAAK,CACR,IAAMuB,EAAU,OAAOvB,GAAQ,SAAWA,EAAI,QAAUA,EACxD,WAAK,KAAK,KAAKuB,EAAS,QAAS,GAAI,EAC/B,IAAI,MAAM,qBAAqBA,CAAO,EAAE,CAClD,CACA,GAAI,CACA,IAAMP,EAAO,MAAM,KAAK,SAAS,EAEjC,GADA,KAAK,kBAAoBA,EACrBA,EAAK,MAAQ,KACb,MAAM,IAAI,MAAM,oBAAoB,EAExC,IAAMQ,EAAsB,IAAI,gBAAgBR,EAAK,IAAI,EACzD,KAAK,eAAe,CAAE,iBAAkBQ,CAAoB,CAAC,EAC7D,KAAK,kBAAoB,EAC7B,OACOP,EAAO,CAEV,KAAK,kBAAoB,GACpBA,EAAM,eACP,KAAK,KAAK,IAAIA,CAAK,CAE3B,EACJ,CACA,MAAM,UAAW,CACb,IAAMQ,EAAQ,KAAK,gBAAgB,EACnC,GAAI,CAACA,EACD,OAAO,QAAQ,OAAO,IAAI,MAAM,oEAAoE,CAAC,EAEzG,IAAMC,EAAQD,EAAM,WACdE,EAASF,EAAM,YACfG,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,MAAQF,EACfE,EAAO,OAASD,EACJC,EAAO,WAAW,IAAI,EAC9B,UAAUH,EAAO,EAAG,CAAC,EACzB,GAAM,CAAE,aAAAxB,CAAa,EAAI,KAAK,KAAK,KAC/B4B,EAA0B,CAAC,EAC3B,KAAK,KAAK,uBACVA,EAA0B,CAAC,KAAK,KAAK,sBAAsB,EAEtD5B,EAAa,mBAClB4B,EAA0B5B,EAAa,iBAClC,IAAIxC,EAAU,EACd,OAAOM,EAAe,GAE/B,IAAMD,EAAW+D,EAAwB,CAAC,GAAK,aACzCC,EAAMzB,GAAqBvC,CAAQ,GAAK,MACxCiE,EAAO,OAAO,KAAK,IAAI,CAAC,IAAID,CAAG,GACrC,OAAOE,GAAaJ,EAAQ9D,CAAQ,EAAE,KAAMmE,IACjC,CACH,OAAQ,KAAK,GACb,KAAAF,EACA,KAAM,IAAI,KAAK,CAACE,CAAI,EAAG,CAAE,KAAMnE,CAAS,CAAC,EACzC,KAAMA,CACV,EACH,CACL,CACA,UAAW,CAIP,IAAMA,EAAW,KAAK,gBAAgB,KAAMmE,GAASA,EAAK,MAAM,OAAS,CAAC,EAAE,KACtEC,EAAgB7B,GAAqBvC,CAAQ,EACnD,GAAI,CAACoE,EACD,OAAO,QAAQ,OAAO,IAAI,MAAM,yDAAyDpE,CAAQ,GAAG,CAAC,EAEzG,IAAMiE,EAAO,UAAU,KAAK,IAAI,CAAC,IAAIG,CAAa,GAC5CD,EAAO,IAAI,KAAK,KAAK,gBAAiB,CAAE,KAAMnE,CAAS,CAAC,EACxDkD,EAAO,CACT,OAAQ,KAAK,GACb,KAAAe,EACA,KAAM,IAAI,KAAK,CAACE,CAAI,EAAG,CAAE,KAAMnE,CAAS,CAAC,EACzC,KAAMA,CACV,EACA,OAAO,QAAQ,QAAQkD,CAAI,CAC/B,CACA,OAAQ,CACC,KAAK,KAAK,WAEf,WAAW,IAAM,CACb,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,EAAG,UAAW,IAAI,CACtD,EAAG,GAAI,CACX,CACA,kBAAkB3B,EAAU,CACxB,KAAK,KAAK,EACV,KAAK,MAAM,CAAE,SAAAA,CAAS,CAAC,CAC3B,CACA,oBAAqB,CACjB,KAAK,aAAa,iBAAiB,EAAE,KAAMF,GAAY,CACnD,KAAK,eAAe,CAChB,aAAcA,EAAQ,OAAQC,GAAWA,EAAO,OAAS,YAAY,CACzE,CAAC,CACL,CAAC,CACL,CACA,QAAS,CACA,KAAK,cACN,KAAK,MAAM,EAEf,IAAM+C,EAAc,KAAK,eAAe,EACxC,MAAI,CAACA,EAAY,aAAe,CAACA,EAAY,UACjCxD,EAAKyD,GAAmB,CAAE,KAAMC,GAAY,KAAM,KAAK,KAAM,UAAWF,EAAY,SAAU,CAAC,EAEnGxD,EAAK2D,GAAc,CAAE,GAAGH,EAAa,oBAAqB,KAAK,kBAAmB,WAAY,KAAK,aAAc,iBAAkB,KAAK,eAAgB,gBAAiB,KAAK,cAAe,uBAAwB,KAAK,qBAAsB,SAAU,KAAK,OAAQ,QAAS,KAAK,MAAO,OAAQ,KAAK,KAAM,KAAM,KAAK,KAAM,MAAO,KAAK,KAAK,MAAO,oBAAqB,KAAK,KAAK,oBAAqB,wBAAyB,KAAK,KAAK,wBAAyB,kBAAmBI,GAAsB,EAAG,UAAWJ,EAAY,YAAa,OAAQ,KAAK3D,GAAe,IAAK,KAAK,MAAO,CAAC,CACllB,CACA,SAAU,CACN,GAAM,CAAE,mBAAAgE,EAAoB,MAAAtE,EAAO,iBAAAsB,CAAiB,EAAI,KAAK,KACvD,CAAE,OAAAiD,CAAO,EAAI,KAAK,KACxB,GAAID,GAAsBC,EAAQ,CAC9B,KAAK,gBAAgBA,CAAM,GAAG,WAAW,CACrC,4BAA6BxE,GAAgBC,EAAO,YAAY,GAC5DD,GAAgBC,EAAO,aAAa,EACxC,4BAA6BD,GAAgBC,EAAO,SAAS,EAC7D,uBAAwBsB,GAAkB,UAC9C,CAAC,EACD,MACJ,CACA,KAAK,eAAe,CAChB,YAAa,GACb,uBAAwB,CAC5B,CAAC,EACGiD,GACA,KAAK,MAAMA,EAAQ,IAAI,EAEvB,KAAK,eACL,KAAK,mBAAmB,EACxB,KAAK,aAAa,eAAiB,IAAM,CAErC,GADA,KAAK,mBAAmB,EACpB,KAAK,OAAQ,CACb,IAAIC,EAAgB,GACd,CAAE,aAAAC,EAAc,gBAAA9C,CAAgB,EAAI,KAAK,eAAe,EAC9D8C,EAAa,QAASC,GAAgB,CAC9B/C,IAAoB+C,EAAY,WAChCF,EAAgB,GAExB,CAAC,EACGA,IACA,KAAK,KAAK,EACV,KAAK,MAAM,EAEnB,CACJ,EAER,CACA,WAAY,CACR,KAAK,KAAK,EACV,KAAK,QAAQ,CACjB,CACA,WAAY,CACR,KAAK,KAAK,CACd,CACJ,Ec/iBA,IAAAG,GAAA,CACE,KAAQ,mBACR,YAAe,gHACf,QAAW,QACX,QAAW,MACX,KAAQ,SACR,YAAe,GACf,QAAW,CACT,MAAS,kCACT,UAAa,cACb,KAAQ,oCACR,WAAY,8BACd,EACA,SAAY,CACV,gBACA,MACA,aACA,iBACA,OACA,QACA,OACA,aACF,EACA,SAAY,kBACZ,KAAQ,CACN,IAAO,4CACT,EACA,WAAc,CACZ,KAAQ,MACR,IAAO,6CACT,EACA,MAAS,CACP,MACA,MACA,OACA,cACF,EACA,QAAW,CACT,IAAK,iBACL,iBAAkB,gBACpB,EACA,aAAgB,CACd,yBAA0B,cAC1B,cAAe,aACjB,EACA,gBAAmB,CACjB,aAAc,cACd,kBAAmB,cACnB,kBAAmB,SACnB,MAAS,UACT,IAAO,UACP,KAAQ,UACR,WAAc,SACd,WAAc,SACd,OAAU,QACZ,EACA,iBAAoB,CAClB,aAAc,aAChB,CACF,EC3DA,IAAOC,GAAQ,CACX,QAAS,CAEL,cAAe,oFACnB,CACJ,ECDA,SAASC,GAAmBC,EAAKC,EAAK,CAClC,IAAIC,EAAQD,EAWZ,OATKC,IACDA,EAAQ,IAAI,MAAM,cAAc,GAEhC,OAAOA,GAAU,WACjBA,EAAQ,IAAI,MAAMA,CAAK,GAErBA,aAAiB,QACnBA,EAAQ,OAAO,OAAO,IAAI,MAAM,cAAc,EAAG,CAAE,KAAMA,CAAM,CAAC,GAEhEC,GAAeH,CAAG,GAClBE,EAAQ,IAAIE,GAAaF,EAAOF,CAAG,EAC5BE,IAIXA,EAAM,QAAUF,EACTE,EACX,CApBSG,EAAAN,GAAA,sBA0BT,SAASO,GAAcC,EAAM,CAEzB,OAD4BA,EAAK,KAAK,MAAM,EAAGA,EAAK,KAAK,KAAMA,EAAK,KAAK,IAAI,CAEjF,CAHSF,EAAAC,GAAA,iBAIT,IAAME,GAAiB,CACnB,SAAU,GACV,UAAW,OACX,OAAQ,OACR,kBAAmB,GACnB,OAAQ,GACR,QAAS,CAAC,EACV,QAAS,GAAK,IACd,MAAO,EACP,gBAAiB,GACjB,aAAc,EAClB,EACqBC,GAArB,cAAuCC,EAAW,CA9ClD,MA8CkD,CAAAL,EAAA,kBAC9C,OAAO,QAAUM,GAAY,QAC7BC,GACAC,GACA,eACA,YAAYC,EAAMC,EAAM,CAWpB,GAVA,MAAMD,EAAM,CACR,GAAGN,GACH,UAAWO,EAAK,OAAS,UAAY,OACrC,GAAGA,CACP,CAAC,EACD,KAAK,KAAO,WACZ,KAAK,GAAK,KAAK,KAAK,IAAM,YAC1B,KAAK,cAAgBC,GACrB,KAAK,SAAS,EACd,KAAKH,GAAS,IAAII,GAAU,CAAE,YAAa,KAAK,KAAK,KAAM,CAAC,EACxD,KAAK,KAAK,QAAU,CAAC,KAAK,KAAK,SAC/B,MAAM,IAAI,MAAM,6DAA6D,EAEjF,GAAI,KAAK,KAAK,QAAU,OAAO,KAAK,KAAK,SAAY,WACjD,MAAM,IAAI,MAAM,6EAA6E,EAEjG,GAAIF,GAAM,oBAAsB,QAAa,eAAgB,KAAK,KAC9D,MAAM,IAAI,MAAM,kEAAkE,EAEtF,KAAK,eAAiB,OAAO,OAAO,IAAI,EAMxC,KAAKH,GAAeM,GACT,MAAOC,EAAKC,IAAY,CAC3B,GAAI,CACA,IAAMC,EAAM,MAAMC,GAAQH,EAAK,CAC3B,GAAGC,EACH,gBAAiBf,EAAA,CAACL,EAAKuB,IAAe,KAAK,KAAK,kBAAkBvB,EAAKuB,EAAYL,CAAK,EAAvE,mBACjB,YAAa,KAAK,KAAK,YACvB,gBAAiB,KAAK,KAAK,gBAC3B,UAAWb,EAACmB,GAAY,CACpB,IAAMC,EAAU,KAAK,KAAKD,EAAU,GAAI,EAClCtB,EAAQ,IAAI,MAAM,KAAK,KAAK,gBAAiB,CAAE,QAAAuB,CAAQ,CAAC,CAAC,EAC/D,KAAK,KAAK,KAAK,iBAAkBvB,EAAOgB,CAAK,CACjD,EAJW,aAKX,iBAAkBb,EAACqB,GAAU,CACzB,GAAIA,EAAM,iBACN,OAAW,CAAE,GAAAC,CAAG,IAAKT,EAAO,CACxB,IAAMX,EAAO,KAAK,KAAK,QAAQoB,CAAE,EAC7BpB,GAAQ,MACR,KAAK,KAAK,KAAK,kBAAmBA,EAAM,CACpC,cAAeA,EAAK,SAAS,eAAiB,EAC9C,cAAgBmB,EAAM,OAASA,EAAM,MAASnB,EAAK,KACnD,WAAYA,EAAK,IACrB,CAAC,CAET,CAER,EAbkB,mBActB,CAAC,EACGqB,EAAO,MAAM,KAAK,KAAK,kBAAkBP,CAAG,EAChD,GAAIA,EAAI,eAAiB,OACrBO,IAASP,EAAI,aAGb,IAAI,CACAO,IAAS,KAAK,MAAMP,EAAI,YAAY,CACxC,OACOQ,EAAO,CACV,MAAM,IAAI,MAAM,wJAAyJ,CAAE,MAAAA,CAAM,CAAC,CACtL,CAEJ,IAAMC,EAAY,OAAOF,GAAM,KAAQ,SAAWA,EAAK,IAAM,OAC7D,OAAW,CAAE,GAAAD,CAAG,IAAKT,EACjB,KAAK,KAAK,KAAK,iBAAkB,KAAK,KAAK,QAAQS,CAAE,EAAG,CACpD,OAAQN,EAAI,OACZ,KAAAO,EACA,UAAAE,CACJ,CAAC,EAEL,OAAOT,CACX,OACOnB,EAAO,CACV,GAAIA,EAAM,OAAS,aACf,OAEJ,IAAM6B,EAAU7B,EAAM,QACtB,QAAWK,KAAQW,EACf,KAAK,KAAK,KAAK,eAAgB,KAAK,KAAK,QAAQX,EAAK,EAAE,EAAGR,GAAmBgC,EAAS7B,CAAK,EAAG6B,CAAO,EAE1G,MAAM7B,CACV,CACJ,CAER,CACA,WAAWK,EAAM,CACb,IAAMyB,EAAY,KAAK,KAAK,SAAS,EAAE,UACjC,CAAE,QAAAC,CAAQ,EAAI,KAAK,KACnBlB,EAAO,CACT,GAAG,KAAK,KACR,GAAIiB,GAAa,CAAC,EAClB,GAAIzB,EAAK,WAAa,CAAC,EACvB,QAAS,CAAC,CACd,EAOA,OAAI,OAAO0B,GAAY,WACnBlB,EAAK,QAAUkB,EAAQ1B,CAAI,EAG3B,OAAO,OAAOQ,EAAK,QAAS,KAAK,KAAK,OAAO,EAE7CiB,GACA,OAAO,OAAOjB,EAAK,QAASiB,EAAU,OAAO,EAE7CzB,EAAK,WACL,OAAO,OAAOQ,EAAK,QAASR,EAAK,UAAU,OAAO,EAE/CQ,CACX,CACA,YAAYmB,EAAUC,EAAMpB,EAAM,CACJqB,GAAqBrB,EAAK,kBAAmBoB,CAAI,EACzD,QAASE,GAAS,CAChC,IAAMC,EAAQH,EAAKE,CAAI,EACnB,MAAM,QAAQC,CAAK,EAGnBA,EAAM,QAASC,GAAYL,EAAS,OAAOG,EAAME,CAAO,CAAC,EAGzDL,EAAS,OAAOG,EAAMC,CAAK,CAEnC,CAAC,CACL,CACA,qBAAqB/B,EAAMQ,EAAM,CAC7B,IAAMyB,EAAW,IAAI,SACrB,KAAK,YAAYA,EAAUjC,EAAK,KAAMQ,CAAI,EAC1C,IAAM0B,EAAsBnC,GAAcC,CAAI,EAC9C,OAAIA,EAAK,KACLiC,EAAS,OAAOzB,EAAK,UAAW0B,EAAqBlC,EAAK,KAAK,IAAI,EAGnEiC,EAAS,OAAOzB,EAAK,UAAW0B,CAAmB,EAEhDD,CACX,CACA,oBAAoBtB,EAAOH,EAAM,CAC7B,IAAMyB,EAAW,IAAI,SACf,CAAE,KAAAL,CAAK,EAAI,KAAK,KAAK,SAAS,EACpC,YAAK,YAAYK,EAAUL,EAAMpB,CAAI,EACrCG,EAAM,QAASX,GAAS,CACpB,IAAMa,EAAU,KAAK,WAAWb,CAAI,EAC9BkC,EAAsBnC,GAAcC,CAAI,EAC1CA,EAAK,KACLiC,EAAS,OAAOpB,EAAQ,UAAWqB,EAAqBlC,EAAK,IAAI,EAGjEiC,EAAS,OAAOpB,EAAQ,UAAWqB,CAAmB,CAE9D,CAAC,EACMD,CACX,CACA,KAAME,GAAiBnC,EAAM,CACzB,IAAMoC,EAAS,IAAIC,GAAa,KAAK,IAAI,EACnCC,EAAa,IAAI,gBACvBF,EAAO,aAAapC,EAAK,GAAI,IAAMsC,EAAW,MAAM,CAAC,EACrDF,EAAO,YAAYpC,EAAK,GAAI,IAAMsC,EAAW,MAAM,CAAC,EACpD,GAAI,CACA,MAAM,KAAKhC,GAAO,IAAI,MAAOiC,GAAW,CACpC,IAAM/B,EAAO,KAAK,WAAWR,CAAI,EAC3BwC,EAAQ,KAAKnC,GAAY,CAACL,CAAI,CAAC,EAC/BqB,EAAOb,EAAK,SACZ,KAAK,qBAAqBR,EAAMQ,CAAI,EACpCR,EAAK,KACLyC,EAAW,OAAOjC,EAAK,UAAa,SACpCA,EAAK,SACL,MAAMA,EAAK,SAASR,CAAI,EAC9B,OAAOwC,EAAMC,EAAU,CACnB,GAAGjC,EACH,KAAAa,EACA,OAAQ,YAAY,IAAI,CAACkB,EAAQD,EAAW,MAAM,CAAC,CACvD,CAAC,CACL,CAAC,CACL,OACO3C,EAAO,CACV,GAAIA,EAAM,OAAS,aACf,OAEJ,MAAMA,CACV,QACA,CACIyC,EAAO,OAAO,CAClB,CACJ,CACA,KAAMM,GAAc/B,EAAO,CACvB,IAAM2B,EAAa,IAAI,gBACvB,SAASK,GAAQ,CACbL,EAAW,MAAM,CACrB,CAFSxC,EAAA6C,EAAA,SAKT,KAAK,KAAK,KAAK,aAAcA,CAAK,EAClC,GAAI,CACA,MAAM,KAAKrC,GAAO,IAAI,MAAOiC,GAAW,CACpC,IAAMK,EAAgB,KAAK,KAAK,SAAS,EAAE,WAAa,CAAC,EACnDJ,EAAQ,KAAKnC,GAAYM,CAAK,EAC9BU,EAAO,KAAK,oBAAoBV,EAAO,CACzC,GAAG,KAAK,KACR,GAAGiC,CACP,CAAC,EACKH,EAAW,OAAO,KAAK,KAAK,UAAa,SACzC,KAAK,KAAK,SACV,MAAM,KAAK,KAAK,SAAS9B,CAAK,EACpC,OAAO6B,EAAMC,EAAU,CAEnB,GAAG,KAAK,KACR,KAAApB,EACA,OAAQ,YAAY,IAAI,CAACkB,EAAQD,EAAW,MAAM,CAAC,CACvD,CAAC,CACL,CAAC,CACL,OACO3C,EAAO,CACV,GAAIA,EAAM,OAAS,aACf,OAEJ,MAAMA,CACV,QACA,CACI,KAAK,KAAK,IAAI,aAAcgD,CAAK,CACrC,CACJ,CACAE,GAAwB7C,EAAM,CAC1B,IAAMQ,EAAO,KAAK,WAAWR,CAAI,EAC3B8C,EAAoBjB,GAAqBrB,EAAK,kBAAmBR,EAAK,IAAI,EAChF,MAAO,CACH,GAAGA,EAAK,QAAQ,KAChB,SAAU,YACV,SAAUQ,EAAK,SACf,KAAMR,EAAK,KAAK,KAChB,UAAWQ,EAAK,UAChB,SAAU,OAAO,YAAYsC,EAAkB,IAAKC,GAAS,CAACA,EAAM/C,EAAK,KAAK+C,CAAI,CAAC,CAAC,CAAC,EACrF,WAAYvC,EAAK,OACjB,YAAaA,EAAK,SAClB,QAASA,EAAK,OAClB,CACJ,CACA,KAAMwC,GAAarC,EAAO,CACtB,MAAM,QAAQ,WAAWA,EAAM,IAAKX,GAAS,CACzC,GAAIA,EAAK,SAAU,CACf,IAAMiD,EAAWnD,EAAA,IAAM,KAAKQ,GAAX,YACXgC,EAAa,IAAI,gBACjBY,EAAiBpD,EAACqD,GAAgB,CAChCA,EAAY,KAAOnD,EAAK,IACxBsC,EAAW,MAAM,CACzB,EAHuB,kBAIvB,YAAK,KAAK,GAAG,eAAgBY,CAAc,EACpC,KAAK,KACP,wBAAwBlD,CAAI,EAC5B,iBAAiBA,EAAM,KAAK6C,GAAwB7C,CAAI,EAAG,CAC5D,OAAQsC,EAAW,OACnB,SAAAW,CACJ,CAAC,EACI,QAAQ,IAAM,CACf,KAAK,KAAK,IAAI,eAAgBC,CAAc,CAChD,CAAC,CACL,CACA,OAAO,KAAKf,GAAiBnC,CAAI,CACrC,CAAC,CAAC,CACN,CACAoD,GAAgBtD,EAAA,MAAOuD,GAAY,CAC/B,GAAIA,EAAQ,SAAW,EAAG,CACtB,KAAK,KAAK,IAAI,iCAAiC,EAC/C,MACJ,CAEI,KAAK,KAAK,QAAU,GACpB,KAAK,KAAK,IAAI,mPAAoP,SAAS,EAE/Q,KAAK,KAAK,IAAI,0BAA0B,EACxC,IAAM1C,EAAQ,KAAK,KAAK,cAAc0C,CAAO,EACvCC,EAAgBC,GAAoB5C,CAAK,EACzC6C,EAAcC,GAA+BH,CAAa,EAEhE,GADA,KAAK,KAAK,KAAK,eAAgBE,CAAW,EACtC,KAAK,KAAK,OAAQ,CAGlB,GADyBF,EAAc,KAAMtD,GAASA,EAAK,QAAQ,EAE/D,MAAM,IAAI,MAAM,sEAAiE,EAErF,GAAI,OAAO,KAAK,KAAK,SAAY,WAC7B,MAAM,IAAI,UAAU,uEAAuE,EAE/F,MAAM,KAAK0C,GAAcY,CAAa,CAC1C,MAEI,MAAM,KAAKN,GAAaM,CAAa,CAE7C,EA5BgB,iBA6BhB,SAAU,CACN,GAAI,KAAK,KAAK,OAAQ,CAClB,GAAM,CAAE,aAAAI,CAAa,EAAI,KAAK,KAAK,SAAS,EAC5C,KAAK,KAAK,SAAS,CACf,aAAc,CACV,GAAGA,EACH,uBAAwB,EAC5B,CACJ,CAAC,CACL,CACA,KAAK,KAAK,YAAY,KAAKN,EAAa,CAC5C,CACA,WAAY,CACR,GAAI,KAAK,KAAK,OAAQ,CAClB,GAAM,CAAE,aAAAM,CAAa,EAAI,KAAK,KAAK,SAAS,EAC5C,KAAK,KAAK,SAAS,CACf,aAAc,CACV,GAAGA,EACH,uBAAwB,EAC5B,CACJ,CAAC,CACL,CACA,KAAK,KAAK,eAAe,KAAKN,EAAa,CAC/C,CACJ,EC5WO,SAASO,IAAO,CACrB,MAAM,IAAI,MAAM,+BAA+B,CACjD,CAFgBC,EAAAD,GAAA,QAST,IAAME,GAAQ,CAAE,aAAAC,EAAa,EAqCvBC,GAAU,CAAC",
  "names": ["module", "__name", "num", "neg", "units", "exponent", "unit", "require_wildcard", "__commonJSMin", "exports", "module", "WildcardMatcher", "text", "separator", "__name", "input", "matches", "parts", "ii", "partsCount", "testParts", "key", "test", "matcher", "require_mime_match", "__commonJSMin", "exports", "module", "wildcard", "reMimePartSplit", "target", "pattern", "test", "result", "__name", "require_isObject", "__commonJSMin", "exports", "module", "isObject", "value", "type", "__name", "require_freeGlobal", "__commonJSMin", "exports", "module", "freeGlobal", "require_root", "__commonJSMin", "exports", "module", "freeGlobal", "freeSelf", "root", "require_now", "__commonJSMin", "exports", "module", "root", "now", "__name", "require_trimmedEndIndex", "__commonJSMin", "exports", "module", "reWhitespace", "trimmedEndIndex", "string", "index", "__name", "require_baseTrim", "__commonJSMin", "exports", "module", "trimmedEndIndex", "reTrimStart", "baseTrim", "string", "__name", "require_Symbol", "__commonJSMin", "exports", "module", "root", "Symbol", "require_getRawTag", "__commonJSMin", "exports", "module", "Symbol", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "__name", "require_objectToString", "__commonJSMin", "exports", "module", "objectProto", "nativeObjectToString", "objectToString", "value", "__name", "require_baseGetTag", "__commonJSMin", "exports", "module", "Symbol", "getRawTag", "objectToString", "nullTag", "undefinedTag", "symToStringTag", "baseGetTag", "value", "__name", "require_isObjectLike", "__commonJSMin", "exports", "module", "isObjectLike", "value", "__name", "require_isSymbol", "__commonJSMin", "exports", "module", "baseGetTag", "isObjectLike", "symbolTag", "isSymbol", "value", "__name", "require_toNumber", "__commonJSMin", "exports", "module", "baseTrim", "isObject", "isSymbol", "NAN", "reIsBadHex", "reIsBinary", "reIsOctal", "freeParseInt", "toNumber", "value", "other", "isBinary", "__name", "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", "__name", "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", "__name", "require_namespace_emitter", "__commonJSMin", "exports", "module", "__name", "emitter", "_fns", "event", "arg1", "arg2", "arg3", "arg4", "arg5", "arg6", "toEmit", "getListeners", "emitAll", "fn", "one", "keep", "fns", "i", "l", "e", "out", "idx", "args", "keys", "key", "require_retry_operation", "__commonJSMin", "exports", "module", "RetryOperation", "timeouts", "options", "__name", "err", "currentTime", "timeout", "self", "fn", "timeoutOps", "counts", "mainError", "mainErrorCount", "i", "error", "message", "count", "require_retry", "__commonJSMin", "exports", "RetryOperation", "options", "timeouts", "opts", "key", "i", "a", "b", "attempt", "random", "timeout", "obj", "methods", "method", "original", "__name", "op", "args", "callback", "err", "require_retry", "__commonJSMin", "exports", "module", "require_classnames", "__commonJSMin", "exports", "module", "hasOwn", "classNames", "classes", "i", "arg", "appendClass", "parseValue", "__name", "key", "value", "newClass", "require_eventemitter3", "__commonJSMin", "exports", "module", "has", "prefix", "Events", "__name", "EE", "fn", "context", "once", "addListener", "emitter", "event", "listener", "evt", "clearEvent", "EventEmitter", "names", "events", "name", "handlers", "i", "l", "ee", "listeners", "a1", "a2", "a3", "a4", "a5", "len", "args", "length", "j", "require_compressor", "__commonJSMin", "exports", "module", "global", "factory", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "__name", "_objectSpread2", "target", "i", "source", "key", "_defineProperty", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "obj", "value", "_extends", "_toPrimitive", "input", "hint", "prim", "res", "arg", "canvasToBlob", "window", "CanvasPrototype", "hasBlobConstructor", "hasArrayBufferViewSupport", "BlobBuilder", "dataURIPattern", "dataURLtoBlob", "dataURI", "matches", "mediaType", "isBase64", "dataString", "byteString", "arrayBuffer", "intArray", "bb", "callback", "type", "quality", "self", "toBlob", "isBlob", "DEFAULTS", "IS_BROWSER", "WINDOW", "isPositiveNumber", "slice", "toArray", "REGEXP_IMAGE_TYPE", "isImageType", "imageTypeToExtension", "extension", "fromCharCode", "getStringFromCharCode", "dataView", "start", "length", "str", "btoa", "arrayBufferToDataURL", "mimeType", "chunks", "chunkSize", "uint8", "resetAndGetOrientation", "orientation", "littleEndian", "app1Start", "ifdStart", "offset", "exifIDCode", "tiffOffset", "endianness", "firstIFDOffset", "_length", "_offset", "parseOrientation", "rotate", "scaleX", "scaleY", "REGEXP_DECIMALS", "normalizeDecimalNumber", "times", "getAdjustedSizes", "_ref", "aspectRatio", "height", "width", "isValidWidth", "isValidHeight", "adjustedWidth", "getExif", "array", "segments", "next", "end", "segment", "exifArray", "current", "insertExif", "app0Length", "newArrayBuffer", "ArrayBuffer$1", "FileReader", "URL", "REGEXP_EXTENSION", "AnotherCompressor", "Compressor", "file", "options", "_this", "isJPEGImage", "checkOrientation", "retainExif", "reader", "result", "data", "_this2", "image", "_ref2", "_this3", "naturalWidth", "naturalHeight", "_ref2$rotate", "_ref2$scaleX", "_ref2$scaleY", "canvas", "context", "is90DegreesRotated", "resizable", "maxWidth", "maxHeight", "minWidth", "minHeight", "_ref3", "_ref4", "_ref5", "_getAdjustedSizes", "_getAdjustedSizes2", "_getAdjustedSizes3", "_getAdjustedSizes4", "_getAdjustedSizes4$wi", "_getAdjustedSizes4$he", "destX", "destY", "destWidth", "destHeight", "params", "srcX", "srcY", "srcWidth", "srcHeight", "_getAdjustedSizes5", "_ref6", "fillStyle", "blob", "done", "_ref7", "_ref8", "date", "err", "require_cropper", "__commonJSMin", "exports", "module", "global", "factory", "ownKeys", "e", "r", "t", "o", "__name", "_objectSpread2", "_defineProperty", "_toPrimitive", "i", "_toPropertyKey", "_typeof", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "descriptor", "_createClass", "protoProps", "staticProps", "obj", "key", "value", "_toConsumableArray", "arr", "_arrayWithoutHoles", "_iterableToArray", "_unsupportedIterableToArray", "_nonIterableSpread", "_arrayLikeToArray", "iter", "minLen", "n", "len", "arr2", "IS_BROWSER", "WINDOW", "IS_TOUCH_DEVICE", "HAS_POINTER_EVENT", "NAMESPACE", "ACTION_ALL", "ACTION_CROP", "ACTION_MOVE", "ACTION_ZOOM", "ACTION_EAST", "ACTION_WEST", "ACTION_SOUTH", "ACTION_NORTH", "ACTION_NORTH_EAST", "ACTION_NORTH_WEST", "ACTION_SOUTH_EAST", "ACTION_SOUTH_WEST", "CLASS_CROP", "CLASS_DISABLED", "CLASS_HIDDEN", "CLASS_HIDE", "CLASS_INVISIBLE", "CLASS_MODAL", "CLASS_MOVE", "DATA_ACTION", "DATA_PREVIEW", "DRAG_MODE_CROP", "DRAG_MODE_MOVE", "DRAG_MODE_NONE", "EVENT_CROP", "EVENT_CROP_END", "EVENT_CROP_MOVE", "EVENT_CROP_START", "EVENT_DBLCLICK", "EVENT_TOUCH_START", "EVENT_TOUCH_MOVE", "EVENT_TOUCH_END", "EVENT_POINTER_DOWN", "EVENT_POINTER_MOVE", "EVENT_POINTER_UP", "EVENT_READY", "EVENT_RESIZE", "EVENT_WHEEL", "EVENT_ZOOM", "MIME_TYPE_JPEG", "REGEXP_ACTIONS", "REGEXP_DATA_URL", "REGEXP_DATA_URL_JPEG", "REGEXP_TAG_NAME", "MIN_CONTAINER_WIDTH", "MIN_CONTAINER_HEIGHT", "DEFAULTS", "TEMPLATE", "isNaN", "isNumber", "isPositiveNumber", "isUndefined", "isObject", "hasOwnProperty", "isPlainObject", "_constructor", "prototype", "isFunction", "slice", "toArray", "forEach", "data", "callback", "assign", "_len", "args", "_key", "arg", "REGEXP_DECIMALS", "normalizeDecimalNumber", "times", "REGEXP_SUFFIX", "setStyle", "element", "styles", "style", "property", "hasClass", "addClass", "elem", "className", "removeClass", "toggleClass", "added", "REGEXP_CAMEL_CASE", "toParamCase", "getData", "name", "setData", "removeData", "REGEXP_SPACES", "onceSupported", "supported", "once", "listener", "options", "removeListener", "type", "handler", "event", "listeners", "addListener", "_handler", "_element$listeners", "_len2", "_key2", "dispatchEvent", "getOffset", "box", "location", "REGEXP_ORIGINS", "isCrossOriginURL", "url", "parts", "addTimestamp", "timestamp", "getTransforms", "_ref", "rotate", "scaleX", "scaleY", "translateX", "translateY", "values", "transform", "getMaxZoomRatio", "pointers", "pointers2", "maxRatio", "pointer", "pointerId", "pointer2", "x1", "y1", "x2", "y2", "z1", "z2", "ratio", "getPointer", "_ref2", "endOnly", "pageX", "pageY", "end", "getPointersCenter", "count", "_ref3", "startX", "startY", "getAdjustedSizes", "_ref4", "aspectRatio", "height", "width", "isValidWidth", "isValidHeight", "adjustedWidth", "getRotatedSizes", "_ref5", "degree", "arc", "sinArc", "cosArc", "newWidth", "newHeight", "getSourceCanvas", "image", "_ref6", "_ref7", "_ref8", "imageAspectRatio", "imageNaturalWidth", "imageNaturalHeight", "_ref6$rotate", "_ref6$scaleX", "_ref6$scaleY", "naturalWidth", "naturalHeight", "_ref8$fillColor", "fillColor", "_ref8$imageSmoothingE", "imageSmoothingEnabled", "_ref8$imageSmoothingQ", "imageSmoothingQuality", "_ref8$maxWidth", "maxWidth", "_ref8$maxHeight", "maxHeight", "_ref8$minWidth", "minWidth", "_ref8$minHeight", "minHeight", "canvas", "context", "maxSizes", "minSizes", "destMaxSizes", "destMinSizes", "destWidth", "destHeight", "params", "param", "fromCharCode", "getStringFromCharCode", "dataView", "start", "length", "str", "REGEXP_DATA_URL_HEAD", "dataURLToArrayBuffer", "dataURL", "base64", "binary", "arrayBuffer", "uint8", "arrayBufferToDataURL", "mimeType", "chunks", "chunkSize", "resetAndGetOrientation", "orientation", "littleEndian", "app1Start", "ifdStart", "offset", "exifIDCode", "tiffOffset", "endianness", "firstIFDOffset", "_length", "_offset", "parseOrientation", "render", "container", "cropper", "containerData", "imageData", "viewMode", "rotated", "canvasWidth", "canvasHeight", "canvasData", "sizeLimited", "positionLimited", "cropBoxData", "cropped", "minCanvasWidth", "minCanvasHeight", "_getAdjustedSizes", "newCanvasLeft", "newCanvasTop", "changed", "transformed", "_getRotatedSizes", "autoCropArea", "limited", "minCropBoxWidth", "minCropBoxHeight", "maxCropBoxWidth", "maxCropBoxHeight", "preview", "crossOrigin", "alt", "previews", "el", "img", "cropBoxWidth", "cropBoxHeight", "left", "top", "originalWidth", "originalHeight", "events", "handlers", "ratioX", "ratioY", "_this", "delta", "buttons", "button", "action", "touch", "change", "right", "bottom", "minLeft", "minTop", "renderable", "range", "check", "side", "p", "methods", "hasSameSize", "offsetX", "offsetY", "_this$canvasData", "x", "y", "_originalEvent", "pivot", "center", "_scaleX", "_scaleY", "rounded", "widthChanged", "heightChanged", "source", "_this$getData", "initialX", "initialY", "initialWidth", "initialHeight", "_options$imageSmoothi", "sourceWidth", "sourceHeight", "srcX", "srcY", "srcWidth", "srcHeight", "dstX", "dstY", "dstWidth", "dstHeight", "scale", "mode", "dragBox", "face", "croppable", "movable", "AnotherCropper", "Cropper", "tagName", "xhr", "clone", "_parseOrientation", "crossOriginUrl", "_this2", "isIOSWebKit", "done", "sizingImage", "body", "template", "cropBox", "parentNode", "require_requires_port", "__commonJSMin", "exports", "module", "__name", "port", "protocol", "require_querystringify", "__commonJSMin", "exports", "has", "undef", "decode", "input", "__name", "encode", "querystring", "query", "parser", "result", "part", "key", "value", "querystringify", "obj", "prefix", "pairs", "require_url_parse", "__commonJSMin", "exports", "module", "required", "qs", "controlOrWhitespace", "CRHTLF", "slashes", "port", "protocolre", "windowsDriveLetter", "trimLeft", "str", "__name", "rules", "address", "url", "isSpecial", "ignore", "lolcation", "loc", "globalVar", "location", "finaldestination", "type", "key", "Url", "scheme", "extractProtocol", "match", "protocol", "forwardSlashes", "otherSlashes", "slashesCount", "rest", "resolve", "relative", "base", "path", "i", "last", "unshift", "up", "parser", "extracted", "parse", "instruction", "index", "instructions", "set", "part", "value", "fn", "char", "ins", "toString", "stringify", "query", "host", "result", "require_component_emitter", "__commonJSMin", "exports", "module", "Emitter", "object", "mixin", "__name", "event", "listener", "callbacks", "on", "arguments_", "index", "callback", "callbacksCopy", "totalCount", "require_is_mobile", "__commonJSMin", "exports", "module", "isMobile", "mobileRE", "notMobileRE", "tabletRE", "opts", "ua", "result", "__name", "hasProperty", "object", "key", "__name", "AbortController", "AbortSignal", "createAbortError", "__name", "message", "options", "err", "hasProperty", "canvasToBlob", "canvas", "type", "quality", "resolve", "__name", "DATA_URL_PATTERN", "dataURItoBlob", "dataURI", "opts", "toFile", "dataURIData", "mimeType", "data", "binary", "bytes", "i", "__name", "dataURItoBlob_default", "ErrorWithCause", "__name", "message", "options", "hasProperty", "ErrorWithCause_default", "emaFilter", "newValue", "previousSmoothedValue", "halfLife", "dt", "__name", "FOCUSABLE_ELEMENTS_default", "NetworkError", "__name", "error", "xhr", "NetworkError_default", "ProgressTimeout", "__name", "#aliveTimer", "#isDone", "#onTimedOut", "#timeout", "timeout", "timeoutHandler", "ProgressTimeout_default", "noop", "__name", "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", "abort", "fetchWithNetworkError", "options", "err", "NetworkError_default", "__name", "hasError", "__name", "file", "isCompleted", "filterFilesToUpload", "files", "filterFilesToEmitUploadStarted", "isDOMElement", "obj", "__name", "findAllDOMElements", "element", "elements", "isDOMElement", "__name", "findAllDOMElements_default", "findDOMElement", "element", "context", "isDOMElement", "__name", "findDOMElement_default", "getFileNameAndExtension", "fullFileName", "lastDot", "__name", "mimeTypes_default", "getFileType", "file", "fileExtension", "getFileNameAndExtension", "mimeTypes_default", "__name", "encodeCharacter", "character", "__name", "encodeFilename", "name", "suffix", "generateFileID", "file", "instanceId", "id", "hasFileStableId", "getSafeFileId", "fileType", "getFileType", "getAllowedMetaFields", "fields", "meta", "__name", "toArray_default", "fallbackApi", "dataTransfer", "files", "toArray_default", "__name", "getFilesAndDirectoriesFromDirectory", "directoryReader", "oldEntries", "logDropError", "onSuccess", "entries", "newEntries", "error", "__name", "getAsFileSystemHandleFromEntry", "entry", "logDropError", "resolve", "reject", "directoryReader", "getFilesAndDirectoriesFromDirectory", "__name", "dirEntries", "file", "createPromiseToAddFileOrParseDirectory", "relativePath", "lastResortFile", "getNextRelativePath", "handle", "getFilesFromDataTransfer", "dataTransfer", "fileSystemHandles", "item", "fileSystemHandle", "err", "getDroppedFiles", "dataTransfer", "options", "logDropError", "accumulator", "file", "getFilesFromDataTransfer", "fallbackApi", "__name", "mimeToExtensions", "getFileTypeExtension", "mimeType", "__name", "getSocketHost", "url", "host", "__name", "getTextDirection", "element", "__name", "getTextDirection_default", "pad", "number", "__name", "getTimeStamp", "date", "hours", "minutes", "seconds", "isDragDropSupported", "body", "__name", "isNetworkError", "xhr", "__name", "isNetworkError_default", "isObjectURL", "url", "__name", "isPreviewSupported", "fileType", "__name", "secondsToTime", "rawSeconds", "hours", "minutes", "seconds", "__name", "prettyETA", "seconds", "time", "secondsToTime", "hoursStr", "minutesStr", "secondsStr", "__name", "createCancelError", "cause", "__name", "abortOn", "signal", "abortPromise", "removeAbortListener", "RateLimitedQueue", "#activeRequests", "#queuedHandlers", "#paused", "#pauseTimer", "#downLimit", "#upperLimit", "#rateLimitingTimer", "limit", "#call", "fn", "done", "cancelActive", "err", "#queueNext", "#next", "next", "handler", "#queue", "options", "#dequeue", "index", "other", "queueOptions", "args", "queuedRequest", "outerPromise", "resolve", "reject", "cancelError", "innerPromise", "result", "i", "#resume", "duration", "#increaseLimit", "remoteFileObjToLocal", "file", "getFileNameAndExtension", "__name", "TaskQueue", "__name", "#queue", "#running", "#concurrency", "#paused", "options", "limit", "task", "controller", "resolve", "reject", "promise", "res", "rej", "queuedTask", "index", "reason", "signal", "onAbort", "#execute", "#advance", "runPromise", "error", "result", "next", "available", "i", "tasks", "value", "fn", "args", "insertReplacement", "source", "rx", "replacement", "newParts", "chunk", "raw", "i", "list", "__name", "interpolate", "phrase", "options", "dollarRegex", "dollarBillsYall", "interpolated", "arg", "defaultOnMissingKey", "key", "Translator", "locales", "onMissingKey", "n", "#apply", "#onMissingKey", "locale", "prevLocale", "string", "plural", "truncateString", "string", "maxLength", "charsToShow", "frontChars", "backChars", "__name", "UserFacingApiError", "__name", "UserFacingApiError_default", "slice", "options", "vnodeId", "isValidElement", "rerenderQueue", "prevDebounce", "defer", "depthSort", "CAPTURE_REGEX", "eventClock", "eventProxy", "eventProxyCapture", "i", "EMPTY_OBJ", "EMPTY_ARR", "IS_NON_DIMENSIONAL", "isArray", "Array", "assign", "obj", "props", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__c", "constructor", "__v", "__i", "__u", "createRef", "current", "Fragment", "BaseComponent", "context", "this", "getDomSibling", "childIndex", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "__d", "push", "process", "__r", "debounceRendering", "component", "newVNode", "oldVNode", "oldDom", "commitQueue", "refQueue", "l", "sort", "shift", "__P", "diff", "__n", "namespaceURI", "commitRoot", "diffChildren", "parentDom", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "namespace", "excessDomChildren", "isHydrating", "childVNode", "newDom", "firstChildDom", "result", "shouldPlace", "oldChildren", "newChildrenLength", "constructNewChildrenArray", "applyRef", "insert", "nextSibling", "skewedIndex", "matchingIndex", "oldChildrenLength", "remainingOldChildren", "skew", "String", "findMatchingIndex", "unmount", "parentVNode", "insertBefore", "nodeType", "toChildArray", "out", "some", "x", "y", "matched", "setStyle", "style", "value", "setProperty", "test", "dom", "name", "oldValue", "useCapture", "lowerCaseName", "o", "cssText", "replace", "toLowerCase", "_attached", "addEventListener", "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", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "cloneNode", "then", "MODE_HYDRATE", "indexOf", "markAsForce", "diffElementNodes", "diffed", "forEach", "root", "cb", "map", "newHtml", "oldHtml", "newChildren", "inputValue", "checked", "localName", "document", "createTextNode", "createElementNS", "is", "__m", "data", "childNodes", "attributes", "__html", "innerHTML", "content", "undefined", "hasRefUnmount", "skipRemove", "r", "componentWillUnmount", "replaceNode", "documentElement", "firstChild", "cloneElement", "vnode", "props", "children", "key", "ref", "i", "defaultProps", "normalizedProps", "assign", "type", "undefined", "arguments", "length", "slice", "call", "createVNode", "slice", "EMPTY_ARR", "options", "__e", "__name", "error", "vnode", "oldVNode", "errorInfo", "component", "ctor", "handled", "__", "__c", "constructor", "getDerivedStateFromError", "setState", "__d", "componentDidCatch", "__E", "e", "vnodeId", "isValidElement", "BaseComponent", "prototype", "update", "callback", "s", "this", "__s", "state", "assign", "props", "__v", "_sb", "push", "enqueueRender", "forceUpdate", "__h", "render", "Fragment", "rerenderQueue", "defer", "Promise", "then", "bind", "resolve", "setTimeout", "depthSort", "a", "b", "__b", "process", "__r", "CAPTURE_REGEX", "eventClock", "eventProxy", "createEventProxy", "eventProxyCapture", "i", "vnodeId", "createVNode", "type", "props", "key", "isStaticChildren", "__source", "__self", "ref", "i", "normalizedProps", "vnode", "__k", "__", "__b", "__e", "__c", "constructor", "__v", "vnodeId", "__i", "__u", "defaultProps", "options", "currentIndex", "currentComponent", "previousComponent", "prevRaf", "currentHook", "afterPaintEffects", "options", "_options", "oldBeforeDiff", "__b", "oldBeforeRender", "__r", "oldAfterDiff", "diffed", "oldCommit", "__c", "oldBeforeUnmount", "unmount", "oldRoot", "__", "getHookState", "index", "type", "__h", "hooks", "__H", "length", "push", "useState", "initialState", "useReducer", "invokeOrReturn", "reducer", "init", "hookState", "_reducer", "action", "currentValue", "__N", "nextValue", "setState", "__f", "updateHookState", "__name", "p", "s", "c", "stateHooks", "filter", "x", "every", "prevScu", "call", "this", "shouldUpdate", "props", "forEach", "hookItem", "shouldComponentUpdate", "prevCWU", "componentWillUpdate", "__e", "tmp", "useEffect", "callback", "args", "state", "__s", "argsChanged", "_pendingArgs", "useRef", "initialValue", "currentHook", "useMemo", "current", "useMemo", "factory", "args", "state", "getHookState", "currentIndex", "argsChanged", "__H", "__", "__h", "useCallback", "callback", "currentHook", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "__P", "__H", "__h", "forEach", "invokeCleanup", "invokeEffect", "e", "options", "__e", "__v", "__b", "vnode", "currentComponent", "oldBeforeDiff", "__", "parentDom", "__k", "__m", "oldRoot", "__r", "oldBeforeRender", "currentIndex", "hooks", "__c", "previousComponent", "hookItem", "__N", "_pendingArgs", "diffed", "oldAfterDiff", "c", "length", "push", "prevRaf", "requestAnimationFrame", "afterNextFrame", "commitQueue", "some", "filter", "cb", "oldCommit", "unmount", "oldBeforeUnmount", "hasErrored", "s", "HAS_RAF", "callback", "raf", "done", "__name", "clearTimeout", "timeout", "cancelAnimationFrame", "setTimeout", "hook", "comp", "cleanup", "argsChanged", "oldArgs", "newArgs", "arg", "index", "invokeOrReturn", "f", "STYLE_INNER", "STYLE_CONTENT", "VirtualList", "data", "rowHeight", "renderRow", "overscanCount", "padding", "props", "scrollerRef", "A", "offset", "setOffset", "d", "height", "setHeight", "y", "resize", "__name", "handleScroll", "q", "start", "visibleRowCount", "end", "selection", "styleInner", "styleContent", "u", "BasePlugin", "__name", "uppy", "opts", "plugins", "update", "newOpts", "translator", "Translator", "plugin", "state", "EventManager", "__name", "#uppy", "#events", "uppy", "event", "fn", "fileID", "cb", "file", "isPaused", "eventHandler", "args", "justErrorsLogger", "__name", "args", "getTimeStamp", "debugLogger", "import_prettier_bytes", "import_mime_match", "defaultOptions", "RestrictionError", "__name", "message", "opts", "Restricter", "getOpts", "getI18n", "existingFiles", "addingFiles", "maxTotalFileSize", "maxNumberOfFiles", "f", "totalFilesSize", "total", "prettierBytes", "file", "maxFileSize", "minFileSize", "allowedFileTypes", "type", "match", "allowedFileTypesString", "addingFile", "files", "minNumberOfFiles", "error", "requiredMetaFields", "missingFields", "field", "debounce", "fn", "calling", "latestArgs", "args", "__name", "UIPlugin", "_UIPlugin", "BasePlugin", "#updateUI", "target", "targetPlugin", "Target", "p", "plugin", "callerPluginName", "targetElement", "findDOMElement_default", "uppyRootElement", "state", "G", "getTextDirection_default", "message", "container", "UIPlugin_default", "package_default", "DefaultStore", "__name", "package_default", "#callbacks", "patch", "prevState", "nextState", "#publish", "listener", "args", "lib_default", "import_throttle", "import_namespace_emitter", "urlAlphabet", "nanoid", "__name", "size", "id", "i", "urlAlphabet", "package_default", "getFileName", "fileType", "fileDescriptor", "__name", "locale_default", "supportsUploadProgress", "userAgent", "m", "version", "major", "minor", "__name", "defaultUploadState", "Uppy", "_Uppy", "__name", "package_default", "#plugins", "#restricter", "#storeUnsubscribe", "#emitter", "ee", "#preProcessors", "#uploaders", "#postProcessors", "opts", "locale_default", "defaultOptions", "file", "files", "lib_default", "justErrorsLogger", "merged", "debugLogger", "supportsUploadProgress", "Restricter", "prevState", "nextState", "patch", "#addListeners", "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", "progress", "#informAndEmit", "errors", "userFacingErrors", "maxNumToShow", "firstErrors", "additionalErrors", "message", "details", "err", "existingFiles", "#checkRequiredMetaFieldsOnFile", "missingFields", "#checkRequiredMetaFields", "success", "#assertNewUploadAllowed", "allowNewUpload", "RestrictionError", "#transformFile", "fileDescriptorOrFile", "fileType", "getFileType", "fileName", "getFileName", "fileExtension", "getFileNameAndExtension", "getSafeFileId", "meta", "size", "#startIfAutoProceed", "#checkAndUpdateFileState", "filesToAdd", "nextFilesState", "validFilesToAdd", "fileToAdd", "newFile", "existingFile", "isGhost", "onBeforeFileAddedResult", "restrictionErrors", "firstValidFileToAdd", "fileDescriptors", "nonRestrictionErrors", "subError", "fileIDs", "updatedUploads", "removedFiles", "fileIsNotRemoved", "uploadFileID", "uploadID", "newFileIDs", "stateUpdate", "#updateTotalProgressThrottled", "removedFileIDs", "isPaused", "updatedFile", "#getFilesToRetry", "fileId", "#doRetryAll", "filesToRetry", "#createUpload", "#runUpload", "result", "#handleUploadProgress", "fileInState", "newProgress", "#updateTotalProgress", "#calculateTotalProgress", "totalProgressPercent", "throttle", "filesInProgress", "isSizedFile", "sizedFilesInProgress", "unsizedFilesInProgress", "totalFilesSize", "acc", "totalUploadedSize", "errorHandler", "response", "errorMsg", "newError", "uploadStalledWarningRecentlyEmitted", "onUploadStarted", "filesFiltered", "exists", "filesState", "uploadResp", "currentProgress", "needsPostProcessing", "fileIn", "_deleted", "#updateOnlineStatus", "Plugin", "msg", "pluginId", "existsPluginAlready", "plugins", "foundPlugin", "type", "method", "instance", "list", "index", "item", "updatedState", "info", "duration", "isComplexMessage", "logger", "#requestClientById", "client", "requestClient", "forceAllowNewUpload", "nanoid", "#getUpload", "currentUpload", "#removeUpload", "getCurrentUpload", "steps", "step", "successful", "failed", "retryResult", "onBeforeUploadResult", "currentlyUploadingFiles", "curr", "waitingFileIDs", "Uppy_default", "lib_exports", "__export", "Provider", "RequestClient", "SearchProvider", "getAllowedHosts", "tokenStorage_exports", "escapeRegex", "string", "__name", "wrapInRegex", "value", "getAllowedHosts", "companionAllowedHosts", "companionUrl", "validate", "ret", "isOriginAllowed", "origin", "allowedOrigin", "pattern", "import_retry", "objectToString", "isError", "__name", "value", "errorMessages", "isNetworkError", "error", "AbortError", "__name", "message", "decorateErrorWithCounts", "error", "attemptNumber", "options", "retriesLeft", "pRetry", "input", "resolve", "reject", "operation", "retry", "abortHandler", "cleanUp", "result", "isNetworkError", "finalError", "package_default", "AuthError", "__name", "AuthError_default", "stripSlash", "url", "__name", "retryCount", "socketActivityTimeoutMs", "authErrorStatusCode", "HttpError", "statusCode", "message", "handleJSONResponse", "res", "AuthError_default", "errMsg", "errData", "cause", "UserFacingApiError_default", "emitSocketProgress", "uploader", "progressData", "file", "progress", "bytesUploaded", "bytesTotal", "RequestClient", "package_default", "#companionHeaders", "uppy", "opts", "headers", "companion", "host", "emptyBody", "#getUrl", "path", "method", "data", "skipPostResponse", "signal", "response", "fetchWithNetworkError", "err", "ErrorWithCause_default", "options", "reqBody", "getQueue", "pRetry", "existingServerToken", "#awaitRemoteFileUpload", "serverToken", "args", "#requestSocketToken", "outerErr", "AbortError", "isRetryableHttpError", "postBody", "queue", "removeEventHandlers", "capabilities", "resolve", "reject", "token", "getSocketHost", "socket", "socketAbortController", "activityTimeout", "isPaused", "socketSend", "action", "payload", "sendState", "createWebsocket", "onFatalError", "resetActivityTimeout", "_", "rejectSocket", "error", "e", "text", "closeSocket", "pause", "newPausedState", "onFileRemove", "targetFile", "onCancelAll", "onFilePausedChange", "onPauseAll", "onResumeAll", "getName", "__name", "id", "s", "getOrigin", "Provider", "RequestClient", "#refreshingTokenPromise", "uppy", "opts", "headers", "token", "#getAuthToken", "authHeaders", "response", "plugin", "#getPlugin", "authenticated", "authErrorStatusCode", "data", "authFormData", "query", "params", "uppyVersions", "signal", "link", "authWindow", "interval", "handleMessage", "resolve", "reject", "e", "jsonData", "companionAllowedHosts", "isOriginAllowed", "message", "args", "err", "authTokenAfter", "refreshTokenErr", "res", "directory", "options", "text", "qs", "path", "getName", "__name", "id", "s", "SearchProvider", "RequestClient", "uppy", "opts", "text", "queries", "tokenStorage_exports", "__export", "getItem", "removeItem", "setItem", "setItem", "key", "value", "__name", "getItem", "removeItem", "lib_exports", "__export", "FilterInput_default", "GoogleDriveIcon", "GooglePhotosIcon", "GooglePickerView", "ProviderView", "SearchProviderView", "SearchView_default", "authorize", "defaultPickerIcon", "ensureScriptsInjected", "logout", "pollPickingSession", "showDrivePicker", "showPhotosPicker", "useSearchForm", "useSearchForm", "onSubmit", "submit", "q", "ev", "form", "d", "formEl", "nanoid", "y", "__name", "FilterInput", "value", "onChange", "onSubmit", "inputLabel", "i18n", "formId", "useSearchForm", "u", "__name", "e", "FilterInput_default", "GoogleIcon", "u", "__name", "DefaultForm", "pluginName", "i18n", "onAuth", "isGoogleDrive", "onSubmit", "q", "e", "defaultRenderForm", "AuthView", "loading", "pluginIcon", "handleAuth", "renderForm", "getAuthHeader", "__name", "token", "injectedScripts", "driveApiLoaded", "injectScript", "src", "resolve", "reject", "script", "e", "ensureScriptsInjected", "pickerType", "isTokenValid", "accessToken", "signal", "authorize", "clientId", "response", "scopes", "tokenClient", "logout", "InvalidTokenError", "showDrivePicker", "apiKey", "appId", "onFilesPicked", "onLoadingChange", "onError", "handleDocObjectRecursively", "doc", "headers", "items", "pageToken", "params", "res", "json", "file", "onPicked", "picked", "results", "err", "picker", "showPhotosPicker", "pickingSession", "onPickingSessionChange", "newPickingSession", "createSessionResponse", "w", "resolvePickedPhotos", "mediaItems", "batchMediaItems", "nextPageToken", "i", "mediaItem", "id", "type", "mimeType", "filename", "baseUrl", "pollPickingSession", "pickingSessionRef", "accessTokenRef", "interval", "_resolve", "resolvedPhotos", "GooglePhotosIcon", "__name", "u", "GoogleDriveIcon", "useStore", "store", "key", "value", "setValueState", "d", "y", "setValue", "q", "v", "__name", "GooglePickerView", "uppy", "i18n", "clientId", "onFilesPicked", "pickerType", "apiKey", "appId", "storage", "loading", "setLoading", "accessToken", "setAccessTokenStored", "pickingSessionRef", "A", "accessTokenRef", "shownPickerRef", "setAccessToken", "t", "showPicker", "signal", "newAccessToken", "doShowPicker", "token", "showDrivePicker", "isLoading", "err", "onPickingSessionChange", "newPickingSession", "showPhotosPicker", "ensureScriptsInjected", "authorize", "InvalidTokenError", "abortController", "pollPickingSession", "handleLogoutClick", "logout", "u", "AuthView", "GoogleDriveIcon", "GooglePhotosIcon", "import_classnames", "import_debounce", "package_default", "import_classnames", "FileIcon", "u", "__name", "FolderIcon", "VideoIcon", "ItemIcon", "itemIconString", "alt", "GridItem", "file", "toggleCheckbox", "className", "isDisabled", "restrictionError", "showTitles", "children", "i18n", "u", "ItemIcon", "__name", "GridItem_default", "ListItem", "file", "openFolder", "className", "isDisabled", "restrictionError", "toggleCheckbox", "showTitles", "i18n", "u", "__name", "ItemIcon", "Item", "props", "viewType", "toggleCheckbox", "showTitles", "i18n", "openFolder", "file", "utmSource", "restrictionError", "isDisabled", "ourProps", "classNames", "u", "GridItem_default", "ListItem", "__name", "Browser", "props", "displayedPartialTree", "viewType", "toggleCheckbox", "handleScroll", "showTitles", "i18n", "isLoading", "openFolder", "noResultsLabel", "virtualList", "utmSource", "isShiftKeyPressed", "setIsShiftKeyPressed", "d", "y", "handleKeyUp", "__name", "e", "handleKeyDown", "u", "renderItem", "item", "Item", "event", "VirtualList", "Browser_default", "import_classnames", "getNumberOfSelectedFiles", "__name", "partialTree", "item", "i", "getNumberOfSelectedFiles_default", "FooterActions", "cancelSelection", "donePicking", "i18n", "partialTree", "validateAggregateRestrictions", "aggregateRestrictionError", "T", "nOfSelectedFiles", "getNumberOfSelectedFiles_default", "u", "classNames", "__name", "companionFileToUppyFile", "__name", "file", "plugin", "provider", "name", "companionFileToUppyFile_default", "addFiles", "__name", "companionFiles", "plugin", "provider", "uppyFiles", "f", "companionFileToUppyFile_default", "filesToAdd", "filesAlreadyAdded", "file", "getSafeFileId", "addFiles_default", "getClickedRange", "__name", "clickedId", "displayedPartialTree", "isShiftKeyPressed", "previousCheckbox", "previousCheckboxIndex", "item", "newCheckboxIndex", "getClickedRange_default", "handleError", "__name", "uppy", "error", "handleError_default", "getBreadcrumbs", "__name", "partialTree", "currentFolderId", "folder", "f", "breadcrumbs", "currentParentId", "getBreadcrumbs_default", "getPath", "__name", "partialTree", "id", "cache", "sId", "file", "f", "meAndParentPath", "getCheckedFilesWithPaths", "item", "absFolders", "firstCheckedFolderIndex", "i", "relFolders", "absDirPath", "relDirPath", "getCheckedFilesWithPaths_default", "import_index", "TimeoutError", "__name", "message", "AbortError", "getDOMException", "errorMessage", "getAbortedReason", "signal", "reason", "pTimeout", "promise", "options", "milliseconds", "fallback", "customTimers", "timer", "cancelablePromise", "resolve", "reject", "timeoutError", "error", "lowerBound", "array", "value", "comparator", "first", "count", "step", "it", "__name", "PriorityQueue", "__name", "#queue", "run", "options", "element", "index", "lowerBound", "a", "b", "id", "priority", "item", "PQueue", "EventEmitter", "__name", "#carryoverConcurrencyCount", "#isIntervalIgnored", "#intervalCount", "#intervalCap", "#interval", "#intervalEnd", "#intervalId", "#timeoutId", "#queue", "#queueClass", "#pending", "#concurrency", "#isPaused", "#throwOnTimeout", "#idAssigner", "options", "PriorityQueue", "#doesIntervalAllowAnother", "#doesConcurrentAllowAnother", "#next", "#tryToStartAnother", "#onResumeInterval", "#onInterval", "#initializeIntervalIfNeeded", "#isIntervalPaused", "now", "delay", "canInitializeInterval", "job", "#processQueue", "newConcurrency", "#throwOnAbort", "signal", "_resolve", "reject", "id", "priority", "function_", "resolve", "operation", "pTimeout", "result", "error", "TimeoutError", "functions", "#onEvent", "limit", "event", "filter", "listener", "shallowClone", "__name", "partialTree", "item", "shallowClone_default", "recursivelyFetch", "__name", "queue", "poorTree", "poorFolder", "apiList", "validateSingleFile", "items", "currentPath", "response", "newFolders", "i", "newFiles", "folders", "folder", "files", "file", "restrictionError", "afterFill", "partialTree", "reportProgress", "PQueue", "shallowClone_default", "item", "nOfFilesChecked", "afterFill_default", "afterOpenFolder", "__name", "oldPartialTree", "discoveredItems", "clickedFolder", "currentPagePath", "validateSingleFile", "discoveredUniqueItems", "i", "f", "discoveredFolders", "discoveredFiles", "isParentFolderChecked", "folders", "folder", "files", "file", "restrictionError", "updatedClickedFolder", "afterOpenFolder_default", "afterScrollFolder", "__name", "oldPartialTree", "currentFolderId", "items", "nextPagePath", "validateSingleFile", "currentFolder", "i", "newFolders", "newFiles", "scrolledFolder", "partialTreeWithUpdatedScrolledFolder", "folder", "isParentFolderChecked", "folders", "files", "file", "restrictionError", "afterScrollFolder_default", "percolateDown", "__name", "tree", "id", "shouldMarkAsChecked", "item", "percolateUp", "folder", "validChildren", "areAllChildrenChecked", "areAllChildrenUnchecked", "afterToggleCheckbox", "oldTree", "checkedIds", "shallowClone_default", "newlyCheckedItems", "newStatus", "afterToggleCheckbox_default", "PartialTreeUtils_default", "afterOpenFolder_default", "afterScrollFolder_default", "afterToggleCheckbox_default", "afterFill_default", "shouldHandleScroll", "__name", "event", "scrollHeight", "scrollTop", "offsetHeight", "shouldHandleScroll_default", "import_classnames", "SearchResultItem", "__name", "i18n", "item", "toggleCheckbox", "openFolder", "isDisabled", "u", "classNames", "ItemIcon", "SearchResultItem_default", "GlobalSearchView", "__name", "searchResults", "toggleCheckbox", "openFolder", "i18n", "u", "item", "SearchResultItem_default", "GlobalSearchView_default", "import_classnames", "Breadcrumbs", "props", "openFolder", "title", "breadcrumbsIcon", "breadcrumbs", "i18n", "u", "folder", "index", "k", "__name", "User", "i18n", "logout", "username", "u", "k", "__name", "Header", "props", "u", "classNames", "Breadcrumbs", "User", "__name", "defaultPickerIcon", "u", "__name", "getDefaultState", "rootFolderId", "ProviderView", "_ProviderView", "package_default", "#searchDebounced", "plugin", "opts", "defaultOptions", "testWait", "wait", "debounceOpts", "debounce", "#search", "loading", "partialTree", "newPartialTree", "item", "#abortController", "#withAbort", "op", "abortController", "cancelRequest", "currentFolderId", "searchString", "currentFolder", "i", "signal", "scopePath", "items", "file", "segments", "s", "parentId", "isParentFolderChecked", "segment", "index", "arr", "pathSegments", "encodedPath", "existingNode", "n", "isLeafNode", "node", "status", "restrictionError", "handleError_default", "folderId", "clickedFolder", "folder", "currentPagePath", "currentItems", "username", "nextPagePath", "PartialTreeUtils_default", "res", "message", "authFormData", "event", "shouldHandleScroll_default", "companionFile", "remoteFileObjToLocal", "enrichedTree", "path", "companionFiles", "getCheckedFilesWithPaths_default", "addFiles_default", "ourItem", "isShiftKeyPressed", "clickedRange", "getClickedRange_default", "inThisFolder", "getBreadcrumbs_default", "getNumberOfSelectedFiles_default", "uppyFiles", "#renderSearchResults", "i18n", "ids", "itemsById", "searchResults", "id", "partialTreeItem", "GlobalSearchView_default", "state", "viewOptions", "didFirstRender", "authenticated", "pluginIcon", "AuthView", "breadcrumbs", "classNames", "Header", "FilterInput_default", "Browser_default", "FooterActions", "import_classnames", "SearchView", "value", "onChange", "onSubmit", "inputLabel", "loading", "children", "formId", "useSearchForm", "u", "__name", "e", "SearchView_default", "defaultState", "defaultOptions", "SearchProviderView", "__name", "package_default", "plugin", "opts", "loading", "partialTree", "newPartialTree", "item", "searchString", "response", "error", "handleError_default", "event", "root", "i", "shouldHandleScroll_default", "newRoot", "oldItems", "companionFiles", "getCheckedFilesWithPaths_default", "addFiles_default", "ourItem", "isShiftKeyPressed", "clickedRange", "getClickedRange_default", "PartialTreeUtils_default", "file", "companionFile", "remoteFileObjToLocal", "uppyFiles", "state", "viewOptions", "isInputMode", "i18n", "u", "SearchView_default", "classNames", "FilterInput_default", "Browser_default", "FooterActions", "package_default", "locale_default", "PermissionsScreen_default", "__name", "props", "icon", "hasAudio", "i18n", "u", "AudioSourceSelect_default", "__name", "currentDeviceId", "audioSources", "onChangeSource", "u", "event", "audioSource", "isFunction", "v", "__name", "result", "AudioOscilloscope", "canvas", "options", "canvasOptions", "canvasContextOptions", "streamSource", "analyser", "dataArray", "bufferLength", "ctx", "w", "h", "sliceWidth", "x", "i", "y", "#draw", "DiscardButton", "onDiscard", "i18n", "u", "__name", "DiscardButton_default", "RecordButton", "recording", "onStartRecording", "onStopRecording", "i18n", "u", "__name", "formatSeconds", "seconds", "__name", "RecordingLength", "recordingLengthSeconds", "formattedRecordingLengthSeconds", "formatSeconds", "u", "__name", "SubmitButton", "onSubmit", "i18n", "u", "__name", "SubmitButton_default", "RecordingScreen", "props", "stream", "recordedAudio", "onStop", "recording", "supportsRecording", "audioSources", "showAudioSourceDropdown", "onSubmit", "i18n", "onStartRecording", "onStopRecording", "onDiscardRecordedAudio", "recordingLengthSeconds", "canvasEl", "A", "oscilloscope", "y", "AudioOscilloscope", "source", "hasRecordedAudio", "shouldShowRecordButton", "shouldShowAudioSourceDropdown", "u", "AudioSourceSelect_default", "RecordButton", "SubmitButton_default", "DiscardButton_default", "RecordingLength", "__name", "supportsMediaRecorder", "__name", "Audio", "UIPlugin_default", "__name", "package_default", "#recordingLengthTimer", "#stream", "#audioActive", "#recordingChunks", "#recorder", "#capturedMediaFile", "#mediaDevices", "#supportsUserMedia", "uppy", "opts", "u", "locale_default", "#hasAudioCheck", "devices", "device", "#start", "options", "hasAudio", "stream", "currentDeviceId", "tracks", "track", "#updateSources", "err", "#startRecording", "stoppingBecauseOfMaxSize", "event", "restrictions", "totalSize", "acc", "chunk", "expectedEndChunkSize", "maxSize", "#stopRecording", "currentRecordingLength", "resolve", "#getAudio", "file", "error", "#discardRecordedAudio", "#submit", "#stop", "mimeType", "blob", "fileExtension", "getFileTypeExtension", "name", "#changeSource", "deviceId", "audioState", "PermissionsScreen_default", "RecordingScreen", "supportsMediaRecorder", "target", "restartStream", "audioSources", "audioSource", "package_default", "createCanonicalRequest", "method", "CanonicalUri", "CanonicalQueryString", "SignedHeaders", "HashedPayload", "headerKeys", "k", "__name", "ec", "algorithm", "digest", "data", "subtle", "generateHmacKey", "secret", "arrayBufferToHexString", "arrayBuffer", "byteArray", "hexString", "i", "hash", "key", "createSignedURL", "accountKey", "accountSecret", "sessionToken", "bucketName", "Key", "Region", "expires", "uploadId", "partNumber", "host", "c", "payload", "requestDateTime", "date", "scope", "url", "canonical", "hashedCanonical", "stringToSign", "kDate", "kRegion", "kService", "kSigning", "signature", "MB", "defaultOptions", "file", "err", "ensureInt", "value", "__name", "pausingUploadReason", "MultipartUploader", "#abortController", "AbortController", "#chunks", "#chunkState", "#data", "#file", "#uploadHasStarted", "#onError", "#onSuccess", "#shouldUseMultipart", "#isRestoring", "#onReject", "#maxMultipartParts", "#minPartSize", "data", "options", "#initChunks", "fileSize", "shouldUseMultipart", "chunkSize", "arraySize", "offset", "j", "end", "getData", "i2", "#onPartProgress", "#onPartComplete", "size", "#createUpload", "#resumeUpload", "index", "ev", "totalUploaded", "n", "c", "etag", "part", "#abortUpload", "opts", "MultipartUploader_default", "throwIfAborted", "signal", "createAbortError", "__name", "removeMetadataFromURL", "urlString", "urlObject", "__name", "HTTPCommunicationQueue", "#abortMultipartUpload", "#cache", "#createMultipartUpload", "#fetchSignature", "#getUploadParameters", "#listParts", "#previousRetryDelay", "#requests", "#retryDelays", "#sendCompletionRequest", "#setS3MultipartState", "#uploadPartBytes", "#getFile", "requests", "options", "setS3MultipartState", "getFile", "#shouldRetry", "err", "retryDelayIterator", "status", "next", "resolve", "file", "signal", "cachedResult", "promise", "abortPromise", "result", "awaitedResult", "#nonMultipartUpload", "chunk", "method", "url", "fields", "headers", "body", "data", "formData", "key", "value", "onProgress", "onComplete", "chunks", "throwIfAborted", "uploadId", "parts", "i", "pausingUploadReason", "uploadIdAndKey", "alreadyUploadedParts", "partNumber", "alreadyUploadedInfo", "PartNumber", "signatureRetryIterator", "chunkRetryIterator", "shouldRetrySignature", "chunkData", "signature", "timeout", "assertServerError", "res", "error", "__name", "getExpiry", "credentials", "expirationDate", "timeUntilExpiry", "getAllowedMetadata", "meta", "allowedMetaFields", "querify", "metaFields", "key", "realKey", "value", "defaultOptions", "file", "AwsS3Multipart", "_AwsS3Multipart", "BasePlugin", "package_default", "#companionCommunicationQueue", "#client", "uppy", "opts", "#setClient", "dynamicDefaultOptions", "RateLimitedQueue", "HTTPCommunicationQueue", "#setS3MultipartState", "#getFile", "RequestClient", "#setCompanionHeaders", "newOptions", "fileID", "#assertHost", "method", "signal", "throwIfAborted", "getAllowedMetaFields", "metadata", "uploadId", "oldSignal", "filename", "parts", "uploadIdEnc", "ETag", "PartNumber", "#cachedTemporaryCredentials", "#getTemporarySecurityCredentials", "options", "getTemporarySecurityCredentials", "data", "expires", "partNumber", "createSignedURL", "type", "query", "url", "headers", "body", "size", "onProgress", "onComplete", "resolve", "reject", "xhr", "onabort", "cleanup", "ev", "createAbortError", "arr", "headersMap", "line", "header", "etag", "location", "cFile", "#uploadLocalFile", "bytesUploaded", "bytesTotal", "latestFile", "onError", "err", "onSuccess", "result", "uploadResp", "upload", "MultipartUploader_default", "args", "part", "eventManager", "EventManager", "removed", "isPaused", "#getCompanionClientArgs", "#upload", "fileIDs", "files", "filesFiltered", "filterFilesToUpload", "filesToEmit", "filterFilesToEmitUploadStarted", "promises", "getQueue", "#setResumableUploadsCapability", "controller", "removedHandler", "removedFile", "uploadPromise", "boolean", "capabilities", "#resetResumableCapability", "package_default", "locale_default", "Box", "UIPlugin_default", "__name", "package_default", "uppy", "opts", "tokenStorage_exports", "u", "getAllowedHosts", "Provider", "locale_default", "ProviderView", "target", "state", "import_prettier_bytes", "import_compressorjs", "locale_default", "defaultOptions", "Compressor", "BasePlugin", "__name", "#RateLimitedQueue", "uppy", "opts", "locale_default", "RateLimitedQueue", "blob", "resolve", "reject", "CompressorJS", "fileIDs", "totalCompressedSize", "compressedFiles", "compressAndApplyResult", "file", "compressedBlob", "compressedSavingsSize", "prettierBytes", "name", "type", "size", "compressedFileName", "getFileNameAndExtension", "newMetaName", "err", "promises", "fileID", "e", "t", "s", "__name", "i", "n", "r", "a", "h", "f", "l", "o", "u", "d", "c", "_c", "p", "g", "m", "y", "b", "w", "k", "v", "O", "S", "A", "U", "x", "C", "B", "V", "I", "L", "T", "z", "P", "F", "j", "E", "M", "_", "D", "X", "N", "$", "R", "W", "K", "H", "Y", "G", "J", "q", "Q", "Z", "ee", "te", "se", "ie", "ne", "re", "ae", "he", "le", "ae", "de", "ae", "ce", "e", "t", "H", "s", "__name", "pe", "ge", "me", "ye", "be", "c", "we", "a", "r", "i", "ke", "Oe", "b", "A", "n", "package_default", "locale_default", "canvasToBlob", "canvas", "type", "quality", "err", "resolve", "blob", "dataURItoBlob_default", "__name", "rotateImage", "image", "translate", "w", "h", "context", "protect", "ratio", "maxSquare", "maxSize", "maxW", "maxH", "defaultOptions", "ThumbnailGenerator", "UIPlugin_default", "package_default", "uppy", "opts", "locale_default", "file", "targetWidth", "targetHeight", "originalUrl", "onload", "reject", "event", "orientationPromise", "ye", "orientation", "dimensions", "rotatedImage", "resizedImage", "img", "width", "height", "deg", "aspect", "steps", "sW", "sH", "x", "fileID", "preview", "current", "isPreviewSupported", "index", "isObjectURL", "fileIDs", "emitPreprocessCompleteForAll", "package_default", "import_classnames", "AddFiles", "x", "__name", "event", "isFolder", "refCallback", "u", "type", "nativeCameraFacingMode", "accept", "text", "onClickFn", "numberOfAcquirers", "browseFiles", "browseFolders", "lowerFMSelectionType", "camelFMSelectionType", "acquirer", "acquirers", "acquirersWithoutLastTwo", "lastTwoAcquirers", "k", "disableLocalFiles", "showNativePhotoCameraButton", "showNativeVideoCameraButton", "list", "myDeviceKey", "listWithoutLastTwo", "lastTwo", "key", "elements", "i18nArray", "uppyBranding", "linkText", "ref", "AddFiles_default", "import_classnames", "AddFilesPanel", "__name", "props", "u", "classNames", "AddFiles_default", "AddFilesPanel_default", "import_classnames", "EditorPanel", "props", "file", "handleCancel", "__name", "u", "classNames", "target", "EditorPanel_default", "import_classnames", "iconImage", "u", "__name", "iconAudio", "iconVideo", "iconPDF", "iconArchive", "iconFile", "iconText", "getIconByMime", "fileType", "defaultChoice", "fileTypeGeneral", "fileTypeSpecific", "ignoreEvent", "ev", "tagName", "__name", "ignoreEvent_default", "FilePreview", "props", "file", "u", "color", "icon", "getIconByMime", "__name", "RenderMetaFields", "props", "computedMetaFields", "requiredMetaFields", "updateMeta", "form", "formState", "fieldCSSClasses", "field", "id", "required", "u", "__name", "newVal", "_", "ev", "FileCard", "props", "files", "fileCardFor", "toggleFileCard", "saveFileCard", "metaFields", "requiredMetaFields", "openFileEditor", "i18n", "i18nArray", "className", "canEditFile", "getMetaFields", "__name", "file", "computedMetaFields", "showEditButton", "storedMetaData", "field", "formState", "setFormState", "d", "handleSave", "q", "ev", "updateMeta", "newVal", "name", "handleCancel", "form", "formEl", "nanoid", "domRef", "A", "y", "rootNode", "u", "classNames", "ignoreEvent_default", "getIconByMime", "FilePreview", "event", "RenderMetaFields", "import_classnames", "shallowEqualObjects", "objA", "objB", "aKeys", "Object", "keys", "bKeys", "len", "length", "i", "key", "prototype", "hasOwnProperty", "call", "copyToClipboard", "textToCopy", "fallbackString", "resolve", "textArea", "magicCopyFailed", "__name", "EditButton", "file", "uploadInProgressOrComplete", "metaFields", "canEditFile", "i18n", "onClick", "u", "__name", "RemoveButton", "CopyLinkButton", "uppy", "copyLinkToClipboard", "event", "copyToClipboard", "Buttons", "props", "showLinkToFileUploadResult", "showRemoveButton", "toggleFileCard", "openFileEditor", "import_prettier_bytes", "metaFieldIdToName", "__name", "metaFieldId", "metaFields", "f", "MetaErrorMessage", "props", "file", "toggleFileCard", "i18n", "missingRequiredMetaFields", "metaFieldsString", "missingMetaField", "u", "renderFileName", "__name", "props", "author", "name", "getMaxNameLength", "u", "truncateString", "renderAuthor", "providerName", "dot", "k", "renderFileSize", "prettierBytes", "ReSelectButton", "ErrorButton", "file", "onClick", "FileInfo", "i18n", "toggleFileCard", "metaFields", "toggleAddFilesPanel", "isSingleFile", "containerHeight", "containerWidth", "MetaErrorMessage", "FilePreviewAndLink", "props", "file", "i18n", "toggleFileCard", "metaFields", "showLinkToFileUploadResult", "previewBackgroundColor", "getIconByMime", "u", "FilePreview", "MetaErrorMessage", "__name", "onPauseResumeCancelRetry", "props", "__name", "progressIndicatorTitle", "ProgressIndicatorButton", "u", "ProgressCircleContainer", "children", "ProgressCircle", "progress", "circleLength", "FileProgress", "FileItem", "x", "__name", "file", "nextProps", "shallowEqualObjects", "isProcessing", "isUploaded", "uploadInProgressOrComplete", "uploadInProgress", "error", "isGhost", "showRemoveButton", "dashboardItemClass", "classNames", "u", "FilePreviewAndLink", "FileProgress", "FileInfo", "Buttons", "chunks", "list", "size", "chunked", "currentChunk", "item", "__name", "FileList", "id", "i18n", "uppy", "files", "resumableUploads", "hideRetryButton", "hidePauseResumeButton", "hideCancelButton", "showLinkToFileUploadResult", "showRemoveButtonAfterComplete", "metaFields", "isSingleFile", "toggleFileCard", "handleRequestThumbnail", "handleCancelThumbnail", "recoveredState", "individualCancellation", "itemsPerRow", "openFileEditor", "canEditFile", "toggleAddFilesPanel", "containerWidth", "containerHeight", "rowHeight", "rows", "T", "sortByGhostComesFirst", "file1", "file2", "fileIds", "renderRow", "row", "u", "fileID", "FileItem", "VirtualList", "TRANSITION_MS", "FadeIn", "x", "__name", "b", "callback", "children", "u", "assign", "obj", "props", "__name", "getKey", "vnode", "fallback", "linkRef", "component", "name", "cache", "c", "getChildMapping", "children", "out", "i", "key", "mergeChildMappings", "prev", "next", "getValueForKey", "nextKeysPending", "pendingKeys", "prevKey", "childMapping", "nextKey", "pendingNextKey", "identity", "TransitionGroup", "x", "context", "H", "initialChildMapping", "nextProps", "nextChildMapping", "prevChildMapping", "prevState", "hasPrev", "hasNext", "keysToEnter", "keysToLeave", "idx", "currentChildMapping", "childFactory", "transitionLeave", "transitionName", "transitionAppear", "transitionEnter", "transitionLeaveTimeout", "transitionEnterTimeout", "transitionAppearTimeout", "childrenToRender", "child", "ref", "K", "_", "TransitionGroup_default", "Informer", "x", "__name", "info", "u", "TransitionGroup_default", "FadeIn", "import_classnames", "PickerPanelContent", "activePickerPanel", "className", "hideAllPanels", "i18n", "state", "uppy", "ref", "A", "u", "classNames", "ignoreEvent_default", "__name", "PickerPanelContent_default", "uploadStates", "getUploadingState", "isAllErrored", "isAllComplete", "isAllPaused", "files", "state", "fileIDs", "i", "progress", "__name", "UploadStatus", "i18n", "inProgressNotPausedFiles", "newFiles", "processingFiles", "PanelTopBar", "props", "hideCancelButton", "maxNumberOfFiles", "toggleAddFilesPanel", "uppy", "allowNewUpload", "u", "PickerPanelTopBar_default", "import_classnames", "transitionName", "duration", "Slide", "children", "cachedChildren", "setCachedChildren", "d", "className", "setClassName", "enterTimeoutRef", "A", "leaveTimeoutRef", "animationFrameRef", "handleEnterTransition", "q", "handleLeaveTransition", "y", "child", "H", "K", "classNames", "__name", "Slide_default", "StatusBarStates_default", "import_classnames", "import_prettier_bytes", "import_classnames", "DOT", "renderDot", "__name", "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", "hideProgressDetails", "showUploadNewlyAddedFiles", "renderProgressDetails", "ProgressBarComplete", "ProgressBarError", "error", "displayErrorAlert", "errorMessage", "calculateProcessingProgress", "files", "values", "mode", "message", "progress", "preprocess", "postprocess", "value", "total", "progressValue", "__name", "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", "hideProgressDetails", "numUploads", "complete", "totalSize", "totalETA", "totalUploadedSize", "getProgressValue", "progress", "calculateProcessingProgress", "__name", "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", "__name", "StatusBar", "x", "#lastUpdateTime", "#previousUploadedBytes", "#previousSpeed", "#previousETA", "pv", "file", "#onUploadStart", "#computeSmoothETA", "totalBytes", "remaining", "dt", "uploadedBytesSinceLastTick", "currentSpeed", "filteredSpeed", "emaFilter", "instantETA", "updatedPreviousETA", "filteredETA", "capabilities", "allowNewUpload", "totalProgress", "newFiles", "startedFiles", "completeFiles", "isUploadStarted", "isAllPaused", "isUploadInProgress", "isSomeGhost", "newFilesOrRecovered", "resumableUploads", "supportsUploadProgress", "totalSize", "totalUploadedSize", "f", "totalETA", "u", "StatusBarUI", "WIDTH_XL", "WIDTH_LG", "WIDTH_MD", "HEIGHT_MD", "Dashboard", "props", "isNoFiles", "isSingleFile", "isSizeMD", "isSizeHeightMD", "dashboardClassName", "classNames", "itemsPerRow", "showFileList", "numberOfFilesForRecovery", "numberOfGhosts", "fileID", "renderRestoredText", "__name", "u", "isDragDropSupported", "PickerPanelTopBar_default", "FileList", "AddFiles_default", "Slide_default", "AddFilesPanel_default", "FileCard", "PickerPanelContent_default", "EditorPanel_default", "Informer", "StatusBar", "target", "locale_default", "import_debounce", "getActiveOverlayEl", "dashboardEl", "activeOverlayType", "overlayEl", "__name", "createSuperFocus", "lastFocusWasOnSuperFocusableEl", "debounce", "__name", "dashboardEl", "activeOverlayType", "overlayEl", "getActiveOverlayEl", "isFocusInOverlay", "superFocusableEl", "FOCUSABLE_ELEMENTS_default", "focusOnFirstNode", "event", "nodes", "node", "__name", "focusOnLastNode", "isFocusInOverlay", "activeOverlayEl", "trapFocus", "activeOverlayType", "dashboardEl", "getActiveOverlayEl", "focusableNodes", "toArray_default", "FOCUSABLE_ELEMENTS_default", "focusedItemIndex", "forInline", "event", "activeOverlayType", "dashboardEl", "trapFocus", "__name", "TAB_KEY", "ESC_KEY", "createPromise", "o", "resolve", "reject", "__name", "defaultOptions", "defaultPickerIcon", "Dashboard", "UIPlugin_default", "package_default", "#disabledNodes", "nanoid", "createSuperFocus", "uppy", "opts", "autoOpen", "locale_default", "plugin", "newTargets", "target", "callerPluginId", "callerPluginName", "callerPluginType", "state", "update", "id", "targets", "activePickerPanel", "file", "#getEditors", "editors", "editor", "metaFields", "promise", "handler", "manualClose", "isHidden", "isClosing", "isDarkModeOn", "capabilities", "event", "isDarkModeOnNow", "show", "fileID", "files", "descriptors", "err", "entries", "uppyDashboardInnerEl", "width", "height", "pluginState", "isModalAndClosed", "disable", "NODES_TO_DISABLE", "nodesToDisable", "toArray_default", "node", "trapFocus", "canSomePluginHandleRootDrop", "somePluginCanHandleRootDrop", "doesEventHaveFiles", "types", "type", "hasFiles", "executedDropErrorOnce", "logDropError", "error", "getDroppedFiles", "forInline", "failed", "#generateLargeThumbnailIfSingleFile", "LARGE_THUMBNAIL", "thumbnailGenerator", "fileForThumbnail", "#openFileEditorWhenFilesAdded", "firstFile", "isMetaEditorEnabled", "isImageEditorEnabled", "showModalTrigger", "findAllDOMElements_default", "trigger", "#addSupportedPluginIfNoTarget", "isFocusInUppy", "isFocusNowhere", "isInformerHidden", "isModal", "meta", "#attachRenderFunctionToTarget", "#isTargetSupported", "#getAcquirers", "#getProgressIndicators", "allowNewUpload", "newFiles", "uploadStartedFiles", "completeFiles", "erroredFiles", "inProgressFiles", "inProgressNotPausedFiles", "processingFiles", "isUploadStarted", "isAllComplete", "isAllPaused", "acquirers", "progressindicators", "theme", "#addSpecifiedPluginsFromOptions", "plugins", "pluginID", "#autoDiscoverPlugins", "typesAllowed", "installedPlugin", "#getThumbnailGeneratorOpts", "thumbnailWidth", "thumbnailHeight", "thumbnailType", "waitForThumbnailsBeforeUpload", "#getThumbnailGeneratorId", "inline", "closeAfterFinish", "allowMultipleUploads", "allowMultipleUploadBatches", "ThumbnailGenerator", "isDarkModeOnFromTheStart", "thumbnail", "package_default", "locale_default", "defaultOptions", "DragDrop", "_DragDrop", "UIPlugin_default", "__name", "package_default", "isDragDropSupported", "uppy", "opts", "locale_default", "files", "descriptors", "file", "err", "event", "toArray_default", "types", "hasFiles", "type", "allowNewUpload", "logDropError", "error", "getDroppedFiles", "restrictions", "u", "ref", "dragDropClass", "dragDropStyle", "target", "package_default", "defaultOpts", "isFileTransfer", "event", "type", "__name", "DropTarget", "BasePlugin", "package_default", "uppy", "opts", "files", "descriptors", "file", "err", "plugin", "executedDropErrorOnce", "logDropError", "error", "getDroppedFiles", "target", "toArray_default", "node", "package_default", "locale_default", "Dropbox", "UIPlugin_default", "__name", "package_default", "uppy", "opts", "tokenStorage_exports", "u", "getAllowedHosts", "Provider", "locale_default", "ProviderView", "target", "state", "package_default", "locale_default", "Facebook", "UIPlugin_default", "__name", "package_default", "uppy", "opts", "tokenStorage_exports", "u", "getAllowedHosts", "Provider", "locale_default", "ProviderView", "target", "state", "partialTree", "currentFolderId", "i", "_extends", "target", "i", "source", "key", "__name", "NODE_LIST_CLASSES", "IGNORED_ELEMENT_TYPES", "CHECKED_INPUT_TYPES", "TRIM_RE", "slice", "toString", "getFormData", "form", "options", "data", "elementName", "elementNames", "elementNameLookup", "l", "element", "_i", "_l", "value", "getFieldData", "fieldName", "getFormElementValue", "allRadios", "trim", "type", "package_default", "defaultOptions", "assertHTMLFormElement", "input", "__name", "Form", "BasePlugin", "package_default", "#form", "uppy", "opts", "result", "ev", "elements", "toArray_default", "disabledByUppy", "el", "button", "err", "resultInput", "updatedResult", "formMeta", "getFormData", "findDOMElement_default", "package_default", "indexedDB", "isSupported", "DB_NAME", "STORE_NAME", "DEFAULT_EXPIRY", "DB_VERSION", "MiB", "migrateExpiration", "store", "request", "event", "cursor", "entry", "__name", "connect", "dbName", "resolve", "reject", "db", "transaction", "waitForRequest", "cleanedUp", "IndexedDBStore", "_IndexedDBStore", "#ready", "opts", "createConnection", "fileID", "files", "file", "data", "size", "IndexedDBStore_default", "import_throttle", "maybeParse", "str", "__name", "prefix", "getItemKey", "name", "expireOldState", "existingKeys", "i", "key", "now", "data", "obj", "MetaDataStore", "#saveThrottled", "opts", "throttle", "#state", "savedState", "state", "metadata", "isSupported", "waitForServiceWorker", "resolve", "reject", "__name", "ServiceWorkerStore", "#ready", "opts", "val", "onMessage", "event", "file", "fileID", "ServiceWorkerStore_default", "defaultOptions", "GoldenRetriever", "_GoldenRetriever", "BasePlugin", "__name", "package_default", "#metaDataStore", "#serviceWorkerStore", "#indexedDBStore", "uppy", "opts", "MetaDataStore", "ServiceWorkerStore_default", "IndexedDBStore_default", "#restore", "recoveredState", "currentUploads", "recoveredFiles", "files", "f", "filesEntries", "hasFiles", "serviceWorkerBlobs", "indexedDbBlobs", "#loadFileBlobsFromServiceWorker", "#loadFileBlobsFromIndexedDB", "blobs", "filesWithBlobs", "fileID", "file", "blob", "obsoleteBlobs", "#deleteBlobs", "err", "#patchMetadata", "pluginData", "patch", "existing", "numberOfFilesRecovered", "fileIDs", "id", "#addBlobToStores", "data", "isRemote", "#handleStateUpdate", "prevState", "nextState", "filesWithoutBlobs", "preview", "fileInfo", "addedFiles", "nextFile", "editedFileBlobs", "prevFile", "blobsToDelete", "blobsToAdd", "#handleRestoreConfirmed", "uploadId", "#handlePluginDataChanged", "package_default", "DriveProviderViews", "ProviderView", "__name", "item", "isShiftKeyPressed", "locale_default", "GoogleDrive", "UIPlugin_default", "__name", "package_default", "uppy", "opts", "tokenStorage_exports", "u", "getAllowedHosts", "Provider", "locale_default", "DriveProviderViews", "target", "state", "package_default", "locale_default", "GoogleDrivePicker", "_GoogleDrivePicker", "UIPlugin_default", "__name", "package_default", "GoogleDriveIcon", "locale_default", "uppy", "opts", "tokenStorage_exports", "client", "RequestClient", "target", "files", "accessToken", "id", "mimeType", "name", "platform", "rest", "u", "GooglePickerView", "package_default", "locale_default", "GooglePhotosPicker", "_GooglePhotosPicker", "UIPlugin_default", "__name", "package_default", "GooglePhotosIcon", "locale_default", "uppy", "opts", "tokenStorage_exports", "client", "RequestClient", "target", "files", "accessToken", "id", "mimeType", "name", "platform", "rest", "u", "GooglePickerView", "import_cropperjs", "package_default", "Editor", "x", "__name", "initCropper", "ev", "newGranularAngle", "i18n", "angleGranular", "u", "currentImage", "objectUrl", "opts", "actions", "ref", "locale_default", "getCanvasDataThatFitsPerfectlyIntoContainer", "containerData", "canvasData", "widthRatio", "heightRatio", "scaleFactor", "newWidth", "newHeight", "newLeft", "newTop", "__name", "getCanvasDataThatFitsPerfectlyIntoContainer_default", "toRadians", "angle", "__name", "getScaleFactorThatRemovesDarkCorners", "w", "h", "granularAngle", "\u03B1", "getScaleFactorThatRemovesDarkCorners_default", "limitCropboxMovementOnMove", "canvas", "cropbox", "prevCropbox", "__name", "limitCropboxMovementOnMove_default", "limitCropboxMovementOnResize", "canvas", "cropboxData", "prevCropbox", "__name", "limitCropboxMovementOnResize_default", "defaultEditorState", "defaultCropperOptions", "defaultActions", "defaultOptions", "ImageEditor", "UIPlugin_default", "__name", "package_default", "uppy", "opts", "locale_default", "file", "fileTypeSpecific", "currentImage", "saveBlobCallback", "blob", "fileId", "updatedFile", "croppedCanvas", "cropper", "degrees", "angle", "angleGranular", "isFlippedHorizontally", "newAngle", "canvasData", "containerData", "newCanvasData", "getCanvasDataThatFitsPerfectlyIntoContainer_default", "granularAngle", "image", "scaleFactor", "getScaleFactorThatRemovesDarkCorners_default", "scaleFactorX", "ratio", "newRatio", "ratioMap", "fileData", "imgElement", "Cropper", "event", "cropboxData", "newCropboxData", "limitCropboxMovementOnMove_default", "limitCropboxMovementOnResize_default", "target", "u", "Editor", "package_default", "locale_default", "Instagram", "UIPlugin_default", "__name", "package_default", "uppy", "opts", "tokenStorage_exports", "u", "locale_default", "getAllowedHosts", "Provider", "ProviderView", "target", "state", "package_default", "locale_default", "OneDrive", "UIPlugin_default", "__name", "package_default", "uppy", "opts", "tokenStorage_exports", "u", "getAllowedHosts", "Provider", "locale_default", "ProviderView", "target", "state", "package_default", "locale_default", "Unsplash", "UIPlugin_default", "__name", "package_default", "uppy", "opts", "tokenStorage_exports", "locale_default", "u", "getAllowedHosts", "SearchProvider", "SearchProviderView", "target", "state", "package_default", "locale_default", "UrlUI", "x", "__name", "props", "nanoid", "#handleSubmit", "ev", "addFile", "preparedValue", "i18n", "u", "input", "UrlUI_default", "forEachDroppedOrPastedUrl", "dataTransfer", "isDropOrPaste", "callback", "items", "toArray_default", "urlItems", "item", "urlString", "__name", "UrlIcon", "u", "__name", "addProtocolToURL", "url", "protocolRegex", "defaultProtocol", "canHandleRootDrop", "e", "toArray_default", "item", "checkIfCorrectURL", "getFileNameFromUrl", "pathname", "Url", "_Url", "UIPlugin_default", "package_default", "uppy", "opts", "locale_default", "RequestClient", "protocollessUrl", "optionalMeta", "meta", "file", "err", "forEachDroppedOrPastedUrl", "UrlUI_default", "target", "package_default", "locale_default", "Zoom", "UIPlugin_default", "__name", "package_default", "uppy", "opts", "tokenStorage_exports", "u", "getAllowedHosts", "Provider", "locale_default", "ProviderView", "target", "state", "package_default", "availablePlugins", "Box", "Dropbox", "Facebook", "GoogleDrive", "Instagram", "OneDrive", "Unsplash", "Url", "Zoom", "defaultOptions", "RemoteSources", "BasePlugin", "__name", "package_default", "#installedPlugins", "uppy", "opts", "newOpts", "pluginId", "sources", "rest", "optsForRemoteSourcePlugin", "plugin", "pluginNames", "formatter", "package_default", "locale_default", "DiscardButton", "onDiscard", "i18n", "u", "__name", "RecordButton", "recording", "onStartRecording", "onStopRecording", "i18n", "u", "__name", "ScreenshotButton", "onScreenshot", "i18n", "u", "__name", "fmtMSS", "s", "__name", "StopWatch", "x", "props", "state", "recording", "i18n", "elapsedTime", "minAndSec", "u", "StopWatch_default", "StreamStatus", "streamActive", "i18n", "u", "__name", "SubmitButton", "recording", "recordedVideo", "onSubmit", "capturedScreenshotUrl", "i18n", "u", "__name", "RecorderScreen", "x", "__name", "onStop", "recording", "videoStream", "recordedVideo", "enableScreenshots", "capturedScreenshotUrl", "videoProps", "u", "StreamStatus", "videoElement", "StopWatch_default", "k", "SubmitButton", "DiscardButton", "ScreenshotButton", "RecordButton", "RecorderScreen_default", "ScreenRecIcon", "u", "__name", "isScreenRecordingSupported", "__name", "getMediaDevices", "SUPPORTED_IMAGE_TYPES", "defaultOptions", "ScreenCapture", "UIPlugin_default", "package_default", "uppy", "opts", "ScreenRecIcon", "locale_default", "target", "res", "resolve", "videoStream", "err", "audioStream", "options", "preferredVideoMimeType", "getFileTypeExtension", "tracks", "event", "recordedVideo", "recording", "file", "error", "capturedScreenshotUrl", "track", "mimeType", "fileExtension", "name", "blob", "stream", "newStream", "video", "canvas", "ctx", "quality", "reject", "screenshotUrl", "recorderState", "u", "RecorderScreen_default", "package_default", "locale_default", "StatusBarStates_default", "import_classnames", "import_prettier_bytes", "import_classnames", "DOT", "renderDot", "__name", "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", "__name", "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", "__name", "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", "__name", "defaultOptions", "StatusBar", "UIPlugin_default", "package_default", "#lastUpdateTime", "#previousUploadedBytes", "#previousSpeed", "#previousETA", "uppy", "opts", "locale_default", "#computeSmoothETA", "totalBytes", "remaining", "dt", "uploadedBytesSinceLastTick", "currentSpeed", "filteredSpeed", "emaFilter", "instantETA", "updatedPreviousETA", "filteredETA", "capabilities", "allowNewUpload", "totalProgress", "newFiles", "startedFiles", "completeFiles", "isUploadStarted", "isAllPaused", "isUploadInProgress", "isSomeGhost", "newFilesOrRecovered", "resumableUploads", "supportsUploadProgress", "totalSize", "totalUploadedSize", "f", "file", "totalETA", "StatusBarUI", "element", "getTextDirection_default", "#onUploadStart", "pv", "target", "_typeof", "o", "__name", "_defineProperties", "target", "props", "i", "descriptor", "_toPropertyKey", "_createClass", "Constructor", "protoProps", "staticProps", "t", "_toPrimitive", "r", "e", "_classCallCheck", "instance", "_callSuper", "_getPrototypeOf", "_possibleConstructorReturn", "_isNativeReflectConstruct", "self", "call", "_assertThisInitialized", "_inherits", "subClass", "superClass", "_setPrototypeOf", "_wrapNativeSuper", "Class", "_cache", "_isNativeFunction", "Wrapper", "_construct", "p", "fn", "DetailedError", "_Error", "message", "_this", "causingErr", "req", "res", "requestId", "method", "url", "status", "body", "error_default", "isEnabled", "log", "msg", "isEnabled", "__name", "_typeof", "o", "__name", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "i", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "t", "_toPrimitive", "r", "e", "NoopUrlStorage", "_fingerprint", "_urlStorageKey", "_upload", "version", "VERSION", "_hasBuffer", "_TD", "_TE", "b64ch", "b64chs", "b64tab", "a", "tab", "c", "i", "b64re", "_fromCC", "_U8Afrom", "it", "_mkUriSafe", "__name", "src", "m0", "_tidyB64", "s", "btoaPolyfill", "bin", "u32", "c0", "c1", "c2", "asc", "pad", "_btoa", "_fromUint8Array", "u8a", "strs", "l", "fromUint8Array", "urlsafe", "cb_utob", "cc", "re_utob", "utob", "u", "_encode", "encode", "encodeURI", "re_btou", "cb_btou", "cccc", "cp", "offset", "btou", "b", "atobPolyfill", "u24", "r1", "r2", "_atob", "_toUint8Array", "toUint8Array", "_unURI", "_decode", "decode", "isValid", "_noEnum", "v", "extendString", "_add", "name", "body", "extendUint8Array", "extendBuiltins", "gBase64", "import_url_parse", "uuid", "c", "r", "v", "__name", "_regeneratorRuntime", "__name", "t", "r", "n", "o", "e", "i", "c", "u", "define", "wrap", "Generator", "a", "Context", "makeInvokeMethod", "tryCatch", "h", "l", "f", "s", "y", "GeneratorFunction", "GeneratorFunctionPrototype", "p", "d", "v", "values", "g", "defineIteratorMethods", "AsyncIterator", "invoke", "_typeof", "callInvokeWithMethodAndArg", "maybeInvokeDelegate", "pushTryEntry", "resetTryEntry", "next", "handle", "asyncGeneratorStep", "gen", "resolve", "reject", "_next", "_throw", "key", "arg", "info", "value", "error", "_asyncToGenerator", "fn", "self", "args", "err", "_slicedToArray", "arr", "_arrayWithHoles", "_iterableToArrayLimit", "_unsupportedIterableToArray", "_nonIterableRest", "_createForOfIteratorHelper", "allowArrayLike", "it", "F", "_e", "normalCompletion", "didErr", "step", "_e2", "minLen", "_arrayLikeToArray", "len", "arr2", "ownKeys", "_objectSpread", "_defineProperty", "obj", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "descriptor", "_createClass", "protoProps", "staticProps", "_toPrimitive", "PROTOCOL_TUS_V1", "PROTOCOL_IETF_DRAFT_03", "PROTOCOL_IETF_DRAFT_05", "defaultOptions", "defaultOnShouldRetry", "BaseUpload", "file", "options", "_this", "fingerprint", "previousUpload", "_this2", "retryDelays", "_i", "_arr", "optionName", "log", "source", "_this$options$paralle", "_this3", "totalSize", "totalProgress", "partCount", "parts", "splitSizeIntoParts", "part", "index", "uploads", "lastPartProgress", "_ref", "newPartProgress", "upload", "req", "metadata", "encodeMetadata", "res", "inStatusCategory", "location", "resolveUrl", "shouldTerminate", "_this4", "_iterator", "_step", "message", "causingErr", "error_default", "_this5", "shouldResetDelays", "shouldRetry", "delay", "lastResponse", "bytesSent", "bytesTotal", "chunkSize", "bytesAccepted", "_this6", "promise", "_this7", "status", "offset", "length", "_this8", "_this9", "start", "end", "_ref2", "done", "valueSize", "newSize", "method", "url", "openRequest", "_this10", "_this11", "storedUpload", "urlStorageKey", "body", "sendRequest", "remainingDelays", "newOptions", "_ref3", "_ref4", "gBase64", "category", "headers", "_i2", "_Object$entries", "_Object$entries$_i", "name", "requestId", "uuid", "_x", "_x2", "_x3", "_sendRequest2", "_callee", "_context", "isOnline", "online", "retryAttempt", "origin", "link", "URL", "partSize", "upload_default", "isReactNative", "__name", "isReactNative_default", "uriToBlob", "uri", "resolve", "reject", "xhr", "blob", "err", "__name", "isCordova", "__name", "isCordova_default", "readAsByteArray", "chunk", "resolve", "reject", "reader", "value", "err", "__name", "_typeof", "o", "__name", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "i", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "t", "_toPrimitive", "r", "e", "FileSource", "file", "start", "end", "isCordova_default", "readAsByteArray", "value", "done", "_typeof", "o", "__name", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "i", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "t", "_toPrimitive", "r", "e", "len", "blobOrArray", "concat", "a", "b", "c", "StreamSource", "reader", "start", "end", "_this", "hasEnoughData", "value", "done", "_ref", "hasAllDataBeenRead", "_typeof", "o", "__name", "_regeneratorRuntime", "t", "r", "n", "e", "i", "c", "u", "define", "wrap", "Generator", "a", "Context", "makeInvokeMethod", "tryCatch", "h", "l", "f", "s", "y", "GeneratorFunction", "GeneratorFunctionPrototype", "p", "d", "v", "values", "g", "defineIteratorMethods", "AsyncIterator", "invoke", "callInvokeWithMethodAndArg", "maybeInvokeDelegate", "pushTryEntry", "resetTryEntry", "next", "handle", "asyncGeneratorStep", "gen", "resolve", "reject", "_next", "_throw", "key", "arg", "info", "value", "error", "_asyncToGenerator", "fn", "self", "args", "err", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "_toPrimitive", "FileReader", "_openFile", "_callee", "input", "chunkSize", "blob", "_context", "isReactNative_default", "uriToBlob", "FileSource", "StreamSource", "openFile", "_x", "_x2", "fingerprint", "file", "options", "isReactNative_default", "reactNativeFingerprint", "__name", "exifHash", "hashCode", "str", "hash", "i", "_char", "_typeof", "o", "__name", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "i", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "t", "_toPrimitive", "r", "e", "XHRHttpStack", "method", "url", "Request", "Request", "method", "url", "_classCallCheck", "__name", "_createClass", "header", "value", "progressHandler", "e", "_this", "body", "resolve", "reject", "Response", "err", "xhr", "_typeof", "o", "__name", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "i", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "t", "_toPrimitive", "r", "e", "hasStorage", "key", "originalValue", "canStoreURLs", "WebStorageUrlStorage", "results", "fingerprint", "urlStorageKey", "upload", "id", "prefix", "_key", "_typeof", "o", "__name", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "i", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "_callSuper", "t", "e", "_getPrototypeOf", "_possibleConstructorReturn", "_isNativeReflectConstruct", "self", "call", "_assertThisInitialized", "_inherits", "subClass", "superClass", "_setPrototypeOf", "p", "ownKeys", "r", "_objectSpread", "_defineProperty", "obj", "key", "value", "_toPrimitive", "defaultOptions", "upload_default", "XHRHttpStack", "FileReader", "canStoreURLs", "WebStorageUrlStorage", "NoopUrlStorage", "fingerprint", "Upload", "_BaseUpload", "file", "options", "url", "isSupported", "package_default", "isCordova", "__name", "isReactNative", "getFingerprint", "uppyFile", "file", "options", "defaultOptions", "uppyFingerprint", "tusDefaultOptions", "defaultOptions", "Tus", "BasePlugin", "__name", "package_default", "#retryDelayIterator", "uppy", "opts", "RateLimitedQueue", "fileID", "uploader", "#uploadLocalFile", "file", "resolve", "reject", "queuedRequest", "qRequest", "upload", "onShouldRetry", "onBeforeRequest", "commonOpts", "uploadOptions", "getFingerprint", "req", "xhr", "userProvidedPromise", "hasProperty", "done", "p", "res", "err", "isNetworkError_default", "NetworkError_default", "bytesUploaded", "bytesTotal", "latestFile", "payload", "uploadResp", "defaultOnShouldRetry", "status", "next", "error", "retryAttempt", "copyProp", "obj", "srcProp", "destProp", "meta", "getAllowedMetaFields", "item", "Upload", "eventManager", "EventManager", "previousUploads", "previousUpload", "targetFileID", "isPaused", "uploadURL", "currentFile", "#getCompanionClientArgs", "#uploadFiles", "files", "filesFiltered", "filterFilesToUpload", "filesToEmit", "filterFilesToEmitUploadStarted", "getQueue", "controller", "removedHandler", "removedFile", "uploadPromise", "#handleUpload", "fileIDs", "filesToUpload", "package_default", "import_component_emitter", "ASSEMBLY_UPLOADING", "ASSEMBLY_EXECUTING", "ASSEMBLY_COMPLETED", "statusOrder", "isStatus", "status", "test", "__name", "TransloaditAssembly", "Emitter", "#rateLimitedQueue", "#fetchWithNetworkError", "#previousFetchStatusStillPending", "#sse", "#status", "assembly", "rateLimitedQueue", "fetchWithNetworkError", "#connectServerSentEvents", "#beginPolling", "#onFinished", "#fetchStatus", "file", "stepName", "result", "details", "#onError", "assemblyOrError", "diff", "statusUrl", "getAssemblyUrlSsl", "response", "NetworkError_default", "err", "next", "#diffStatus", "prev", "prevStatus", "nextStatus", "nowExecuting", "prevUploads", "nextUploads", "upload", "hasProperty", "nextResultsMap", "prevResultsMap", "nextResults", "prevResults", "n", "p", "Assembly_default", "import_component_emitter", "TransloaditAssemblyWatcher", "Emitter", "__name", "#assemblyIDs", "#remaining", "#resolve", "#reject", "#uppy", "uppy", "assemblyIDs", "resolve", "reject", "#addListeners", "#watching", "id", "#onAssemblyComplete", "assembly", "assemblyId", "#checkAllComplete", "#onAssemblyCancel", "#onAssemblyError", "error", "#onImportError", "fileID", "#removeListeners", "AssemblyWatcher_default", "ASSEMBLIES_ENDPOINT", "AssemblyError", "__name", "message", "details", "assembly", "Client", "#headers", "#fetchWithNetworkError", "opts", "fetchWithNetworkError", "#fetchJSON", "args", "response", "serverError", "error", "err", "params", "fields", "signature", "expectedFiles", "data", "key", "url", "#reportError", "file", "size", "getAssemblyUrlSsl", "uploadUrl", "filename", "qs", "endpoint", "instance", "locale_default", "defaultOptions", "sendErrorToConsole", "__name", "originalErr", "err", "error", "ErrorWithCause_default", "validateParams", "params", "parsed", "ensureAssemblyId", "status", "ensureUrl", "label", "candidates", "value", "getAssemblyUrl", "assembly", "getAssemblyUrlSsl", "COMPANION_URL", "COMPANION_ALLOWED_HOSTS", "TL_COMPANION", "Transloadit", "BasePlugin", "package_default", "#rateLimitedQueue", "#assembly", "#watcher", "uppy", "opts", "locale_default", "RateLimitedQueue", "Client", "#getClientVersion", "list", "Tus", "addPluginVersion", "pluginName", "versionName", "plugin", "#attachAssemblyMetadata", "file", "assemblyUrl", "tusEndpoint", "assemblyId", "meta", "tus", "remote", "newHost", "path", "newFile", "#createAssembly", "fileIDs", "assemblyOptions", "newAssembly", "files", "id", "Assembly_default", "assemblyID", "updatedFiles", "wrapped", "#createAssemblyWatcher", "idOrArrayOfIds", "ids", "watcher", "AssemblyWatcher_default", "filesFromAssembly", "#shouldWaitAfterUpload", "#reserveFiles", "fileID", "#handleAssemblyStatusUpdate", "assemblyResponse", "#onFileUploadURLAvailable", "rawFile", "#findFile", "uploadedFile", "i", "#onFileUploadComplete", "state", "#onResult", "stepName", "result", "entry", "#onAssemblyFinished", "url", "finalStatus", "#cancelAssembly", "#onCancelAll", "#onRestored", "pluginData", "previousAssembly", "restoreState", "results", "restoredResults", "stepResults", "restoreAssemblies", "#connectAssembly", "updateAssembly", "details", "#prepareUpload", "#afterUpload", "uploadID", "closeSocketConnections", "hasProperty", "#closeAssemblyIfExists", "#onError", "#onTusError", "_", "endpoint", "capabilities", "import_is_mobile", "package_default", "CameraIcon", "u", "__name", "DiscardButton", "onDiscard", "i18n", "u", "__name", "DiscardButton_default", "RecordButton", "recording", "onStartRecording", "onStopRecording", "i18n", "u", "__name", "formatSeconds", "seconds", "__name", "RecordingLength", "recordingLengthSeconds", "formattedRecordingLengthSeconds", "formatSeconds", "u", "__name", "SnapshotButton", "onSnapshot", "i18n", "u", "CameraIcon", "__name", "SubmitButton", "onSubmit", "i18n", "u", "__name", "SubmitButton_default", "VideoSourceSelect", "currentDeviceId", "videoSources", "onChangeVideoSource", "u", "__name", "event", "videoSource", "isModeAvailable", "modes", "mode", "__name", "CameraScreen", "x", "onFocus", "onStop", "src", "recordedVideo", "capturedSnapshot", "recording", "supportsRecording", "videoSources", "showVideoSourceDropdown", "showRecordingLength", "onSubmit", "i18n", "mirror", "onSnapshot", "onStartRecording", "onStopRecording", "onDiscardRecordedMedia", "recordingLengthSeconds", "hasRecordedVideo", "hasCapturedSnapshot", "hasRecordedMedia", "shouldShowRecordButton", "shouldShowSnapshotButton", "shouldShowRecordingLength", "shouldShowVideoSourceDropdown", "videoProps", "u", "videoElement", "VideoSourceSelect", "SnapshotButton", "RecordButton", "SubmitButton_default", "DiscardButton_default", "RecordingLength", "CameraScreen_default", "locale_default", "PermissionsScreen", "icon", "i18n", "hasCamera", "u", "__name", "supportsMediaRecorder", "__name", "toMimeType", "fileType", "mimeTypes_default", "__name", "isVideoMimeType", "mimeType", "isImageMimeType", "getMediaDevices", "isModeAvailable", "modes", "mode", "defaultOptions", "Webcam", "UIPlugin_default", "package_default", "#enableMirror", "uppy", "opts", "u", "locale_default", "recordedVideo", "capturedSnapshot", "isRecording", "cameraReady", "cameraError", "newOpts", "devices", "device", "deviceId", "acceptsAudio", "acceptsVideo", "videoConstraints", "options", "constraints", "hasCamera", "stream", "currentDeviceId", "tracks", "track", "err", "restrictions", "preferredVideoMimeTypes", "filterSupportedTypes", "candidateType", "getFileTypeExtension", "acceptableMimeTypes", "stoppingBecauseOfMaxSize", "event", "totalSize", "acc", "chunk", "expectedEndChunkSize", "maxSize", "currentRecordingLength", "resolve", "file", "error", "audioTracks", "videoTracks", "reject", "count", "countDown", "message", "capturedSnapshotUrl", "video", "width", "height", "canvas", "preferredImageMimeTypes", "ext", "name", "canvasToBlob", "blob", "fileExtension", "webcamState", "PermissionsScreen", "CameraIcon", "CameraScreen_default", "supportsMediaRecorder", "mobileNativeCamera", "target", "restartStream", "videoSources", "videoSource", "package_default", "locale_default", "buildResponseError", "xhr", "err", "error", "isNetworkError_default", "NetworkError_default", "__name", "setTypeInBlob", "file", "defaultOptions", "XHRUpload", "BasePlugin", "package_default", "#getFetcher", "#queue", "uppy", "opts", "locale_default", "TaskQueue", "files", "url", "options", "res", "fetcher", "retryCount", "timeout", "seconds", "event", "id", "body", "cause", "uploadURL", "request", "overrides", "headers", "formData", "meta", "getAllowedMetaFields", "item", "value", "subItem", "formPost", "dataWithUpdatedType", "#uploadLocalFile", "events", "EventManager", "controller", "signal", "fetch", "endpoint", "#uploadBundle", "abort", "optsFromState", "#getCompanionClientArgs", "allowedMetaFields", "name", "#uploadFiles", "getQueue", "removedHandler", "removedFile", "#handleUpload", "fileIDs", "filesFiltered", "filterFilesToUpload", "filesToEmit", "filterFilesToEmitUploadStarted", "capabilities", "Core", "__name", "views", "lib_exports", "locales"]
}
