pixivflow 2.0.38 → 2.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/commands/DownloadCommand.d.ts.map +1 -1
  2. package/dist/commands/DownloadCommand.js +50 -2
  3. package/dist/commands/DownloadCommand.js.map +1 -1
  4. package/dist/config/validation.d.ts.map +1 -1
  5. package/dist/config/validation.js +11 -3
  6. package/dist/config/validation.js.map +1 -1
  7. package/dist/index.js +37 -14
  8. package/dist/index.js.map +1 -1
  9. package/dist/package.json +1 -1
  10. package/dist/pixiv/AuthClient.d.ts.map +1 -1
  11. package/dist/pixiv/AuthClient.js +56 -7
  12. package/dist/pixiv/AuthClient.js.map +1 -1
  13. package/dist/storage/Database.d.ts +22 -0
  14. package/dist/storage/Database.d.ts.map +1 -1
  15. package/dist/storage/Database.js +19 -0
  16. package/dist/storage/Database.js.map +1 -1
  17. package/dist/storage/DatabaseMigration.d.ts.map +1 -1
  18. package/dist/storage/DatabaseMigration.js +29 -0
  19. package/dist/storage/DatabaseMigration.js.map +1 -1
  20. package/dist/storage/repositories/TaskHistoryRepository.d.ts +61 -0
  21. package/dist/storage/repositories/TaskHistoryRepository.d.ts.map +1 -0
  22. package/dist/storage/repositories/TaskHistoryRepository.js +171 -0
  23. package/dist/storage/repositories/TaskHistoryRepository.js.map +1 -0
  24. package/dist/utils/errors.js +11 -11
  25. package/dist/utils/errors.js.map +1 -1
  26. package/dist/utils/pixiv-url-parser.d.ts +7 -1
  27. package/dist/utils/pixiv-url-parser.d.ts.map +1 -1
  28. package/dist/utils/pixiv-url-parser.js +75 -8
  29. package/dist/utils/pixiv-url-parser.js.map +1 -1
  30. package/dist/utils/token-manager.d.ts.map +1 -1
  31. package/dist/utils/token-manager.js +73 -5
  32. package/dist/utils/token-manager.js.map +1 -1
  33. package/dist/webui/package.json +1 -1
  34. package/dist/webui/routes/download.d.ts.map +1 -1
  35. package/dist/webui/routes/download.js +2 -0
  36. package/dist/webui/routes/download.js.map +1 -1
  37. package/dist/webui/routes/handlers/download-basic-handlers.d.ts +11 -0
  38. package/dist/webui/routes/handlers/download-basic-handlers.d.ts.map +1 -1
  39. package/dist/webui/routes/handlers/download-basic-handlers.js +199 -8
  40. package/dist/webui/routes/handlers/download-basic-handlers.js.map +1 -1
  41. package/dist/webui/services/DownloadTaskManager.d.ts.map +1 -1
  42. package/dist/webui/services/DownloadTaskManager.js +75 -3
  43. package/dist/webui/services/DownloadTaskManager.js.map +1 -1
  44. package/package.json +1 -1
  45. package/dist/webui/assets/ActionButton-DWq-fh3_.js +0 -2
  46. package/dist/webui/assets/ActionButton-DWq-fh3_.js.map +0 -1
  47. package/dist/webui/assets/CheckCircleOutlined-Can0-7ew.js +0 -2
  48. package/dist/webui/assets/CheckCircleOutlined-Can0-7ew.js.map +0 -1
  49. package/dist/webui/assets/CloseCircleOutlined-DfRmL2eG.js +0 -2
  50. package/dist/webui/assets/CloseCircleOutlined-DfRmL2eG.js.map +0 -1
  51. package/dist/webui/assets/Config-D9TWUGQR.js +0 -16
  52. package/dist/webui/assets/Config-D9TWUGQR.js.map +0 -1
  53. package/dist/webui/assets/Dashboard-CaGAH0y2.js +0 -2
  54. package/dist/webui/assets/Dashboard-CaGAH0y2.js.map +0 -1
  55. package/dist/webui/assets/DeleteOutlined-u-P2SpoK.js +0 -2
  56. package/dist/webui/assets/DeleteOutlined-u-P2SpoK.js.map +0 -1
  57. package/dist/webui/assets/Download-D9E4xrnM.js +0 -2
  58. package/dist/webui/assets/Download-D9E4xrnM.js.map +0 -1
  59. package/dist/webui/assets/Files-CKyc_PdW.js +0 -5
  60. package/dist/webui/assets/Files-CKyc_PdW.js.map +0 -1
  61. package/dist/webui/assets/PictureOutlined-C8Lbucj1.js +0 -2
  62. package/dist/webui/assets/PictureOutlined-C8Lbucj1.js.map +0 -1
  63. package/dist/webui/assets/SortDescendingOutlined-CR-hdhyW.js +0 -2
  64. package/dist/webui/assets/SortDescendingOutlined-CR-hdhyW.js.map +0 -1
  65. package/dist/webui/assets/ThunderboltOutlined-CiiB2de5.js +0 -2
  66. package/dist/webui/assets/ThunderboltOutlined-CiiB2de5.js.map +0 -1
  67. package/dist/webui/assets/UrlDownload-ClkUOXN_.js +0 -3
  68. package/dist/webui/assets/UrlDownload-ClkUOXN_.js.map +0 -1
  69. package/dist/webui/assets/dateUtils-CBk8bEa_.js +0 -2
  70. package/dist/webui/assets/dateUtils-CBk8bEa_.js.map +0 -1
  71. package/dist/webui/assets/errorCodeTranslator-DWsWq6B3.js +0 -3
  72. package/dist/webui/assets/errorCodeTranslator-DWsWq6B3.js.map +0 -1
  73. package/dist/webui/assets/index-BFgUdwJv.js +0 -214
  74. package/dist/webui/assets/index-BFgUdwJv.js.map +0 -1
  75. package/dist/webui/assets/index-CN3FylAF.js +0 -2
  76. package/dist/webui/assets/index-CN3FylAF.js.map +0 -1
  77. package/dist/webui/assets/index-CSoUPZat.js +0 -2
  78. package/dist/webui/assets/index-CSoUPZat.js.map +0 -1
  79. package/dist/webui/assets/index-CiHwNwrk.js +0 -19
  80. package/dist/webui/assets/index-CiHwNwrk.js.map +0 -1
  81. package/dist/webui/assets/index-DHwJxrFi.css +0 -1
  82. package/dist/webui/assets/index-DTU-FGA4.js +0 -2
  83. package/dist/webui/assets/index-DTU-FGA4.js.map +0 -1
  84. package/dist/webui/assets/index-DjpD0HQ5.js +0 -2
  85. package/dist/webui/assets/index-DjpD0HQ5.js.map +0 -1
  86. package/dist/webui/assets/index-Dycn6xoz.js +0 -2
  87. package/dist/webui/assets/index-Dycn6xoz.js.map +0 -1
  88. package/dist/webui/assets/index-G0EJCamt.js +0 -22
  89. package/dist/webui/assets/index-G0EJCamt.js.map +0 -1
  90. package/dist/webui/assets/index-WaraZQH0.js +0 -2
  91. package/dist/webui/assets/index-WaraZQH0.js.map +0 -1
  92. package/dist/webui/assets/index-k2rGFxEM.js +0 -8
  93. package/dist/webui/assets/index-k2rGFxEM.js.map +0 -1
  94. package/dist/webui/assets/index-lwTtspUb.js +0 -14
  95. package/dist/webui/assets/index-lwTtspUb.js.map +0 -1
  96. package/dist/webui/assets/index-pT0W4KjK.js +0 -47
  97. package/dist/webui/assets/index-pT0W4KjK.js.map +0 -1
  98. package/dist/webui/assets/index-wvielV9A.js +0 -2
  99. package/dist/webui/assets/index-wvielV9A.js.map +0 -1
  100. package/dist/webui/assets/row-FRqVdQDX.js +0 -20
  101. package/dist/webui/assets/row-FRqVdQDX.js.map +0 -1
  102. package/dist/webui/assets/useAuth-BMt6dHSB.js +0 -9
  103. package/dist/webui/assets/useAuth-BMt6dHSB.js.map +0 -1
  104. package/dist/webui/assets/useConfig-29Ugtjk4.js +0 -9
  105. package/dist/webui/assets/useConfig-29Ugtjk4.js.map +0 -1
  106. package/dist/webui/assets/useDownload-Dt6lsP8S.js +0 -2
  107. package/dist/webui/assets/useDownload-Dt6lsP8S.js.map +0 -1
  108. package/dist/webui/assets/useErrorHandler-DWHs3RlU.js +0 -84
  109. package/dist/webui/assets/useErrorHandler-DWHs3RlU.js.map +0 -1
  110. package/dist/webui/index.html +0 -15
@@ -1 +0,0 @@
1
- {"version":3,"file":"Files-CKyc_PdW.js","sources":["../../node_modules/antd/es/breadcrumb/BreadcrumbSeparator.js","../../node_modules/antd/es/breadcrumb/useItemRender.js","../../node_modules/antd/es/breadcrumb/BreadcrumbItem.js","../../node_modules/antd/es/breadcrumb/style/index.js","../../node_modules/antd/es/breadcrumb/useItems.js","../../node_modules/antd/es/breadcrumb/Breadcrumb.js","../../node_modules/rc-util/es/Dom/css.js","../../node_modules/rc-image/es/context.js","../../node_modules/rc-image/es/Operations.js","../../node_modules/rc-image/es/hooks/useImageTransform.js","../../node_modules/rc-image/es/getFixScaleEleTransPosition.js","../../node_modules/rc-image/es/previewConfig.js","../../node_modules/rc-image/es/hooks/useMouseEvent.js","../../node_modules/rc-image/es/util.js","../../node_modules/rc-image/es/hooks/useStatus.js","../../node_modules/rc-image/es/hooks/useTouchEvent.js","../../node_modules/rc-image/es/Preview.js","../../node_modules/rc-image/es/common.js","../../node_modules/rc-image/es/hooks/usePreviewItems.js","../../node_modules/rc-image/es/PreviewGroup.js","../../node_modules/rc-image/es/hooks/useRegisterImage.js","../../node_modules/rc-image/es/Image.js","../../node_modules/@ant-design/icons-svg/es/asn/RotateLeftOutlined.js","../../node_modules/@ant-design/icons/es/icons/RotateLeftOutlined.js","../../node_modules/@ant-design/icons-svg/es/asn/RotateRightOutlined.js","../../node_modules/@ant-design/icons/es/icons/RotateRightOutlined.js","../../node_modules/@ant-design/icons-svg/es/asn/SwapOutlined.js","../../node_modules/@ant-design/icons/es/icons/SwapOutlined.js","../../node_modules/@ant-design/icons-svg/es/asn/ZoomInOutlined.js","../../node_modules/@ant-design/icons/es/icons/ZoomInOutlined.js","../../node_modules/@ant-design/icons-svg/es/asn/ZoomOutOutlined.js","../../node_modules/@ant-design/icons/es/icons/ZoomOutOutlined.js","../../node_modules/antd/es/image/style/index.js","../../node_modules/antd/es/image/PreviewGroup.js","../../node_modules/antd/es/image/index.js","../../node_modules/@ant-design/icons-svg/es/asn/HomeOutlined.js","../../node_modules/@ant-design/icons/es/icons/HomeOutlined.js","../../node_modules/@ant-design/icons-svg/es/asn/ToolOutlined.js","../../node_modules/@ant-design/icons/es/icons/ToolOutlined.js","../../src/services/fileService.ts","../../src/hooks/useFiles.ts","../../src/pages/Files/components/FileBrowser.tsx","../../src/pages/Files/components/FileFilters.tsx","../../src/pages/Files/components/FileStatistics.tsx","../../src/pages/Files/components/FileList.tsx","../../src/components/modals/PreviewModal.tsx","../../src/pages/Files/components/FilePreview.tsx","../../src/pages/Files/components/NormalizeFilesModal.tsx","../../src/pages/Files/hooks/useFileBrowser.ts","../../src/pages/Files/hooks/useFileOperations.ts","../../src/pages/Files/hooks/useFileFilters.ts","../../src/pages/Files/hooks/useFileStatistics.ts","../../src/pages/Files/Files.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nconst BreadcrumbSeparator = ({\n children\n}) => {\n const {\n getPrefixCls\n } = React.useContext(ConfigContext);\n const prefixCls = getPrefixCls('breadcrumb');\n return /*#__PURE__*/React.createElement(\"li\", {\n className: `${prefixCls}-separator`,\n \"aria-hidden\": \"true\"\n }, children === '' ? children : children || '/');\n};\nBreadcrumbSeparator.__ANT_BREADCRUMB_SEPARATOR = true;\nexport default BreadcrumbSeparator;","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nfunction getBreadcrumbName(route, params) {\n if (route.title === undefined || route.title === null) {\n return null;\n }\n const paramsKeys = Object.keys(params).join('|');\n return typeof route.title === 'object' ? route.title : String(route.title).replace(new RegExp(`:(${paramsKeys})`, 'g'), (replacement, key) => params[key] || replacement);\n}\nexport function renderItem(prefixCls, item, children, href) {\n if (children === null || children === undefined) {\n return null;\n }\n const {\n className,\n onClick\n } = item,\n restItem = __rest(item, [\"className\", \"onClick\"]);\n const passedProps = Object.assign(Object.assign({}, pickAttrs(restItem, {\n data: true,\n aria: true\n })), {\n onClick\n });\n if (href !== undefined) {\n return /*#__PURE__*/React.createElement(\"a\", Object.assign({}, passedProps, {\n className: classNames(`${prefixCls}-link`, className),\n href: href\n }), children);\n }\n return /*#__PURE__*/React.createElement(\"span\", Object.assign({}, passedProps, {\n className: classNames(`${prefixCls}-link`, className)\n }), children);\n}\nexport default function useItemRender(prefixCls, itemRender) {\n const mergedItemRender = (item, params, routes, path, href) => {\n if (itemRender) {\n return itemRender(item, params, routes, path);\n }\n const name = getBreadcrumbName(item, params);\n return renderItem(prefixCls, item, name, href);\n };\n return mergedItemRender;\n}","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport DownOutlined from \"@ant-design/icons/es/icons/DownOutlined\";\nimport { devUseWarning } from '../_util/warning';\nimport { ConfigContext } from '../config-provider';\nimport Dropdown from '../dropdown/dropdown';\nimport BreadcrumbSeparator from './BreadcrumbSeparator';\nimport { renderItem } from './useItemRender';\nexport const InternalBreadcrumbItem = props => {\n const {\n prefixCls,\n separator = '/',\n children,\n menu,\n overlay,\n dropdownProps,\n href\n } = props;\n // Warning for deprecated usage\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('Breadcrumb.Item');\n warning.deprecated(!('overlay' in props), 'overlay', 'menu');\n }\n /** If overlay is have Wrap a Dropdown */\n const renderBreadcrumbNode = breadcrumbItem => {\n if (menu || overlay) {\n const mergeDropDownProps = Object.assign({}, dropdownProps);\n if (menu) {\n const _a = menu || {},\n {\n items\n } = _a,\n menuProps = __rest(_a, [\"items\"]);\n mergeDropDownProps.menu = Object.assign(Object.assign({}, menuProps), {\n items: items === null || items === void 0 ? void 0 : items.map((_a, index) => {\n var {\n key,\n title,\n label,\n path\n } = _a,\n itemProps = __rest(_a, [\"key\", \"title\", \"label\", \"path\"]);\n let mergedLabel = label !== null && label !== void 0 ? label : title;\n if (path) {\n mergedLabel = /*#__PURE__*/React.createElement(\"a\", {\n href: `${href}${path}`\n }, mergedLabel);\n }\n return Object.assign(Object.assign({}, itemProps), {\n key: key !== null && key !== void 0 ? key : index,\n label: mergedLabel\n });\n })\n });\n } else if (overlay) {\n mergeDropDownProps.overlay = overlay;\n }\n return /*#__PURE__*/React.createElement(Dropdown, Object.assign({\n placement: \"bottom\"\n }, mergeDropDownProps), /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-overlay-link`\n }, breadcrumbItem, /*#__PURE__*/React.createElement(DownOutlined, null)));\n }\n return breadcrumbItem;\n };\n // wrap to dropDown\n const link = renderBreadcrumbNode(children);\n if (link !== undefined && link !== null) {\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"li\", null, link), separator && /*#__PURE__*/React.createElement(BreadcrumbSeparator, null, separator));\n }\n return null;\n};\nconst BreadcrumbItem = props => {\n const {\n prefixCls: customizePrefixCls,\n children,\n href\n } = props,\n restProps = __rest(props, [\"prefixCls\", \"children\", \"href\"]);\n const {\n getPrefixCls\n } = React.useContext(ConfigContext);\n const prefixCls = getPrefixCls('breadcrumb', customizePrefixCls);\n return /*#__PURE__*/React.createElement(InternalBreadcrumbItem, Object.assign({}, restProps, {\n prefixCls: prefixCls\n }), renderItem(prefixCls, restProps, children, href));\n};\nBreadcrumbItem.__ANT_BREADCRUMB_ITEM = true;\nexport default BreadcrumbItem;","import { unit } from '@ant-design/cssinjs';\nimport { genFocusStyle, resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genBreadcrumbStyle = token => {\n const {\n componentCls,\n iconCls,\n calc\n } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), {\n color: token.itemColor,\n fontSize: token.fontSize,\n [iconCls]: {\n fontSize: token.iconFontSize\n },\n ol: {\n display: 'flex',\n flexWrap: 'wrap',\n margin: 0,\n padding: 0,\n listStyle: 'none'\n },\n a: Object.assign({\n color: token.linkColor,\n transition: `color ${token.motionDurationMid}`,\n padding: `0 ${unit(token.paddingXXS)}`,\n borderRadius: token.borderRadiusSM,\n height: token.fontHeight,\n display: 'inline-block',\n marginInline: calc(token.marginXXS).mul(-1).equal(),\n '&:hover': {\n color: token.linkHoverColor,\n backgroundColor: token.colorBgTextHover\n }\n }, genFocusStyle(token)),\n 'li:last-child': {\n color: token.lastItemColor\n },\n [`${componentCls}-separator`]: {\n marginInline: token.separatorMargin,\n color: token.separatorColor\n },\n [`${componentCls}-link`]: {\n [`\n > ${iconCls} + span,\n > ${iconCls} + a\n `]: {\n marginInlineStart: token.marginXXS\n }\n },\n [`${componentCls}-overlay-link`]: {\n borderRadius: token.borderRadiusSM,\n height: token.fontHeight,\n display: 'inline-block',\n padding: `0 ${unit(token.paddingXXS)}`,\n marginInline: calc(token.marginXXS).mul(-1).equal(),\n [`> ${iconCls}`]: {\n marginInlineStart: token.marginXXS,\n fontSize: token.fontSizeIcon\n },\n '&:hover': {\n color: token.linkHoverColor,\n backgroundColor: token.colorBgTextHover,\n a: {\n color: token.linkHoverColor\n }\n },\n a: {\n '&:hover': {\n backgroundColor: 'transparent'\n }\n }\n },\n // rtl style\n [`&${token.componentCls}-rtl`]: {\n direction: 'rtl'\n }\n })\n };\n};\nexport const prepareComponentToken = token => ({\n itemColor: token.colorTextDescription,\n lastItemColor: token.colorText,\n iconFontSize: token.fontSize,\n linkColor: token.colorTextDescription,\n linkHoverColor: token.colorText,\n separatorColor: token.colorTextDescription,\n separatorMargin: token.marginXS\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Breadcrumb', token => {\n const breadcrumbToken = mergeToken(token, {});\n return genBreadcrumbStyle(breadcrumbToken);\n}, prepareComponentToken);","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { useMemo } from 'react';\nfunction route2item(route) {\n const {\n breadcrumbName,\n children\n } = route,\n rest = __rest(route, [\"breadcrumbName\", \"children\"]);\n const clone = Object.assign({\n title: breadcrumbName\n }, rest);\n if (children) {\n clone.menu = {\n items: children.map(_a => {\n var {\n breadcrumbName: itemBreadcrumbName\n } = _a,\n itemProps = __rest(_a, [\"breadcrumbName\"]);\n return Object.assign(Object.assign({}, itemProps), {\n title: itemBreadcrumbName\n });\n })\n };\n }\n return clone;\n}\nexport default function useItems(items, routes) {\n return useMemo(() => {\n if (items) {\n return items;\n }\n if (routes) {\n return routes.map(route2item);\n }\n return null;\n }, [items, routes]);\n}","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nimport { cloneElement } from '../_util/reactNode';\nimport { devUseWarning } from '../_util/warning';\nimport { ConfigContext } from '../config-provider';\nimport BreadcrumbItem, { InternalBreadcrumbItem } from './BreadcrumbItem';\nimport BreadcrumbSeparator from './BreadcrumbSeparator';\nimport useStyle from './style';\nimport useItemRender from './useItemRender';\nimport useItems from './useItems';\nconst getPath = (params, path) => {\n if (path === undefined) {\n return path;\n }\n let mergedPath = (path || '').replace(/^\\//, '');\n Object.keys(params).forEach(key => {\n mergedPath = mergedPath.replace(`:${key}`, params[key]);\n });\n return mergedPath;\n};\nconst Breadcrumb = props => {\n const {\n prefixCls: customizePrefixCls,\n separator = '/',\n style,\n className,\n rootClassName,\n routes: legacyRoutes,\n items,\n children,\n itemRender,\n params = {}\n } = props,\n restProps = __rest(props, [\"prefixCls\", \"separator\", \"style\", \"className\", \"rootClassName\", \"routes\", \"items\", \"children\", \"itemRender\", \"params\"]);\n const {\n getPrefixCls,\n direction,\n breadcrumb\n } = React.useContext(ConfigContext);\n let crumbs;\n const prefixCls = getPrefixCls('breadcrumb', customizePrefixCls);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);\n const mergedItems = useItems(items, legacyRoutes);\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('Breadcrumb');\n warning.deprecated(!legacyRoutes, 'routes', 'items');\n // Deprecated warning for breadcrumb children\n if (!mergedItems || mergedItems.length === 0) {\n const childList = toArray(children);\n warning.deprecated(childList.length === 0, 'Breadcrumb.Item and Breadcrumb.Separator', 'items');\n childList.forEach(element => {\n if (element) {\n process.env.NODE_ENV !== \"production\" ? warning(element.type && (element.type.__ANT_BREADCRUMB_ITEM === true || element.type.__ANT_BREADCRUMB_SEPARATOR === true), 'usage', \"Only accepts Breadcrumb.Item and Breadcrumb.Separator as it's children\") : void 0;\n }\n });\n }\n }\n const mergedItemRender = useItemRender(prefixCls, itemRender);\n if (mergedItems && mergedItems.length > 0) {\n // generated by route\n const paths = [];\n const itemRenderRoutes = items || legacyRoutes;\n crumbs = mergedItems.map((item, index) => {\n const {\n path,\n key,\n type,\n menu,\n overlay,\n onClick,\n className: itemClassName,\n separator: itemSeparator,\n dropdownProps\n } = item;\n const mergedPath = getPath(params, path);\n if (mergedPath !== undefined) {\n paths.push(mergedPath);\n }\n const mergedKey = key !== null && key !== void 0 ? key : index;\n if (type === 'separator') {\n return /*#__PURE__*/React.createElement(BreadcrumbSeparator, {\n key: mergedKey\n }, itemSeparator);\n }\n const itemProps = {};\n const isLastItem = index === mergedItems.length - 1;\n if (menu) {\n itemProps.menu = menu;\n } else if (overlay) {\n itemProps.overlay = overlay;\n }\n let {\n href\n } = item;\n if (paths.length && mergedPath !== undefined) {\n href = `#/${paths.join('/')}`;\n }\n return /*#__PURE__*/React.createElement(InternalBreadcrumbItem, Object.assign({\n key: mergedKey\n }, itemProps, pickAttrs(item, {\n data: true,\n aria: true\n }), {\n className: itemClassName,\n dropdownProps: dropdownProps,\n href: href,\n separator: isLastItem ? '' : separator,\n onClick: onClick,\n prefixCls: prefixCls\n }), mergedItemRender(item, params, itemRenderRoutes, paths, href));\n });\n } else if (children) {\n const childrenLength = toArray(children).length;\n crumbs = toArray(children).map((element, index) => {\n if (!element) {\n return element;\n }\n const isLastItem = index === childrenLength - 1;\n return cloneElement(element, {\n separator: isLastItem ? '' : separator,\n // eslint-disable-next-line react/no-array-index-key\n key: index\n });\n });\n }\n const breadcrumbClassName = classNames(prefixCls, breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.className, {\n [`${prefixCls}-rtl`]: direction === 'rtl'\n }, className, rootClassName, hashId, cssVarCls);\n const mergedStyle = Object.assign(Object.assign({}, breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.style), style);\n return wrapCSSVar(/*#__PURE__*/React.createElement(\"nav\", Object.assign({\n className: breadcrumbClassName,\n style: mergedStyle\n }, restProps), /*#__PURE__*/React.createElement(\"ol\", null, crumbs)));\n};\nBreadcrumb.Item = BreadcrumbItem;\nBreadcrumb.Separator = BreadcrumbSeparator;\nif (process.env.NODE_ENV !== 'production') {\n Breadcrumb.displayName = 'Breadcrumb';\n}\nexport default Breadcrumb;","/* eslint-disable no-nested-ternary */\nvar PIXEL_PATTERN = /margin|padding|width|height|max|min|offset/;\nvar removePixel = {\n left: true,\n top: true\n};\nvar floatMap = {\n cssFloat: 1,\n styleFloat: 1,\n float: 1\n};\nfunction getComputedStyle(node) {\n return node.nodeType === 1 ? node.ownerDocument.defaultView.getComputedStyle(node, null) : {};\n}\nfunction getStyleValue(node, type, value) {\n type = type.toLowerCase();\n if (value === 'auto') {\n if (type === 'height') {\n return node.offsetHeight;\n }\n if (type === 'width') {\n return node.offsetWidth;\n }\n }\n if (!(type in removePixel)) {\n removePixel[type] = PIXEL_PATTERN.test(type);\n }\n return removePixel[type] ? parseFloat(value) || 0 : value;\n}\nexport function get(node, name) {\n var length = arguments.length;\n var style = getComputedStyle(node);\n name = floatMap[name] ? 'cssFloat' in node.style ? 'cssFloat' : 'styleFloat' : name;\n return length === 1 ? style : getStyleValue(node, name, style[name] || node.style[name]);\n}\nexport function set(node, name, value) {\n var length = arguments.length;\n name = floatMap[name] ? 'cssFloat' in node.style ? 'cssFloat' : 'styleFloat' : name;\n if (length === 3) {\n if (typeof value === 'number' && PIXEL_PATTERN.test(name)) {\n value = \"\".concat(value, \"px\");\n }\n node.style[name] = value; // Number\n return value;\n }\n for (var x in name) {\n if (name.hasOwnProperty(x)) {\n set(node, x, name[x]);\n }\n }\n return getComputedStyle(node);\n}\nexport function getOuterWidth(el) {\n if (el === document.body) {\n return document.documentElement.clientWidth;\n }\n return el.offsetWidth;\n}\nexport function getOuterHeight(el) {\n if (el === document.body) {\n return window.innerHeight || document.documentElement.clientHeight;\n }\n return el.offsetHeight;\n}\nexport function getDocSize() {\n var width = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);\n var height = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n return {\n width: width,\n height: height\n };\n}\nexport function getClientSize() {\n var width = document.documentElement.clientWidth;\n var height = window.innerHeight || document.documentElement.clientHeight;\n return {\n width: width,\n height: height\n };\n}\nexport function getScroll() {\n return {\n scrollLeft: Math.max(document.documentElement.scrollLeft, document.body.scrollLeft),\n scrollTop: Math.max(document.documentElement.scrollTop, document.body.scrollTop)\n };\n}\nexport function getOffset(node) {\n var box = node.getBoundingClientRect();\n var docElem = document.documentElement;\n\n // < ie8 不支持 win.pageXOffset, 则使用 docElem.scrollLeft\n return {\n left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || document.body.clientLeft || 0),\n top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || document.body.clientTop || 0)\n };\n}","import * as React from 'react';\nexport var PreviewGroupContext = /*#__PURE__*/React.createContext(null);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Portal from '@rc-component/portal';\nimport classnames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { PreviewGroupContext } from \"./context\";\nvar Operations = function Operations(props) {\n var visible = props.visible,\n maskTransitionName = props.maskTransitionName,\n getContainer = props.getContainer,\n prefixCls = props.prefixCls,\n rootClassName = props.rootClassName,\n icons = props.icons,\n countRender = props.countRender,\n showSwitch = props.showSwitch,\n showProgress = props.showProgress,\n current = props.current,\n transform = props.transform,\n count = props.count,\n scale = props.scale,\n minScale = props.minScale,\n maxScale = props.maxScale,\n closeIcon = props.closeIcon,\n onActive = props.onActive,\n onClose = props.onClose,\n onZoomIn = props.onZoomIn,\n onZoomOut = props.onZoomOut,\n onRotateRight = props.onRotateRight,\n onRotateLeft = props.onRotateLeft,\n onFlipX = props.onFlipX,\n onFlipY = props.onFlipY,\n onReset = props.onReset,\n toolbarRender = props.toolbarRender,\n zIndex = props.zIndex,\n image = props.image;\n var groupContext = useContext(PreviewGroupContext);\n var rotateLeft = icons.rotateLeft,\n rotateRight = icons.rotateRight,\n zoomIn = icons.zoomIn,\n zoomOut = icons.zoomOut,\n close = icons.close,\n left = icons.left,\n right = icons.right,\n flipX = icons.flipX,\n flipY = icons.flipY;\n var toolClassName = \"\".concat(prefixCls, \"-operations-operation\");\n React.useEffect(function () {\n var onKeyDown = function onKeyDown(e) {\n if (e.keyCode === KeyCode.ESC) {\n onClose();\n }\n };\n if (visible) {\n window.addEventListener('keydown', onKeyDown);\n }\n return function () {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [visible]);\n var handleActive = function handleActive(e, offset) {\n e.preventDefault();\n e.stopPropagation();\n onActive(offset);\n };\n var renderOperation = React.useCallback(function (_ref) {\n var type = _ref.type,\n disabled = _ref.disabled,\n onClick = _ref.onClick,\n icon = _ref.icon;\n return /*#__PURE__*/React.createElement(\"div\", {\n key: type,\n className: classnames(toolClassName, \"\".concat(prefixCls, \"-operations-operation-\").concat(type), _defineProperty({}, \"\".concat(prefixCls, \"-operations-operation-disabled\"), !!disabled)),\n onClick: onClick\n }, icon);\n }, [toolClassName, prefixCls]);\n var switchPrevNode = showSwitch ? renderOperation({\n icon: left,\n onClick: function onClick(e) {\n return handleActive(e, -1);\n },\n type: 'prev',\n disabled: current === 0\n }) : undefined;\n var switchNextNode = showSwitch ? renderOperation({\n icon: right,\n onClick: function onClick(e) {\n return handleActive(e, 1);\n },\n type: 'next',\n disabled: current === count - 1\n }) : undefined;\n var flipYNode = renderOperation({\n icon: flipY,\n onClick: onFlipY,\n type: 'flipY'\n });\n var flipXNode = renderOperation({\n icon: flipX,\n onClick: onFlipX,\n type: 'flipX'\n });\n var rotateLeftNode = renderOperation({\n icon: rotateLeft,\n onClick: onRotateLeft,\n type: 'rotateLeft'\n });\n var rotateRightNode = renderOperation({\n icon: rotateRight,\n onClick: onRotateRight,\n type: 'rotateRight'\n });\n var zoomOutNode = renderOperation({\n icon: zoomOut,\n onClick: onZoomOut,\n type: 'zoomOut',\n disabled: scale <= minScale\n });\n var zoomInNode = renderOperation({\n icon: zoomIn,\n onClick: onZoomIn,\n type: 'zoomIn',\n disabled: scale === maxScale\n });\n var toolbarNode = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-operations\")\n }, flipYNode, flipXNode, rotateLeftNode, rotateRightNode, zoomOutNode, zoomInNode);\n return /*#__PURE__*/React.createElement(CSSMotion, {\n visible: visible,\n motionName: maskTransitionName\n }, function (_ref2) {\n var className = _ref2.className,\n style = _ref2.style;\n return /*#__PURE__*/React.createElement(Portal, {\n open: true,\n getContainer: getContainer !== null && getContainer !== void 0 ? getContainer : document.body\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(\"\".concat(prefixCls, \"-operations-wrapper\"), className, rootClassName),\n style: _objectSpread(_objectSpread({}, style), {}, {\n zIndex: zIndex\n })\n }, closeIcon === null ? null : /*#__PURE__*/React.createElement(\"button\", {\n className: \"\".concat(prefixCls, \"-close\"),\n onClick: onClose\n }, closeIcon || close), showSwitch && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(\"\".concat(prefixCls, \"-switch-left\"), _defineProperty({}, \"\".concat(prefixCls, \"-switch-left-disabled\"), current === 0)),\n onClick: function onClick(e) {\n return handleActive(e, -1);\n }\n }, left), /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(\"\".concat(prefixCls, \"-switch-right\"), _defineProperty({}, \"\".concat(prefixCls, \"-switch-right-disabled\"), current === count - 1)),\n onClick: function onClick(e) {\n return handleActive(e, 1);\n }\n }, right)), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-footer\")\n }, showProgress && /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-progress\")\n }, countRender ? countRender(current + 1, count) : /*#__PURE__*/React.createElement(\"bdi\", null, \"\".concat(current + 1, \" / \").concat(count))), toolbarRender ? toolbarRender(toolbarNode, _objectSpread(_objectSpread({\n icons: {\n prevIcon: switchPrevNode,\n nextIcon: switchNextNode,\n flipYIcon: flipYNode,\n flipXIcon: flipXNode,\n rotateLeftIcon: rotateLeftNode,\n rotateRightIcon: rotateRightNode,\n zoomOutIcon: zoomOutNode,\n zoomInIcon: zoomInNode\n },\n actions: {\n onActive: onActive,\n onFlipY: onFlipY,\n onFlipX: onFlipX,\n onRotateLeft: onRotateLeft,\n onRotateRight: onRotateRight,\n onZoomOut: onZoomOut,\n onZoomIn: onZoomIn,\n onReset: onReset,\n onClose: onClose\n },\n transform: transform\n }, groupContext ? {\n current: current,\n total: count\n } : {}), {}, {\n image: image\n })) : toolbarNode)));\n });\n};\nexport default Operations;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { getClientSize } from \"rc-util/es/Dom/css\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport raf from \"rc-util/es/raf\";\nimport { useRef, useState } from 'react';\nvar initialTransform = {\n x: 0,\n y: 0,\n rotate: 0,\n scale: 1,\n flipX: false,\n flipY: false\n};\nexport default function useImageTransform(imgRef, minScale, maxScale, onTransform) {\n var frame = useRef(null);\n var queue = useRef([]);\n var _useState = useState(initialTransform),\n _useState2 = _slicedToArray(_useState, 2),\n transform = _useState2[0],\n setTransform = _useState2[1];\n var resetTransform = function resetTransform(action) {\n setTransform(initialTransform);\n if (!isEqual(initialTransform, transform)) {\n onTransform === null || onTransform === void 0 || onTransform({\n transform: initialTransform,\n action: action\n });\n }\n };\n\n /** Direct update transform */\n var updateTransform = function updateTransform(newTransform, action) {\n if (frame.current === null) {\n queue.current = [];\n frame.current = raf(function () {\n setTransform(function (preState) {\n var memoState = preState;\n queue.current.forEach(function (queueState) {\n memoState = _objectSpread(_objectSpread({}, memoState), queueState);\n });\n frame.current = null;\n onTransform === null || onTransform === void 0 || onTransform({\n transform: memoState,\n action: action\n });\n return memoState;\n });\n });\n }\n queue.current.push(_objectSpread(_objectSpread({}, transform), newTransform));\n };\n\n /** Scale according to the position of centerX and centerY */\n var dispatchZoomChange = function dispatchZoomChange(ratio, action, centerX, centerY, isTouch) {\n var _imgRef$current = imgRef.current,\n width = _imgRef$current.width,\n height = _imgRef$current.height,\n offsetWidth = _imgRef$current.offsetWidth,\n offsetHeight = _imgRef$current.offsetHeight,\n offsetLeft = _imgRef$current.offsetLeft,\n offsetTop = _imgRef$current.offsetTop;\n var newRatio = ratio;\n var newScale = transform.scale * ratio;\n if (newScale > maxScale) {\n newScale = maxScale;\n newRatio = maxScale / transform.scale;\n } else if (newScale < minScale) {\n // For mobile interactions, allow scaling down to the minimum scale.\n newScale = isTouch ? newScale : minScale;\n newRatio = newScale / transform.scale;\n }\n\n /** Default center point scaling */\n var mergedCenterX = centerX !== null && centerX !== void 0 ? centerX : innerWidth / 2;\n var mergedCenterY = centerY !== null && centerY !== void 0 ? centerY : innerHeight / 2;\n var diffRatio = newRatio - 1;\n /** Deviation calculated from image size */\n var diffImgX = diffRatio * width * 0.5;\n var diffImgY = diffRatio * height * 0.5;\n /** The difference between the click position and the edge of the document */\n var diffOffsetLeft = diffRatio * (mergedCenterX - transform.x - offsetLeft);\n var diffOffsetTop = diffRatio * (mergedCenterY - transform.y - offsetTop);\n /** Final positioning */\n var newX = transform.x - (diffOffsetLeft - diffImgX);\n var newY = transform.y - (diffOffsetTop - diffImgY);\n\n /**\n * When zooming the image\n * When the image size is smaller than the width and height of the window, the position is initialized\n */\n if (ratio < 1 && newScale === 1) {\n var mergedWidth = offsetWidth * newScale;\n var mergedHeight = offsetHeight * newScale;\n var _getClientSize = getClientSize(),\n clientWidth = _getClientSize.width,\n clientHeight = _getClientSize.height;\n if (mergedWidth <= clientWidth && mergedHeight <= clientHeight) {\n newX = 0;\n newY = 0;\n }\n }\n updateTransform({\n x: newX,\n y: newY,\n scale: newScale\n }, action);\n };\n return {\n transform: transform,\n resetTransform: resetTransform,\n updateTransform: updateTransform,\n dispatchZoomChange: dispatchZoomChange\n };\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { getClientSize } from \"rc-util/es/Dom/css\";\nfunction fixPoint(key, start, width, clientWidth) {\n var startAddWidth = start + width;\n var offsetStart = (width - clientWidth) / 2;\n if (width > clientWidth) {\n if (start > 0) {\n return _defineProperty({}, key, offsetStart);\n }\n if (start < 0 && startAddWidth < clientWidth) {\n return _defineProperty({}, key, -offsetStart);\n }\n } else if (start < 0 || startAddWidth > clientWidth) {\n return _defineProperty({}, key, start < 0 ? offsetStart : -offsetStart);\n }\n return {};\n}\n\n/**\n * Fix positon x,y point when\n *\n * Ele width && height < client\n * - Back origin\n *\n * - Ele width | height > clientWidth | clientHeight\n * - left | top > 0 -> Back 0\n * - left | top + width | height < clientWidth | clientHeight -> Back left | top + width | height === clientWidth | clientHeight\n *\n * Regardless of other\n */\nexport default function getFixScaleEleTransPosition(width, height, left, top) {\n var _getClientSize = getClientSize(),\n clientWidth = _getClientSize.width,\n clientHeight = _getClientSize.height;\n var fixPos = null;\n if (width <= clientWidth && height <= clientHeight) {\n fixPos = {\n x: 0,\n y: 0\n };\n } else if (width > clientWidth || height > clientHeight) {\n fixPos = _objectSpread(_objectSpread({}, fixPoint('x', left, width, clientWidth)), fixPoint('y', top, height, clientHeight));\n }\n return fixPos;\n}","/** Scale the ratio base */\nexport var BASE_SCALE_RATIO = 1;\n/** The maximum zoom ratio when the mouse zooms in, adjustable */\nexport var WHEEL_MAX_SCALE_RATIO = 1;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport { warning } from \"rc-util/es/warning\";\nimport { useEffect, useRef, useState } from 'react';\nimport getFixScaleEleTransPosition from \"../getFixScaleEleTransPosition\";\nimport { BASE_SCALE_RATIO, WHEEL_MAX_SCALE_RATIO } from \"../previewConfig\";\nexport default function useMouseEvent(imgRef, movable, visible, scaleStep, transform, updateTransform, dispatchZoomChange) {\n var rotate = transform.rotate,\n scale = transform.scale,\n x = transform.x,\n y = transform.y;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isMoving = _useState2[0],\n setMoving = _useState2[1];\n var startPositionInfo = useRef({\n diffX: 0,\n diffY: 0,\n transformX: 0,\n transformY: 0\n });\n var onMouseDown = function onMouseDown(event) {\n // Only allow main button\n if (!movable || event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n startPositionInfo.current = {\n diffX: event.pageX - x,\n diffY: event.pageY - y,\n transformX: x,\n transformY: y\n };\n setMoving(true);\n };\n var onMouseMove = function onMouseMove(event) {\n if (visible && isMoving) {\n updateTransform({\n x: event.pageX - startPositionInfo.current.diffX,\n y: event.pageY - startPositionInfo.current.diffY\n }, 'move');\n }\n };\n var onMouseUp = function onMouseUp() {\n if (visible && isMoving) {\n setMoving(false);\n\n /** No need to restore the position when the picture is not moved, So as not to interfere with the click */\n var _startPositionInfo$cu = startPositionInfo.current,\n transformX = _startPositionInfo$cu.transformX,\n transformY = _startPositionInfo$cu.transformY;\n var hasChangedPosition = x !== transformX && y !== transformY;\n if (!hasChangedPosition) return;\n var width = imgRef.current.offsetWidth * scale;\n var height = imgRef.current.offsetHeight * scale;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n var _imgRef$current$getBo = imgRef.current.getBoundingClientRect(),\n left = _imgRef$current$getBo.left,\n top = _imgRef$current$getBo.top;\n var isRotate = rotate % 180 !== 0;\n var fixState = getFixScaleEleTransPosition(isRotate ? height : width, isRotate ? width : height, left, top);\n if (fixState) {\n updateTransform(_objectSpread({}, fixState), 'dragRebound');\n }\n }\n };\n var onWheel = function onWheel(event) {\n if (!visible || event.deltaY == 0) return;\n // Scale ratio depends on the deltaY size\n var scaleRatio = Math.abs(event.deltaY / 100);\n // Limit the maximum scale ratio\n var mergedScaleRatio = Math.min(scaleRatio, WHEEL_MAX_SCALE_RATIO);\n // Scale the ratio each time\n var ratio = BASE_SCALE_RATIO + mergedScaleRatio * scaleStep;\n if (event.deltaY > 0) {\n ratio = BASE_SCALE_RATIO / ratio;\n }\n dispatchZoomChange(ratio, 'wheel', event.clientX, event.clientY);\n };\n useEffect(function () {\n var onTopMouseUpListener;\n var onTopMouseMoveListener;\n var onMouseUpListener;\n var onMouseMoveListener;\n if (movable) {\n onMouseUpListener = addEventListener(window, 'mouseup', onMouseUp, false);\n onMouseMoveListener = addEventListener(window, 'mousemove', onMouseMove, false);\n try {\n // Resolve if in iframe lost event\n /* istanbul ignore next */\n if (window.top !== window.self) {\n onTopMouseUpListener = addEventListener(window.top, 'mouseup', onMouseUp, false);\n onTopMouseMoveListener = addEventListener(window.top, 'mousemove', onMouseMove, false);\n }\n } catch (error) {\n /* istanbul ignore next */\n warning(false, \"[rc-image] \".concat(error));\n }\n }\n return function () {\n var _onMouseUpListener, _onMouseMoveListener, _onTopMouseUpListener, _onTopMouseMoveListen;\n (_onMouseUpListener = onMouseUpListener) === null || _onMouseUpListener === void 0 || _onMouseUpListener.remove();\n (_onMouseMoveListener = onMouseMoveListener) === null || _onMouseMoveListener === void 0 || _onMouseMoveListener.remove();\n /* istanbul ignore next */\n (_onTopMouseUpListener = onTopMouseUpListener) === null || _onTopMouseUpListener === void 0 || _onTopMouseUpListener.remove();\n /* istanbul ignore next */\n (_onTopMouseMoveListen = onTopMouseMoveListener) === null || _onTopMouseMoveListen === void 0 || _onTopMouseMoveListen.remove();\n };\n }, [visible, isMoving, x, y, rotate, movable]);\n return {\n isMoving: isMoving,\n onMouseDown: onMouseDown,\n onMouseMove: onMouseMove,\n onMouseUp: onMouseUp,\n onWheel: onWheel\n };\n}","export function isImageValid(src) {\n return new Promise(function (resolve) {\n if (!src) {\n resolve(false);\n return;\n }\n var img = document.createElement('img');\n img.onerror = function () {\n return resolve(false);\n };\n img.onload = function () {\n return resolve(true);\n };\n img.src = src;\n });\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useEffect, useRef, useState } from 'react';\nimport { isImageValid } from \"../util\";\nexport default function useStatus(_ref) {\n var src = _ref.src,\n isCustomPlaceholder = _ref.isCustomPlaceholder,\n fallback = _ref.fallback;\n var _useState = useState(isCustomPlaceholder ? 'loading' : 'normal'),\n _useState2 = _slicedToArray(_useState, 2),\n status = _useState2[0],\n setStatus = _useState2[1];\n var isLoaded = useRef(false);\n var isError = status === 'error';\n\n // https://github.com/react-component/image/pull/187\n useEffect(function () {\n var isCurrentSrc = true;\n isImageValid(src).then(function (isValid) {\n // https://github.com/ant-design/ant-design/issues/44948\n // If src changes, the previous setStatus should not be triggered\n if (!isValid && isCurrentSrc) {\n setStatus('error');\n }\n });\n return function () {\n isCurrentSrc = false;\n };\n }, [src]);\n useEffect(function () {\n if (isCustomPlaceholder && !isLoaded.current) {\n setStatus('loading');\n } else if (isError) {\n setStatus('normal');\n }\n }, [src]);\n var onLoad = function onLoad() {\n setStatus('normal');\n };\n var getImgRef = function getImgRef(img) {\n isLoaded.current = false;\n if (status === 'loading' && img !== null && img !== void 0 && img.complete && (img.naturalWidth || img.naturalHeight)) {\n isLoaded.current = true;\n onLoad();\n }\n };\n var srcAndOnload = isError && fallback ? {\n src: fallback\n } : {\n onLoad: onLoad,\n src: src\n };\n return [getImgRef, srcAndOnload, status];\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport { useEffect, useRef, useState } from 'react';\nimport getFixScaleEleTransPosition from \"../getFixScaleEleTransPosition\";\nfunction getDistance(a, b) {\n var x = a.x - b.x;\n var y = a.y - b.y;\n return Math.hypot(x, y);\n}\nfunction getCenter(oldPoint1, oldPoint2, newPoint1, newPoint2) {\n // Calculate the distance each point has moved\n var distance1 = getDistance(oldPoint1, newPoint1);\n var distance2 = getDistance(oldPoint2, newPoint2);\n\n // If both distances are 0, return the original points\n if (distance1 === 0 && distance2 === 0) {\n return [oldPoint1.x, oldPoint1.y];\n }\n\n // Calculate the ratio of the distances\n var ratio = distance1 / (distance1 + distance2);\n\n // Calculate the new center point based on the ratio\n var x = oldPoint1.x + ratio * (oldPoint2.x - oldPoint1.x);\n var y = oldPoint1.y + ratio * (oldPoint2.y - oldPoint1.y);\n return [x, y];\n}\nexport default function useTouchEvent(imgRef, movable, visible, minScale, transform, updateTransform, dispatchZoomChange) {\n var rotate = transform.rotate,\n scale = transform.scale,\n x = transform.x,\n y = transform.y;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isTouching = _useState2[0],\n setIsTouching = _useState2[1];\n var touchPointInfo = useRef({\n point1: {\n x: 0,\n y: 0\n },\n point2: {\n x: 0,\n y: 0\n },\n eventType: 'none'\n });\n var updateTouchPointInfo = function updateTouchPointInfo(values) {\n touchPointInfo.current = _objectSpread(_objectSpread({}, touchPointInfo.current), values);\n };\n var onTouchStart = function onTouchStart(event) {\n if (!movable) return;\n event.stopPropagation();\n setIsTouching(true);\n var _event$touches = event.touches,\n touches = _event$touches === void 0 ? [] : _event$touches;\n if (touches.length > 1) {\n // touch zoom\n updateTouchPointInfo({\n point1: {\n x: touches[0].clientX,\n y: touches[0].clientY\n },\n point2: {\n x: touches[1].clientX,\n y: touches[1].clientY\n },\n eventType: 'touchZoom'\n });\n } else {\n // touch move\n updateTouchPointInfo({\n point1: {\n x: touches[0].clientX - x,\n y: touches[0].clientY - y\n },\n eventType: 'move'\n });\n }\n };\n var onTouchMove = function onTouchMove(event) {\n var _event$touches2 = event.touches,\n touches = _event$touches2 === void 0 ? [] : _event$touches2;\n var _touchPointInfo$curre = touchPointInfo.current,\n point1 = _touchPointInfo$curre.point1,\n point2 = _touchPointInfo$curre.point2,\n eventType = _touchPointInfo$curre.eventType;\n if (touches.length > 1 && eventType === 'touchZoom') {\n // touch zoom\n var newPoint1 = {\n x: touches[0].clientX,\n y: touches[0].clientY\n };\n var newPoint2 = {\n x: touches[1].clientX,\n y: touches[1].clientY\n };\n var _getCenter = getCenter(point1, point2, newPoint1, newPoint2),\n _getCenter2 = _slicedToArray(_getCenter, 2),\n centerX = _getCenter2[0],\n centerY = _getCenter2[1];\n var ratio = getDistance(newPoint1, newPoint2) / getDistance(point1, point2);\n dispatchZoomChange(ratio, 'touchZoom', centerX, centerY, true);\n updateTouchPointInfo({\n point1: newPoint1,\n point2: newPoint2,\n eventType: 'touchZoom'\n });\n } else if (eventType === 'move') {\n // touch move\n updateTransform({\n x: touches[0].clientX - point1.x,\n y: touches[0].clientY - point1.y\n }, 'move');\n updateTouchPointInfo({\n eventType: 'move'\n });\n }\n };\n var onTouchEnd = function onTouchEnd() {\n if (!visible) return;\n if (isTouching) {\n setIsTouching(false);\n }\n updateTouchPointInfo({\n eventType: 'none'\n });\n if (minScale > scale) {\n /** When the scaling ratio is less than the minimum scaling ratio, reset the scaling ratio */\n return updateTransform({\n x: 0,\n y: 0,\n scale: minScale\n }, 'touchZoom');\n }\n var width = imgRef.current.offsetWidth * scale;\n var height = imgRef.current.offsetHeight * scale;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n var _imgRef$current$getBo = imgRef.current.getBoundingClientRect(),\n left = _imgRef$current$getBo.left,\n top = _imgRef$current$getBo.top;\n var isRotate = rotate % 180 !== 0;\n var fixState = getFixScaleEleTransPosition(isRotate ? height : width, isRotate ? width : height, left, top);\n if (fixState) {\n updateTransform(_objectSpread({}, fixState), 'dragRebound');\n }\n };\n useEffect(function () {\n var onTouchMoveListener;\n if (visible && movable) {\n onTouchMoveListener = addEventListener(window, 'touchmove', function (e) {\n return e.preventDefault();\n }, {\n passive: false\n });\n }\n return function () {\n var _onTouchMoveListener;\n (_onTouchMoveListener = onTouchMoveListener) === null || _onTouchMoveListener === void 0 || _onTouchMoveListener.remove();\n };\n }, [visible, movable]);\n return {\n isTouching: isTouching,\n onTouchStart: onTouchStart,\n onTouchMove: onTouchMove,\n onTouchEnd: onTouchEnd\n };\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"fallback\", \"src\", \"imgRef\"],\n _excluded2 = [\"prefixCls\", \"src\", \"alt\", \"imageInfo\", \"fallback\", \"movable\", \"onClose\", \"visible\", \"icons\", \"rootClassName\", \"closeIcon\", \"getContainer\", \"current\", \"count\", \"countRender\", \"scaleStep\", \"minScale\", \"maxScale\", \"transitionName\", \"maskTransitionName\", \"imageRender\", \"imgCommonProps\", \"toolbarRender\", \"onTransform\", \"onChange\"];\nimport classnames from 'classnames';\nimport Dialog from 'rc-dialog';\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport Operations from \"./Operations\";\nimport { PreviewGroupContext } from \"./context\";\nimport useImageTransform from \"./hooks/useImageTransform\";\nimport useMouseEvent from \"./hooks/useMouseEvent\";\nimport useStatus from \"./hooks/useStatus\";\nimport useTouchEvent from \"./hooks/useTouchEvent\";\nimport { BASE_SCALE_RATIO } from \"./previewConfig\";\nvar PreviewImage = function PreviewImage(_ref) {\n var fallback = _ref.fallback,\n src = _ref.src,\n imgRef = _ref.imgRef,\n props = _objectWithoutProperties(_ref, _excluded);\n var _useStatus = useStatus({\n src: src,\n fallback: fallback\n }),\n _useStatus2 = _slicedToArray(_useStatus, 2),\n getImgRef = _useStatus2[0],\n srcAndOnload = _useStatus2[1];\n return /*#__PURE__*/React.createElement(\"img\", _extends({\n ref: function ref(_ref2) {\n imgRef.current = _ref2;\n getImgRef(_ref2);\n }\n }, props, srcAndOnload));\n};\nvar Preview = function Preview(props) {\n var prefixCls = props.prefixCls,\n src = props.src,\n alt = props.alt,\n imageInfo = props.imageInfo,\n fallback = props.fallback,\n _props$movable = props.movable,\n movable = _props$movable === void 0 ? true : _props$movable,\n onClose = props.onClose,\n visible = props.visible,\n _props$icons = props.icons,\n icons = _props$icons === void 0 ? {} : _props$icons,\n rootClassName = props.rootClassName,\n closeIcon = props.closeIcon,\n getContainer = props.getContainer,\n _props$current = props.current,\n current = _props$current === void 0 ? 0 : _props$current,\n _props$count = props.count,\n count = _props$count === void 0 ? 1 : _props$count,\n countRender = props.countRender,\n _props$scaleStep = props.scaleStep,\n scaleStep = _props$scaleStep === void 0 ? 0.5 : _props$scaleStep,\n _props$minScale = props.minScale,\n minScale = _props$minScale === void 0 ? 1 : _props$minScale,\n _props$maxScale = props.maxScale,\n maxScale = _props$maxScale === void 0 ? 50 : _props$maxScale,\n _props$transitionName = props.transitionName,\n transitionName = _props$transitionName === void 0 ? 'zoom' : _props$transitionName,\n _props$maskTransition = props.maskTransitionName,\n maskTransitionName = _props$maskTransition === void 0 ? 'fade' : _props$maskTransition,\n imageRender = props.imageRender,\n imgCommonProps = props.imgCommonProps,\n toolbarRender = props.toolbarRender,\n onTransform = props.onTransform,\n onChange = props.onChange,\n restProps = _objectWithoutProperties(props, _excluded2);\n var imgRef = useRef();\n var groupContext = useContext(PreviewGroupContext);\n var showLeftOrRightSwitches = groupContext && count > 1;\n var showOperationsProgress = groupContext && count >= 1;\n var _useState = useState(true),\n _useState2 = _slicedToArray(_useState, 2),\n enableTransition = _useState2[0],\n setEnableTransition = _useState2[1];\n var _useImageTransform = useImageTransform(imgRef, minScale, maxScale, onTransform),\n transform = _useImageTransform.transform,\n resetTransform = _useImageTransform.resetTransform,\n updateTransform = _useImageTransform.updateTransform,\n dispatchZoomChange = _useImageTransform.dispatchZoomChange;\n var _useMouseEvent = useMouseEvent(imgRef, movable, visible, scaleStep, transform, updateTransform, dispatchZoomChange),\n isMoving = _useMouseEvent.isMoving,\n onMouseDown = _useMouseEvent.onMouseDown,\n onWheel = _useMouseEvent.onWheel;\n var _useTouchEvent = useTouchEvent(imgRef, movable, visible, minScale, transform, updateTransform, dispatchZoomChange),\n isTouching = _useTouchEvent.isTouching,\n onTouchStart = _useTouchEvent.onTouchStart,\n onTouchMove = _useTouchEvent.onTouchMove,\n onTouchEnd = _useTouchEvent.onTouchEnd;\n var rotate = transform.rotate,\n scale = transform.scale;\n var wrapClassName = classnames(_defineProperty({}, \"\".concat(prefixCls, \"-moving\"), isMoving));\n useEffect(function () {\n if (!enableTransition) {\n setEnableTransition(true);\n }\n }, [enableTransition]);\n var onAfterClose = function onAfterClose() {\n resetTransform('close');\n };\n var onZoomIn = function onZoomIn() {\n dispatchZoomChange(BASE_SCALE_RATIO + scaleStep, 'zoomIn');\n };\n var onZoomOut = function onZoomOut() {\n dispatchZoomChange(BASE_SCALE_RATIO / (BASE_SCALE_RATIO + scaleStep), 'zoomOut');\n };\n var onRotateRight = function onRotateRight() {\n updateTransform({\n rotate: rotate + 90\n }, 'rotateRight');\n };\n var onRotateLeft = function onRotateLeft() {\n updateTransform({\n rotate: rotate - 90\n }, 'rotateLeft');\n };\n var onFlipX = function onFlipX() {\n updateTransform({\n flipX: !transform.flipX\n }, 'flipX');\n };\n var onFlipY = function onFlipY() {\n updateTransform({\n flipY: !transform.flipY\n }, 'flipY');\n };\n var onReset = function onReset() {\n resetTransform('reset');\n };\n var onActive = function onActive(offset) {\n var position = current + offset;\n if (!Number.isInteger(position) || position < 0 || position > count - 1) {\n return;\n }\n setEnableTransition(false);\n resetTransform(offset < 0 ? 'prev' : 'next');\n onChange === null || onChange === void 0 || onChange(position, current);\n };\n var onKeyDown = function onKeyDown(event) {\n if (!visible || !showLeftOrRightSwitches) return;\n if (event.keyCode === KeyCode.LEFT) {\n onActive(-1);\n } else if (event.keyCode === KeyCode.RIGHT) {\n onActive(1);\n }\n };\n var onDoubleClick = function onDoubleClick(event) {\n if (visible) {\n if (scale !== 1) {\n updateTransform({\n x: 0,\n y: 0,\n scale: 1\n }, 'doubleClick');\n } else {\n dispatchZoomChange(BASE_SCALE_RATIO + scaleStep, 'doubleClick', event.clientX, event.clientY);\n }\n }\n };\n useEffect(function () {\n var onKeyDownListener = addEventListener(window, 'keydown', onKeyDown, false);\n return function () {\n onKeyDownListener.remove();\n };\n }, [visible, showLeftOrRightSwitches, current]);\n var imgNode = /*#__PURE__*/React.createElement(PreviewImage, _extends({}, imgCommonProps, {\n width: props.width,\n height: props.height,\n imgRef: imgRef,\n className: \"\".concat(prefixCls, \"-img\"),\n alt: alt,\n style: {\n transform: \"translate3d(\".concat(transform.x, \"px, \").concat(transform.y, \"px, 0) scale3d(\").concat(transform.flipX ? '-' : '').concat(scale, \", \").concat(transform.flipY ? '-' : '').concat(scale, \", 1) rotate(\").concat(rotate, \"deg)\"),\n transitionDuration: (!enableTransition || isTouching) && '0s'\n },\n fallback: fallback,\n src: src,\n onWheel: onWheel,\n onMouseDown: onMouseDown,\n onDoubleClick: onDoubleClick,\n onTouchStart: onTouchStart,\n onTouchMove: onTouchMove,\n onTouchEnd: onTouchEnd,\n onTouchCancel: onTouchEnd\n }));\n var image = _objectSpread({\n url: src,\n alt: alt\n }, imageInfo);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Dialog, _extends({\n transitionName: transitionName,\n maskTransitionName: maskTransitionName,\n closable: false,\n keyboard: true,\n prefixCls: prefixCls,\n onClose: onClose,\n visible: visible,\n classNames: {\n wrapper: wrapClassName\n },\n rootClassName: rootClassName,\n getContainer: getContainer\n }, restProps, {\n afterClose: onAfterClose\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-img-wrapper\")\n }, imageRender ? imageRender(imgNode, _objectSpread({\n transform: transform,\n image: image\n }, groupContext ? {\n current: current\n } : {})) : imgNode)), /*#__PURE__*/React.createElement(Operations, {\n visible: visible,\n transform: transform,\n maskTransitionName: maskTransitionName,\n closeIcon: closeIcon,\n getContainer: getContainer,\n prefixCls: prefixCls,\n rootClassName: rootClassName,\n icons: icons,\n countRender: countRender,\n showSwitch: showLeftOrRightSwitches,\n showProgress: showOperationsProgress,\n current: current,\n count: count,\n scale: scale,\n minScale: minScale,\n maxScale: maxScale,\n toolbarRender: toolbarRender,\n onActive: onActive,\n onZoomIn: onZoomIn,\n onZoomOut: onZoomOut,\n onRotateRight: onRotateRight,\n onRotateLeft: onRotateLeft,\n onFlipX: onFlipX,\n onFlipY: onFlipY,\n onClose: onClose,\n onReset: onReset,\n zIndex: restProps.zIndex !== undefined ? restProps.zIndex + 1 : undefined,\n image: image\n }));\n};\nexport default Preview;","export var COMMON_PROPS = ['crossOrigin', 'decoding', 'draggable', 'loading', 'referrerPolicy', 'sizes', 'srcSet', 'useMap', 'alt'];","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { COMMON_PROPS } from \"../common\";\n/**\n * Merge props provided `items` or context collected images\n */\nexport default function usePreviewItems(items) {\n // Context collection image data\n var _React$useState = React.useState({}),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n images = _React$useState2[0],\n setImages = _React$useState2[1];\n var registerImage = React.useCallback(function (id, data) {\n setImages(function (imgs) {\n return _objectSpread(_objectSpread({}, imgs), {}, _defineProperty({}, id, data));\n });\n return function () {\n setImages(function (imgs) {\n var cloneImgs = _objectSpread({}, imgs);\n delete cloneImgs[id];\n return cloneImgs;\n });\n };\n }, []);\n\n // items\n var mergedItems = React.useMemo(function () {\n // use `items` first\n if (items) {\n return items.map(function (item) {\n if (typeof item === 'string') {\n return {\n data: {\n src: item\n }\n };\n }\n var data = {};\n Object.keys(item).forEach(function (key) {\n if (['src'].concat(_toConsumableArray(COMMON_PROPS)).includes(key)) {\n data[key] = item[key];\n }\n });\n return {\n data: data\n };\n });\n }\n\n // use registered images secondly\n return Object.keys(images).reduce(function (total, id) {\n var _images$id = images[id],\n canPreview = _images$id.canPreview,\n data = _images$id.data;\n if (canPreview) {\n total.push({\n data: data,\n id: id\n });\n }\n return total;\n }, []);\n }, [items, images]);\n return [mergedItems, registerImage, !!items];\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"visible\", \"onVisibleChange\", \"getContainer\", \"current\", \"movable\", \"minScale\", \"maxScale\", \"countRender\", \"closeIcon\", \"onChange\", \"onTransform\", \"toolbarRender\", \"imageRender\"],\n _excluded2 = [\"src\"];\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport * as React from 'react';\nimport { useState } from 'react';\nimport Preview from \"./Preview\";\nimport { PreviewGroupContext } from \"./context\";\nimport usePreviewItems from \"./hooks/usePreviewItems\";\nvar Group = function Group(_ref) {\n var _mergedItems$current;\n var _ref$previewPrefixCls = _ref.previewPrefixCls,\n previewPrefixCls = _ref$previewPrefixCls === void 0 ? 'rc-image-preview' : _ref$previewPrefixCls,\n children = _ref.children,\n _ref$icons = _ref.icons,\n icons = _ref$icons === void 0 ? {} : _ref$icons,\n items = _ref.items,\n preview = _ref.preview,\n fallback = _ref.fallback;\n var _ref2 = _typeof(preview) === 'object' ? preview : {},\n previewVisible = _ref2.visible,\n onVisibleChange = _ref2.onVisibleChange,\n getContainer = _ref2.getContainer,\n currentIndex = _ref2.current,\n movable = _ref2.movable,\n minScale = _ref2.minScale,\n maxScale = _ref2.maxScale,\n countRender = _ref2.countRender,\n closeIcon = _ref2.closeIcon,\n onChange = _ref2.onChange,\n onTransform = _ref2.onTransform,\n toolbarRender = _ref2.toolbarRender,\n imageRender = _ref2.imageRender,\n dialogProps = _objectWithoutProperties(_ref2, _excluded);\n\n // ========================== Items ===========================\n var _usePreviewItems = usePreviewItems(items),\n _usePreviewItems2 = _slicedToArray(_usePreviewItems, 3),\n mergedItems = _usePreviewItems2[0],\n register = _usePreviewItems2[1],\n fromItems = _usePreviewItems2[2];\n\n // ========================= Preview ==========================\n // >>> Index\n var _useMergedState = useMergedState(0, {\n value: currentIndex\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n current = _useMergedState2[0],\n setCurrent = _useMergedState2[1];\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n keepOpenIndex = _useState2[0],\n setKeepOpenIndex = _useState2[1];\n\n // >>> Image\n var _ref3 = ((_mergedItems$current = mergedItems[current]) === null || _mergedItems$current === void 0 ? void 0 : _mergedItems$current.data) || {},\n src = _ref3.src,\n imgCommonProps = _objectWithoutProperties(_ref3, _excluded2);\n // >>> Visible\n var _useMergedState3 = useMergedState(!!previewVisible, {\n value: previewVisible,\n onChange: function onChange(val, prevVal) {\n onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(val, prevVal, current);\n }\n }),\n _useMergedState4 = _slicedToArray(_useMergedState3, 2),\n isShowPreview = _useMergedState4[0],\n setShowPreview = _useMergedState4[1];\n\n // >>> Position\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n mousePosition = _useState4[0],\n setMousePosition = _useState4[1];\n var onPreviewFromImage = React.useCallback(function (id, imageSrc, mouseX, mouseY) {\n var index = fromItems ? mergedItems.findIndex(function (item) {\n return item.data.src === imageSrc;\n }) : mergedItems.findIndex(function (item) {\n return item.id === id;\n });\n setCurrent(index < 0 ? 0 : index);\n setShowPreview(true);\n setMousePosition({\n x: mouseX,\n y: mouseY\n });\n setKeepOpenIndex(true);\n }, [mergedItems, fromItems]);\n\n // Reset current when reopen\n React.useEffect(function () {\n if (isShowPreview) {\n if (!keepOpenIndex) {\n setCurrent(0);\n }\n } else {\n setKeepOpenIndex(false);\n }\n }, [isShowPreview]);\n\n // ========================== Events ==========================\n var onInternalChange = function onInternalChange(next, prev) {\n setCurrent(next);\n onChange === null || onChange === void 0 || onChange(next, prev);\n };\n var onPreviewClose = function onPreviewClose() {\n setShowPreview(false);\n setMousePosition(null);\n };\n\n // ========================= Context ==========================\n var previewGroupContext = React.useMemo(function () {\n return {\n register: register,\n onPreview: onPreviewFromImage\n };\n }, [register, onPreviewFromImage]);\n\n // ========================== Render ==========================\n return /*#__PURE__*/React.createElement(PreviewGroupContext.Provider, {\n value: previewGroupContext\n }, children, /*#__PURE__*/React.createElement(Preview, _extends({\n \"aria-hidden\": !isShowPreview,\n movable: movable,\n visible: isShowPreview,\n prefixCls: previewPrefixCls,\n closeIcon: closeIcon,\n onClose: onPreviewClose,\n mousePosition: mousePosition,\n imgCommonProps: imgCommonProps,\n src: src,\n fallback: fallback,\n icons: icons,\n minScale: minScale,\n maxScale: maxScale,\n getContainer: getContainer,\n current: current,\n count: mergedItems.length,\n countRender: countRender,\n onTransform: onTransform,\n toolbarRender: toolbarRender,\n imageRender: imageRender,\n onChange: onInternalChange\n }, dialogProps)));\n};\nexport default Group;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { PreviewGroupContext } from \"../context\";\nvar uid = 0;\nexport default function useRegisterImage(canPreview, data) {\n var _React$useState = React.useState(function () {\n uid += 1;\n return String(uid);\n }),\n _React$useState2 = _slicedToArray(_React$useState, 1),\n id = _React$useState2[0];\n var groupContext = React.useContext(PreviewGroupContext);\n var registerData = {\n data: data,\n canPreview: canPreview\n };\n\n // Keep order start\n // Resolve https://github.com/ant-design/ant-design/issues/28881\n // Only need unRegister when component unMount\n React.useEffect(function () {\n if (groupContext) {\n return groupContext.register(id, registerData);\n }\n }, []);\n React.useEffect(function () {\n if (groupContext) {\n groupContext.register(id, registerData);\n }\n }, [canPreview, data]);\n return id;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"src\", \"alt\", \"onPreviewClose\", \"prefixCls\", \"previewPrefixCls\", \"placeholder\", \"fallback\", \"width\", \"height\", \"style\", \"preview\", \"className\", \"onClick\", \"onError\", \"wrapperClassName\", \"wrapperStyle\", \"rootClassName\"],\n _excluded2 = [\"src\", \"visible\", \"onVisibleChange\", \"getContainer\", \"mask\", \"maskClassName\", \"movable\", \"icons\", \"scaleStep\", \"minScale\", \"maxScale\", \"imageRender\", \"toolbarRender\"];\nimport cn from 'classnames';\nimport { getOffset } from \"rc-util/es/Dom/css\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport * as React from 'react';\nimport { useContext, useMemo, useState } from 'react';\nimport Preview from \"./Preview\";\nimport PreviewGroup from \"./PreviewGroup\";\nimport { COMMON_PROPS } from \"./common\";\nimport { PreviewGroupContext } from \"./context\";\nimport useRegisterImage from \"./hooks/useRegisterImage\";\nimport useStatus from \"./hooks/useStatus\";\nvar ImageInternal = function ImageInternal(props) {\n var imgSrc = props.src,\n alt = props.alt,\n onInitialPreviewClose = props.onPreviewClose,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-image' : _props$prefixCls,\n _props$previewPrefixC = props.previewPrefixCls,\n previewPrefixCls = _props$previewPrefixC === void 0 ? \"\".concat(prefixCls, \"-preview\") : _props$previewPrefixC,\n placeholder = props.placeholder,\n fallback = props.fallback,\n width = props.width,\n height = props.height,\n style = props.style,\n _props$preview = props.preview,\n preview = _props$preview === void 0 ? true : _props$preview,\n className = props.className,\n onClick = props.onClick,\n onError = props.onError,\n wrapperClassName = props.wrapperClassName,\n wrapperStyle = props.wrapperStyle,\n rootClassName = props.rootClassName,\n otherProps = _objectWithoutProperties(props, _excluded);\n var isCustomPlaceholder = placeholder && placeholder !== true;\n var _ref = _typeof(preview) === 'object' ? preview : {},\n previewSrc = _ref.src,\n _ref$visible = _ref.visible,\n previewVisible = _ref$visible === void 0 ? undefined : _ref$visible,\n _ref$onVisibleChange = _ref.onVisibleChange,\n onPreviewVisibleChange = _ref$onVisibleChange === void 0 ? onInitialPreviewClose : _ref$onVisibleChange,\n _ref$getContainer = _ref.getContainer,\n getPreviewContainer = _ref$getContainer === void 0 ? undefined : _ref$getContainer,\n previewMask = _ref.mask,\n maskClassName = _ref.maskClassName,\n movable = _ref.movable,\n icons = _ref.icons,\n scaleStep = _ref.scaleStep,\n minScale = _ref.minScale,\n maxScale = _ref.maxScale,\n imageRender = _ref.imageRender,\n toolbarRender = _ref.toolbarRender,\n dialogProps = _objectWithoutProperties(_ref, _excluded2);\n var src = previewSrc !== null && previewSrc !== void 0 ? previewSrc : imgSrc;\n var _useMergedState = useMergedState(!!previewVisible, {\n value: previewVisible,\n onChange: onPreviewVisibleChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n isShowPreview = _useMergedState2[0],\n setShowPreview = _useMergedState2[1];\n var _useStatus = useStatus({\n src: imgSrc,\n isCustomPlaceholder: isCustomPlaceholder,\n fallback: fallback\n }),\n _useStatus2 = _slicedToArray(_useStatus, 3),\n getImgRef = _useStatus2[0],\n srcAndOnload = _useStatus2[1],\n status = _useStatus2[2];\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n mousePosition = _useState2[0],\n setMousePosition = _useState2[1];\n var groupContext = useContext(PreviewGroupContext);\n var canPreview = !!preview;\n var onPreviewClose = function onPreviewClose() {\n setShowPreview(false);\n setMousePosition(null);\n };\n var wrapperClass = cn(prefixCls, wrapperClassName, rootClassName, _defineProperty({}, \"\".concat(prefixCls, \"-error\"), status === 'error'));\n\n // ========================= ImageProps =========================\n var imgCommonProps = useMemo(function () {\n var obj = {};\n COMMON_PROPS.forEach(function (prop) {\n if (props[prop] !== undefined) {\n obj[prop] = props[prop];\n }\n });\n return obj;\n }, COMMON_PROPS.map(function (prop) {\n return props[prop];\n }));\n\n // ========================== Register ==========================\n var registerData = useMemo(function () {\n return _objectSpread(_objectSpread({}, imgCommonProps), {}, {\n src: src\n });\n }, [src, imgCommonProps]);\n var imageId = useRegisterImage(canPreview, registerData);\n\n // ========================== Preview ===========================\n var onPreview = function onPreview(e) {\n var _getOffset = getOffset(e.target),\n left = _getOffset.left,\n top = _getOffset.top;\n if (groupContext) {\n groupContext.onPreview(imageId, src, left, top);\n } else {\n setMousePosition({\n x: left,\n y: top\n });\n setShowPreview(true);\n }\n onClick === null || onClick === void 0 || onClick(e);\n };\n\n // =========================== Render ===========================\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", _extends({}, otherProps, {\n className: wrapperClass,\n onClick: canPreview ? onPreview : onClick,\n style: _objectSpread({\n width: width,\n height: height\n }, wrapperStyle)\n }), /*#__PURE__*/React.createElement(\"img\", _extends({}, imgCommonProps, {\n className: cn(\"\".concat(prefixCls, \"-img\"), _defineProperty({}, \"\".concat(prefixCls, \"-img-placeholder\"), placeholder === true), className),\n style: _objectSpread({\n height: height\n }, style),\n ref: getImgRef\n }, srcAndOnload, {\n width: width,\n height: height,\n onError: onError\n })), status === 'loading' && /*#__PURE__*/React.createElement(\"div\", {\n \"aria-hidden\": \"true\",\n className: \"\".concat(prefixCls, \"-placeholder\")\n }, placeholder), previewMask && canPreview && /*#__PURE__*/React.createElement(\"div\", {\n className: cn(\"\".concat(prefixCls, \"-mask\"), maskClassName),\n style: {\n display: (style === null || style === void 0 ? void 0 : style.display) === 'none' ? 'none' : undefined\n }\n }, previewMask)), !groupContext && canPreview && /*#__PURE__*/React.createElement(Preview, _extends({\n \"aria-hidden\": !isShowPreview,\n visible: isShowPreview,\n prefixCls: previewPrefixCls,\n onClose: onPreviewClose,\n mousePosition: mousePosition,\n src: src,\n alt: alt,\n imageInfo: {\n width: width,\n height: height\n },\n fallback: fallback,\n getContainer: getPreviewContainer,\n icons: icons,\n movable: movable,\n scaleStep: scaleStep,\n minScale: minScale,\n maxScale: maxScale,\n rootClassName: rootClassName,\n imageRender: imageRender,\n imgCommonProps: imgCommonProps,\n toolbarRender: toolbarRender\n }, dialogProps)));\n};\nImageInternal.PreviewGroup = PreviewGroup;\nif (process.env.NODE_ENV !== 'production') {\n ImageInternal.displayName = 'Image';\n}\nexport default ImageInternal;","// This icon file is generated automatically.\nvar RotateLeftOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M672 418H144c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H188V494h440v326z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M819.3 328.5c-78.8-100.7-196-153.6-314.6-154.2l-.2-64c0-6.5-7.6-10.1-12.6-6.1l-128 101c-4 3.1-3.9 9.1 0 12.3L492 318.6c5.1 4 12.7.4 12.6-6.1v-63.9c12.9.1 25.9.9 38.8 2.5 42.1 5.2 82.1 18.2 119 38.7 38.1 21.2 71.2 49.7 98.4 84.3 27.1 34.7 46.7 73.7 58.1 115.8a325.95 325.95 0 016.5 140.9h74.9c14.8-103.6-11.3-213-81-302.3z\" } }] }, \"name\": \"rotate-left\", \"theme\": \"outlined\" };\nexport default RotateLeftOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport RotateLeftOutlinedSvg from \"@ant-design/icons-svg/es/asn/RotateLeftOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar RotateLeftOutlined = function RotateLeftOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: RotateLeftOutlinedSvg\n }));\n};\n\n/**![rotate-left](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHN0eWxlIC8+PC9kZWZzPjxwYXRoIGQ9Ik02NzIgNDE4SDE0NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NDE0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDUyOGMxNy43IDAgMzItMTQuMyAzMi0zMlY0NTBjMC0xNy43LTE0LjMtMzItMzItMzJ6bS00NCA0MDJIMTg4VjQ5NGg0NDB2MzI2eiIgLz48cGF0aCBkPSJNODE5LjMgMzI4LjVjLTc4LjgtMTAwLjctMTk2LTE1My42LTMxNC42LTE1NC4ybC0uMi02NGMwLTYuNS03LjYtMTAuMS0xMi42LTYuMWwtMTI4IDEwMWMtNCAzLjEtMy45IDkuMSAwIDEyLjNMNDkyIDMxOC42YzUuMSA0IDEyLjcuNCAxMi42LTYuMXYtNjMuOWMxMi45LjEgMjUuOS45IDM4LjggMi41IDQyLjEgNS4yIDgyLjEgMTguMiAxMTkgMzguNyAzOC4xIDIxLjIgNzEuMiA0OS43IDk4LjQgODQuMyAyNy4xIDM0LjcgNDYuNyA3My43IDU4LjEgMTE1LjhhMzI1Ljk1IDMyNS45NSAwIDAxNi41IDE0MC45aDc0LjljMTQuOC0xMDMuNi0xMS4zLTIxMy04MS0zMDIuM3oiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(RotateLeftOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'RotateLeftOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar RotateRightOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M480.5 251.2c13-1.6 25.9-2.4 38.8-2.5v63.9c0 6.5 7.5 10.1 12.6 6.1L660 217.6c4-3.2 4-9.2 0-12.3l-128-101c-5.1-4-12.6-.4-12.6 6.1l-.2 64c-118.6.5-235.8 53.4-314.6 154.2A399.75 399.75 0 00123.5 631h74.9c-.9-5.3-1.7-10.7-2.4-16.1-5.1-42.1-2.1-84.1 8.9-124.8 11.4-42.2 31-81.1 58.1-115.8 27.2-34.7 60.3-63.2 98.4-84.3 37-20.6 76.9-33.6 119.1-38.8z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M880 418H352c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H396V494h440v326z\" } }] }, \"name\": \"rotate-right\", \"theme\": \"outlined\" };\nexport default RotateRightOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport RotateRightOutlinedSvg from \"@ant-design/icons-svg/es/asn/RotateRightOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar RotateRightOutlined = function RotateRightOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: RotateRightOutlinedSvg\n }));\n};\n\n/**![rotate-right](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHN0eWxlIC8+PC9kZWZzPjxwYXRoIGQ9Ik00ODAuNSAyNTEuMmMxMy0xLjYgMjUuOS0yLjQgMzguOC0yLjV2NjMuOWMwIDYuNSA3LjUgMTAuMSAxMi42IDYuMUw2NjAgMjE3LjZjNC0zLjIgNC05LjIgMC0xMi4zbC0xMjgtMTAxYy01LjEtNC0xMi42LS40LTEyLjYgNi4xbC0uMiA2NGMtMTE4LjYuNS0yMzUuOCA1My40LTMxNC42IDE1NC4yQTM5OS43NSAzOTkuNzUgMCAwMDEyMy41IDYzMWg3NC45Yy0uOS01LjMtMS43LTEwLjctMi40LTE2LjEtNS4xLTQyLjEtMi4xLTg0LjEgOC45LTEyNC44IDExLjQtNDIuMiAzMS04MS4xIDU4LjEtMTE1LjggMjcuMi0zNC43IDYwLjMtNjMuMiA5OC40LTg0LjMgMzctMjAuNiA3Ni45LTMzLjYgMTE5LjEtMzguOHoiIC8+PHBhdGggZD0iTTg4MCA0MThIMzUyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY0MTRjMCAxNy43IDE0LjMgMzIgMzIgMzJoNTI4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjQ1MGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTQ0IDQwMkgzOTZWNDk0aDQ0MHYzMjZ6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(RotateRightOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'RotateRightOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar SwapOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M847.9 592H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h605.2L612.9 851c-4.1 5.2-.4 13 6.3 13h72.5c4.9 0 9.5-2.2 12.6-6.1l168.8-214.1c16.5-21 1.6-51.8-25.2-51.8zM872 356H266.8l144.3-183c4.1-5.2.4-13-6.3-13h-72.5c-4.9 0-9.5 2.2-12.6 6.1L150.9 380.2c-16.5 21-1.6 51.8 25.1 51.8h696c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"swap\", \"theme\": \"outlined\" };\nexport default SwapOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport SwapOutlinedSvg from \"@ant-design/icons-svg/es/asn/SwapOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar SwapOutlined = function SwapOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: SwapOutlinedSvg\n }));\n};\n\n/**![swap](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg0Ny45IDU5MkgxNTJjLTQuNCAwLTggMy42LTggOHY2MGMwIDQuNCAzLjYgOCA4IDhoNjA1LjJMNjEyLjkgODUxYy00LjEgNS4yLS40IDEzIDYuMyAxM2g3Mi41YzQuOSAwIDkuNS0yLjIgMTIuNi02LjFsMTY4LjgtMjE0LjFjMTYuNS0yMSAxLjYtNTEuOC0yNS4yLTUxLjh6TTg3MiAzNTZIMjY2LjhsMTQ0LjMtMTgzYzQuMS01LjIuNC0xMy02LjMtMTNoLTcyLjVjLTQuOSAwLTkuNSAyLjItMTIuNiA2LjFMMTUwLjkgMzgwLjJjLTE2LjUgMjEtMS42IDUxLjggMjUuMSA1MS44aDY5NmM0LjQgMCA4LTMuNiA4LTh2LTYwYzAtNC40LTMuNi04LTgtOHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(SwapOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'SwapOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar ZoomInOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M637 443H519V309c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v134H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h118v134c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V519h118c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z\" } }] }, \"name\": \"zoom-in\", \"theme\": \"outlined\" };\nexport default ZoomInOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport ZoomInOutlinedSvg from \"@ant-design/icons-svg/es/asn/ZoomInOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar ZoomInOutlined = function ZoomInOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: ZoomInOutlinedSvg\n }));\n};\n\n/**![zoom-in](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTYzNyA0NDNINTE5VjMwOWMwLTQuNC0zLjYtOC04LThoLTYwYy00LjQgMC04IDMuNi04IDh2MTM0SDMyNWMtNC40IDAtOCAzLjYtOCA4djYwYzAgNC40IDMuNiA4IDggOGgxMTh2MTM0YzAgNC40IDMuNiA4IDggOGg2MGM0LjQgMCA4LTMuNiA4LThWNTE5aDExOGM0LjQgMCA4LTMuNiA4LTh2LTYwYzAtNC40LTMuNi04LTgtOHptMjg0IDQyNEw3NzUgNzIxYzEyMi4xLTE0OC45IDExMy42LTM2OS41LTI2LTUwOS0xNDgtMTQ4LjEtMzg4LjQtMTQ4LjEtNTM3IDAtMTQ4LjEgMTQ4LjYtMTQ4LjEgMzg5IDAgNTM3IDEzOS41IDEzOS42IDM2MC4xIDE0OC4xIDUwOSAyNmwxNDYgMTQ2YzMuMiAyLjggOC4zIDIuOCAxMSAwbDQzLTQzYzIuOC0yLjcgMi44LTcuOCAwLTExek02OTYgNjk2Yy0xMTguOCAxMTguNy0zMTEuMiAxMTguNy00MzAgMC0xMTguNy0xMTguOC0xMTguNy0zMTEuMiAwLTQzMCAxMTguOC0xMTguNyAzMTEuMi0xMTguNyA0MzAgMCAxMTguNyAxMTguOCAxMTguNyAzMTEuMiAwIDQzMHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ZoomInOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'ZoomInOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar ZoomOutOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M637 443H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h312c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z\" } }] }, \"name\": \"zoom-out\", \"theme\": \"outlined\" };\nexport default ZoomOutOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport ZoomOutOutlinedSvg from \"@ant-design/icons-svg/es/asn/ZoomOutOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar ZoomOutOutlined = function ZoomOutOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: ZoomOutOutlinedSvg\n }));\n};\n\n/**![zoom-out](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTYzNyA0NDNIMzI1Yy00LjQgMC04IDMuNi04IDh2NjBjMCA0LjQgMy42IDggOCA4aDMxMmM0LjQgMCA4LTMuNiA4LTh2LTYwYzAtNC40LTMuNi04LTgtOHptMjg0IDQyNEw3NzUgNzIxYzEyMi4xLTE0OC45IDExMy42LTM2OS41LTI2LTUwOS0xNDgtMTQ4LjEtMzg4LjQtMTQ4LjEtNTM3IDAtMTQ4LjEgMTQ4LjYtMTQ4LjEgMzg5IDAgNTM3IDEzOS41IDEzOS42IDM2MC4xIDE0OC4xIDUwOSAyNmwxNDYgMTQ2YzMuMiAyLjggOC4zIDIuOCAxMSAwbDQzLTQzYzIuOC0yLjcgMi44LTcuOCAwLTExek02OTYgNjk2Yy0xMTguOCAxMTguNy0zMTEuMiAxMTguNy00MzAgMC0xMTguNy0xMTguOC0xMTguNy0zMTEuMiAwLTQzMCAxMTguOC0xMTguNyAzMTEuMi0xMTguNyA0MzAgMCAxMTguNyAxMTguOCAxMTguNyAzMTEuMiAwIDQzMHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ZoomOutOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'ZoomOutOutlined';\n}\nexport default RefIcon;","import { unit } from '@ant-design/cssinjs';\nimport { FastColor } from '@ant-design/fast-color';\nimport { genModalMaskStyle } from '../../modal/style';\nimport { textEllipsis } from '../../style';\nimport { initFadeMotion, initZoomMotion } from '../../style/motion';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nexport const genBoxStyle = position => ({\n position: position || 'absolute',\n inset: 0\n});\nexport const genImageMaskStyle = token => {\n const {\n iconCls,\n motionDurationSlow,\n paddingXXS,\n marginXXS,\n prefixCls,\n colorTextLightSolid\n } = token;\n return {\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: colorTextLightSolid,\n background: new FastColor('#000').setA(0.5).toRgbString(),\n cursor: 'pointer',\n opacity: 0,\n transition: `opacity ${motionDurationSlow}`,\n [`.${prefixCls}-mask-info`]: Object.assign(Object.assign({}, textEllipsis), {\n padding: `0 ${unit(paddingXXS)}`,\n [iconCls]: {\n marginInlineEnd: marginXXS,\n svg: {\n verticalAlign: 'baseline'\n }\n }\n })\n };\n};\nexport const genPreviewOperationsStyle = token => {\n const {\n previewCls,\n modalMaskBg,\n paddingSM,\n marginXL,\n margin,\n paddingLG,\n previewOperationColorDisabled,\n previewOperationHoverColor,\n motionDurationSlow,\n iconCls,\n colorTextLightSolid\n } = token;\n const operationBg = new FastColor(modalMaskBg).setA(0.1);\n const operationBgHover = operationBg.clone().setA(0.2);\n return {\n [`${previewCls}-footer`]: {\n position: 'fixed',\n bottom: marginXL,\n left: {\n _skip_check_: true,\n value: '50%'\n },\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n color: token.previewOperationColor,\n transform: 'translateX(-50%)'\n },\n [`${previewCls}-progress`]: {\n marginBottom: margin\n },\n [`${previewCls}-close`]: {\n position: 'fixed',\n top: marginXL,\n right: {\n _skip_check_: true,\n value: marginXL\n },\n display: 'flex',\n color: colorTextLightSolid,\n backgroundColor: operationBg.toRgbString(),\n borderRadius: '50%',\n padding: paddingSM,\n outline: 0,\n border: 0,\n cursor: 'pointer',\n transition: `all ${motionDurationSlow}`,\n '&:hover': {\n backgroundColor: operationBgHover.toRgbString()\n },\n [`& > ${iconCls}`]: {\n fontSize: token.previewOperationSize\n }\n },\n [`${previewCls}-operations`]: {\n display: 'flex',\n alignItems: 'center',\n padding: `0 ${unit(paddingLG)}`,\n backgroundColor: operationBg.toRgbString(),\n borderRadius: 100,\n '&-operation': {\n marginInlineStart: paddingSM,\n padding: paddingSM,\n cursor: 'pointer',\n transition: `all ${motionDurationSlow}`,\n userSelect: 'none',\n [`&:not(${previewCls}-operations-operation-disabled):hover > ${iconCls}`]: {\n color: previewOperationHoverColor\n },\n '&-disabled': {\n color: previewOperationColorDisabled,\n cursor: 'not-allowed'\n },\n '&:first-of-type': {\n marginInlineStart: 0\n },\n [`& > ${iconCls}`]: {\n fontSize: token.previewOperationSize\n }\n }\n }\n };\n};\nexport const genPreviewSwitchStyle = token => {\n const {\n modalMaskBg,\n iconCls,\n previewOperationColorDisabled,\n previewCls,\n zIndexPopup,\n motionDurationSlow\n } = token;\n const operationBg = new FastColor(modalMaskBg).setA(0.1);\n const operationBgHover = operationBg.clone().setA(0.2);\n return {\n [`${previewCls}-switch-left, ${previewCls}-switch-right`]: {\n position: 'fixed',\n insetBlockStart: '50%',\n zIndex: token.calc(zIndexPopup).add(1).equal(),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: token.imagePreviewSwitchSize,\n height: token.imagePreviewSwitchSize,\n marginTop: token.calc(token.imagePreviewSwitchSize).mul(-1).div(2).equal(),\n color: token.previewOperationColor,\n background: operationBg.toRgbString(),\n borderRadius: '50%',\n transform: `translateY(-50%)`,\n cursor: 'pointer',\n transition: `all ${motionDurationSlow}`,\n userSelect: 'none',\n '&:hover': {\n background: operationBgHover.toRgbString()\n },\n '&-disabled': {\n '&, &:hover': {\n color: previewOperationColorDisabled,\n background: 'transparent',\n cursor: 'not-allowed',\n [`> ${iconCls}`]: {\n cursor: 'not-allowed'\n }\n }\n },\n [`> ${iconCls}`]: {\n fontSize: token.previewOperationSize\n }\n },\n [`${previewCls}-switch-left`]: {\n insetInlineStart: token.marginSM\n },\n [`${previewCls}-switch-right`]: {\n insetInlineEnd: token.marginSM\n }\n };\n};\nexport const genImagePreviewStyle = token => {\n const {\n motionEaseOut,\n previewCls,\n motionDurationSlow,\n componentCls\n } = token;\n return [{\n [`${componentCls}-preview-root`]: {\n [previewCls]: {\n height: '100%',\n textAlign: 'center',\n pointerEvents: 'none'\n },\n [`${previewCls}-body`]: Object.assign(Object.assign({}, genBoxStyle()), {\n overflow: 'hidden'\n }),\n [`${previewCls}-img`]: {\n maxWidth: '100%',\n maxHeight: '70%',\n verticalAlign: 'middle',\n transform: 'scale3d(1, 1, 1)',\n cursor: 'grab',\n transition: `transform ${motionDurationSlow} ${motionEaseOut} 0s`,\n userSelect: 'none',\n '&-wrapper': Object.assign(Object.assign({}, genBoxStyle()), {\n transition: `transform ${motionDurationSlow} ${motionEaseOut} 0s`,\n // https://github.com/ant-design/ant-design/issues/39913\n // TailwindCSS will reset img default style.\n // Let's set back.\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n '& > *': {\n pointerEvents: 'auto'\n },\n '&::before': {\n display: 'inline-block',\n width: 1,\n height: '50%',\n marginInlineEnd: -1,\n content: '\"\"'\n }\n })\n },\n [`${previewCls}-moving`]: {\n [`${previewCls}-preview-img`]: {\n cursor: 'grabbing',\n '&-wrapper': {\n transitionDuration: '0s'\n }\n }\n }\n }\n },\n // Override\n {\n [`${componentCls}-preview-root`]: {\n [`${previewCls}-wrap`]: {\n zIndex: token.zIndexPopup\n }\n }\n },\n // Preview operations & switch\n {\n [`${componentCls}-preview-operations-wrapper`]: {\n position: 'fixed',\n zIndex: token.calc(token.zIndexPopup).add(1).equal()\n },\n '&': [genPreviewOperationsStyle(token), genPreviewSwitchStyle(token)]\n }];\n};\nconst genImageStyle = token => {\n const {\n componentCls\n } = token;\n return {\n // ============================== image ==============================\n [componentCls]: {\n position: 'relative',\n display: 'inline-block',\n [`${componentCls}-img`]: {\n width: '100%',\n height: 'auto',\n verticalAlign: 'middle'\n },\n [`${componentCls}-img-placeholder`]: {\n backgroundColor: token.colorBgContainerDisabled,\n backgroundImage: \"url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=')\",\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center center',\n backgroundSize: '30%'\n },\n [`${componentCls}-mask`]: Object.assign({}, genImageMaskStyle(token)),\n [`${componentCls}-mask:hover`]: {\n opacity: 1\n },\n [`${componentCls}-placeholder`]: Object.assign({}, genBoxStyle())\n }\n };\n};\nconst genPreviewMotion = token => {\n const {\n previewCls\n } = token;\n return {\n [`${previewCls}-root`]: initZoomMotion(token, 'zoom'),\n '&': initFadeMotion(token, true)\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = token => ({\n zIndexPopup: token.zIndexPopupBase + 80,\n previewOperationColor: new FastColor(token.colorTextLightSolid).setA(0.65).toRgbString(),\n previewOperationHoverColor: new FastColor(token.colorTextLightSolid).setA(0.85).toRgbString(),\n previewOperationColorDisabled: new FastColor(token.colorTextLightSolid).setA(0.25).toRgbString(),\n previewOperationSize: token.fontSizeIcon * 1.5 // FIXME: fontSizeIconLG\n});\nexport default genStyleHooks('Image', token => {\n const previewCls = `${token.componentCls}-preview`;\n const imageToken = mergeToken(token, {\n previewCls,\n modalMaskBg: new FastColor('#000').setA(0.45).toRgbString(),\n // FIXME: Shared Token\n imagePreviewSwitchSize: token.controlHeightLG\n });\n return [genImageStyle(imageToken), genImagePreviewStyle(imageToken), genModalMaskStyle(mergeToken(imageToken, {\n componentCls: previewCls\n })), genPreviewMotion(imageToken)];\n}, prepareComponentToken);","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport CloseOutlined from \"@ant-design/icons/es/icons/CloseOutlined\";\nimport LeftOutlined from \"@ant-design/icons/es/icons/LeftOutlined\";\nimport RightOutlined from \"@ant-design/icons/es/icons/RightOutlined\";\nimport RotateLeftOutlined from \"@ant-design/icons/es/icons/RotateLeftOutlined\";\nimport RotateRightOutlined from \"@ant-design/icons/es/icons/RotateRightOutlined\";\nimport SwapOutlined from \"@ant-design/icons/es/icons/SwapOutlined\";\nimport ZoomInOutlined from \"@ant-design/icons/es/icons/ZoomInOutlined\";\nimport ZoomOutOutlined from \"@ant-design/icons/es/icons/ZoomOutOutlined\";\nimport classNames from 'classnames';\nimport RcImage from 'rc-image';\nimport { useZIndex } from '../_util/hooks';\nimport { getTransitionName } from '../_util/motion';\nimport { ConfigContext } from '../config-provider';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useStyle from './style';\nexport const icons = {\n rotateLeft: /*#__PURE__*/React.createElement(RotateLeftOutlined, null),\n rotateRight: /*#__PURE__*/React.createElement(RotateRightOutlined, null),\n zoomIn: /*#__PURE__*/React.createElement(ZoomInOutlined, null),\n zoomOut: /*#__PURE__*/React.createElement(ZoomOutOutlined, null),\n close: /*#__PURE__*/React.createElement(CloseOutlined, null),\n left: /*#__PURE__*/React.createElement(LeftOutlined, null),\n right: /*#__PURE__*/React.createElement(RightOutlined, null),\n flipX: /*#__PURE__*/React.createElement(SwapOutlined, null),\n flipY: /*#__PURE__*/React.createElement(SwapOutlined, {\n rotate: 90\n })\n};\nconst InternalPreviewGroup = _a => {\n var {\n previewPrefixCls: customizePrefixCls,\n preview\n } = _a,\n otherProps = __rest(_a, [\"previewPrefixCls\", \"preview\"]);\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n const prefixCls = getPrefixCls('image', customizePrefixCls);\n const previewPrefixCls = `${prefixCls}-preview`;\n const rootPrefixCls = getPrefixCls();\n const rootCls = useCSSVarCls(prefixCls);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n const [zIndex] = useZIndex('ImagePreview', typeof preview === 'object' ? preview.zIndex : undefined);\n const memoizedIcons = React.useMemo(() => Object.assign(Object.assign({}, icons), {\n left: direction === 'rtl' ? /*#__PURE__*/React.createElement(RightOutlined, null) : /*#__PURE__*/React.createElement(LeftOutlined, null),\n right: direction === 'rtl' ? /*#__PURE__*/React.createElement(LeftOutlined, null) : /*#__PURE__*/React.createElement(RightOutlined, null)\n }), [direction]);\n const mergedPreview = React.useMemo(() => {\n var _a;\n if (preview === false) {\n return preview;\n }\n const _preview = typeof preview === 'object' ? preview : {};\n const mergedRootClassName = classNames(hashId, cssVarCls, rootCls, (_a = _preview.rootClassName) !== null && _a !== void 0 ? _a : '');\n return Object.assign(Object.assign({}, _preview), {\n transitionName: getTransitionName(rootPrefixCls, 'zoom', _preview.transitionName),\n maskTransitionName: getTransitionName(rootPrefixCls, 'fade', _preview.maskTransitionName),\n rootClassName: mergedRootClassName,\n zIndex\n });\n }, [preview, rootPrefixCls, zIndex, hashId, cssVarCls, rootCls]);\n return wrapCSSVar(/*#__PURE__*/React.createElement(RcImage.PreviewGroup, Object.assign({\n preview: mergedPreview,\n previewPrefixCls: previewPrefixCls,\n icons: memoizedIcons\n }, otherProps)));\n};\nexport default InternalPreviewGroup;","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport EyeOutlined from \"@ant-design/icons/es/icons/EyeOutlined\";\nimport classNames from 'classnames';\nimport RcImage from 'rc-image';\nimport { useZIndex } from '../_util/hooks';\nimport { getTransitionName } from '../_util/motion';\nimport { devUseWarning } from '../_util/warning';\nimport { useComponentConfig } from '../config-provider/context';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport { useLocale } from '../locale';\nimport PreviewGroup, { icons } from './PreviewGroup';\nimport useStyle from './style';\nconst Image = props => {\n const {\n prefixCls: customizePrefixCls,\n preview,\n className,\n rootClassName,\n style,\n fallback\n } = props,\n otherProps = __rest(props, [\"prefixCls\", \"preview\", \"className\", \"rootClassName\", \"style\", \"fallback\"]);\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('Image');\n warning.deprecated(!(preview && typeof preview === 'object' && 'destroyOnClose' in preview), 'destroyOnClose', 'destroyOnHidden');\n }\n const {\n getPrefixCls,\n getPopupContainer: getContextPopupContainer,\n className: contextClassName,\n style: contextStyle,\n preview: contextPreview,\n fallback: contextFallback\n } = useComponentConfig('image');\n const [imageLocale] = useLocale('Image');\n const prefixCls = getPrefixCls('image', customizePrefixCls);\n const rootPrefixCls = getPrefixCls();\n // Style\n const rootCls = useCSSVarCls(prefixCls);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n const mergedRootClassName = classNames(rootClassName, hashId, cssVarCls, rootCls);\n const mergedClassName = classNames(className, hashId, contextClassName);\n const [zIndex] = useZIndex('ImagePreview', typeof preview === 'object' ? preview.zIndex : undefined);\n const mergedPreview = React.useMemo(() => {\n if (preview === false) {\n return preview;\n }\n const _preview = typeof preview === 'object' ? preview : {};\n const {\n getContainer,\n closeIcon,\n rootClassName,\n destroyOnClose,\n destroyOnHidden\n } = _preview,\n restPreviewProps = __rest(_preview, [\"getContainer\", \"closeIcon\", \"rootClassName\", \"destroyOnClose\", \"destroyOnHidden\"]);\n return Object.assign(Object.assign({\n mask: (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-mask-info`\n }, /*#__PURE__*/React.createElement(EyeOutlined, null), imageLocale === null || imageLocale === void 0 ? void 0 : imageLocale.preview)),\n icons\n }, restPreviewProps), {\n // TODO: In the future, destroyOnClose in rc-image needs to be upgrade to destroyOnHidden\n destroyOnClose: destroyOnHidden !== null && destroyOnHidden !== void 0 ? destroyOnHidden : destroyOnClose,\n rootClassName: classNames(mergedRootClassName, rootClassName),\n getContainer: getContainer !== null && getContainer !== void 0 ? getContainer : getContextPopupContainer,\n transitionName: getTransitionName(rootPrefixCls, 'zoom', _preview.transitionName),\n maskTransitionName: getTransitionName(rootPrefixCls, 'fade', _preview.maskTransitionName),\n zIndex,\n closeIcon: closeIcon !== null && closeIcon !== void 0 ? closeIcon : contextPreview === null || contextPreview === void 0 ? void 0 : contextPreview.closeIcon\n });\n }, [preview, imageLocale, contextPreview === null || contextPreview === void 0 ? void 0 : contextPreview.closeIcon]);\n const mergedStyle = Object.assign(Object.assign({}, contextStyle), style);\n const mergedFallback = fallback !== null && fallback !== void 0 ? fallback : contextFallback;\n return wrapCSSVar(/*#__PURE__*/React.createElement(RcImage, Object.assign({\n prefixCls: prefixCls,\n preview: mergedPreview,\n rootClassName: mergedRootClassName,\n className: mergedClassName,\n style: mergedStyle,\n fallback: mergedFallback\n }, otherProps)));\n};\nImage.PreviewGroup = PreviewGroup;\nif (process.env.NODE_ENV !== 'production') {\n Image.displayName = 'Image';\n}\nexport default Image;","// This icon file is generated automatically.\nvar HomeOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M946.5 505L560.1 118.8l-25.9-25.9a31.5 31.5 0 00-44.4 0L77.5 505a63.9 63.9 0 00-18.8 46c.4 35.2 29.7 63.3 64.9 63.3h42.5V940h691.8V614.3h43.4c17.1 0 33.2-6.7 45.3-18.8a63.6 63.6 0 0018.7-45.3c0-17-6.7-33.1-18.8-45.2zM568 868H456V664h112v204zm217.9-325.7V868H632V640c0-22.1-17.9-40-40-40H432c-22.1 0-40 17.9-40 40v228H238.1V542.3h-96l370-369.7 23.1 23.1L882 542.3h-96.1z\" } }] }, \"name\": \"home\", \"theme\": \"outlined\" };\nexport default HomeOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport HomeOutlinedSvg from \"@ant-design/icons-svg/es/asn/HomeOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar HomeOutlined = function HomeOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: HomeOutlinedSvg\n }));\n};\n\n/**![home](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk0Ni41IDUwNUw1NjAuMSAxMTguOGwtMjUuOS0yNS45YTMxLjUgMzEuNSAwIDAwLTQ0LjQgMEw3Ny41IDUwNWE2My45IDYzLjkgMCAwMC0xOC44IDQ2Yy40IDM1LjIgMjkuNyA2My4zIDY0LjkgNjMuM2g0Mi41Vjk0MGg2OTEuOFY2MTQuM2g0My40YzE3LjEgMCAzMy4yLTYuNyA0NS4zLTE4LjhhNjMuNiA2My42IDAgMDAxOC43LTQ1LjNjMC0xNy02LjctMzMuMS0xOC44LTQ1LjJ6TTU2OCA4NjhINDU2VjY2NGgxMTJ2MjA0em0yMTcuOS0zMjUuN1Y4NjhINjMyVjY0MGMwLTIyLjEtMTcuOS00MC00MC00MEg0MzJjLTIyLjEgMC00MCAxNy45LTQwIDQwdjIyOEgyMzguMVY1NDIuM2gtOTZsMzcwLTM2OS43IDIzLjEgMjMuMUw4ODIgNTQyLjNoLTk2LjF6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(HomeOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'HomeOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar ToolOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M876.6 239.5c-.5-.9-1.2-1.8-2-2.5-5-5-13.1-5-18.1 0L684.2 409.3l-67.9-67.9L788.7 169c.8-.8 1.4-1.6 2-2.5 3.6-6.1 1.6-13.9-4.5-17.5-98.2-58-226.8-44.7-311.3 39.7-67 67-89.2 162-66.5 247.4l-293 293c-3 3-2.8 7.9.3 11l169.7 169.7c3.1 3.1 8.1 3.3 11 .3l292.9-292.9c85.5 22.8 180.5.7 247.6-66.4 84.4-84.5 97.7-213.1 39.7-311.3zM786 499.8c-58.1 58.1-145.3 69.3-214.6 33.6l-8.8 8.8-.1-.1-274 274.1-79.2-79.2 230.1-230.1s0 .1.1.1l52.8-52.8c-35.7-69.3-24.5-156.5 33.6-214.6a184.2 184.2 0 01144-53.5L537 318.9a32.05 32.05 0 000 45.3l124.5 124.5a32.05 32.05 0 0045.3 0l132.8-132.8c3.7 51.8-14.4 104.8-53.6 143.9z\" } }] }, \"name\": \"tool\", \"theme\": \"outlined\" };\nexport default ToolOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport ToolOutlinedSvg from \"@ant-design/icons-svg/es/asn/ToolOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar ToolOutlined = function ToolOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: ToolOutlinedSvg\n }));\n};\n\n/**![tool](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg3Ni42IDIzOS41Yy0uNS0uOS0xLjItMS44LTItMi41LTUtNS0xMy4xLTUtMTguMSAwTDY4NC4yIDQwOS4zbC02Ny45LTY3LjlMNzg4LjcgMTY5Yy44LS44IDEuNC0xLjYgMi0yLjUgMy42LTYuMSAxLjYtMTMuOS00LjUtMTcuNS05OC4yLTU4LTIyNi44LTQ0LjctMzExLjMgMzkuNy02NyA2Ny04OS4yIDE2Mi02Ni41IDI0Ny40bC0yOTMgMjkzYy0zIDMtMi44IDcuOS4zIDExbDE2OS43IDE2OS43YzMuMSAzLjEgOC4xIDMuMyAxMSAuM2wyOTIuOS0yOTIuOWM4NS41IDIyLjggMTgwLjUuNyAyNDcuNi02Ni40IDg0LjQtODQuNSA5Ny43LTIxMy4xIDM5LjctMzExLjN6TTc4NiA0OTkuOGMtNTguMSA1OC4xLTE0NS4zIDY5LjMtMjE0LjYgMzMuNmwtOC44IDguOC0uMS0uMS0yNzQgMjc0LjEtNzkuMi03OS4yIDIzMC4xLTIzMC4xczAgLjEuMS4xbDUyLjgtNTIuOGMtMzUuNy02OS4zLTI0LjUtMTU2LjUgMzMuNi0yMTQuNmExODQuMiAxODQuMiAwIDAxMTQ0LTUzLjVMNTM3IDMxOC45YTMyLjA1IDMyLjA1IDAgMDAwIDQ1LjNsMTI0LjUgMTI0LjVhMzIuMDUgMzIuMDUgMCAwMDQ1LjMgMGwxMzIuOC0xMzIuOGMzLjcgNTEuOC0xNC40IDEwNC44LTUzLjYgMTQzLjl6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ToolOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'ToolOutlined';\n}\nexport default RefIcon;","import { api } from './api';\n\n/**\n * File Service\n * Encapsulates all file-related API calls\n */\nexport const fileService = {\n /**\n * List files in a directory\n */\n async listFiles(params?: {\n path?: string;\n type?: string;\n sort?: string;\n order?: string;\n dateFilter?: 'today' | 'yesterday' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'all';\n }) {\n const response = await api.listFiles(params);\n return response.data.data;\n },\n\n /**\n * Get recently downloaded files\n */\n async getRecentFiles(params?: {\n limit?: number;\n type?: 'illustration' | 'novel';\n filter?: 'today' | 'yesterday' | 'last7days' | 'last30days';\n }) {\n const response = await api.getRecentFiles(params);\n return response.data.data;\n },\n\n /**\n * Get file preview (image or text content)\n */\n async getFilePreview(path: string, type?: string): Promise<Blob> {\n const response = await api.getFilePreview(path, type);\n return response.data;\n },\n\n /**\n * Delete a file\n */\n async deleteFile(id: string, params?: { path?: string; type?: string }): Promise<void> {\n await api.deleteFile(id, params);\n },\n\n /**\n * Normalize files (rename, reorganize, update database)\n */\n async normalizeFiles(options?: {\n dryRun?: boolean;\n normalizeNames?: boolean;\n reorganize?: boolean;\n updateDatabase?: boolean;\n type?: 'illustration' | 'novel' | 'all';\n }) {\n const response = await api.normalizeFiles(options);\n return response.data.data;\n },\n};\n\n","import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { fileService } from '../services/fileService';\nimport { useErrorHandler } from './useErrorHandler';\nimport { QUERY_KEYS } from '../constants';\n\n/**\n * Hook for managing files\n */\nexport function useFiles(params?: {\n path?: string;\n type?: string;\n sort?: string;\n order?: string;\n dateFilter?: 'today' | 'yesterday' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'all';\n}) {\n const queryClient = useQueryClient();\n const { handleError } = useErrorHandler();\n\n const {\n data: filesData,\n isLoading,\n error,\n refetch,\n } = useQuery({\n queryKey: QUERY_KEYS.FILES(params),\n queryFn: () => fileService.listFiles(params),\n });\n\n const deleteMutation = useMutation({\n mutationFn: ({ id, path, type }: { id: string; path?: string; type?: string }) =>\n fileService.deleteFile(id, { path, type }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: QUERY_KEYS.FILES() });\n },\n onError: (error) => handleError(error),\n });\n\n return {\n files: filesData?.files ?? [],\n directories: filesData?.directories ?? [],\n currentPath: filesData?.currentPath ?? '',\n isLoading,\n error,\n refetch,\n deleteFile: deleteMutation.mutate,\n deleteFileAsync: deleteMutation.mutateAsync,\n isDeleting: deleteMutation.isPending,\n };\n}\n\n/**\n * Hook for managing recent files\n */\nexport function useRecentFiles(params?: {\n limit?: number;\n type?: 'illustration' | 'novel';\n filter?: 'today' | 'yesterday' | 'last7days' | 'last30days';\n}) {\n const {\n data: recentFilesData,\n isLoading,\n error,\n refetch,\n } = useQuery({\n queryKey: QUERY_KEYS.FILES_RECENT(params),\n queryFn: () => fileService.getRecentFiles(params),\n });\n\n return {\n files: recentFilesData?.files ?? [],\n isLoading,\n error,\n refetch,\n };\n}\n\n/**\n * Hook for file preview\n */\nexport function useFilePreview(path: string | undefined, type?: string) {\n const {\n data: previewBlob,\n isLoading,\n error,\n refetch,\n } = useQuery({\n queryKey: QUERY_KEYS.FILES_PREVIEW(path!, type),\n queryFn: () => fileService.getFilePreview(path!, type),\n enabled: !!path,\n });\n\n // Create object URL for preview\n const previewUrl = previewBlob ? URL.createObjectURL(previewBlob) : null;\n\n return {\n previewUrl,\n previewBlob,\n isLoading,\n error,\n refetch,\n };\n}\n\n/**\n * Hook for file normalization\n */\nexport function useFileNormalize() {\n const queryClient = useQueryClient();\n const { handleError } = useErrorHandler();\n\n const normalizeMutation = useMutation({\n mutationFn: (options?: {\n dryRun?: boolean;\n normalizeNames?: boolean;\n reorganize?: boolean;\n updateDatabase?: boolean;\n type?: 'illustration' | 'novel' | 'all';\n }) => fileService.normalizeFiles(options),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: QUERY_KEYS.FILES() });\n },\n onError: (error) => handleError(error),\n });\n\n return {\n normalize: normalizeMutation.mutate,\n normalizeAsync: normalizeMutation.mutateAsync,\n isNormalizing: normalizeMutation.isPending,\n normalizeResult: normalizeMutation.data,\n };\n}\n\n","import { Breadcrumb, Button } from 'antd';\nimport { HomeOutlined, LeftOutlined } from '@ant-design/icons';\nimport { useTranslation } from 'react-i18next';\n\nexport interface FileBrowserProps {\n currentPath: string;\n onNavigate: (path: string) => void;\n onGoBack: () => void;\n}\n\n/**\n * File browser component with breadcrumb navigation\n */\nexport function FileBrowser({\n currentPath,\n onNavigate,\n onGoBack,\n}: FileBrowserProps) {\n const { t } = useTranslation();\n\n const breadcrumbItems = [\n {\n title: (\n <Button\n type=\"link\"\n icon={<HomeOutlined />}\n onClick={() => onNavigate('')}\n style={{ padding: 0 }}\n >\n {t('files.root')}\n </Button>\n ),\n },\n ...(currentPath\n ? currentPath.split('/').map((segment, index, arr) => {\n const path = arr.slice(0, index + 1).join('/');\n return {\n title: (\n <Button\n type=\"link\"\n onClick={() => onNavigate(path)}\n style={{ padding: 0 }}\n >\n {segment}\n </Button>\n ),\n };\n })\n : []),\n ];\n\n return (\n <>\n <Breadcrumb items={breadcrumbItems} />\n {currentPath && (\n <Button icon={<LeftOutlined />} onClick={onGoBack}>\n {t('files.goBack')}\n </Button>\n )}\n </>\n );\n}\n\n","import { Space, Select, Button, Input, Row, Col } from 'antd';\nimport {\n SearchOutlined,\n SortAscendingOutlined,\n SortDescendingOutlined,\n} from '@ant-design/icons';\nimport { useTranslation } from 'react-i18next';\n\nconst { Option } = Select;\nconst { Search } = Input;\n\nexport interface FileFiltersProps {\n searchText: string;\n onSearchChange: (value: string) => void;\n dateFilter: 'all' | 'today' | 'yesterday' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth';\n onDateFilterChange: (value: FileFiltersProps['dateFilter']) => void;\n sortBy: 'name' | 'time' | 'size' | 'type' | 'downloadedAt';\n onSortByChange: (value: FileFiltersProps['sortBy']) => void;\n sortOrder: 'asc' | 'desc';\n onSortOrderChange: (value: FileFiltersProps['sortOrder']) => void;\n}\n\n/**\n * File filters component for search, date filter, and sorting\n */\nexport function FileFilters({\n searchText,\n onSearchChange,\n dateFilter,\n onDateFilterChange,\n sortBy,\n onSortByChange,\n sortOrder,\n onSortOrderChange,\n}: FileFiltersProps) {\n const { t } = useTranslation();\n\n return (\n <Row gutter={16} align=\"middle\">\n <Col flex=\"auto\">\n <Search\n placeholder={t('files.searchPlaceholder')}\n allowClear\n prefix={<SearchOutlined />}\n value={searchText}\n onChange={(e) => onSearchChange(e.target.value)}\n style={{ width: '100%' }}\n />\n </Col>\n <Col>\n <Space>\n <Select\n value={dateFilter}\n onChange={onDateFilterChange}\n style={{ width: 140 }}\n >\n <Option value=\"all\">{t('files.filterAll')}</Option>\n <Option value=\"today\">{t('files.filterToday')}</Option>\n <Option value=\"yesterday\">{t('files.filterYesterday')}</Option>\n <Option value=\"thisWeek\">{t('files.filterThisWeek')}</Option>\n <Option value=\"lastWeek\">{t('files.filterLastWeek')}</Option>\n <Option value=\"thisMonth\">{t('files.filterThisMonth')}</Option>\n <Option value=\"lastMonth\">{t('files.filterLastMonth')}</Option>\n </Select>\n <Select\n value={sortBy}\n onChange={onSortByChange}\n style={{ width: 150 }}\n >\n <Option value=\"name\">{t('files.sortByName')}</Option>\n <Option value=\"time\">{t('files.sortByTime')}</Option>\n <Option value=\"downloadedAt\">{t('files.sortByDownloadTime')}</Option>\n <Option value=\"size\">{t('files.sortBySize')}</Option>\n <Option value=\"type\">{t('files.sortByType')}</Option>\n </Select>\n <Button\n icon={sortOrder === 'asc' ? <SortAscendingOutlined /> : <SortDescendingOutlined />}\n onClick={() => onSortOrderChange(sortOrder === 'asc' ? 'desc' : 'asc')}\n >\n {sortOrder === 'asc' ? t('files.ascending') : t('files.descending')}\n </Button>\n </Space>\n </Col>\n </Row>\n );\n}\n\n","import { Card, Statistic, Row, Col } from 'antd';\nimport {\n FolderOutlined,\n FileOutlined,\n PictureOutlined,\n} from '@ant-design/icons';\nimport { useTranslation } from 'react-i18next';\n\nexport interface FileStatisticsProps {\n directories: number;\n files: number;\n images: number;\n totalSize: string;\n}\n\n/**\n * File statistics component displaying directories, files, images, and total size\n */\nexport function FileStatistics({\n directories,\n files,\n images,\n totalSize,\n}: FileStatisticsProps) {\n const { t } = useTranslation();\n\n return (\n <Row gutter={16} style={{ marginBottom: 16 }}>\n <Col xs={24} sm={12} md={6}>\n <Card>\n <Statistic\n title={t('files.directories')}\n value={directories}\n prefix={<FolderOutlined />}\n valueStyle={{ color: '#1890ff' }}\n />\n </Card>\n </Col>\n <Col xs={24} sm={12} md={6}>\n <Card>\n <Statistic\n title={t('files.files')}\n value={files}\n prefix={<FileOutlined />}\n valueStyle={{ color: '#52c41a' }}\n />\n </Card>\n </Col>\n <Col xs={24} sm={12} md={6}>\n <Card>\n <Statistic\n title={t('files.images')}\n value={images}\n prefix={<PictureOutlined />}\n valueStyle={{ color: '#faad14' }}\n />\n </Card>\n </Col>\n <Col xs={24} sm={12} md={6}>\n <Card>\n <Statistic\n title={t('files.totalSize')}\n value={totalSize}\n valueStyle={{ color: '#722ed1' }}\n />\n </Card>\n </Col>\n </Row>\n );\n}\n\n","import { useMemo } from 'react';\nimport { Table, Button, Space, Tag, Popconfirm } from 'antd';\nimport {\n FolderOutlined,\n PictureOutlined,\n FileTextOutlined,\n FileOutlined,\n EyeOutlined,\n DeleteOutlined,\n SortAscendingOutlined,\n SortDescendingOutlined,\n} from '@ant-design/icons';\nimport { useTranslation } from 'react-i18next';\nimport { formatDate } from '../../../utils/dateUtils';\n\nconst imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp'];\nconst textExtensions = ['.txt', '.md', '.text'];\n\nexport interface FileItem {\n name: string;\n path: string;\n type: 'file' | 'directory';\n size?: number;\n modified?: string;\n downloadedAt?: string | null;\n extension?: string;\n}\n\nexport interface FileListProps {\n files: FileItem[];\n directories: FileItem[];\n loading?: boolean;\n sortBy: 'name' | 'time' | 'size' | 'type' | 'downloadedAt';\n sortOrder: 'asc' | 'desc';\n onSort: (column: 'name' | 'time' | 'size' | 'type' | 'downloadedAt') => void;\n onPreview: (file: FileItem) => void;\n onDelete: (file: FileItem) => void;\n onNavigate: (path: string) => void;\n fileType: 'illustration' | 'novel';\n}\n\n/**\n * File list table component\n */\nexport function FileList({\n files,\n directories,\n loading = false,\n sortBy,\n sortOrder,\n onSort,\n onPreview,\n onDelete,\n onNavigate,\n}: FileListProps) {\n const { t } = useTranslation();\n\n const formatFileSize = (bytes?: number) => {\n if (!bytes) return '-';\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n };\n\n const getSortIcon = (column: 'name' | 'time' | 'size' | 'type' | 'downloadedAt') => {\n if (sortBy !== column) return null;\n return sortOrder === 'asc' ? <SortAscendingOutlined /> : <SortDescendingOutlined />;\n };\n\n // Combine directories and files, directories first\n const allItems = useMemo(() => {\n return [...directories, ...files];\n }, [directories, files]);\n\n const columns = [\n {\n title: (\n <span\n style={{ cursor: 'pointer', userSelect: 'none' }}\n onClick={() => onSort('name')}\n >\n {t('files.name')} {getSortIcon('name')}\n </span>\n ),\n dataIndex: 'name',\n key: 'name',\n width: 300,\n ellipsis: {\n showTitle: true,\n },\n render: (name: string, record: FileItem) => (\n <div style={{ display: 'flex', alignItems: 'center', width: '100%', minWidth: 0 }}>\n <span style={{ flexShrink: 0, marginRight: 8 }}>\n {record.type === 'directory' ? (\n <FolderOutlined style={{ color: '#1890ff', fontSize: 16 }} />\n ) : imageExtensions.includes(record.extension?.toLowerCase() || '') ? (\n <PictureOutlined style={{ color: '#52c41a', fontSize: 16 }} />\n ) : (\n <FileTextOutlined style={{ fontSize: 16 }} />\n )}\n </span>\n <Button\n type=\"link\"\n onClick={() => {\n if (record.type === 'directory') {\n onNavigate(record.path);\n } else {\n onPreview(record);\n }\n }}\n style={{\n padding: 0,\n height: 'auto',\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n textAlign: 'left',\n }}\n title={name}\n >\n {name}\n </Button>\n </div>\n ),\n },\n {\n title: (\n <span\n style={{ cursor: 'pointer', userSelect: 'none' }}\n onClick={() => onSort('type')}\n >\n {t('files.type')} {getSortIcon('type')}\n </span>\n ),\n dataIndex: 'type',\n key: 'type',\n width: 120,\n render: (type: string, record: FileItem) => {\n if (type === 'directory') {\n return <Tag color=\"blue\" icon={<FolderOutlined />}>{t('files.typeDirectory')}</Tag>;\n }\n const ext = record.extension?.toLowerCase() || '';\n if (imageExtensions.includes(ext)) {\n return <Tag color=\"green\" icon={<PictureOutlined />}>{t('files.typeImage')}</Tag>;\n }\n if (textExtensions.includes(ext)) {\n return <Tag color=\"orange\" icon={<FileTextOutlined />}>{t('files.typeText')}</Tag>;\n }\n return <Tag icon={<FileOutlined />}>{t('files.typeFile')}</Tag>;\n },\n },\n {\n title: (\n <span\n style={{ cursor: 'pointer', userSelect: 'none' }}\n onClick={() => onSort('size')}\n >\n {t('files.size')} {getSortIcon('size')}\n </span>\n ),\n dataIndex: 'size',\n key: 'size',\n width: 120,\n render: (size: number) => formatFileSize(size),\n },\n {\n title: (\n <span\n style={{ cursor: 'pointer', userSelect: 'none' }}\n onClick={() => onSort('time')}\n >\n {t('files.modified')} {getSortIcon('time')}\n </span>\n ),\n dataIndex: 'modified',\n key: 'modified',\n width: 180,\n render: (time: string) => formatDate(time),\n },\n {\n title: (\n <span\n style={{ cursor: 'pointer', userSelect: 'none' }}\n onClick={() => onSort('downloadedAt')}\n >\n {t('files.downloadedAt')} {getSortIcon('downloadedAt')}\n </span>\n ),\n dataIndex: 'downloadedAt',\n key: 'downloadedAt',\n width: 180,\n render: (time: string | null | undefined, record: FileItem) => {\n if (record.type === 'directory') return '-';\n if (!time) return <span style={{ color: '#999' }}>{t('files.unknown')}</span>;\n return formatDate(time);\n },\n },\n {\n title: t('files.actions'),\n key: 'action',\n width: 150,\n fixed: 'right' as const,\n render: (_: unknown, record: FileItem) => (\n <Space>\n {record.type === 'file' &&\n (imageExtensions.includes(record.extension?.toLowerCase() || '') ||\n textExtensions.includes(record.extension?.toLowerCase() || '')) && (\n <Button\n type=\"link\"\n icon={<EyeOutlined />}\n onClick={() => onPreview(record)}\n size=\"small\"\n >\n {t('files.preview')}\n </Button>\n )}\n {record.type === 'file' && (\n <Popconfirm\n title={t('files.confirmDelete')}\n onConfirm={() => onDelete(record)}\n okText={t('common.ok')}\n cancelText={t('common.cancel')}\n >\n <Button type=\"link\" danger icon={<DeleteOutlined />} size=\"small\">\n {t('files.delete')}\n </Button>\n </Popconfirm>\n )}\n </Space>\n ),\n },\n ];\n\n return (\n <div style={{ overflowX: 'auto' }}>\n <Table\n columns={columns}\n dataSource={allItems}\n rowKey=\"path\"\n loading={loading}\n scroll={{ x: 900 }}\n pagination={{\n pageSize: 50,\n showSizeChanger: true,\n showTotal: (total, range) =>\n t('files.displaying', { start: range[0], end: range[1], total }),\n pageSizeOptions: ['20', '50', '100', '200'],\n }}\n />\n </div>\n );\n}\n\n","import React from 'react';\nimport { Modal, ModalProps, Image, Spin } from 'antd';\nimport { LoadingOutlined } from '@ant-design/icons';\n\nexport interface PreviewModalProps extends Omit<ModalProps, 'children'> {\n /**\n * Preview title\n */\n title?: string;\n \n /**\n * Preview content type\n */\n type?: 'image' | 'text' | 'json' | 'custom';\n \n /**\n * Preview content/data\n */\n content?: string | React.ReactNode;\n \n /**\n * Image URL (for image type)\n */\n imageUrl?: string;\n \n /**\n * Whether content is loading\n */\n loading?: boolean;\n \n /**\n * Custom render function\n */\n renderContent?: () => React.ReactNode;\n \n /**\n * Width of the modal\n */\n width?: number | string;\n \n /**\n * Whether to show footer\n */\n showFooter?: boolean;\n}\n\n/**\n * Preview modal component that provides consistent preview dialogs\n * for images, text, JSON, and custom content.\n */\nexport const PreviewModal: React.FC<PreviewModalProps> = ({\n title = 'Preview',\n type = 'custom',\n content,\n imageUrl,\n loading = false,\n renderContent,\n width = 800,\n showFooter = false,\n open,\n ...modalProps\n}) => {\n const renderPreviewContent = () => {\n if (loading) {\n return (\n <div style={{ textAlign: 'center', padding: '40px 0' }}>\n <Spin indicator={<LoadingOutlined style={{ fontSize: 24 }} spin />} />\n </div>\n );\n }\n\n if (renderContent) {\n return renderContent();\n }\n\n switch (type) {\n case 'image':\n return (\n <div style={{ textAlign: 'center' }}>\n <Image\n src={imageUrl || (typeof content === 'string' ? content : undefined)}\n alt={title}\n style={{ maxWidth: '100%' }}\n preview={false}\n />\n </div>\n );\n\n case 'text':\n return (\n <div\n style={{\n maxHeight: '60vh',\n overflow: 'auto',\n padding: '16px',\n backgroundColor: '#f5f5f5',\n borderRadius: '4px',\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {typeof content === 'string' ? content : content}\n </div>\n );\n\n case 'json':\n return (\n <div\n style={{\n maxHeight: '60vh',\n overflow: 'auto',\n padding: '16px',\n backgroundColor: '#1f1f1f',\n borderRadius: '4px',\n fontFamily: 'monospace',\n fontSize: '12px',\n color: '#fff',\n }}\n >\n <pre style={{ margin: 0, whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n {(() => {\n try {\n if (typeof content === 'string') {\n return JSON.stringify(JSON.parse(content), null, 2);\n }\n return JSON.stringify(content, null, 2);\n } catch (error) {\n return typeof content === 'string' ? content : String(content);\n }\n })()}\n </pre>\n </div>\n );\n\n case 'custom':\n default:\n return <div>{content}</div>;\n }\n };\n\n return (\n <Modal\n title={title}\n open={open}\n width={width}\n footer={showFooter ? modalProps.footer : null}\n {...modalProps}\n >\n {renderPreviewContent()}\n </Modal>\n );\n};\n\nexport default PreviewModal;\n\n","import { useEffect, useState } from 'react';\nimport { PreviewModal } from '../../../components/modals/PreviewModal';\nimport { useFilePreview } from '../../../hooks/useFiles';\nimport { message } from 'antd';\nimport { useTranslation } from 'react-i18next';\n\nconst imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp'];\nconst textExtensions = ['.txt', '.md', '.text'];\n\nexport interface FileItem {\n name: string;\n path: string;\n type: 'file' | 'directory';\n size?: number;\n modified?: string;\n downloadedAt?: string | null;\n extension?: string;\n}\n\nexport interface FilePreviewProps {\n visible: boolean;\n file: FileItem | null;\n fileType: 'illustration' | 'novel';\n onClose: () => void;\n}\n\n/**\n * File preview component using PreviewModal\n */\nexport function FilePreview({ visible, file, fileType, onClose }: FilePreviewProps) {\n const { t } = useTranslation();\n const [textContent, setTextContent] = useState<string>('');\n\n const ext = file?.extension?.toLowerCase() || '';\n const isImage = imageExtensions.includes(ext);\n const isText = textExtensions.includes(ext);\n\n const { previewUrl, isLoading: isLoadingPreview } = useFilePreview(\n isImage ? file?.path : undefined,\n fileType\n );\n\n // Load text content for text files\n useEffect(() => {\n if (visible && file && isText) {\n const loadTextContent = async () => {\n try {\n const previewUrl = `/api/files/preview?path=${encodeURIComponent(file.path)}&type=${fileType}`;\n const response = await fetch(previewUrl);\n if (response.ok) {\n const text = await response.text();\n setTextContent(text);\n } else {\n message.error(t('files.loadContentFailed'));\n onClose();\n }\n } catch (error) {\n message.error(t('files.loadContentFailed'));\n onClose();\n }\n };\n loadTextContent();\n } else if (!visible) {\n setTextContent('');\n }\n }, [visible, file, isText, fileType, t, onClose]);\n\n if (!file) return null;\n\n // Determine preview type\n let previewType: 'image' | 'text' | 'custom' = 'custom';\n if (isImage) {\n previewType = 'image';\n } else if (isText) {\n previewType = 'text';\n }\n\n return (\n <PreviewModal\n open={visible}\n title={file.name}\n type={previewType}\n imageUrl={isImage ? previewUrl || undefined : undefined}\n content={isText ? textContent : undefined}\n loading={isLoadingPreview || (isText && !textContent && visible)}\n onCancel={onClose}\n width={800}\n showFooter={false}\n />\n );\n}\n\n","import { useState } from 'react';\nimport { Modal, Space, Alert, Checkbox, Select, Typography, Descriptions, Spin, Button } from 'antd';\nimport { useTranslation } from 'react-i18next';\nimport { useFileNormalize } from '../../../hooks/useFiles';\n\nconst { Option } = Select;\nconst { Text } = Typography;\n\nexport interface NormalizeFilesModalProps {\n visible: boolean;\n onClose: () => void;\n}\n\n/**\n * File normalization modal component\n */\nexport function NormalizeFilesModal({ visible, onClose }: NormalizeFilesModalProps) {\n const { t } = useTranslation();\n const { normalizeAsync, isNormalizing, normalizeResult } = useFileNormalize();\n\n const [normalizeOptions, setNormalizeOptions] = useState({\n dryRun: true,\n normalizeNames: true,\n reorganize: true,\n updateDatabase: true,\n type: 'all' as 'illustration' | 'novel' | 'all',\n });\n\n const handlePreview = async () => {\n try {\n await normalizeAsync({ ...normalizeOptions, dryRun: true });\n } catch (error) {\n // Error is handled by the hook\n }\n };\n\n const handleExecute = async () => {\n try {\n await normalizeAsync({ ...normalizeOptions, dryRun: false });\n onClose();\n } catch (error) {\n // Error is handled by the hook\n }\n };\n\n const handleClose = () => {\n setNormalizeOptions({\n dryRun: true,\n normalizeNames: true,\n reorganize: true,\n updateDatabase: true,\n type: 'all',\n });\n onClose();\n };\n\n const result = normalizeResult?.result;\n\n return (\n <Modal\n open={visible}\n onCancel={handleClose}\n title={t('files.normalizeTitle')}\n width={700}\n footer={[\n <Button key=\"cancel\" onClick={handleClose}>\n {t('common.cancel')}\n </Button>,\n <Button\n key=\"preview\"\n onClick={handlePreview}\n loading={isNormalizing}\n >\n {t('files.previewButton')}\n </Button>,\n <Button\n key=\"execute\"\n type=\"primary\"\n onClick={handleExecute}\n loading={isNormalizing}\n danger={!normalizeOptions.dryRun}\n >\n {t('files.executeNormalize')}\n </Button>,\n ]}\n >\n <Space direction=\"vertical\" style={{ width: '100%' }} size=\"large\">\n <Alert\n message={t('files.normalizeTitle')}\n description={t('files.normalizeDescription')}\n type=\"info\"\n showIcon\n />\n\n <div>\n <Text strong>{t('files.normalizeOptions')}</Text>\n <Space direction=\"vertical\" style={{ marginTop: 8, width: '100%' }}>\n <Checkbox\n checked={normalizeOptions.normalizeNames}\n onChange={(e) =>\n setNormalizeOptions({ ...normalizeOptions, normalizeNames: e.target.checked })\n }\n >\n {t('files.normalizeNames')}\n </Checkbox>\n <Checkbox\n checked={normalizeOptions.reorganize}\n onChange={(e) =>\n setNormalizeOptions({ ...normalizeOptions, reorganize: e.target.checked })\n }\n >\n {t('files.reorganize')}\n </Checkbox>\n <Checkbox\n checked={normalizeOptions.updateDatabase}\n onChange={(e) =>\n setNormalizeOptions({ ...normalizeOptions, updateDatabase: e.target.checked })\n }\n >\n {t('files.updateDatabase')}\n </Checkbox>\n </Space>\n </div>\n\n <div>\n <Text strong>{t('files.fileType')}</Text>\n <Select\n value={normalizeOptions.type}\n onChange={(value) =>\n setNormalizeOptions({ ...normalizeOptions, type: value })\n }\n style={{ width: '100%', marginTop: 8 }}\n >\n <Option value=\"all\">{t('files.allTypes')}</Option>\n <Option value=\"illustration\">{t('files.illustrationOnly')}</Option>\n <Option value=\"novel\">{t('files.novelOnly')}</Option>\n </Select>\n </div>\n\n {isNormalizing && (\n <div style={{ textAlign: 'center', padding: '20px' }}>\n <Spin size=\"large\" />\n <div style={{ marginTop: 16 }}>\n <Text>{t('files.processing')}</Text>\n </div>\n </div>\n )}\n\n {result && (\n <div>\n <Text strong>{t('files.normalizeResult')}</Text>\n <Descriptions\n bordered\n column={1}\n size=\"small\"\n style={{ marginTop: 8 }}\n >\n <Descriptions.Item label={t('files.totalFiles')}>\n {result.totalFiles}\n </Descriptions.Item>\n <Descriptions.Item label={t('files.processedFiles')}>\n {result.processedFiles}\n </Descriptions.Item>\n <Descriptions.Item label={t('files.movedFiles')}>\n <Text type=\"success\">\n {result.movedFiles}\n </Text>\n </Descriptions.Item>\n <Descriptions.Item label={t('files.renamedFiles')}>\n <Text type=\"success\">\n {result.renamedFiles}\n </Text>\n </Descriptions.Item>\n <Descriptions.Item label={t('files.updatedDatabase')}>\n <Text type=\"success\">\n {result.updatedDatabase}\n </Text>\n </Descriptions.Item>\n <Descriptions.Item label={t('files.skippedFiles')}>\n {result.skippedFiles}\n </Descriptions.Item>\n <Descriptions.Item label={t('files.errors')}>\n {result.errors?.length > 0 ? (\n <Text type=\"danger\">\n {result.errors.length}\n </Text>\n ) : (\n <Text type=\"success\">0</Text>\n )}\n </Descriptions.Item>\n </Descriptions>\n\n {result.errors && result.errors.length > 0 && (\n <Alert\n message={t('files.processingErrors')}\n description={\n <div style={{ maxHeight: '200px', overflow: 'auto' }}>\n {result.errors.map((error, index: number) => (\n <div key={index} style={{ marginBottom: 8 }}>\n <Text type=\"danger\" strong>\n {error.file}:\n </Text>\n <Text type=\"danger\" style={{ marginLeft: 8 }}>\n {error.error}\n </Text>\n </div>\n ))}\n </div>\n }\n type=\"error\"\n style={{ marginTop: 16 }}\n />\n )}\n\n {normalizeOptions.dryRun && (\n <Alert\n message={t('files.previewMode')}\n description={t('files.previewModeDesc')}\n type=\"warning\"\n style={{ marginTop: 16 }}\n />\n )}\n </div>\n )}\n </Space>\n </Modal>\n );\n}\n\n","import { useState, useCallback } from 'react';\n\n/**\n * Hook for managing file browser navigation\n * Handles path navigation and back navigation\n */\nexport function useFileBrowser() {\n const [currentPath, setCurrentPath] = useState<string>('');\n\n const handleNavigate = useCallback((path: string) => {\n setCurrentPath(path);\n }, []);\n\n const handleGoBack = useCallback(() => {\n const parts = currentPath.split('/');\n parts.pop();\n handleNavigate(parts.join('/'));\n }, [currentPath, handleNavigate]);\n\n const resetPath = useCallback(() => {\n setCurrentPath('');\n }, []);\n\n return {\n currentPath,\n handleNavigate,\n handleGoBack,\n resetPath,\n };\n}\n\n","import { useState, useCallback } from 'react';\nimport { message } from 'antd';\nimport { useTranslation } from 'react-i18next';\nimport { useErrorHandler } from '../../../hooks/useErrorHandler';\nimport { FileItem } from '../Files';\n\nconst imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp'];\n\n/**\n * Hook for managing file operations (preview, delete)\n */\nexport function useFileOperations(\n deleteFileAsync: (params: { id: string; path?: string; type?: string }) => Promise<void>,\n fileType: 'illustration' | 'novel',\n onNavigate?: (path: string) => void\n) {\n const { t } = useTranslation();\n const { handleError } = useErrorHandler();\n const [previewVisible, setPreviewVisible] = useState(false);\n const [previewFile, setPreviewFile] = useState<FileItem | null>(null);\n\n const handlePreview = useCallback(\n (file: FileItem) => {\n if (file.type === 'directory') {\n onNavigate?.(file.path);\n return;\n }\n\n const ext = file.extension?.toLowerCase() || '';\n const isImage = imageExtensions.includes(ext);\n const isText = ['.txt', '.md', '.text'].includes(ext);\n\n if (isImage || isText) {\n setPreviewFile(file);\n setPreviewVisible(true);\n } else {\n message.info(t('files.previewNotSupported'));\n }\n },\n [onNavigate, t]\n );\n\n const handleDelete = useCallback(\n async (file: FileItem) => {\n try {\n await deleteFileAsync({ id: file.name, path: file.path, type: fileType });\n message.success(t('files.fileDeleted'));\n } catch (error) {\n handleError(error);\n }\n },\n [deleteFileAsync, fileType, handleError, t]\n );\n\n const closePreview = useCallback(() => {\n setPreviewVisible(false);\n setPreviewFile(null);\n }, []);\n\n return {\n previewVisible,\n previewFile,\n handlePreview,\n handleDelete,\n closePreview,\n };\n}\n\n","import { useMemo, useCallback } from 'react';\nimport { FileItem } from '../Files';\n\nexport type SortColumn = 'name' | 'time' | 'size' | 'type' | 'downloadedAt';\nexport type SortOrder = 'asc' | 'desc';\nexport type DateFilter =\n | 'all'\n | 'today'\n | 'yesterday'\n | 'thisWeek'\n | 'lastWeek'\n | 'thisMonth'\n | 'lastMonth';\n\n/**\n * Hook for managing file filtering and sorting\n */\nexport function useFileFilters(\n files: FileItem[],\n directories: FileItem[],\n searchText: string,\n dateFilter: DateFilter\n) {\n\n\n // Calculate date range for date filter\n const getDateRange = useCallback((filter: DateFilter) => {\n if (filter === 'all') {\n return { startDate: null, endDate: null };\n }\n\n const now = new Date();\n let startDate: Date;\n let endDate: Date | null = null;\n\n switch (filter) {\n case 'today':\n startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n endDate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59, 999);\n break;\n case 'yesterday':\n const yesterday = new Date(now);\n yesterday.setDate(yesterday.getDate() - 1);\n startDate = new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate());\n endDate = new Date(\n yesterday.getFullYear(),\n yesterday.getMonth(),\n yesterday.getDate(),\n 23,\n 59,\n 59,\n 999\n );\n break;\n case 'thisWeek':\n const dayOfWeek = now.getDay();\n startDate = new Date(now);\n startDate.setDate(now.getDate() - dayOfWeek);\n startDate.setHours(0, 0, 0, 0);\n break;\n case 'lastWeek':\n const lastWeekStart = new Date(now);\n lastWeekStart.setDate(now.getDate() - now.getDay() - 7);\n lastWeekStart.setHours(0, 0, 0, 0);\n startDate = lastWeekStart;\n const lastWeekEnd = new Date(lastWeekStart);\n lastWeekEnd.setDate(lastWeekStart.getDate() + 6);\n lastWeekEnd.setHours(23, 59, 59, 999);\n endDate = lastWeekEnd;\n break;\n case 'thisMonth':\n startDate = new Date(now.getFullYear(), now.getMonth(), 1);\n break;\n case 'lastMonth':\n startDate = new Date(now.getFullYear(), now.getMonth() - 1, 1);\n endDate = new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59, 999);\n break;\n default:\n startDate = new Date(0);\n }\n\n return { startDate, endDate };\n }, []);\n\n // Filter and sort items\n const filteredAndSortedItems = useMemo(() => {\n let items = [...directories, ...files];\n\n // Apply search filter\n if (searchText) {\n const searchLower = searchText.toLowerCase();\n items = items.filter((item) => item.name.toLowerCase().includes(searchLower));\n }\n\n // Apply date filter (only for files with downloadedAt)\n if (dateFilter !== 'all') {\n const { startDate, endDate } = getDateRange(dateFilter);\n if (startDate) {\n items = items.filter((item) => {\n if (item.type === 'directory') return true;\n if (!item.downloadedAt) return false;\n\n const downloadDate = new Date(item.downloadedAt);\n const isAfterStart = downloadDate >= startDate;\n const isBeforeEnd = endDate ? downloadDate <= endDate : true;\n return isAfterStart && isBeforeEnd;\n });\n }\n }\n\n // Note: Sorting is handled by the server via useFiles hook\n // This hook only handles client-side filtering (search and date filter)\n\n return items;\n }, [directories, files, searchText, dateFilter, getDateRange]);\n\n // Separate directories and files\n const { filteredDirectories, filteredFiles } = useMemo(() => {\n const dirs = filteredAndSortedItems.filter((item) => item.type === 'directory');\n const fileItems = filteredAndSortedItems.filter((item) => item.type === 'file');\n return { filteredDirectories: dirs, filteredFiles: fileItems };\n }, [filteredAndSortedItems]);\n\n return {\n filteredDirectories,\n filteredFiles,\n };\n}\n\n","import { useMemo } from 'react';\nimport { FileItem } from '../Files';\n\nconst imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp'];\n\n/**\n * Hook for calculating file statistics\n */\nexport function useFileStatistics(files: FileItem[], directories: FileItem[]) {\n const stats = useMemo(() => {\n const all = [...directories, ...files];\n const directoriesCount = all.filter((item) => item.type === 'directory').length;\n const filesCount = all.filter((item) => item.type === 'file').length;\n const totalSize = all\n .filter((item) => item.type === 'file' && item.size)\n .reduce((sum, item) => sum + (item.size || 0), 0);\n const images = all.filter(\n (item) =>\n item.type === 'file' &&\n imageExtensions.includes(item.extension?.toLowerCase() || '')\n ).length;\n\n const formatFileSize = (bytes: number) => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n };\n\n return {\n directories: directoriesCount,\n files: filesCount,\n totalSize: formatFileSize(totalSize),\n images,\n };\n }, [directories, files]);\n\n return stats;\n}\n\n","import { useState } from 'react';\nimport { Card, Button, Space, Select, Row, Col, Typography } from 'antd';\nimport {\n PictureOutlined,\n FileTextOutlined,\n ToolOutlined,\n} from '@ant-design/icons';\nimport { useTranslation } from 'react-i18next';\nimport { useFiles } from '../../hooks/useFiles';\nimport { FileBrowser } from './components/FileBrowser';\nimport { FileFilters } from './components/FileFilters';\nimport { FileStatistics } from './components/FileStatistics';\nimport { FileList } from './components/FileList';\nimport { FilePreview } from './components/FilePreview';\nimport { NormalizeFilesModal } from './components/NormalizeFilesModal';\nimport {\n useFileBrowser,\n useFileOperations,\n useFileFilters,\n useFileStatistics,\n} from './hooks';\n\nconst { Title } = Typography;\nconst { Option } = Select;\n\nexport interface FileItem {\n name: string;\n path: string;\n type: 'file' | 'directory';\n size?: number;\n modified?: string;\n downloadedAt?: string | null;\n extension?: string;\n}\n\n/**\n * Files page component - manages file browsing, preview, and normalization\n */\nexport default function Files() {\n const { t } = useTranslation();\n const [fileType, setFileType] = useState<'illustration' | 'novel'>('illustration');\n const [normalizeModalVisible, setNormalizeModalVisible] = useState(false);\n\n // File browser navigation\n const { currentPath, handleNavigate, handleGoBack, resetPath } = useFileBrowser();\n\n // File filters state\n const [sortBy, setSortBy] = useState<'name' | 'time' | 'size' | 'type' | 'downloadedAt'>('type');\n const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('asc');\n const [searchText, setSearchText] = useState<string>('');\n const [dateFilter, setDateFilter] = useState<'all' | 'today' | 'yesterday' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth'>('all');\n\n // File data fetching\n const { files, directories, isLoading, deleteFileAsync } = useFiles({\n path: currentPath,\n type: fileType,\n sort: sortBy,\n order: sortOrder,\n dateFilter: dateFilter === 'all' ? undefined : dateFilter,\n });\n\n // Apply client-side filtering (search and date filter)\n const fileFilters = useFileFilters(files, directories, searchText, dateFilter);\n\n // File operations\n const {\n previewVisible,\n previewFile,\n handlePreview,\n handleDelete,\n closePreview,\n } = useFileOperations(deleteFileAsync, fileType, handleNavigate);\n\n // Statistics\n const stats = useFileStatistics(files, directories);\n\n // Handle file type change\n const handleFileTypeChange = (value: 'illustration' | 'novel') => {\n setFileType(value);\n resetPath();\n setSearchText('');\n };\n\n // Handle sort\n const handleSort = (column: 'name' | 'time' | 'size' | 'type' | 'downloadedAt') => {\n if (sortBy === column) {\n setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc');\n } else {\n setSortBy(column);\n setSortOrder('asc');\n }\n };\n\n return (\n <div>\n <Row justify=\"space-between\" align=\"middle\" style={{ marginBottom: 16 }}>\n <Col>\n <Title level={2} style={{ margin: 0 }}>\n {t('files.title')}\n </Title>\n </Col>\n <Col>\n <Space>\n <Select\n value={fileType}\n onChange={handleFileTypeChange}\n style={{ width: 150 }}\n >\n <Option value=\"illustration\">\n <PictureOutlined /> {t('dashboard.illustrations')}\n </Option>\n <Option value=\"novel\">\n <FileTextOutlined /> {t('dashboard.novels')}\n </Option>\n </Select>\n <Button\n type=\"primary\"\n icon={<ToolOutlined />}\n onClick={() => setNormalizeModalVisible(true)}\n >\n {t('files.normalizeFiles')}\n </Button>\n </Space>\n </Col>\n </Row>\n\n <FileStatistics\n directories={stats.directories}\n files={stats.files}\n images={stats.images}\n totalSize={stats.totalSize}\n />\n\n <Card style={{ overflow: 'hidden' }}>\n <Space direction=\"vertical\" style={{ width: '100%' }} size=\"middle\">\n <FileFilters\n searchText={searchText}\n onSearchChange={setSearchText}\n dateFilter={dateFilter}\n onDateFilterChange={setDateFilter}\n sortBy={sortBy}\n onSortByChange={setSortBy}\n sortOrder={sortOrder}\n onSortOrderChange={setSortOrder}\n />\n\n <FileBrowser\n currentPath={currentPath}\n onNavigate={handleNavigate}\n onGoBack={handleGoBack}\n />\n\n <FileList\n files={fileFilters.filteredFiles}\n directories={fileFilters.filteredDirectories}\n loading={isLoading}\n sortBy={sortBy}\n sortOrder={sortOrder}\n onSort={handleSort}\n onPreview={handlePreview}\n onDelete={handleDelete}\n onNavigate={handleNavigate}\n fileType={fileType}\n />\n </Space>\n </Card>\n\n <FilePreview\n visible={previewVisible}\n file={previewFile}\n fileType={fileType}\n onClose={closePreview}\n />\n\n <NormalizeFilesModal\n visible={normalizeModalVisible}\n onClose={() => setNormalizeModalVisible(false)}\n />\n </div>\n );\n}\n\n"],"names":["BreadcrumbSeparator","children","getPrefixCls","React.useContext","ConfigContext","prefixCls","React.createElement","__rest","s","e","t","p","i","getBreadcrumbName","route","params","paramsKeys","replacement","key","renderItem","item","href","className","onClick","restItem","passedProps","pickAttrs","classNames","useItemRender","itemRender","routes","path","name","InternalBreadcrumbItem","props","separator","menu","overlay","dropdownProps","link","breadcrumbItem","mergeDropDownProps","_a","items","menuProps","index","title","label","itemProps","mergedLabel","Dropdown","DownOutlined","React.Fragment","BreadcrumbItem","customizePrefixCls","restProps","genBreadcrumbStyle","token","componentCls","iconCls","calc","resetComponent","unit","genFocusStyle","prepareComponentToken","useStyle$1","genStyleHooks","breadcrumbToken","mergeToken","route2item","breadcrumbName","rest","clone","itemBreadcrumbName","useItems","useMemo","getPath","mergedPath","Breadcrumb","style","rootClassName","legacyRoutes","direction","breadcrumb","crumbs","wrapCSSVar","hashId","cssVarCls","useStyle","mergedItems","mergedItemRender","paths","itemRenderRoutes","type","itemClassName","itemSeparator","mergedKey","isLastItem","childrenLength","toArray","element","cloneElement","breadcrumbClassName","mergedStyle","getClientSize","width","height","getOffset","node","box","docElem","PreviewGroupContext","React.createContext","Operations","visible","maskTransitionName","getContainer","icons","countRender","showSwitch","showProgress","current","transform","count","scale","minScale","maxScale","closeIcon","onActive","onClose","onZoomIn","onZoomOut","onRotateRight","onRotateLeft","onFlipX","onFlipY","onReset","toolbarRender","zIndex","image","groupContext","useContext","rotateLeft","rotateRight","zoomIn","zoomOut","close","left","right","flipX","flipY","toolClassName","React.useEffect","onKeyDown","KeyCode","handleActive","offset","renderOperation","React.useCallback","_ref","disabled","icon","classnames","_defineProperty","switchPrevNode","switchNextNode","flipYNode","flipXNode","rotateLeftNode","rotateRightNode","zoomOutNode","zoomInNode","toolbarNode","CSSMotion","_ref2","Portal","_objectSpread","initialTransform","useImageTransform","imgRef","onTransform","frame","useRef","queue","_useState","useState","_useState2","_slicedToArray","setTransform","resetTransform","action","isEqual","updateTransform","newTransform","raf","preState","memoState","queueState","dispatchZoomChange","ratio","centerX","centerY","isTouch","_imgRef$current","offsetWidth","offsetHeight","offsetLeft","offsetTop","newRatio","newScale","mergedCenterX","mergedCenterY","diffRatio","diffImgX","diffImgY","diffOffsetLeft","diffOffsetTop","newX","newY","mergedWidth","mergedHeight","_getClientSize","clientWidth","clientHeight","fixPoint","start","startAddWidth","offsetStart","getFixScaleEleTransPosition","top","fixPos","BASE_SCALE_RATIO","WHEEL_MAX_SCALE_RATIO","useMouseEvent","movable","scaleStep","rotate","x","y","isMoving","setMoving","startPositionInfo","onMouseDown","event","onMouseMove","onMouseUp","_startPositionInfo$cu","transformX","transformY","hasChangedPosition","_imgRef$current$getBo","isRotate","fixState","onWheel","scaleRatio","mergedScaleRatio","useEffect","onTopMouseUpListener","onTopMouseMoveListener","onMouseUpListener","onMouseMoveListener","addEventListener","_onMouseUpListener","_onMouseMoveListener","_onTopMouseUpListener","_onTopMouseMoveListen","isImageValid","src","resolve","img","useStatus","isCustomPlaceholder","fallback","status","setStatus","isLoaded","isError","isCurrentSrc","isValid","onLoad","getImgRef","srcAndOnload","getDistance","a","b","getCenter","oldPoint1","oldPoint2","newPoint1","newPoint2","distance1","distance2","useTouchEvent","isTouching","setIsTouching","touchPointInfo","updateTouchPointInfo","values","onTouchStart","_event$touches","touches","onTouchMove","_event$touches2","_touchPointInfo$curre","point1","point2","eventType","_getCenter","_getCenter2","onTouchEnd","onTouchMoveListener","_onTouchMoveListener","_excluded","_excluded2","PreviewImage","_objectWithoutProperties","_useStatus","_useStatus2","React","_extends","Preview","alt","imageInfo","_props$movable","_props$icons","_props$current","_props$count","_props$scaleStep","_props$minScale","_props$maxScale","_props$transitionName","transitionName","_props$maskTransition","imageRender","imgCommonProps","onChange","showLeftOrRightSwitches","showOperationsProgress","enableTransition","setEnableTransition","_useImageTransform","_useMouseEvent","_useTouchEvent","wrapClassName","onAfterClose","position","onDoubleClick","onKeyDownListener","imgNode","Dialog","COMMON_PROPS","usePreviewItems","_React$useState","React.useState","_React$useState2","images","setImages","registerImage","id","data","imgs","cloneImgs","React.useMemo","_toConsumableArray","total","_images$id","canPreview","Group","_mergedItems$current","_ref$previewPrefixCls","previewPrefixCls","_ref$icons","preview","_typeof","previewVisible","onVisibleChange","currentIndex","dialogProps","_usePreviewItems","_usePreviewItems2","register","fromItems","_useMergedState","useMergedState","_useMergedState2","setCurrent","keepOpenIndex","setKeepOpenIndex","_ref3","_useMergedState3","val","prevVal","_useMergedState4","isShowPreview","setShowPreview","_useState3","_useState4","mousePosition","setMousePosition","onPreviewFromImage","imageSrc","mouseX","mouseY","onInternalChange","next","prev","onPreviewClose","previewGroupContext","uid","useRegisterImage","registerData","ImageInternal","imgSrc","onInitialPreviewClose","_props$prefixCls","_props$previewPrefixC","placeholder","_props$preview","onError","wrapperClassName","wrapperStyle","otherProps","previewSrc","_ref$visible","_ref$onVisibleChange","onPreviewVisibleChange","_ref$getContainer","getPreviewContainer","previewMask","maskClassName","wrapperClass","cn","obj","prop","imageId","onPreview","_getOffset","PreviewGroup","RotateLeftOutlined","ref","AntdIcon","RotateLeftOutlinedSvg","RefIcon","React.forwardRef","RotateRightOutlined","RotateRightOutlinedSvg","SwapOutlined","SwapOutlinedSvg","ZoomInOutlined","ZoomInOutlinedSvg","ZoomOutOutlined","ZoomOutOutlinedSvg","genBoxStyle","genImageMaskStyle","motionDurationSlow","paddingXXS","marginXXS","colorTextLightSolid","FastColor","textEllipsis","genPreviewOperationsStyle","previewCls","modalMaskBg","paddingSM","marginXL","margin","paddingLG","previewOperationColorDisabled","previewOperationHoverColor","operationBg","operationBgHover","genPreviewSwitchStyle","zIndexPopup","genImagePreviewStyle","motionEaseOut","genImageStyle","genPreviewMotion","initZoomMotion","initFadeMotion","imageToken","genModalMaskStyle","CloseOutlined","LeftOutlined","RightOutlined","InternalPreviewGroup","rootPrefixCls","rootCls","useCSSVarCls","useZIndex","memoizedIcons","mergedPreview","_preview","mergedRootClassName","getTransitionName","RcImage","Image","getContextPopupContainer","contextClassName","contextStyle","contextPreview","contextFallback","useComponentConfig","imageLocale","useLocale","mergedClassName","destroyOnClose","destroyOnHidden","restPreviewProps","EyeOutlined","mergedFallback","HomeOutlined","HomeOutlinedSvg","ToolOutlined","ToolOutlinedSvg","fileService","api","options","useFiles","queryClient","useQueryClient","handleError","useErrorHandler","filesData","isLoading","error","refetch","useQuery","QUERY_KEYS","deleteMutation","useMutation","useFilePreview","previewBlob","useFileNormalize","normalizeMutation","FileBrowser","currentPath","onNavigate","onGoBack","useTranslation","breadcrumbItems","jsx","Button","segment","arr","jsxs","Fragment","Option","Select","Search","Input","FileFilters","searchText","onSearchChange","dateFilter","onDateFilterChange","sortBy","onSortByChange","sortOrder","onSortOrderChange","Row","Col","SearchOutlined","Space","SortAscendingOutlined","SortDescendingOutlined","FileStatistics","directories","files","totalSize","Card","Statistic","FolderOutlined","FileOutlined","PictureOutlined","imageExtensions","textExtensions","FileList","loading","onSort","onDelete","formatFileSize","bytes","getSortIcon","column","allItems","columns","record","FileTextOutlined","Tag","ext","size","time","formatDate","_","Popconfirm","DeleteOutlined","Table","range","PreviewModal","content","imageUrl","renderContent","showFooter","open","modalProps","renderPreviewContent","Spin","LoadingOutlined","Modal","FilePreview","file","fileType","textContent","setTextContent","isImage","isText","previewUrl","isLoadingPreview","response","text","message","previewType","Text","Typography","NormalizeFilesModal","normalizeAsync","isNormalizing","normalizeResult","normalizeOptions","setNormalizeOptions","handlePreview","handleExecute","handleClose","result","Alert","Checkbox","value","Descriptions","useFileBrowser","setCurrentPath","handleNavigate","useCallback","handleGoBack","parts","resetPath","useFileOperations","deleteFileAsync","setPreviewVisible","previewFile","setPreviewFile","handleDelete","closePreview","useFileFilters","getDateRange","filter","now","startDate","endDate","yesterday","dayOfWeek","lastWeekStart","lastWeekEnd","filteredAndSortedItems","searchLower","downloadDate","isAfterStart","isBeforeEnd","filteredDirectories","filteredFiles","dirs","fileItems","useFileStatistics","all","directoriesCount","filesCount","sum","Title","Files","setFileType","normalizeModalVisible","setNormalizeModalVisible","setSortBy","setSortOrder","setSearchText","setDateFilter","fileFilters","stats","handleFileTypeChange","handleSort"],"mappings":"muCAIA,MAAMA,GAAsB,CAAC,CAC3B,SAAAC,CACF,IAAM,CACJ,KAAM,CACJ,aAAAC,CACJ,EAAMC,EAAAA,WAAiBC,EAAa,EAC5BC,EAAYH,EAAa,YAAY,EAC3C,OAAoBI,EAAAA,cAAoB,KAAM,CAC5C,UAAW,GAAGD,CAAS,aACvB,cAAe,MACnB,EAAKJ,IAAa,GAAKA,EAAWA,GAAY,GAAG,CACjD,EACAD,GAAoB,2BAA6B,GCdjD,IAAIO,GAAgC,SAAUC,EAAGC,EAAG,CAClD,IAAIC,EAAI,CAAA,EACR,QAASC,KAAKH,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGG,CAAC,GAAKF,EAAE,QAAQE,CAAC,EAAI,IAAGD,EAAEC,CAAC,EAAIH,EAAEG,CAAC,GAC/F,GAAIH,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WAAY,QAASI,EAAI,EAAGD,EAAI,OAAO,sBAAsBH,CAAC,EAAGI,EAAID,EAAE,OAAQC,IAClIH,EAAE,QAAQE,EAAEC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKJ,EAAGG,EAAEC,CAAC,CAAC,IAAGF,EAAEC,EAAEC,CAAC,CAAC,EAAIJ,EAAEG,EAAEC,CAAC,CAAC,GAElG,OAAOF,CACT,EAIA,SAASG,GAAkBC,EAAOC,EAAQ,CACxC,GAAID,EAAM,QAAU,QAAaA,EAAM,QAAU,KAC/C,OAAO,KAET,MAAME,EAAa,OAAO,KAAKD,CAAM,EAAE,KAAK,GAAG,EAC/C,OAAO,OAAOD,EAAM,OAAU,SAAWA,EAAM,MAAQ,OAAOA,EAAM,KAAK,EAAE,QAAQ,IAAI,OAAO,KAAKE,CAAU,IAAK,GAAG,EAAG,CAACC,EAAaC,IAAQH,EAAOG,CAAG,GAAKD,CAAW,CAC1K,CACO,SAASE,GAAWd,EAAWe,EAAMnB,EAAUoB,EAAM,CAC1D,GAAIpB,GAAa,KACf,OAAO,KAET,KAAM,CACF,UAAAqB,EACA,QAAAC,CACN,EAAQH,EACJI,EAAWjB,GAAOa,EAAM,CAAC,YAAa,SAAS,CAAC,EAC5CK,EAAc,OAAO,OAAO,OAAO,OAAO,CAAA,EAAIC,GAAUF,EAAU,CACtE,KAAM,GACN,KAAM,EACV,CAAG,CAAC,EAAG,CACH,QAAAD,CACJ,CAAG,EACD,OAAIF,IAAS,OACSf,EAAAA,cAAoB,IAAK,OAAO,OAAO,CAAA,EAAImB,EAAa,CAC1E,UAAWE,EAAW,GAAGtB,CAAS,QAASiB,CAAS,EACpD,KAAMD,CACZ,CAAK,EAAGpB,CAAQ,EAEMK,EAAAA,cAAoB,OAAQ,OAAO,OAAO,CAAA,EAAImB,EAAa,CAC7E,UAAWE,EAAW,GAAGtB,CAAS,QAASiB,CAAS,CACxD,CAAG,EAAGrB,CAAQ,CACd,CACe,SAAS2B,GAAcvB,EAAWwB,EAAY,CAQ3D,MAPyB,CAACT,EAAML,EAAQe,EAAQC,EAAMV,IAAS,CAC7D,GAAIQ,EACF,OAAOA,EAAWT,EAAML,EAAQe,EAAQC,CAAI,EAE9C,MAAMC,EAAOnB,GAAkBO,EAAML,CAAM,EAC3C,OAAOI,GAAWd,EAAWe,EAAMY,EAAMX,CAAI,CAC/C,CAEF,CCpDA,IAAId,GAAgC,SAAUC,EAAGC,EAAG,CAClD,IAAIC,EAAI,CAAA,EACR,QAASC,KAAKH,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGG,CAAC,GAAKF,EAAE,QAAQE,CAAC,EAAI,MAAKA,CAAC,EAAIH,EAAEG,CAAC,GAC/F,GAAIH,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WAAY,QAASI,EAAI,EAAGD,EAAI,OAAO,sBAAsBH,CAAC,EAAGI,EAAID,EAAE,OAAQC,IAClIH,EAAE,QAAQE,EAAEC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKJ,EAAGG,EAAEC,CAAC,CAAC,IAAGF,EAAEC,EAAEC,CAAC,CAAC,EAAIJ,EAAEG,EAAEC,CAAC,CAAC,GAElG,OAAOF,CACT,EAQO,MAAMuB,GAAyBC,GAAS,CAC7C,KAAM,CACJ,UAAA7B,EACA,UAAA8B,EAAY,IACZ,SAAAlC,EACA,KAAAmC,EACA,QAAAC,EACA,cAAAC,EACA,KAAAjB,CAAA,EACEa,EAiDEK,GA1CuBC,GAAkB,CAC7C,GAAIJ,GAAQC,EAAS,CACnB,MAAMI,EAAqB,OAAO,OAAO,CAAA,EAAIH,CAAa,EAC1D,GAAIF,EAAM,CACR,MAAMM,EAAKN,GAAQ,GACjB,CACE,MAAAO,CAAA,EACED,EACJE,EAAYrC,GAAOmC,EAAI,CAAC,OAAO,CAAC,EAClCD,EAAmB,KAAO,OAAO,OAAO,OAAO,OAAO,CAAA,EAAIG,CAAS,EAAG,CACpE,MAAqDD,GAAM,IAAI,CAACD,EAAIG,IAAU,CAC5E,GAAI,CACA,IAAA3B,EACA,MAAA4B,EACA,MAAAC,EACA,KAAAhB,CAAA,EACEW,EACJM,EAAYzC,GAAOmC,EAAI,CAAC,MAAO,QAAS,QAAS,MAAM,CAAC,EAC1D,IAAIO,EAAcF,GAA6CD,EAC/D,OAAIf,IACFkB,EAA2B3C,EAAAA,cAAoB,IAAK,CAClD,KAAM,GAAGe,CAAI,GAAGU,CAAI,EAAA,EACnBkB,CAAW,GAET,OAAO,OAAO,OAAO,OAAO,CAAA,EAAID,CAAS,EAAG,CACjD,IAAK9B,GAAuC2B,EAC5C,MAAOI,CAAA,CACR,CACH,CAAC,CAAA,CACF,CACH,MAAWZ,IACTI,EAAmB,QAAUJ,GAE/B,OAAoB/B,gBAAoB4C,GAAU,OAAO,OAAO,CAC9D,UAAW,QAAA,EACVT,CAAkB,EAAgBnC,EAAAA,cAAoB,OAAQ,CAC/D,UAAW,GAAGD,CAAS,eAAA,EACtBmC,EAA6BlC,EAAAA,cAAoB6C,GAAc,IAAI,CAAC,CAAC,CAC1E,CACA,OAAOX,CACT,GAEkCvC,CAAQ,EAC1C,OAA0BsC,GAAS,qBACOa,EAAAA,SAAgB,qBAAuC,KAAM,KAAMb,CAAI,EAAGJ,GAA0B7B,EAAAA,cAAoBN,GAAqB,KAAMmC,CAAS,CAAC,EAEhM,IACT,EACMkB,GAAiBnB,GAAS,CAC9B,KAAM,CACF,UAAWoB,EACX,SAAArD,EACA,KAAAoB,CAAA,EACEa,EACJqB,EAAYhD,GAAO2B,EAAO,CAAC,YAAa,WAAY,MAAM,CAAC,EACvD,CACJ,aAAAhC,CAAA,EACEC,EAAAA,WAAiBC,EAAa,EAC5BC,EAAYH,EAAa,aAAcoD,CAAkB,EAC/D,uBAAwCrB,GAAwB,OAAO,OAAO,CAAA,EAAIsB,EAAW,CAC3F,UAAAlD,CAAA,CACD,EAAGc,GAAWd,EAAWkD,EAAWtD,EAAUoB,CAAI,CAAC,CACtD,EACAgC,GAAe,sBAAwB,GC7FvC,MAAMG,GAAqBC,GAAS,CAClC,KAAM,CACJ,aAAAC,EACA,QAAAC,EACA,KAAAC,CACJ,EAAMH,EACJ,MAAO,CACL,CAACC,CAAY,EAAG,OAAO,OAAO,OAAO,OAAO,GAAIG,GAAeJ,CAAK,CAAC,EAAG,CACtE,MAAOA,EAAM,UACb,SAAUA,EAAM,SAChB,CAACE,CAAO,EAAG,CACT,SAAUF,EAAM,YACxB,EACM,GAAI,CACF,QAAS,OACT,SAAU,OACV,OAAQ,EACR,QAAS,EACT,UAAW,MACnB,EACM,EAAG,OAAO,OAAO,CACf,MAAOA,EAAM,UACb,WAAY,SAASA,EAAM,iBAAiB,GAC5C,QAAS,KAAKK,GAAKL,EAAM,UAAU,CAAC,GACpC,aAAcA,EAAM,eACpB,OAAQA,EAAM,WACd,QAAS,eACT,aAAcG,EAAKH,EAAM,SAAS,EAAE,IAAI,EAAE,EAAE,MAAK,EACjD,UAAW,CACT,MAAOA,EAAM,eACb,gBAAiBA,EAAM,gBACjC,CACA,EAASM,GAAcN,CAAK,CAAC,EACvB,gBAAiB,CACf,MAAOA,EAAM,aACrB,EACM,CAAC,GAAGC,CAAY,YAAY,EAAG,CAC7B,aAAcD,EAAM,gBACpB,MAAOA,EAAM,cACrB,EACM,CAAC,GAAGC,CAAY,OAAO,EAAG,CACxB,CAAC;AAAA,cACKC,CAAO;AAAA,cACPA,CAAO;AAAA,SACZ,EAAG,CACF,kBAAmBF,EAAM,SACnC,CACA,EACM,CAAC,GAAGC,CAAY,eAAe,EAAG,CAChC,aAAcD,EAAM,eACpB,OAAQA,EAAM,WACd,QAAS,eACT,QAAS,KAAKK,GAAKL,EAAM,UAAU,CAAC,GACpC,aAAcG,EAAKH,EAAM,SAAS,EAAE,IAAI,EAAE,EAAE,MAAK,EACjD,CAAC,KAAKE,CAAO,EAAE,EAAG,CAChB,kBAAmBF,EAAM,UACzB,SAAUA,EAAM,YAC1B,EACQ,UAAW,CACT,MAAOA,EAAM,eACb,gBAAiBA,EAAM,iBACvB,EAAG,CACD,MAAOA,EAAM,cACzB,CACA,EACQ,EAAG,CACD,UAAW,CACT,gBAAiB,aAC7B,CACA,CACA,EAEM,CAAC,IAAIA,EAAM,YAAY,MAAM,EAAG,CAC9B,UAAW,KACnB,CACA,CAAK,CACL,CACA,EACaO,GAAwBP,IAAU,CAC7C,UAAWA,EAAM,qBACjB,cAAeA,EAAM,UACrB,aAAcA,EAAM,SACpB,UAAWA,EAAM,qBACjB,eAAgBA,EAAM,UACtB,eAAgBA,EAAM,qBACtB,gBAAiBA,EAAM,QACzB,GAEAQ,GAAeC,GAAc,aAAcT,GAAS,CAClD,MAAMU,EAAkBC,GAAWX,EAAO,EAAE,EAC5C,OAAOD,GAAmBW,CAAe,CAC3C,EAAGH,EAAqB,EC9FxB,IAAIzD,GAAgC,SAAUC,EAAGC,EAAG,CAClD,IAAIC,EAAI,CAAA,EACR,QAASC,KAAKH,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGG,CAAC,GAAKF,EAAE,QAAQE,CAAC,EAAI,IAAGD,EAAEC,CAAC,EAAIH,EAAEG,CAAC,GAC/F,GAAIH,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WAAY,QAASI,EAAI,EAAGD,EAAI,OAAO,sBAAsBH,CAAC,EAAGI,EAAID,EAAE,OAAQC,IAClIH,EAAE,QAAQE,EAAEC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKJ,EAAGG,EAAEC,CAAC,CAAC,IAAGF,EAAEC,EAAEC,CAAC,CAAC,EAAIJ,EAAEG,EAAEC,CAAC,CAAC,GAElG,OAAOF,CACT,EAEA,SAAS2D,GAAWvD,EAAO,CACzB,KAAM,CACF,eAAAwD,EACA,SAAArE,CACN,EAAQa,EACJyD,EAAOhE,GAAOO,EAAO,CAAC,iBAAkB,UAAU,CAAC,EAC/C0D,EAAQ,OAAO,OAAO,CAC1B,MAAOF,CACX,EAAKC,CAAI,EACP,OAAItE,IACFuE,EAAM,KAAO,CACX,MAAOvE,EAAS,IAAIyC,GAAM,CACxB,GAAI,CACA,eAAgB+B,CAC5B,EAAc/B,EACJM,EAAYzC,GAAOmC,EAAI,CAAC,gBAAgB,CAAC,EAC3C,OAAO,OAAO,OAAO,OAAO,OAAO,CAAA,EAAIM,CAAS,EAAG,CACjD,MAAOyB,CACjB,CAAS,CACH,CAAC,CACP,GAESD,CACT,CACe,SAASE,GAAS/B,EAAOb,EAAQ,CAC9C,OAAO6C,EAAAA,QAAQ,IACThC,IAGAb,EACKA,EAAO,IAAIuC,EAAU,EAEvB,MACN,CAAC1B,EAAOb,CAAM,CAAC,CACpB,CCzCA,IAAIvB,GAAgC,SAAUC,EAAGC,EAAG,CAClD,IAAIC,EAAI,CAAA,EACR,QAASC,KAAKH,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGG,CAAC,GAAKF,EAAE,QAAQE,CAAC,EAAI,MAAKA,CAAC,EAAIH,EAAEG,CAAC,GAC/F,GAAIH,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WAAY,QAASI,EAAI,EAAGD,EAAI,OAAO,sBAAsBH,CAAC,EAAGI,EAAID,EAAE,OAAQC,IAClIH,EAAE,QAAQE,EAAEC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKJ,EAAGG,EAAEC,CAAC,CAAC,IAAGF,EAAEC,EAAEC,CAAC,CAAC,EAAIJ,EAAEG,EAAEC,CAAC,CAAC,GAElG,OAAOF,CACT,EAaA,MAAMkE,GAAU,CAAC7D,EAAQgB,IAAS,CAChC,GAAIA,IAAS,OACX,OAAOA,EAET,IAAI8C,GAAc9C,GAAQ,IAAI,QAAQ,MAAO,EAAE,EAC/C,cAAO,KAAKhB,CAAM,EAAE,QAAQG,GAAO,CACjC2D,EAAaA,EAAW,QAAQ,IAAI3D,CAAG,GAAIH,EAAOG,CAAG,CAAC,CACxD,CAAC,EACM2D,CACT,EACMC,GAAa5C,GAAS,CAC1B,KAAM,CACF,UAAWoB,EACX,UAAAnB,EAAY,IACZ,MAAA4C,EACA,UAAAzD,EACA,cAAA0D,EACA,OAAQC,EACR,MAAAtC,EACA,SAAA1C,EACA,WAAA4B,EACA,OAAAd,EAAS,CAAA,CAAC,EACRmB,EACJqB,EAAYhD,GAAO2B,EAAO,CAAC,YAAa,YAAa,QAAS,YAAa,gBAAiB,SAAU,QAAS,WAAY,aAAc,QAAQ,CAAC,EAC9I,CACJ,aAAAhC,EACA,UAAAgF,EACA,WAAAC,CAAA,EACEhF,EAAAA,WAAiBC,EAAa,EAClC,IAAIgF,EACJ,MAAM/E,EAAYH,EAAa,aAAcoD,CAAkB,EACzD,CAAC+B,EAAYC,EAAQC,CAAS,EAAIC,GAASnF,CAAS,EACpDoF,EAAcf,GAAS/B,EAAOsC,CAAY,EAe1CS,EAAmB9D,GAAcvB,EAAWwB,CAAU,EAC5D,GAAI4D,GAAeA,EAAY,OAAS,EAAG,CAEzC,MAAME,EAAQ,CAAA,EACRC,EAAmBjD,GAASsC,EAClCG,EAASK,EAAY,IAAI,CAACrE,EAAMyB,IAAU,CACxC,KAAM,CACJ,KAAAd,EACA,IAAAb,EACA,KAAA2E,EACA,KAAAzD,EACA,QAAAC,EACA,QAAAd,EACA,UAAWuE,EACX,UAAWC,EACX,cAAAzD,CAAA,EACElB,EACEyD,EAAaD,GAAQ7D,EAAQgB,CAAI,EACnC8C,IAAe,QACjBc,EAAM,KAAKd,CAAU,EAEvB,MAAMmB,EAAY9E,GAAuC2B,EACzD,GAAIgD,IAAS,YACX,OAAoBvF,EAAAA,cAAoBN,GAAqB,CAC3D,IAAKgG,CAAA,EACJD,CAAa,EAElB,MAAM/C,EAAY,CAAA,EACZiD,GAAapD,IAAU4C,EAAY,OAAS,EAC9CrD,EACFY,EAAU,KAAOZ,EACRC,IACTW,EAAU,QAAUX,GAEtB,GAAI,CACF,KAAAhB,CAAA,EACED,EACJ,OAAIuE,EAAM,QAAUd,IAAe,SACjCxD,EAAO,KAAKsE,EAAM,KAAK,GAAG,CAAC,IAETrF,gBAAoB2B,GAAwB,OAAO,OAAO,CAC5E,IAAK+D,CAAA,EACJhD,EAAWtB,GAAUN,EAAM,CAC5B,KAAM,GACN,KAAM,EAAA,CACP,EAAG,CACF,UAAW0E,EACX,cAAAxD,EACA,KAAAjB,EACA,UAAW4E,GAAa,GAAK9D,EAC7B,QAAAZ,EACA,UAAAlB,CAAA,CACD,EAAGqF,EAAiBtE,EAAML,EAAQ6E,EAAkBD,EAAOtE,CAAI,CAAC,CACnE,CAAC,CACH,SAAWpB,EAAU,CACnB,MAAMiG,EAAiBC,GAAQlG,CAAQ,EAAE,OACzCmF,EAASe,GAAQlG,CAAQ,EAAE,IAAI,CAACmG,EAASvD,IAAU,CACjD,GAAI,CAACuD,EACH,OAAOA,EAET,MAAMH,EAAapD,IAAUqD,EAAiB,EAC9C,OAAOG,GAAaD,EAAS,CAC3B,UAAWH,EAAa,GAAK9D,EAE7B,IAAKU,CAAA,CACN,CACH,CAAC,CACH,CACA,MAAMyD,EAAsB3E,EAAWtB,EAAmE8E,GAAW,UAAW,CAC9H,CAAC,GAAG9E,CAAS,MAAM,EAAG6E,IAAc,KAAA,EACnC5D,EAAW0D,EAAeM,EAAQC,CAAS,EACxCgB,EAAc,OAAO,OAAO,OAAO,OAAO,CAAA,EAA4DpB,GAAW,KAAK,EAAGJ,CAAK,EACpI,OAAOM,EAAwB/E,EAAAA,cAAoB,MAAO,OAAO,OAAO,CACtE,UAAWgG,EACX,MAAOC,CAAA,EACNhD,CAAS,EAAgBjD,EAAAA,cAAoB,KAAM,KAAM8E,CAAM,CAAC,CAAC,CACtE,EACAN,GAAW,KAAOzB,GAClByB,GAAW,UAAY9E,GC3EhB,SAASwG,IAAgB,CAC9B,IAAIC,EAAQ,SAAS,gBAAgB,YACjCC,EAAS,OAAO,aAAe,SAAS,gBAAgB,aAC5D,MAAO,CACL,MAAOD,EACP,OAAQC,CACZ,CACA,CAOO,SAASC,GAAUC,EAAM,CAC9B,IAAIC,EAAMD,EAAK,sBAAqB,EAChCE,EAAU,SAAS,gBAGvB,MAAO,CACL,KAAMD,EAAI,MAAQ,OAAO,aAAeC,EAAQ,aAAeA,EAAQ,YAAc,SAAS,KAAK,YAAc,GACjH,IAAKD,EAAI,KAAO,OAAO,aAAeC,EAAQ,YAAcA,EAAQ,WAAa,SAAS,KAAK,WAAa,EAChH,CACA,CC9FO,IAAIC,GAAmCC,EAAAA,cAAoB,IAAI,ECQlEC,GAAa,SAAoB/E,EAAO,CAC1C,IAAIgF,EAAUhF,EAAM,QAClBiF,EAAqBjF,EAAM,mBAC3BkF,EAAelF,EAAM,aACrB7B,EAAY6B,EAAM,UAClB8C,EAAgB9C,EAAM,cACtBmF,EAAQnF,EAAM,MACdoF,EAAcpF,EAAM,YACpBqF,EAAarF,EAAM,WACnBsF,EAAetF,EAAM,aACrBuF,EAAUvF,EAAM,QAChBwF,EAAYxF,EAAM,UAClByF,EAAQzF,EAAM,MACd0F,EAAQ1F,EAAM,MACd2F,EAAW3F,EAAM,SACjB4F,EAAW5F,EAAM,SACjB6F,EAAY7F,EAAM,UAClB8F,EAAW9F,EAAM,SACjB+F,EAAU/F,EAAM,QAChBgG,EAAWhG,EAAM,SACjBiG,EAAYjG,EAAM,UAClBkG,EAAgBlG,EAAM,cACtBmG,EAAenG,EAAM,aACrBoG,EAAUpG,EAAM,QAChBqG,EAAUrG,EAAM,QAChBsG,EAAUtG,EAAM,QAChBuG,EAAgBvG,EAAM,cACtBwG,EAASxG,EAAM,OACfyG,EAAQzG,EAAM,MACZ0G,EAAeC,EAAAA,WAAW9B,EAAmB,EAC7C+B,EAAazB,EAAM,WACrB0B,EAAc1B,EAAM,YACpB2B,EAAS3B,EAAM,OACf4B,EAAU5B,EAAM,QAChB6B,EAAQ7B,EAAM,MACd8B,EAAO9B,EAAM,KACb+B,EAAQ/B,EAAM,MACdgC,EAAQhC,EAAM,MACdiC,EAAQjC,EAAM,MACZkC,GAAgB,GAAG,OAAOlJ,EAAW,uBAAuB,EAChEmJ,EAAAA,UAAgB,UAAY,CAC1B,IAAIC,EAAY,SAAmBhJ,EAAG,CAChCA,EAAE,UAAYiJ,GAAQ,KACxBzB,EAAO,CAEX,EACA,OAAIf,GACF,OAAO,iBAAiB,UAAWuC,CAAS,EAEvC,UAAY,CACjB,OAAO,oBAAoB,UAAWA,CAAS,CACjD,CACF,EAAG,CAACvC,CAAO,CAAC,EACZ,IAAIyC,EAAe,SAAsBlJ,EAAGmJ,EAAQ,CAClDnJ,EAAE,eAAc,EAChBA,EAAE,gBAAe,EACjBuH,EAAS4B,CAAM,CACjB,EACIC,EAAkBC,cAAkB,SAAUC,EAAM,CACtD,IAAIlE,EAAOkE,EAAK,KACdC,EAAWD,EAAK,SAChBxI,EAAUwI,EAAK,QACfE,EAAOF,EAAK,KACd,OAAoBzJ,EAAAA,cAAoB,MAAO,CAC7C,IAAKuF,EACL,UAAWqE,EAAWX,GAAe,GAAG,OAAOlJ,EAAW,wBAAwB,EAAE,OAAOwF,CAAI,EAAGsE,GAAgB,CAAA,EAAI,GAAG,OAAO9J,EAAW,gCAAgC,EAAG,CAAC,CAAC2J,CAAQ,CAAC,EACzL,QAASzI,CACf,EAAO0I,CAAI,CACT,EAAG,CAACV,GAAelJ,CAAS,CAAC,EACzB+J,GAAiB7C,EAAasC,EAAgB,CAChD,KAAMV,EACN,QAAS,SAAiB1I,EAAG,CAC3B,OAAOkJ,EAAalJ,EAAG,EAAE,CAC3B,EACA,KAAM,OACN,SAAUgH,IAAY,CAC1B,CAAG,EAAI,OACD4C,GAAiB9C,EAAasC,EAAgB,CAChD,KAAMT,EACN,QAAS,SAAiB3I,EAAG,CAC3B,OAAOkJ,EAAalJ,EAAG,CAAC,CAC1B,EACA,KAAM,OACN,SAAUgH,IAAYE,EAAQ,CAClC,CAAG,EAAI,OACD2C,GAAYT,EAAgB,CAC9B,KAAMP,EACN,QAASf,EACT,KAAM,OACV,CAAG,EACGgC,EAAYV,EAAgB,CAC9B,KAAMR,EACN,QAASf,EACT,KAAM,OACV,CAAG,EACGkC,GAAiBX,EAAgB,CACnC,KAAMf,EACN,QAAST,EACT,KAAM,YACV,CAAG,EACGoC,EAAkBZ,EAAgB,CACpC,KAAMd,EACN,QAASX,EACT,KAAM,aACV,CAAG,EACGsC,GAAcb,EAAgB,CAChC,KAAMZ,EACN,QAASd,EACT,KAAM,UACN,SAAUP,GAASC,CACvB,CAAG,EACG8C,GAAad,EAAgB,CAC/B,KAAMb,EACN,QAASd,EACT,KAAM,SACN,SAAUN,IAAUE,CACxB,CAAG,EACG8C,GAA2BtK,EAAAA,cAAoB,MAAO,CACxD,UAAW,GAAG,OAAOD,EAAW,aAAa,CACjD,EAAKiK,GAAWC,EAAWC,GAAgBC,EAAiBC,GAAaC,EAAU,EACjF,OAAoBrK,EAAAA,cAAoBuK,GAAW,CACjD,QAAS3D,EACT,WAAYC,CAChB,EAAK,SAAU2D,EAAO,CAClB,IAAIxJ,EAAYwJ,EAAM,UACpB/F,EAAQ+F,EAAM,MAChB,OAAoBxK,EAAAA,cAAoByK,GAAQ,CAC9C,KAAM,GACN,aAAc3D,GAAkE,SAAS,IAC/F,EAAoB9G,EAAAA,cAAoB,MAAO,CACzC,UAAW4J,EAAW,GAAG,OAAO7J,EAAW,qBAAqB,EAAGiB,EAAW0D,CAAa,EAC3F,MAAOgG,EAAcA,EAAc,CAAA,EAAIjG,CAAK,EAAG,CAAA,EAAI,CACjD,OAAQ2D,CAChB,CAAO,CACP,EAAOX,IAAc,KAAO,KAAoBzH,EAAAA,cAAoB,SAAU,CACxE,UAAW,GAAG,OAAOD,EAAW,QAAQ,EACxC,QAAS4H,CACf,EAAOF,GAAamB,CAAK,EAAG3B,GAA2BjH,EAAAA,cAAoB8C,WAAgB,KAAmB9C,EAAAA,cAAoB,MAAO,CACnI,UAAW4J,EAAW,GAAG,OAAO7J,EAAW,cAAc,EAAG8J,GAAgB,CAAA,EAAI,GAAG,OAAO9J,EAAW,uBAAuB,EAAGoH,IAAY,CAAC,CAAC,EAC7I,QAAS,SAAiBhH,EAAG,CAC3B,OAAOkJ,EAAalJ,EAAG,EAAE,CAC3B,CACN,EAAO0I,CAAI,EAAgB7I,EAAAA,cAAoB,MAAO,CAChD,UAAW4J,EAAW,GAAG,OAAO7J,EAAW,eAAe,EAAG8J,GAAgB,CAAA,EAAI,GAAG,OAAO9J,EAAW,wBAAwB,EAAGoH,IAAYE,EAAQ,CAAC,CAAC,EACvJ,QAAS,SAAiBlH,EAAG,CAC3B,OAAOkJ,EAAalJ,EAAG,CAAC,CAC1B,CACN,EAAO2I,CAAK,CAAC,EAAgB9I,EAAAA,cAAoB,MAAO,CAClD,UAAW,GAAG,OAAOD,EAAW,SAAS,CAC/C,EAAOmH,GAA6BlH,EAAAA,cAAoB,MAAO,CACzD,UAAW,GAAG,OAAOD,EAAW,WAAW,CACjD,EAAOiH,EAAcA,EAAYG,EAAU,EAAGE,CAAK,EAAiBrH,EAAAA,cAAoB,MAAO,KAAM,GAAG,OAAOmH,EAAU,EAAG,KAAK,EAAE,OAAOE,CAAK,CAAC,CAAC,EAAGc,EAAgBA,EAAcmC,GAAaI,EAAcA,EAAc,CACrN,MAAO,CACL,SAAUZ,GACV,SAAUC,GACV,UAAWC,GACX,UAAWC,EACX,eAAgBC,GAChB,gBAAiBC,EACjB,YAAaC,GACb,WAAYC,EACpB,EACM,QAAS,CACP,SAAU3C,EACV,QAASO,EACT,QAASD,EACT,aAAcD,EACd,cAAeD,EACf,UAAWD,EACX,SAAUD,EACV,QAASM,EACT,QAASP,CACjB,EACM,UAAWP,CACjB,EAAOkB,EAAe,CAChB,QAASnB,EACT,MAAOE,CACb,EAAQ,CAAA,CAAE,EAAG,GAAI,CACX,MAAOgB,CACb,CAAK,CAAC,EAAIiC,EAAW,CAAC,CAAC,CACrB,CAAC,CACH,ECxLIK,GAAmB,CACrB,EAAG,EACH,EAAG,EACH,OAAQ,EACR,MAAO,EACP,MAAO,GACP,MAAO,EACT,EACe,SAASC,GAAkBC,EAAQtD,EAAUC,EAAUsD,EAAa,CACjF,IAAIC,EAAQC,EAAAA,OAAO,IAAI,EACnBC,EAAQD,EAAAA,OAAO,EAAE,EACjBE,EAAYC,EAAAA,SAASR,EAAgB,EACvCS,EAAaC,EAAeH,EAAW,CAAC,EACxC9D,EAAYgE,EAAW,CAAC,EACxBE,EAAeF,EAAW,CAAC,EACzBG,EAAiB,SAAwBC,EAAQ,CACnDF,EAAaX,EAAgB,EACxBc,GAAQd,GAAkBvD,CAAS,GACY0D,IAAY,CAC5D,UAAWH,GACX,OAAQa,CAChB,CAAO,CAEL,EAGIE,EAAkB,SAAyBC,EAAcH,EAAQ,CAC/DT,EAAM,UAAY,OACpBE,EAAM,QAAU,CAAA,EAChBF,EAAM,QAAUa,GAAI,UAAY,CAC9BN,EAAa,SAAUO,EAAU,CAC/B,IAAIC,EAAYD,EAChB,OAAAZ,EAAM,QAAQ,QAAQ,SAAUc,EAAY,CAC1CD,EAAYpB,EAAcA,EAAc,CAAA,EAAIoB,CAAS,EAAGC,CAAU,CACpE,CAAC,EACDhB,EAAM,QAAU,KACkCD,IAAY,CAC5D,UAAWgB,EACX,OAAQN,CACpB,CAAW,EACMM,CACT,CAAC,CACH,CAAC,GAEHb,EAAM,QAAQ,KAAKP,EAAcA,EAAc,GAAItD,CAAS,EAAGuE,CAAY,CAAC,CAC9E,EAGIK,EAAqB,SAA4BC,EAAOT,EAAQU,EAASC,EAASC,EAAS,CAC7F,IAAIC,EAAkBxB,EAAO,QAC3B1E,EAAQkG,EAAgB,MACxBjG,EAASiG,EAAgB,OACzBC,EAAcD,EAAgB,YAC9BE,EAAeF,EAAgB,aAC/BG,EAAaH,EAAgB,WAC7BI,EAAYJ,EAAgB,UAC1BK,EAAWT,EACXU,EAAWvF,EAAU,MAAQ6E,EAC7BU,EAAWnF,GACbmF,EAAWnF,EACXkF,EAAWlF,EAAWJ,EAAU,OACvBuF,EAAWpF,IAEpBoF,EAAWP,EAAUO,EAAWpF,EAChCmF,EAAWC,EAAWvF,EAAU,OAIlC,IAAIwF,EAAgBV,GAAmD,WAAa,EAChFW,EAAgBV,GAAmD,YAAc,EACjFW,EAAYJ,EAAW,EAEvBK,EAAWD,EAAY3G,EAAQ,GAC/B6G,EAAWF,EAAY1G,EAAS,GAEhC6G,EAAiBH,GAAaF,EAAgBxF,EAAU,EAAIoF,GAC5DU,EAAgBJ,GAAaD,EAAgBzF,EAAU,EAAIqF,GAE3DU,EAAO/F,EAAU,GAAK6F,EAAiBF,GACvCK,EAAOhG,EAAU,GAAK8F,EAAgBF,GAM1C,GAAIf,EAAQ,GAAKU,IAAa,EAAG,CAC/B,IAAIU,EAAcf,EAAcK,EAC5BW,EAAef,EAAeI,EAC9BY,EAAiBrH,GAAa,EAChCsH,GAAcD,EAAe,MAC7BE,EAAeF,EAAe,OAC5BF,GAAeG,IAAeF,GAAgBG,IAChDN,EAAO,EACPC,EAAO,EAEX,CACA1B,EAAgB,CACd,EAAGyB,EACH,EAAGC,EACH,MAAOT,CACb,EAAOnB,CAAM,CACX,EACA,MAAO,CACL,UAAWpE,EACX,eAAgBmE,EAChB,gBAAiBG,EACjB,mBAAoBM,CACxB,CACA,CC/GA,SAAS0B,GAAS9M,EAAK+M,EAAOxH,EAAOqH,EAAa,CAChD,IAAII,EAAgBD,EAAQxH,EACxB0H,GAAe1H,EAAQqH,GAAe,EAC1C,GAAIrH,EAAQqH,EAAa,CACvB,GAAIG,EAAQ,EACV,OAAO9D,GAAgB,CAAA,EAAIjJ,EAAKiN,CAAW,EAE7C,GAAIF,EAAQ,GAAKC,EAAgBJ,EAC/B,OAAO3D,GAAgB,CAAA,EAAIjJ,EAAK,CAACiN,CAAW,CAEhD,SAAWF,EAAQ,GAAKC,EAAgBJ,EACtC,OAAO3D,GAAgB,CAAA,EAAIjJ,EAAK+M,EAAQ,EAAIE,EAAc,CAACA,CAAW,EAExE,MAAO,CAAA,CACT,CAce,SAASC,GAA4B3H,EAAOC,EAAQyC,EAAMkF,EAAK,CAC5E,IAAIR,EAAiBrH,GAAa,EAChCsH,EAAcD,EAAe,MAC7BE,EAAeF,EAAe,OAC5BS,EAAS,KACb,OAAI7H,GAASqH,GAAepH,GAAUqH,EACpCO,EAAS,CACP,EAAG,EACH,EAAG,CACT,GACa7H,EAAQqH,GAAepH,EAASqH,KACzCO,EAAStD,EAAcA,EAAc,CAAA,EAAIgD,GAAS,IAAK7E,EAAM1C,EAAOqH,CAAW,CAAC,EAAGE,GAAS,IAAKK,EAAK3H,EAAQqH,CAAY,CAAC,GAEtHO,CACT,CC5CO,IAAIC,GAAmB,EAEnBC,GAAwB,ECIpB,SAASC,GAActD,EAAQuD,EAASxH,EAASyH,EAAWjH,EAAWsE,EAAiBM,EAAoB,CACzH,IAAIsC,EAASlH,EAAU,OACrBE,EAAQF,EAAU,MAClBmH,EAAInH,EAAU,EACdoH,EAAIpH,EAAU,EACZ8D,EAAYC,EAAAA,SAAS,EAAK,EAC5BC,EAAaC,EAAeH,EAAW,CAAC,EACxCuD,EAAWrD,EAAW,CAAC,EACvBsD,EAAYtD,EAAW,CAAC,EACtBuD,EAAoB3D,EAAAA,OAAO,CAC7B,MAAO,EACP,MAAO,EACP,WAAY,EACZ,WAAY,CAChB,CAAG,EACG4D,EAAc,SAAqBC,EAAO,CAExC,CAACT,GAAWS,EAAM,SAAW,IACjCA,EAAM,eAAc,EACpBA,EAAM,gBAAe,EACrBF,EAAkB,QAAU,CAC1B,MAAOE,EAAM,MAAQN,EACrB,MAAOM,EAAM,MAAQL,EACrB,WAAYD,EACZ,WAAYC,CAClB,EACIE,EAAU,EAAI,EAChB,EACII,EAAc,SAAqBD,EAAO,CACxCjI,GAAW6H,GACb/C,EAAgB,CACd,EAAGmD,EAAM,MAAQF,EAAkB,QAAQ,MAC3C,EAAGE,EAAM,MAAQF,EAAkB,QAAQ,KACnD,EAAS,MAAM,CAEb,EACII,EAAY,UAAqB,CACnC,GAAInI,GAAW6H,EAAU,CACvBC,EAAU,EAAK,EAGf,IAAIM,EAAwBL,EAAkB,QAC5CM,EAAaD,EAAsB,WACnCE,EAAaF,EAAsB,WACjCG,EAAqBZ,IAAMU,GAAcT,IAAMU,EACnD,GAAI,CAACC,EAAoB,OACzB,IAAIhJ,EAAQ0E,EAAO,QAAQ,YAAcvD,EACrClB,EAASyE,EAAO,QAAQ,aAAevD,EAEvC8H,EAAwBvE,EAAO,QAAQ,sBAAqB,EAC9DhC,EAAOuG,EAAsB,KAC7BrB,EAAMqB,EAAsB,IAC1BC,EAAWf,EAAS,MAAQ,EAC5BgB,EAAWxB,GAA4BuB,EAAWjJ,EAASD,EAAOkJ,EAAWlJ,EAAQC,EAAQyC,EAAMkF,CAAG,EACtGuB,GACF5D,EAAgBhB,EAAc,CAAA,EAAI4E,CAAQ,EAAG,aAAa,CAE9D,CACF,EACIC,EAAU,SAAiBV,EAAO,CACpC,GAAI,GAACjI,GAAWiI,EAAM,QAAU,GAEhC,KAAIW,EAAa,KAAK,IAAIX,EAAM,OAAS,GAAG,EAExCY,EAAmB,KAAK,IAAID,EAAYtB,EAAqB,EAE7DjC,EAAQgC,GAAmBwB,EAAmBpB,EAC9CQ,EAAM,OAAS,IACjB5C,EAAQgC,GAAmBhC,GAE7BD,EAAmBC,EAAO,QAAS4C,EAAM,QAASA,EAAM,OAAO,EACjE,EACAa,OAAAA,EAAAA,UAAU,UAAY,CACpB,IAAIC,EACAC,EACAC,EACAC,EACJ,GAAI1B,EAAS,CACXyB,EAAoBE,GAAiB,OAAQ,UAAWhB,EAAW,EAAK,EACxEe,EAAsBC,GAAiB,OAAQ,YAAajB,EAAa,EAAK,EAC9E,GAAI,CAGE,OAAO,MAAQ,OAAO,OACxBa,EAAuBI,GAAiB,OAAO,IAAK,UAAWhB,EAAW,EAAK,EAC/Ea,EAAyBG,GAAiB,OAAO,IAAK,YAAajB,EAAa,EAAK,EAEzF,MAAgB,CAGhB,CACF,CACA,OAAO,UAAY,CACjB,IAAIkB,EAAoBC,EAAsBC,EAAuBC,GACpEH,EAAqBH,KAAuB,MAAQG,IAAuB,QAAUA,EAAmB,OAAM,GAC9GC,EAAuBH,KAAyB,MAAQG,IAAyB,QAAUA,EAAqB,OAAM,GAEtHC,EAAwBP,KAA0B,MAAQO,IAA0B,QAAUA,EAAsB,OAAM,GAE1HC,EAAwBP,KAA4B,MAAQO,IAA0B,QAAUA,EAAsB,OAAM,CAC/H,CACF,EAAG,CAACvJ,EAAS6H,EAAUF,EAAGC,EAAGF,EAAQF,CAAO,CAAC,EACtC,CACL,SAAUK,EACV,YAAaG,EACb,YAAaE,EACb,UAAWC,EACX,QAASQ,CACb,CACA,CCpHO,SAASa,GAAaC,EAAK,CAChC,OAAO,IAAI,QAAQ,SAAUC,EAAS,CACpC,GAAI,CAACD,EAAK,CACRC,EAAQ,EAAK,EACb,MACF,CACA,IAAIC,EAAM,SAAS,cAAc,KAAK,EACtCA,EAAI,QAAU,UAAY,CACxB,OAAOD,EAAQ,EAAK,CACtB,EACAC,EAAI,OAAS,UAAY,CACvB,OAAOD,EAAQ,EAAI,CACrB,EACAC,EAAI,IAAMF,CACZ,CAAC,CACH,CCZe,SAASG,GAAU/G,EAAM,CACtC,IAAI4G,EAAM5G,EAAK,IACbgH,EAAsBhH,EAAK,oBAC3BiH,EAAWjH,EAAK,SACdyB,EAAYC,EAAAA,SAASsF,EAAsB,UAAY,QAAQ,EACjErF,EAAaC,EAAeH,EAAW,CAAC,EACxCyF,EAASvF,EAAW,CAAC,EACrBwF,EAAYxF,EAAW,CAAC,EACtByF,EAAW7F,EAAAA,OAAO,EAAK,EACvB8F,EAAUH,IAAW,QAGzBjB,EAAAA,UAAU,UAAY,CACpB,IAAIqB,EAAe,GACnB,OAAAX,GAAaC,CAAG,EAAE,KAAK,SAAUW,EAAS,CAGpC,CAACA,GAAWD,GACdH,EAAU,OAAO,CAErB,CAAC,EACM,UAAY,CACjBG,EAAe,EACjB,CACF,EAAG,CAACV,CAAG,CAAC,EACRX,EAAAA,UAAU,UAAY,CAChBe,GAAuB,CAACI,EAAS,QACnCD,EAAU,SAAS,EACVE,GACTF,EAAU,QAAQ,CAEtB,EAAG,CAACP,CAAG,CAAC,EACR,IAAIY,EAAS,UAAkB,CAC7BL,EAAU,QAAQ,CACpB,EACIM,EAAY,SAAmBX,EAAK,CACtCM,EAAS,QAAU,GACfF,IAAW,WAAaJ,IAAQ,MAAQA,IAAQ,QAAUA,EAAI,WAAaA,EAAI,cAAgBA,EAAI,iBACrGM,EAAS,QAAU,GACnBI,EAAM,EAEV,EACIE,EAAeL,GAAWJ,EAAW,CACvC,IAAKA,CACT,EAAM,CACF,OAAQO,EACR,IAAKZ,CACT,EACE,MAAO,CAACa,EAAWC,EAAcR,CAAM,CACzC,CC/CA,SAASS,GAAYC,EAAGC,EAAG,CACzB,IAAI/C,EAAI8C,EAAE,EAAIC,EAAE,EACZ9C,EAAI6C,EAAE,EAAIC,EAAE,EAChB,OAAO,KAAK,MAAM/C,EAAGC,CAAC,CACxB,CACA,SAAS+C,GAAUC,EAAWC,EAAWC,EAAWC,EAAW,CAE7D,IAAIC,EAAYR,GAAYI,EAAWE,CAAS,EAC5CG,EAAYT,GAAYK,EAAWE,CAAS,EAGhD,GAAIC,IAAc,GAAKC,IAAc,EACnC,MAAO,CAACL,EAAU,EAAGA,EAAU,CAAC,EAIlC,IAAIvF,EAAQ2F,GAAaA,EAAYC,GAGjCtD,EAAIiD,EAAU,EAAIvF,GAASwF,EAAU,EAAID,EAAU,GACnDhD,EAAIgD,EAAU,EAAIvF,GAASwF,EAAU,EAAID,EAAU,GACvD,MAAO,CAACjD,EAAGC,CAAC,CACd,CACe,SAASsD,GAAcjH,EAAQuD,EAASxH,EAASW,EAAUH,EAAWsE,EAAiBM,EAAoB,CACxH,IAAIsC,EAASlH,EAAU,OACrBE,EAAQF,EAAU,MAClBmH,EAAInH,EAAU,EACdoH,EAAIpH,EAAU,EACZ8D,EAAYC,EAAAA,SAAS,EAAK,EAC5BC,EAAaC,EAAeH,EAAW,CAAC,EACxC6G,EAAa3G,EAAW,CAAC,EACzB4G,EAAgB5G,EAAW,CAAC,EAC1B6G,EAAiBjH,EAAAA,OAAO,CAC1B,OAAQ,CACN,EAAG,EACH,EAAG,CACT,EACI,OAAQ,CACN,EAAG,EACH,EAAG,CACT,EACI,UAAW,MACf,CAAG,EACGkH,EAAuB,SAA8BC,EAAQ,CAC/DF,EAAe,QAAUvH,EAAcA,EAAc,CAAA,EAAIuH,EAAe,OAAO,EAAGE,CAAM,CAC1F,EACIC,EAAe,SAAsBvD,EAAO,CAC9C,GAAKT,EACL,CAAAS,EAAM,gBAAe,EACrBmD,EAAc,EAAI,EAClB,IAAIK,EAAiBxD,EAAM,QACzByD,EAAUD,IAAmB,OAAS,CAAA,EAAKA,EACzCC,EAAQ,OAAS,EAEnBJ,EAAqB,CACnB,OAAQ,CACN,EAAGI,EAAQ,CAAC,EAAE,QACd,EAAGA,EAAQ,CAAC,EAAE,OACxB,EACQ,OAAQ,CACN,EAAGA,EAAQ,CAAC,EAAE,QACd,EAAGA,EAAQ,CAAC,EAAE,OACxB,EACQ,UAAW,WACnB,CAAO,EAGDJ,EAAqB,CACnB,OAAQ,CACN,EAAGI,EAAQ,CAAC,EAAE,QAAU/D,EACxB,EAAG+D,EAAQ,CAAC,EAAE,QAAU9D,CAClC,EACQ,UAAW,MACnB,CAAO,EAEL,EACI+D,EAAc,SAAqB1D,EAAO,CAC5C,IAAI2D,EAAkB3D,EAAM,QAC1ByD,EAAUE,IAAoB,OAAS,CAAA,EAAKA,EAC1CC,EAAwBR,EAAe,QACzCS,EAASD,EAAsB,OAC/BE,EAASF,EAAsB,OAC/BG,EAAYH,EAAsB,UACpC,GAAIH,EAAQ,OAAS,GAAKM,IAAc,YAAa,CAEnD,IAAIlB,EAAY,CACd,EAAGY,EAAQ,CAAC,EAAE,QACd,EAAGA,EAAQ,CAAC,EAAE,OACtB,EACUX,EAAY,CACd,EAAGW,EAAQ,CAAC,EAAE,QACd,EAAGA,EAAQ,CAAC,EAAE,OACtB,EACUO,EAAatB,GAAUmB,EAAQC,EAAQjB,EAAWC,CAAS,EAC7DmB,EAAczH,EAAewH,EAAY,CAAC,EAC1C3G,EAAU4G,EAAY,CAAC,EACvB3G,EAAU2G,EAAY,CAAC,EACrB7G,EAAQmF,GAAYM,EAAWC,CAAS,EAAIP,GAAYsB,EAAQC,CAAM,EAC1E3G,EAAmBC,EAAO,YAAaC,EAASC,EAAS,EAAI,EAC7D+F,EAAqB,CACnB,OAAQR,EACR,OAAQC,EACR,UAAW,WACnB,CAAO,CACH,MAAWiB,IAAc,SAEvBlH,EAAgB,CACd,EAAG4G,EAAQ,CAAC,EAAE,QAAUI,EAAO,EAC/B,EAAGJ,EAAQ,CAAC,EAAE,QAAUI,EAAO,CACvC,EAAS,MAAM,EACTR,EAAqB,CACnB,UAAW,MACnB,CAAO,EAEL,EACIa,EAAa,UAAsB,CACrC,GAAKnM,EAOL,IANImL,GACFC,EAAc,EAAK,EAErBE,EAAqB,CACnB,UAAW,MACjB,CAAK,EACG3K,EAAWD,EAEb,OAAOoE,EAAgB,CACrB,EAAG,EACH,EAAG,EACH,MAAOnE,CACf,EAAS,WAAW,EAEhB,IAAIpB,EAAQ0E,EAAO,QAAQ,YAAcvD,EACrClB,EAASyE,EAAO,QAAQ,aAAevD,EAEvC8H,EAAwBvE,EAAO,QAAQ,sBAAqB,EAC9DhC,EAAOuG,EAAsB,KAC7BrB,EAAMqB,EAAsB,IAC1BC,EAAWf,EAAS,MAAQ,EAC5BgB,EAAWxB,GAA4BuB,EAAWjJ,EAASD,EAAOkJ,EAAWlJ,EAAQC,EAAQyC,EAAMkF,CAAG,EACtGuB,GACF5D,EAAgBhB,EAAc,CAAA,EAAI4E,CAAQ,EAAG,aAAa,EAE9D,EACAI,OAAAA,EAAAA,UAAU,UAAY,CACpB,IAAIsD,EACJ,OAAIpM,GAAWwH,IACb4E,EAAsBjD,GAAiB,OAAQ,YAAa,SAAU5P,EAAG,CACvE,OAAOA,EAAE,eAAc,CACzB,EAAG,CACD,QAAS,EACjB,CAAO,GAEI,UAAY,CACjB,IAAI8S,GACHA,EAAuBD,KAAyB,MAAQC,IAAyB,QAAUA,EAAqB,OAAM,CACzH,CACF,EAAG,CAACrM,EAASwH,CAAO,CAAC,EACd,CACL,WAAY2D,EACZ,aAAcK,EACd,YAAaG,EACb,WAAYQ,CAChB,CACA,CCnKA,IAAIG,GAAY,CAAC,WAAY,MAAO,QAAQ,EAC1CC,GAAa,CAAC,YAAa,MAAO,MAAO,YAAa,WAAY,UAAW,UAAW,UAAW,QAAS,gBAAiB,YAAa,eAAgB,UAAW,QAAS,cAAe,YAAa,WAAY,WAAY,iBAAkB,qBAAsB,cAAe,iBAAkB,gBAAiB,cAAe,UAAU,EAanVC,GAAe,SAAsB3J,EAAM,CAC7C,IAAIiH,EAAWjH,EAAK,SAClB4G,EAAM5G,EAAK,IACXoB,EAASpB,EAAK,OACd7H,EAAQyR,GAAyB5J,EAAMyJ,EAAS,EAC9CI,EAAa9C,GAAU,CACvB,IAAKH,EACL,SAAUK,CAChB,CAAK,EACD6C,EAAclI,EAAeiI,EAAY,CAAC,EAC1CpC,EAAYqC,EAAY,CAAC,EACzBpC,EAAeoC,EAAY,CAAC,EAC9B,OAAoBC,GAAM,cAAc,MAAOC,GAAS,CACtD,IAAK,SAAajJ,EAAO,CACvBK,EAAO,QAAUL,EACjB0G,EAAU1G,CAAK,CACjB,CACJ,EAAK5I,EAAOuP,CAAY,CAAC,CACzB,EACIuC,GAAU,SAAiB9R,EAAO,CACpC,IAAI7B,EAAY6B,EAAM,UACpByO,EAAMzO,EAAM,IACZ+R,EAAM/R,EAAM,IACZgS,EAAYhS,EAAM,UAClB8O,EAAW9O,EAAM,SACjBiS,EAAiBjS,EAAM,QACvBwM,EAAUyF,IAAmB,OAAS,GAAOA,EAC7ClM,EAAU/F,EAAM,QAChBgF,EAAUhF,EAAM,QAChBkS,EAAelS,EAAM,MACrBmF,EAAQ+M,IAAiB,OAAS,CAAA,EAAKA,EACvCpP,EAAgB9C,EAAM,cACtB6F,EAAY7F,EAAM,UAClBkF,EAAelF,EAAM,aACrBmS,EAAiBnS,EAAM,QACvBuF,EAAU4M,IAAmB,OAAS,EAAIA,EAC1CC,EAAepS,EAAM,MACrByF,EAAQ2M,IAAiB,OAAS,EAAIA,EACtChN,EAAcpF,EAAM,YACpBqS,EAAmBrS,EAAM,UACzByM,EAAY4F,IAAqB,OAAS,GAAMA,EAChDC,EAAkBtS,EAAM,SACxB2F,EAAW2M,IAAoB,OAAS,EAAIA,EAC5CC,EAAkBvS,EAAM,SACxB4F,EAAW2M,IAAoB,OAAS,GAAKA,EAC7CC,EAAwBxS,EAAM,eAC9ByS,EAAiBD,IAA0B,OAAS,OAASA,EAC7DE,EAAwB1S,EAAM,mBAC9BiF,EAAqByN,IAA0B,OAAS,OAASA,EACjEC,EAAc3S,EAAM,YACpB4S,EAAiB5S,EAAM,eACvBuG,EAAgBvG,EAAM,cACtBkJ,EAAclJ,EAAM,YACpB6S,EAAW7S,EAAM,SACjBqB,EAAYoQ,GAAyBzR,EAAOuR,EAAU,EACpDtI,EAASG,EAAAA,OAAM,EACf1C,EAAeC,EAAAA,WAAW9B,EAAmB,EAC7CiO,EAA0BpM,GAAgBjB,EAAQ,EAClDsN,GAAyBrM,GAAgBjB,GAAS,EAClD6D,EAAYC,EAAAA,SAAS,EAAI,EAC3BC,EAAaC,EAAeH,EAAW,CAAC,EACxC0J,GAAmBxJ,EAAW,CAAC,EAC/ByJ,GAAsBzJ,EAAW,CAAC,EAChC0J,GAAqBlK,GAAkBC,EAAQtD,EAAUC,EAAUsD,CAAW,EAChF1D,EAAY0N,GAAmB,UAC/BvJ,GAAiBuJ,GAAmB,eACpCpJ,EAAkBoJ,GAAmB,gBACrC9I,GAAqB8I,GAAmB,mBACtCC,GAAiB5G,GAActD,EAAQuD,EAASxH,EAASyH,EAAWjH,EAAWsE,EAAiBM,EAAkB,EACpHyC,GAAWsG,GAAe,SAC1BnG,EAAcmG,GAAe,YAC7BxF,EAAUwF,GAAe,QACvBC,EAAiBlD,GAAcjH,EAAQuD,EAASxH,EAASW,EAAUH,EAAWsE,EAAiBM,EAAkB,EACnH+F,EAAaiD,EAAe,WAC5B5C,EAAe4C,EAAe,aAC9BzC,GAAcyC,EAAe,YAC7BjC,GAAaiC,EAAe,WAC1B1G,GAASlH,EAAU,OACrBE,GAAQF,EAAU,MAChB6N,GAAgBrL,EAAWC,GAAgB,GAAI,GAAG,OAAO9J,EAAW,SAAS,EAAG0O,EAAQ,CAAC,EAC7FiB,EAAAA,UAAU,UAAY,CACfkF,IACHC,GAAoB,EAAI,CAE5B,EAAG,CAACD,EAAgB,CAAC,EACrB,IAAIM,GAAe,UAAwB,CACzC3J,GAAe,OAAO,CACxB,EACI3D,GAAW,UAAoB,CACjCoE,GAAmBiC,GAAmBI,EAAW,QAAQ,CAC3D,EACIxG,GAAY,UAAqB,CACnCmE,GAAmBiC,IAAoBA,GAAmBI,GAAY,SAAS,CACjF,EACIvG,GAAgB,UAAyB,CAC3C4D,EAAgB,CACd,OAAQ4C,GAAS,EACvB,EAAO,aAAa,CAClB,EACIvG,GAAe,UAAwB,CACzC2D,EAAgB,CACd,OAAQ4C,GAAS,EACvB,EAAO,YAAY,CACjB,EACItG,GAAU,UAAmB,CAC/B0D,EAAgB,CACd,MAAO,CAACtE,EAAU,KACxB,EAAO,OAAO,CACZ,EACIa,GAAU,UAAmB,CAC/ByD,EAAgB,CACd,MAAO,CAACtE,EAAU,KACxB,EAAO,OAAO,CACZ,EACIc,GAAU,UAAmB,CAC/BqD,GAAe,OAAO,CACxB,EACI7D,GAAW,SAAkB4B,GAAQ,CACvC,IAAI6L,GAAWhO,EAAUmC,GACrB,CAAC,OAAO,UAAU6L,EAAQ,GAAKA,GAAW,GAAKA,GAAW9N,EAAQ,IAGtEwN,GAAoB,EAAK,EACzBtJ,GAAejC,GAAS,EAAI,OAAS,MAAM,EACCmL,IAASU,GAAUhO,CAAO,EACxE,EACIgC,GAAY,SAAmB0F,GAAO,CACpC,CAACjI,GAAW,CAAC8N,IACb7F,GAAM,UAAYzF,GAAQ,KAC5B1B,GAAS,EAAE,EACFmH,GAAM,UAAYzF,GAAQ,OACnC1B,GAAS,CAAC,EAEd,EACI0N,GAAgB,SAAuBvG,GAAO,CAC5CjI,IACEU,KAAU,EACZoE,EAAgB,CACd,EAAG,EACH,EAAG,EACH,MAAO,CACjB,EAAW,aAAa,EAEhBM,GAAmBiC,GAAmBI,EAAW,cAAeQ,GAAM,QAASA,GAAM,OAAO,EAGlG,EACAa,EAAAA,UAAU,UAAY,CACpB,IAAI2F,GAAoBtF,GAAiB,OAAQ,UAAW5G,GAAW,EAAK,EAC5E,OAAO,UAAY,CACjBkM,GAAkB,OAAM,CAC1B,CACF,EAAG,CAACzO,EAAS8N,EAAyBvN,CAAO,CAAC,EAC9C,IAAImO,GAAuB9B,GAAM,cAAcJ,GAAcK,GAAS,CAAA,EAAIe,EAAgB,CACxF,MAAO5S,EAAM,MACb,OAAQA,EAAM,OACd,OAAQiJ,EACR,UAAW,GAAG,OAAO9K,EAAW,MAAM,EACtC,IAAK4T,EACL,MAAO,CACL,UAAW,eAAe,OAAOvM,EAAU,EAAG,MAAM,EAAE,OAAOA,EAAU,EAAG,iBAAiB,EAAE,OAAOA,EAAU,MAAQ,IAAM,EAAE,EAAE,OAAOE,GAAO,IAAI,EAAE,OAAOF,EAAU,MAAQ,IAAM,EAAE,EAAE,OAAOE,GAAO,cAAc,EAAE,OAAOgH,GAAQ,MAAM,EAC1O,oBAAqB,CAACsG,IAAoB7C,IAAe,IAC/D,EACI,SAAUrB,EACV,IAAKL,EACL,QAASd,EACT,YAAaX,EACb,cAAewG,GACf,aAAchD,EACd,YAAaG,GACb,WAAYQ,GACZ,cAAeA,EACnB,CAAG,CAAC,EACE1K,GAAQqC,EAAc,CACxB,IAAK2F,EACL,IAAKsD,CACT,EAAKC,CAAS,EACZ,OAAoBJ,GAAM,cAAcA,GAAM,SAAU,KAAmBA,GAAM,cAAc+B,GAAQ9B,GAAS,CAC9G,eAAgBY,EAChB,mBAAoBxN,EACpB,SAAU,GACV,SAAU,GACV,UAAW9G,EACX,QAAS4H,EACT,QAASf,EACT,WAAY,CACV,QAASqO,EACf,EACI,cAAevQ,EACf,aAAcoC,CAClB,EAAK7D,EAAW,CACZ,WAAYiS,EAChB,CAAG,EAAgB1B,GAAM,cAAc,MAAO,CAC1C,UAAW,GAAG,OAAOzT,EAAW,cAAc,CAClD,EAAKwU,EAAcA,EAAYe,GAAS5K,EAAc,CAClD,UAAWtD,EACX,MAAOiB,EACX,EAAKC,EAAe,CAChB,QAASnB,CACb,EAAM,CAAA,CAAE,CAAC,EAAImO,EAAO,CAAC,EAAgB9B,GAAM,cAAc7M,GAAY,CACjE,QAASC,EACT,UAAWQ,EACX,mBAAoBP,EACpB,UAAWY,EACX,aAAcX,EACd,UAAW/G,EACX,cAAe2E,EACf,MAAOqC,EACP,YAAaC,EACb,WAAY0N,EACZ,aAAcC,GACd,QAASxN,EACT,MAAOE,EACP,MAAOC,GACP,SAAUC,EACV,SAAUC,EACV,cAAeW,EACf,SAAUT,GACV,SAAUE,GACV,UAAWC,GACX,cAAeC,GACf,aAAcC,GACd,QAASC,GACT,QAASC,GACT,QAASN,EACT,QAASO,GACT,OAAQjF,EAAU,SAAW,OAAYA,EAAU,OAAS,EAAI,OAChE,MAAOoF,EACX,CAAG,CAAC,CACJ,ECxPWmN,GAAe,CAAC,cAAe,WAAY,YAAa,UAAW,iBAAkB,QAAS,SAAU,SAAU,KAAK,ECSnH,SAASC,GAAgBpT,EAAO,CAE7C,IAAIqT,EAAkBC,EAAAA,SAAe,EAAE,EACrCC,EAAmBvK,EAAeqK,EAAiB,CAAC,EACpDG,EAASD,EAAiB,CAAC,EAC3BE,EAAYF,EAAiB,CAAC,EAC5BG,EAAgBvM,EAAAA,YAAkB,SAAUwM,EAAIC,EAAM,CACxD,OAAAH,EAAU,SAAUI,EAAM,CACxB,OAAOxL,EAAcA,EAAc,CAAA,EAAIwL,CAAI,EAAG,GAAIrM,GAAgB,CAAA,EAAImM,EAAIC,CAAI,CAAC,CACjF,CAAC,EACM,UAAY,CACjBH,EAAU,SAAUI,EAAM,CACxB,IAAIC,EAAYzL,EAAc,CAAA,EAAIwL,CAAI,EACtC,cAAOC,EAAUH,CAAE,EACZG,CACT,CAAC,CACH,CACF,EAAG,CAAA,CAAE,EAGDhR,EAAciR,EAAAA,QAAc,UAAY,CAE1C,OAAI/T,EACKA,EAAM,IAAI,SAAUvB,EAAM,CAC/B,GAAI,OAAOA,GAAS,SAClB,MAAO,CACL,KAAM,CACJ,IAAKA,CACnB,CACA,EAEQ,IAAImV,EAAO,CAAA,EACX,cAAO,KAAKnV,CAAI,EAAE,QAAQ,SAAUF,EAAK,CACnC,CAAC,KAAK,EAAE,OAAOyV,GAAmBb,EAAY,CAAC,EAAE,SAAS5U,CAAG,IAC/DqV,EAAKrV,CAAG,EAAIE,EAAKF,CAAG,EAExB,CAAC,EACM,CACL,KAAMqV,CAChB,CACM,CAAC,EAII,OAAO,KAAKJ,CAAM,EAAE,OAAO,SAAUS,EAAON,EAAI,CACrD,IAAIO,EAAaV,EAAOG,CAAE,EACxBQ,EAAaD,EAAW,WACxBN,EAAOM,EAAW,KACpB,OAAIC,GACFF,EAAM,KAAK,CACT,KAAML,EACN,GAAID,CACd,CAAS,EAEIM,CACT,EAAG,CAAA,CAAE,CACP,EAAG,CAACjU,EAAOwT,CAAM,CAAC,EAClB,MAAO,CAAC1Q,EAAa4Q,EAAe,CAAC,CAAC1T,CAAK,CAC7C,CC/DA,IAAI6Q,GAAY,CAAC,UAAW,kBAAmB,eAAgB,UAAW,UAAW,WAAY,WAAY,cAAe,YAAa,WAAY,cAAe,gBAAiB,aAAa,EAChMC,GAAa,CAAC,KAAK,EAOjBsD,GAAQ,SAAehN,EAAM,CAC/B,IAAIiN,EACAC,EAAwBlN,EAAK,iBAC/BmN,EAAmBD,IAA0B,OAAS,mBAAqBA,EAC3EhX,EAAW8J,EAAK,SAChBoN,EAAapN,EAAK,MAClB1C,EAAQ8P,IAAe,OAAS,CAAA,EAAKA,EACrCxU,EAAQoH,EAAK,MACbqN,EAAUrN,EAAK,QACfiH,EAAWjH,EAAK,SACde,EAAQuM,GAAQD,CAAO,IAAM,SAAWA,EAAU,CAAA,EACpDE,EAAiBxM,EAAM,QACvByM,EAAkBzM,EAAM,gBACxB1D,EAAe0D,EAAM,aACrB0M,EAAe1M,EAAM,QACrB4D,EAAU5D,EAAM,QAChBjD,EAAWiD,EAAM,SACjBhD,EAAWgD,EAAM,SACjBxD,EAAcwD,EAAM,YACpB/C,EAAY+C,EAAM,UAClBiK,EAAWjK,EAAM,SACjBM,EAAcN,EAAM,YACpBrC,EAAgBqC,EAAM,cACtB+J,EAAc/J,EAAM,YACpB2M,EAAc9D,GAAyB7I,EAAO0I,EAAS,EAGrDkE,EAAmB3B,GAAgBpT,CAAK,EAC1CgV,EAAoBhM,EAAe+L,EAAkB,CAAC,EACtDjS,EAAckS,EAAkB,CAAC,EACjCC,EAAWD,EAAkB,CAAC,EAC9BE,EAAYF,EAAkB,CAAC,EAI7BG,EAAkBC,GAAe,EAAG,CACpC,MAAOP,CACb,CAAK,EACDQ,EAAmBrM,EAAemM,EAAiB,CAAC,EACpDrQ,EAAUuQ,EAAiB,CAAC,EAC5BC,EAAaD,EAAiB,CAAC,EAC7BxM,EAAYC,EAAAA,SAAS,EAAK,EAC5BC,EAAaC,EAAeH,EAAW,CAAC,EACxC0M,EAAgBxM,EAAW,CAAC,EAC5ByM,EAAmBzM,EAAW,CAAC,EAG7B0M,IAAUpB,EAAuBvR,EAAYgC,CAAO,KAAO,MAAQuP,IAAyB,OAAS,OAASA,EAAqB,OAAS,CAAA,EAC9IrG,GAAMyH,EAAM,IACZtD,EAAiBnB,GAAyByE,EAAO3E,EAAU,EAEzD4E,EAAmBN,GAAe,CAAC,CAACT,EAAgB,CACpD,MAAOA,EACP,SAAU,SAAkBgB,EAAKC,EAAS,CACkBhB,IAAgBe,EAAKC,EAAS9Q,CAAO,CACjG,CACN,CAAK,EACD+Q,GAAmB7M,EAAe0M,EAAkB,CAAC,EACrDI,GAAgBD,GAAiB,CAAC,EAClCE,GAAiBF,GAAiB,CAAC,EAGjCG,EAAalN,EAAAA,SAAS,IAAI,EAC5BmN,GAAajN,EAAegN,EAAY,CAAC,EACzCE,EAAgBD,GAAW,CAAC,EAC5BE,GAAmBF,GAAW,CAAC,EAC7BG,GAAqBjP,EAAAA,YAAkB,SAAUwM,EAAI0C,EAAUC,EAAQC,GAAQ,CACjF,IAAIrW,GAAQgV,EAAYpS,EAAY,UAAU,SAAUrE,GAAM,CAC5D,OAAOA,GAAK,KAAK,MAAQ4X,CAC3B,CAAC,EAAIvT,EAAY,UAAU,SAAUrE,GAAM,CACzC,OAAOA,GAAK,KAAOkV,CACrB,CAAC,EACD2B,EAAWpV,GAAQ,EAAI,EAAIA,EAAK,EAChC6V,GAAe,EAAI,EACnBI,GAAiB,CACf,EAAGG,EACH,EAAGC,EACT,CAAK,EACDf,EAAiB,EAAI,CACvB,EAAG,CAAC1S,EAAaoS,CAAS,CAAC,EAG3BrO,EAAAA,UAAgB,UAAY,CACtBiP,GACGP,GACHD,EAAW,CAAC,EAGdE,EAAiB,EAAK,CAE1B,EAAG,CAACM,EAAa,CAAC,EAGlB,IAAIU,GAAmB,SAA0BC,EAAMC,EAAM,CAC3DpB,EAAWmB,CAAI,EAC6BrE,IAASqE,EAAMC,CAAI,CACjE,EACIC,EAAiB,UAA0B,CAC7CZ,GAAe,EAAK,EACpBI,GAAiB,IAAI,CACvB,EAGIS,EAAsB7C,EAAAA,QAAc,UAAY,CAClD,MAAO,CACL,SAAUkB,EACV,UAAWmB,EACjB,CACE,EAAG,CAACnB,EAAUmB,EAAkB,CAAC,EAGjC,OAAoBzY,EAAAA,cAAoByG,GAAoB,SAAU,CACpE,MAAOwS,CACX,EAAKtZ,EAAuBK,EAAAA,cAAoB0T,GAASD,GAAS,CAC9D,cAAe,CAAC0E,GAChB,QAAS/J,EACT,QAAS+J,GACT,UAAWvB,EACX,UAAWnP,EACX,QAASuR,EACT,cAAeT,EACf,eAAgB/D,EAChB,IAAKnE,GACL,SAAUK,EACV,MAAO3J,EACP,SAAUQ,EACV,SAAUC,EACV,aAAcV,EACd,QAASK,EACT,MAAOhC,EAAY,OACnB,YAAa6B,EACb,YAAa8D,EACb,cAAe3C,EACf,YAAaoM,EACb,SAAUsE,EACd,EAAK1B,CAAW,CAAC,CAAC,CAClB,ECjJI+B,GAAM,EACK,SAASC,GAAiB3C,EAAYP,EAAM,CACzD,IAAIP,EAAkBC,EAAAA,SAAe,UAAY,CAC7C,OAAAuD,IAAO,EACA,OAAOA,EAAG,CACnB,CAAC,EACDtD,EAAmBvK,EAAeqK,EAAiB,CAAC,EACpDM,EAAKJ,EAAiB,CAAC,EACrBtN,EAAezI,EAAAA,WAAiB4G,EAAmB,EACnD2S,EAAe,CACjB,KAAMnD,EACN,WAAYO,CAChB,EAKEtN,OAAAA,EAAAA,UAAgB,UAAY,CAC1B,GAAIZ,EACF,OAAOA,EAAa,SAAS0N,EAAIoD,CAAY,CAEjD,EAAG,CAAA,CAAE,EACLlQ,EAAAA,UAAgB,UAAY,CACtBZ,GACFA,EAAa,SAAS0N,EAAIoD,CAAY,CAE1C,EAAG,CAAC5C,EAAYP,CAAI,CAAC,EACdD,CACT,CCzBA,IAAI9C,GAAY,CAAC,MAAO,MAAO,iBAAkB,YAAa,mBAAoB,cAAe,WAAY,QAAS,SAAU,QAAS,UAAW,YAAa,UAAW,UAAW,mBAAoB,eAAgB,eAAe,EACxOC,GAAa,CAAC,MAAO,UAAW,kBAAmB,eAAgB,OAAQ,gBAAiB,UAAW,QAAS,YAAa,WAAY,WAAY,cAAe,eAAe,EAYjLkG,GAAgB,SAAuBzX,EAAO,CAChD,IAAI0X,EAAS1X,EAAM,IACjB+R,EAAM/R,EAAM,IACZ2X,EAAwB3X,EAAM,eAC9B4X,EAAmB5X,EAAM,UACzB7B,EAAYyZ,IAAqB,OAAS,WAAaA,EACvDC,EAAwB7X,EAAM,iBAC9BgV,EAAmB6C,IAA0B,OAAS,GAAG,OAAO1Z,EAAW,UAAU,EAAI0Z,EACzFC,EAAc9X,EAAM,YACpB8O,EAAW9O,EAAM,SACjBuE,EAAQvE,EAAM,MACdwE,EAASxE,EAAM,OACf6C,EAAQ7C,EAAM,MACd+X,EAAiB/X,EAAM,QACvBkV,EAAU6C,IAAmB,OAAS,GAAOA,EAC7C3Y,EAAYY,EAAM,UAClBX,EAAUW,EAAM,QAChBgY,EAAUhY,EAAM,QAChBiY,EAAmBjY,EAAM,iBACzBkY,EAAelY,EAAM,aACrB8C,EAAgB9C,EAAM,cACtBmY,EAAa1G,GAAyBzR,EAAOsR,EAAS,EACpDzC,EAAsBiJ,GAAeA,IAAgB,GACrDjQ,EAAOsN,GAAQD,CAAO,IAAM,SAAWA,EAAU,CAAA,EACnDkD,EAAavQ,EAAK,IAClBwQ,EAAexQ,EAAK,QACpBuN,EAAiBiD,IAAiB,OAAS,OAAYA,EACvDC,EAAuBzQ,EAAK,gBAC5B0Q,EAAyBD,IAAyB,OAASX,EAAwBW,EACnFE,EAAoB3Q,EAAK,aACzB4Q,EAAsBD,IAAsB,OAAS,OAAYA,EACjEE,EAAc7Q,EAAK,KACnB8Q,EAAgB9Q,EAAK,cACrB2E,EAAU3E,EAAK,QACf1C,EAAQ0C,EAAK,MACb4E,EAAY5E,EAAK,UACjBlC,EAAWkC,EAAK,SAChBjC,EAAWiC,EAAK,SAChB8K,EAAc9K,EAAK,YACnBtB,GAAgBsB,EAAK,cACrB0N,EAAc9D,GAAyB5J,EAAM0J,EAAU,EACrD9C,EAAM2J,GAA4DV,EAClE9B,GAAkBC,GAAe,CAAC,CAACT,EAAgB,CACnD,MAAOA,EACP,SAAUmD,CAAA,CACX,EACDzC,GAAmBrM,EAAemM,GAAiB,CAAC,EACpDW,GAAgBT,GAAiB,CAAC,EAClCU,EAAiBV,GAAiB,CAAC,EACjCpE,GAAa9C,GAAU,CACvB,IAAK8I,EACL,oBAAA7I,EACA,SAAAC,CAAA,CACD,EACD6C,EAAclI,EAAeiI,GAAY,CAAC,EAC1CpC,GAAYqC,EAAY,CAAC,EACzBpC,GAAeoC,EAAY,CAAC,EAC5B5C,GAAS4C,EAAY,CAAC,EACpBrI,EAAYC,EAAAA,SAAS,IAAI,EAC3BC,EAAaC,EAAeH,EAAW,CAAC,EACxCqN,EAAgBnN,EAAW,CAAC,EAC5BoN,EAAmBpN,EAAW,CAAC,EAC7B9C,EAAeC,EAAAA,WAAW9B,EAAmB,EAC7C+P,GAAa,CAAC,CAACM,EACfkC,GAAiB,UAA0B,CAC7CZ,EAAe,EAAK,EACpBI,EAAiB,IAAI,CACvB,EACIgC,GAAeC,EAAG1a,EAAW8Z,EAAkBnV,EAAemF,GAAgB,CAAA,EAAI,GAAG,OAAO9J,EAAW,QAAQ,EAAG4Q,KAAW,OAAO,CAAC,EAGrI6D,GAAiBnQ,EAAAA,QAAQ,UAAY,CACvC,IAAIqW,GAAM,CAAA,EACV,OAAAlF,GAAa,QAAQ,SAAUmF,GAAM,CAC/B/Y,EAAM+Y,EAAI,IAAM,SAClBD,GAAIC,EAAI,EAAI/Y,EAAM+Y,EAAI,EAE1B,CAAC,EACMD,EACT,EAAGlF,GAAa,IAAI,SAAUmF,GAAM,CAClC,OAAO/Y,EAAM+Y,EAAI,CACnB,CAAC,CAAC,EAGEvB,GAAe/U,EAAAA,QAAQ,UAAY,CACrC,OAAOqG,EAAcA,EAAc,CAAA,EAAI8J,EAAc,EAAG,CAAA,EAAI,CAC1D,IAAAnE,CAAA,CACD,CACH,EAAG,CAACA,EAAKmE,EAAc,CAAC,EACpBoG,GAAUzB,GAAiB3C,GAAY4C,EAAY,EAGnDyB,GAAY,SAAmB1a,GAAG,CACpC,IAAI2a,GAAazU,GAAUlG,GAAE,MAAM,EACjC0I,GAAOiS,GAAW,KAClB/M,GAAM+M,GAAW,IACfxS,EACFA,EAAa,UAAUsS,GAASvK,EAAKxH,GAAMkF,EAAG,GAE9CyK,EAAiB,CACf,EAAG3P,GACH,EAAGkF,EAAA,CACJ,EACDqK,EAAe,EAAI,GAEqBnX,IAAQd,EAAC,CACrD,EAGA,OAAoBH,EAAAA,cAAoB8C,EAAAA,SAAgB,KAAmB9C,EAAAA,cAAoB,MAAOyT,GAAS,CAAA,EAAIsG,EAAY,CAC7H,UAAWS,GACX,QAAShE,GAAaqE,GAAY5Z,EAClC,MAAOyJ,EAAc,CACnB,MAAAvE,EACA,OAAAC,CAAA,EACC0T,CAAY,CAAA,CAChB,EAAgB9Z,EAAAA,cAAoB,MAAOyT,GAAS,CAAA,EAAIe,GAAgB,CACvE,UAAWiG,EAAG,GAAG,OAAO1a,EAAW,MAAM,EAAG8J,GAAgB,CAAA,EAAI,GAAG,OAAO9J,EAAW,kBAAkB,EAAG2Z,IAAgB,EAAI,EAAG1Y,CAAS,EAC1I,MAAO0J,EAAc,CACnB,OAAAtE,CAAA,EACC3B,CAAK,EACR,IAAKyM,EAAA,EACJC,GAAc,CACf,MAAAhL,EACA,OAAAC,EACA,QAAAwT,CAAA,CACD,CAAC,EAAGjJ,KAAW,WAA0B3Q,EAAAA,cAAoB,MAAO,CACnE,cAAe,OACf,UAAW,GAAG,OAAOD,EAAW,cAAc,CAAA,EAC7C2Z,CAAW,EAAGY,GAAe9D,IAA2BxW,EAAAA,cAAoB,MAAO,CACpF,UAAWya,EAAG,GAAG,OAAO1a,EAAW,OAAO,EAAGwa,CAAa,EAC1D,MAAO,CACL,QAAwD9V,GAAM,UAAa,OAAS,OAAS,MAAA,CAC/F,EACC6V,CAAW,CAAC,EAAG,CAAChS,GAAgBkO,IAA2BxW,EAAAA,cAAoB0T,GAASD,GAAS,CAClG,cAAe,CAAC0E,GAChB,QAASA,GACT,UAAWvB,EACX,QAASoC,GACT,cAAAT,EACA,IAAAlI,EACA,IAAAsD,EACA,UAAW,CACT,MAAAxN,EACA,OAAAC,CAAA,EAEF,SAAAsK,EACA,aAAc2J,EACd,MAAAtT,EACA,QAAAqH,EACA,UAAAC,EACA,SAAA9G,EACA,SAAAC,EACA,cAAA9C,EACA,YAAA6P,EACA,eAAAC,GACA,cAAArM,EAAA,EACCgP,CAAW,CAAC,CAAC,CAClB,EACAkC,GAAc,aAAe0B,GCjL7B,IAAIC,GAAqB,CAAE,KAAQ,CAAE,IAAO,MAAO,MAAS,CAAE,QAAW,gBAAiB,UAAa,OAAO,EAAI,SAAY,CAAC,CAAE,IAAO,OAAQ,MAAS,CAAA,EAAI,SAAY,CAAC,CAAE,IAAO,QAAS,MAAS,CAAA,EAAI,CAAC,EAAI,CAAE,IAAO,OAAQ,MAAS,CAAE,EAAK,yIAAyI,CAAE,EAAI,CAAE,IAAO,OAAQ,MAAS,CAAE,EAAK,mUAAmU,CAAE,CAAE,CAAC,EAAI,KAAQ,cAAe,MAAS,UAAU,ECMjxBA,GAAqB,SAA4BpZ,EAAOqZ,EAAK,CAC/D,uBAAwCC,GAAUzH,GAAS,CAAA,EAAI7R,EAAO,CACpE,IAAAqZ,EACA,KAAME,EAAA,CACP,CAAC,CACJ,EAGIC,GAAuBC,EAAAA,WAAiBL,EAAkB,ECd1DM,GAAsB,CAAE,KAAQ,CAAE,IAAO,MAAO,MAAS,CAAE,QAAW,gBAAiB,UAAa,OAAO,EAAI,SAAY,CAAC,CAAE,IAAO,OAAQ,MAAS,CAAA,EAAI,SAAY,CAAC,CAAE,IAAO,QAAS,MAAS,CAAA,EAAI,CAAC,EAAI,CAAE,IAAO,OAAQ,MAAS,CAAE,EAAK,yVAAyV,CAAE,EAAI,CAAE,IAAO,OAAQ,MAAS,CAAE,EAAK,yIAAyI,CAAE,CAAE,CAAC,EAAI,KAAQ,eAAgB,MAAS,UAAU,ECMzyBA,GAAsB,SAA6B1Z,EAAOqZ,EAAK,CACjE,uBAAwCC,GAAUzH,GAAS,CAAA,EAAI7R,EAAO,CACpE,IAAAqZ,EACA,KAAMM,EAAA,CACP,CAAC,CACJ,EAGIH,GAAuBC,EAAAA,WAAiBC,EAAmB,ECd3DE,GAAe,CAAE,KAAQ,CAAE,IAAO,MAAO,MAAS,CAAE,QAAW,gBAAiB,UAAa,OAAO,EAAI,SAAY,CAAC,CAAE,IAAO,OAAQ,MAAS,CAAE,EAAK,yTAAyT,EAAI,CAAC,EAAI,KAAQ,OAAQ,MAAS,UAAU,ECM3fA,GAAe,SAAsB5Z,EAAOqZ,EAAK,CACnD,uBAAwCC,GAAUzH,GAAS,CAAA,EAAI7R,EAAO,CACpE,IAAAqZ,EACA,KAAMQ,EAAA,CACP,CAAC,CACJ,EAGIL,GAAuBC,EAAAA,WAAiBG,EAAY,ECdpDE,GAAiB,CAAE,KAAQ,CAAE,IAAO,MAAO,MAAS,CAAE,QAAW,gBAAiB,UAAa,OAAO,EAAI,SAAY,CAAC,CAAE,IAAO,OAAQ,MAAS,CAAE,EAAK,4fAA4f,EAAI,CAAC,EAAI,KAAQ,UAAW,MAAS,UAAU,ECMnsBA,GAAiB,SAAwB9Z,EAAOqZ,EAAK,CACvD,uBAAwCC,GAAUzH,GAAS,CAAA,EAAI7R,EAAO,CACpE,IAAAqZ,EACA,KAAMU,EAAA,CACP,CAAC,CACJ,EAGIP,GAAuBC,EAAAA,WAAiBK,EAAc,ECdtDE,GAAkB,CAAE,KAAQ,CAAE,IAAO,MAAO,MAAS,CAAE,QAAW,gBAAiB,UAAa,OAAO,EAAI,SAAY,CAAC,CAAE,IAAO,OAAQ,MAAS,CAAE,EAAK,4ZAA4Z,EAAI,CAAC,EAAI,KAAQ,WAAY,MAAS,UAAU,ECMrmBA,GAAkB,SAAyBha,EAAOqZ,EAAK,CACzD,uBAAwCC,GAAUzH,GAAS,CAAA,EAAI7R,EAAO,CACpE,IAAAqZ,EACA,KAAMY,EAAA,CACP,CAAC,CACJ,EAGIT,GAAuBC,EAAAA,WAAiBO,EAAe,ECTpD,MAAME,GAAc3G,IAAa,CACtC,SAAUA,GAAY,WACtB,MAAO,CACT,GACa4G,GAAoB5Y,GAAS,CACxC,KAAM,CACJ,QAAAE,EACA,mBAAA2Y,EACA,WAAAC,EACA,UAAAC,EACA,UAAAnc,EACA,oBAAAoc,CACJ,EAAMhZ,EACJ,MAAO,CACL,SAAU,WACV,MAAO,EACP,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,MAAOgZ,EACP,WAAY,IAAIC,GAAU,MAAM,EAAE,KAAK,EAAG,EAAE,YAAW,EACvD,OAAQ,UACR,QAAS,EACT,WAAY,WAAWJ,CAAkB,GACzC,CAAC,IAAIjc,CAAS,YAAY,EAAG,OAAO,OAAO,OAAO,OAAO,CAAA,EAAIsc,EAAY,EAAG,CAC1E,QAAS,KAAK7Y,GAAKyY,CAAU,CAAC,GAC9B,CAAC5Y,CAAO,EAAG,CACT,gBAAiB6Y,EACjB,IAAK,CACH,cAAe,UACzB,CACA,CACA,CAAK,CACL,CACA,EACaI,GAA4BnZ,GAAS,CAChD,KAAM,CACJ,WAAAoZ,EACA,YAAAC,EACA,UAAAC,EACA,SAAAC,EACA,OAAAC,EACA,UAAAC,EACA,8BAAAC,EACA,2BAAAC,EACA,mBAAAd,EACA,QAAA3Y,EACA,oBAAA8Y,CACJ,EAAMhZ,EACE4Z,EAAc,IAAIX,GAAUI,CAAW,EAAE,KAAK,EAAG,EACjDQ,EAAmBD,EAAY,MAAK,EAAG,KAAK,EAAG,EACrD,MAAO,CACL,CAAC,GAAGR,CAAU,SAAS,EAAG,CACxB,SAAU,QACV,OAAQG,EACR,KAAM,CACJ,aAAc,GACd,MAAO,KACf,EACM,QAAS,OACT,cAAe,SACf,WAAY,SACZ,MAAOvZ,EAAM,sBACb,UAAW,kBACjB,EACI,CAAC,GAAGoZ,CAAU,WAAW,EAAG,CAC1B,aAAcI,CACpB,EACI,CAAC,GAAGJ,CAAU,QAAQ,EAAG,CACvB,SAAU,QACV,IAAKG,EACL,MAAO,CACL,aAAc,GACd,MAAOA,CACf,EACM,QAAS,OACT,MAAOP,EACP,gBAAiBY,EAAY,YAAW,EACxC,aAAc,MACd,QAASN,EACT,QAAS,EACT,OAAQ,EACR,OAAQ,UACR,WAAY,OAAOT,CAAkB,GACrC,UAAW,CACT,gBAAiBgB,EAAiB,YAAW,CACrD,EACM,CAAC,OAAO3Z,CAAO,EAAE,EAAG,CAClB,SAAUF,EAAM,oBACxB,CACA,EACI,CAAC,GAAGoZ,CAAU,aAAa,EAAG,CAC5B,QAAS,OACT,WAAY,SACZ,QAAS,KAAK/Y,GAAKoZ,CAAS,CAAC,GAC7B,gBAAiBG,EAAY,YAAW,EACxC,aAAc,IACd,cAAe,CACb,kBAAmBN,EACnB,QAASA,EACT,OAAQ,UACR,WAAY,OAAOT,CAAkB,GACrC,WAAY,OACZ,CAAC,SAASO,CAAU,2CAA2ClZ,CAAO,EAAE,EAAG,CACzE,MAAOyZ,CACjB,EACQ,aAAc,CACZ,MAAOD,EACP,OAAQ,aAClB,EACQ,kBAAmB,CACjB,kBAAmB,CAC7B,EACQ,CAAC,OAAOxZ,CAAO,EAAE,EAAG,CAClB,SAAUF,EAAM,oBAC1B,CACA,CACA,CACA,CACA,EACa8Z,GAAwB9Z,GAAS,CAC5C,KAAM,CACJ,YAAAqZ,EACA,QAAAnZ,EACA,8BAAAwZ,EACA,WAAAN,EACA,YAAAW,EACA,mBAAAlB,CACJ,EAAM7Y,EACE4Z,EAAc,IAAIX,GAAUI,CAAW,EAAE,KAAK,EAAG,EACjDQ,EAAmBD,EAAY,MAAK,EAAG,KAAK,EAAG,EACrD,MAAO,CACL,CAAC,GAAGR,CAAU,iBAAiBA,CAAU,eAAe,EAAG,CACzD,SAAU,QACV,gBAAiB,MACjB,OAAQpZ,EAAM,KAAK+Z,CAAW,EAAE,IAAI,CAAC,EAAE,MAAK,EAC5C,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,MAAO/Z,EAAM,uBACb,OAAQA,EAAM,uBACd,UAAWA,EAAM,KAAKA,EAAM,sBAAsB,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,MAAK,EACxE,MAAOA,EAAM,sBACb,WAAY4Z,EAAY,YAAW,EACnC,aAAc,MACd,UAAW,mBACX,OAAQ,UACR,WAAY,OAAOf,CAAkB,GACrC,WAAY,OACZ,UAAW,CACT,WAAYgB,EAAiB,YAAW,CAChD,EACM,aAAc,CACZ,aAAc,CACZ,MAAOH,EACP,WAAY,cACZ,OAAQ,cACR,CAAC,KAAKxZ,CAAO,EAAE,EAAG,CAChB,OAAQ,aACpB,CACA,CACA,EACM,CAAC,KAAKA,CAAO,EAAE,EAAG,CAChB,SAAUF,EAAM,oBACxB,CACA,EACI,CAAC,GAAGoZ,CAAU,cAAc,EAAG,CAC7B,iBAAkBpZ,EAAM,QAC9B,EACI,CAAC,GAAGoZ,CAAU,eAAe,EAAG,CAC9B,eAAgBpZ,EAAM,QAC5B,CACA,CACA,EACaga,GAAuBha,GAAS,CAC3C,KAAM,CACJ,cAAAia,EACA,WAAAb,EACA,mBAAAP,EACA,aAAA5Y,CACJ,EAAMD,EACJ,MAAO,CAAC,CACN,CAAC,GAAGC,CAAY,eAAe,EAAG,CAChC,CAACmZ,CAAU,EAAG,CACZ,OAAQ,OACR,UAAW,SACX,cAAe,MACvB,EACM,CAAC,GAAGA,CAAU,OAAO,EAAG,OAAO,OAAO,OAAO,OAAO,GAAIT,GAAW,CAAE,EAAG,CACtE,SAAU,QAClB,CAAO,EACD,CAAC,GAAGS,CAAU,MAAM,EAAG,CACrB,SAAU,OACV,UAAW,MACX,cAAe,SACf,UAAW,mBACX,OAAQ,OACR,WAAY,aAAaP,CAAkB,IAAIoB,CAAa,MAC5D,WAAY,OACZ,YAAa,OAAO,OAAO,OAAO,OAAO,CAAA,EAAItB,GAAW,CAAE,EAAG,CAC3D,WAAY,aAAaE,CAAkB,IAAIoB,CAAa,MAI5D,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,QAAS,CACP,cAAe,MAC3B,EACU,YAAa,CACX,QAAS,eACT,MAAO,EACP,OAAQ,MACR,gBAAiB,GACjB,QAAS,IACrB,CACA,CAAS,CACT,EACM,CAAC,GAAGb,CAAU,SAAS,EAAG,CACxB,CAAC,GAAGA,CAAU,cAAc,EAAG,CAC7B,OAAQ,WACR,YAAa,CACX,mBAAoB,IAChC,CACA,CACA,CACA,CACA,EAEE,CACE,CAAC,GAAGnZ,CAAY,eAAe,EAAG,CAChC,CAAC,GAAGmZ,CAAU,OAAO,EAAG,CACtB,OAAQpZ,EAAM,WACtB,CACA,CACA,EAEE,CACE,CAAC,GAAGC,CAAY,6BAA6B,EAAG,CAC9C,SAAU,QACV,OAAQD,EAAM,KAAKA,EAAM,WAAW,EAAE,IAAI,CAAC,EAAE,MAAK,CACxD,EACI,IAAK,CAACmZ,GAA0BnZ,CAAK,EAAG8Z,GAAsB9Z,CAAK,CAAC,CACxE,CAAG,CACH,EACMka,GAAgBla,GAAS,CAC7B,KAAM,CACJ,aAAAC,CACJ,EAAMD,EACJ,MAAO,CAEL,CAACC,CAAY,EAAG,CACd,SAAU,WACV,QAAS,eACT,CAAC,GAAGA,CAAY,MAAM,EAAG,CACvB,MAAO,OACP,OAAQ,OACR,cAAe,QACvB,EACM,CAAC,GAAGA,CAAY,kBAAkB,EAAG,CACnC,gBAAiBD,EAAM,yBACvB,gBAAiB,gpBACjB,iBAAkB,YAClB,mBAAoB,gBACpB,eAAgB,KACxB,EACM,CAAC,GAAGC,CAAY,OAAO,EAAG,OAAO,OAAO,CAAA,EAAI2Y,GAAkB5Y,CAAK,CAAC,EACpE,CAAC,GAAGC,CAAY,aAAa,EAAG,CAC9B,QAAS,CACjB,EACM,CAAC,GAAGA,CAAY,cAAc,EAAG,OAAO,OAAO,CAAA,EAAI0Y,GAAW,CAAE,CACtE,CACA,CACA,EACMwB,GAAmBna,GAAS,CAChC,KAAM,CACJ,WAAAoZ,CACJ,EAAMpZ,EACJ,MAAO,CACL,CAAC,GAAGoZ,CAAU,OAAO,EAAGgB,GAAepa,EAAO,MAAM,EACpD,IAAKqa,GAAera,EAAO,EAAI,CACnC,CACA,EAEaO,GAAwBP,IAAU,CAC7C,YAAaA,EAAM,gBAAkB,GACrC,sBAAuB,IAAIiZ,GAAUjZ,EAAM,mBAAmB,EAAE,KAAK,GAAI,EAAE,YAAW,EACtF,2BAA4B,IAAIiZ,GAAUjZ,EAAM,mBAAmB,EAAE,KAAK,GAAI,EAAE,YAAW,EAC3F,8BAA+B,IAAIiZ,GAAUjZ,EAAM,mBAAmB,EAAE,KAAK,GAAI,EAAE,YAAW,EAC9F,qBAAsBA,EAAM,aAAe,GAC7C,GACA+B,GAAetB,GAAc,QAAST,GAAS,CAC7C,MAAMoZ,EAAa,GAAGpZ,EAAM,YAAY,WAClCsa,EAAa3Z,GAAWX,EAAO,CACnC,WAAAoZ,EACA,YAAa,IAAIH,GAAU,MAAM,EAAE,KAAK,GAAI,EAAE,YAAW,EAEzD,uBAAwBjZ,EAAM,eAClC,CAAG,EACD,MAAO,CAACka,GAAcI,CAAU,EAAGN,GAAqBM,CAAU,EAAGC,GAAkB5Z,GAAW2Z,EAAY,CAC5G,aAAclB,CAClB,CAAG,CAAC,EAAGe,GAAiBG,CAAU,CAAC,CACnC,EAAG/Z,EAAqB,ECnTxB,IAAIzD,GAAgC,SAAUC,EAAGC,EAAG,CAClD,IAAIC,EAAI,CAAA,EACR,QAASC,KAAKH,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGG,CAAC,GAAKF,EAAE,QAAQE,CAAC,EAAI,IAAGD,EAAEC,CAAC,EAAIH,EAAEG,CAAC,GAC/F,GAAIH,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WAAY,QAASI,EAAI,EAAGD,EAAI,OAAO,sBAAsBH,CAAC,EAAGI,EAAID,EAAE,OAAQC,IAClIH,EAAE,QAAQE,EAAEC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKJ,EAAGG,EAAEC,CAAC,CAAC,IAAGF,EAAEC,EAAEC,CAAC,CAAC,EAAIJ,EAAEG,EAAEC,CAAC,CAAC,GAElG,OAAOF,CACT,EAiBO,MAAM2G,GAAQ,CACnB,WAAyB/G,EAAAA,cAAoBgb,GAAoB,IAAI,EACrE,YAA0Bhb,EAAAA,cAAoBsb,GAAqB,IAAI,EACvE,OAAqBtb,EAAAA,cAAoB0b,GAAgB,IAAI,EAC7D,QAAsB1b,EAAAA,cAAoB4b,GAAiB,IAAI,EAC/D,MAAoB5b,EAAAA,cAAoB2d,GAAe,IAAI,EAC3D,KAAmB3d,EAAAA,cAAoB4d,GAAc,IAAI,EACzD,MAAoB5d,EAAAA,cAAoB6d,GAAe,IAAI,EAC3D,MAAoB7d,EAAAA,cAAoBwb,GAAc,IAAI,EAC1D,MAAoBxb,EAAAA,cAAoBwb,GAAc,CACpD,OAAQ,EACZ,CAAG,CACH,EACMsC,GAAuB1b,GAAM,CACjC,GAAI,CACA,iBAAkBY,EAClB,QAAA8T,CACN,EAAQ1U,EACJ2X,EAAa9Z,GAAOmC,EAAI,CAAC,mBAAoB,SAAS,CAAC,EACzD,KAAM,CACJ,aAAAxC,EACA,UAAAgF,CACJ,EAAM/E,EAAAA,WAAiBC,EAAa,EAC5BC,EAAYH,EAAa,QAASoD,CAAkB,EACpD4T,EAAmB,GAAG7W,CAAS,WAC/Bge,EAAgBne,EAAY,EAC5Boe,EAAUC,GAAale,CAAS,EAChC,CAACgF,EAAYC,EAAQC,CAAS,EAAIC,GAASnF,EAAWie,CAAO,EAC7D,CAAC5V,CAAM,EAAI8V,GAAU,eAAgB,OAAOpH,GAAY,SAAWA,EAAQ,OAAS,MAAS,EAC7FqH,EAAgB/H,UAAc,IAAM,OAAO,OAAO,OAAO,OAAO,GAAIrP,EAAK,EAAG,CAChF,KAAMnC,IAAc,MAAqB5E,gBAAoB6d,GAAe,IAAI,EAAiB7d,EAAAA,cAAoB4d,GAAc,IAAI,EACvI,MAAOhZ,IAAc,MAAqB5E,EAAAA,cAAoB4d,GAAc,IAAI,EAAiB5d,gBAAoB6d,GAAe,IAAI,CAC5I,CAAG,EAAG,CAACjZ,CAAS,CAAC,EACTwZ,EAAgBhI,EAAAA,QAAc,IAAM,CACxC,IAAIhU,EACJ,GAAI0U,IAAY,GACd,OAAOA,EAET,MAAMuH,EAAW,OAAOvH,GAAY,SAAWA,EAAU,CAAA,EACnDwH,EAAsBjd,EAAW2D,EAAQC,EAAW+Y,GAAU5b,EAAKic,EAAS,iBAAmB,MAAQjc,IAAO,OAASA,EAAK,EAAE,EACpI,OAAO,OAAO,OAAO,OAAO,OAAO,CAAA,EAAIic,CAAQ,EAAG,CAChD,eAAgBE,GAAkBR,EAAe,OAAQM,EAAS,cAAc,EAChF,mBAAoBE,GAAkBR,EAAe,OAAQM,EAAS,kBAAkB,EACxF,cAAeC,EACf,OAAAlW,CACN,CAAK,CACH,EAAG,CAAC0O,EAASiH,EAAe3V,EAAQpD,EAAQC,EAAW+Y,CAAO,CAAC,EAC/D,OAAOjZ,EAAwB/E,EAAAA,cAAoBwe,GAAQ,aAAc,OAAO,OAAO,CACrF,QAASJ,EACT,iBAAkBxH,EAClB,MAAOuH,CACX,EAAKpE,CAAU,CAAC,CAAC,CACjB,EC5EA,IAAI9Z,GAAgC,SAAUC,EAAGC,EAAG,CAClD,IAAIC,EAAI,CAAA,EACR,QAASC,KAAKH,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGG,CAAC,GAAKF,EAAE,QAAQE,CAAC,EAAI,MAAKA,CAAC,EAAIH,EAAEG,CAAC,GAC/F,GAAIH,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WAAY,QAASI,EAAI,EAAGD,EAAI,OAAO,sBAAsBH,CAAC,EAAGI,EAAID,EAAE,OAAQC,IAClIH,EAAE,QAAQE,EAAEC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKJ,EAAGG,EAAEC,CAAC,CAAC,IAAGF,EAAEC,EAAEC,CAAC,CAAC,EAAIJ,EAAEG,EAAEC,CAAC,CAAC,GAElG,OAAOF,CACT,EAaA,MAAMqe,GAAQ7c,GAAS,CACrB,KAAM,CACF,UAAWoB,EACX,QAAA8T,EACA,UAAA9V,EACA,cAAA0D,EACA,MAAAD,EACA,SAAAiM,CAAA,EACE9O,EACJmY,EAAa9Z,GAAO2B,EAAO,CAAC,YAAa,UAAW,YAAa,gBAAiB,QAAS,UAAU,CAAC,EAKlG,CACJ,aAAAhC,EACA,kBAAmB8e,EACnB,UAAWC,EACX,MAAOC,EACP,QAASC,EACT,SAAUC,CAAA,EACRC,GAAmB,OAAO,EACxB,CAACC,CAAW,EAAIC,GAAU,OAAO,EACjClf,EAAYH,EAAa,QAASoD,CAAkB,EACpD+a,EAAgBne,EAAA,EAEhBoe,EAAUC,GAAale,CAAS,EAChC,CAACgF,EAAYC,EAAQC,CAAS,EAAIC,GAASnF,EAAWie,CAAO,EAC7DM,EAAsBjd,EAAWqD,EAAeM,EAAQC,EAAW+Y,CAAO,EAC1EkB,EAAkB7d,EAAWL,EAAWgE,EAAQ2Z,CAAgB,EAChE,CAACvW,CAAM,EAAI8V,GAAU,eAAgB,OAAOpH,GAAY,SAAWA,EAAQ,OAAS,MAAS,EAC7FsH,EAAgBhI,EAAAA,QAAc,IAAM,CACxC,GAAIU,IAAY,GACd,OAAOA,EAET,MAAMuH,EAAW,OAAOvH,GAAY,SAAWA,EAAU,CAAA,EACnD,CACF,aAAAhQ,EACA,UAAAW,EACA,cAAA/C,EACA,eAAAya,EACA,gBAAAC,CAAA,EACEf,EACJgB,EAAmBpf,GAAOoe,EAAU,CAAC,eAAgB,YAAa,gBAAiB,iBAAkB,iBAAiB,CAAC,EACzH,OAAO,OAAO,OAAO,OAAO,OAAO,CACjC,KAAoBre,EAAAA,cAAoB,MAAO,CAC7C,UAAW,GAAGD,CAAS,YAAA,EACTC,gBAAoBsf,GAAa,IAAI,EAA6DN,GAAY,OAAO,EACrI,MAAAjY,EAAA,EACCsY,CAAgB,EAAG,CAEpB,eAAgBD,GAA2ED,EAC3F,cAAe9d,EAAWid,EAAqB5Z,CAAa,EAC5D,aAAcoC,GAAkE4X,EAChF,eAAgBH,GAAkBR,EAAe,OAAQM,EAAS,cAAc,EAChF,mBAAoBE,GAAkBR,EAAe,OAAQM,EAAS,kBAAkB,EACxF,OAAAjW,EACA,UAAWX,GAAyHoX,GAAe,SAAA,CACpJ,CACH,EAAG,CAAC/H,EAASkI,EAA6EH,GAAe,SAAS,CAAC,EAC7G5Y,EAAc,OAAO,OAAO,OAAO,OAAO,CAAA,EAAI2Y,CAAY,EAAGna,CAAK,EAClE8a,EAAiB7O,GAAsDoO,EAC7E,OAAO/Z,EAAwB/E,EAAAA,cAAoBwe,GAAS,OAAO,OAAO,CACxE,UAAAze,EACA,QAASqe,EACT,cAAeE,EACf,UAAWY,EACX,MAAOjZ,EACP,SAAUsZ,CAAA,EACTxF,CAAU,CAAC,CAAC,CACjB,EACA0E,GAAM,aAAe1D,GC5FrB,IAAIyE,GAAe,CAAE,KAAQ,CAAE,IAAO,MAAO,MAAS,CAAE,QAAW,gBAAiB,UAAa,OAAO,EAAI,SAAY,CAAC,CAAE,IAAO,OAAQ,MAAS,CAAE,EAAK,mXAAmX,EAAI,CAAC,EAAI,KAAQ,OAAQ,MAAS,UAAU,ECMrjBA,GAAe,SAAsB5d,EAAOqZ,EAAK,CACnD,uBAAwCC,GAAUzH,GAAS,CAAA,EAAI7R,EAAO,CACpE,IAAAqZ,EACA,KAAMwE,EAAA,CACP,CAAC,CACJ,EAGIrE,GAAuBC,EAAAA,WAAiBmE,EAAY,ECdpDE,GAAe,CAAE,KAAQ,CAAE,IAAO,MAAO,MAAS,CAAE,QAAW,gBAAiB,UAAa,OAAO,EAAI,SAAY,CAAC,CAAE,IAAO,OAAQ,MAAS,CAAE,EAAK,0lBAA0lB,EAAI,CAAC,EAAI,KAAQ,OAAQ,MAAS,UAAU,ECM5xBA,GAAe,SAAsB9d,EAAOqZ,EAAK,CACnD,uBAAwCC,GAAUzH,GAAS,CAAA,EAAI7R,EAAO,CACpE,IAAAqZ,EACA,KAAM0E,EAAA,CACP,CAAC,CACJ,EAGIvE,GAAuBC,EAAAA,WAAiBqE,EAAY,ECTjD,MAAME,GAAc,CAIzB,MAAM,UAAUnf,EAMb,CAED,OADiB,MAAMof,GAAI,UAAUpf,CAAM,GAC3B,KAAK,IACvB,EAKA,MAAM,eAAeA,EAIlB,CAED,OADiB,MAAMof,GAAI,eAAepf,CAAM,GAChC,KAAK,IACvB,EAKA,MAAM,eAAegB,EAAc8D,EAA8B,CAE/D,OADiB,MAAMsa,GAAI,eAAepe,EAAM8D,CAAI,GACpC,IAClB,EAKA,MAAM,WAAWyQ,EAAYvV,EAA0D,CACrF,MAAMof,GAAI,WAAW7J,EAAIvV,CAAM,CACjC,EAKA,MAAM,eAAeqf,EAMlB,CAED,OADiB,MAAMD,GAAI,eAAeC,CAAO,GACjC,KAAK,IACvB,CACF,ECrDO,SAASC,GAAStf,EAMtB,CACD,MAAMuf,EAAcC,GAAA,EACd,CAAE,YAAAC,CAAA,EAAgBC,GAAA,EAElB,CACJ,KAAMC,EACN,UAAAC,EACA,MAAAC,EACA,QAAAC,CAAA,EACEC,GAAS,CACX,SAAUC,GAAW,MAAMhgB,CAAM,EACjC,QAAS,IAAMmf,GAAY,UAAUnf,CAAM,CAAA,CAC5C,EAEKigB,EAAiBC,GAAY,CACjC,WAAY,CAAC,CAAE,GAAA3K,EAAI,KAAAvU,EAAM,KAAA8D,CAAA,IACvBqa,GAAY,WAAW5J,EAAI,CAAE,KAAAvU,EAAM,KAAA8D,EAAM,EAC3C,UAAW,IAAM,CACfya,EAAY,kBAAkB,CAAE,SAAUS,GAAW,MAAA,EAAS,CAChE,EACA,QAAUH,GAAUJ,EAAYI,CAAK,CAAA,CACtC,EAED,MAAO,CACL,MAAOF,GAAW,OAAS,CAAA,EAC3B,YAAaA,GAAW,aAAe,CAAA,EACvC,YAAaA,GAAW,aAAe,GACvC,UAAAC,EACA,MAAAC,EACA,QAAAC,EACA,WAAYG,EAAe,OAC3B,gBAAiBA,EAAe,YAChC,WAAYA,EAAe,SAAA,CAE/B,CA+BO,SAASE,GAAenf,EAA0B8D,EAAe,CACtE,KAAM,CACJ,KAAMsb,EACN,UAAAR,EACA,MAAAC,EACA,QAAAC,CAAA,EACEC,GAAS,CACX,SAAUC,GAAW,cAAchf,EAAO8D,CAAI,EAC9C,QAAS,IAAMqa,GAAY,eAAene,EAAO8D,CAAI,EACrD,QAAS,CAAC,CAAC9D,CAAA,CACZ,EAKD,MAAO,CACL,WAHiBof,EAAc,IAAI,gBAAgBA,CAAW,EAAI,KAIlE,YAAAA,EACA,UAAAR,EACA,MAAAC,EACA,QAAAC,CAAA,CAEJ,CAKO,SAASO,IAAmB,CACjC,MAAMd,EAAcC,GAAA,EACd,CAAE,YAAAC,CAAA,EAAgBC,GAAA,EAElBY,EAAoBJ,GAAY,CACpC,WAAab,GAMDF,GAAY,eAAeE,CAAO,EAC9C,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAUS,GAAW,MAAA,EAAS,CAChE,EACA,QAAUH,GAAUJ,EAAYI,CAAK,CAAA,CACtC,EAED,MAAO,CACL,UAAWS,EAAkB,OAC7B,eAAgBA,EAAkB,YAClC,cAAeA,EAAkB,UACjC,gBAAiBA,EAAkB,IAAA,CAEvC,CCrHO,SAASC,GAAY,CAC1B,YAAAC,EACA,WAAAC,EACA,SAAAC,CACF,EAAqB,CACnB,KAAM,CAAE,EAAA/gB,CAAA,EAAMghB,GAAA,EAERC,EAAkB,CACtB,CACE,MACEC,EAAAA,IAACC,GAAA,CACC,KAAK,OACL,WAAO/B,GAAA,EAAa,EACpB,QAAS,IAAM0B,EAAW,EAAE,EAC5B,MAAO,CAAE,QAAS,CAAA,EAEjB,WAAE,YAAY,CAAA,CAAA,CACjB,EAGJ,GAAID,EACAA,EAAY,MAAM,GAAG,EAAE,IAAI,CAACO,EAASjf,EAAOkf,IAAQ,CAClD,MAAMhgB,EAAOggB,EAAI,MAAM,EAAGlf,EAAQ,CAAC,EAAE,KAAK,GAAG,EAC7C,MAAO,CACL,MACE+e,EAAAA,IAACC,GAAA,CACC,KAAK,OACL,QAAS,IAAML,EAAWzf,CAAI,EAC9B,MAAO,CAAE,QAAS,CAAA,EAEjB,SAAA+f,CAAA,CAAA,CACH,CAGN,CAAC,EACD,CAAA,CAAC,EAGP,OACEE,EAAAA,KAAAC,WAAA,CACE,SAAA,CAAAL,EAAAA,IAAC9c,GAAA,CAAW,MAAO6c,CAAA,CAAiB,EACnCJ,GACCK,EAAAA,IAACC,GAAA,CAAO,KAAMD,EAAAA,IAAC1D,GAAA,EAAa,EAAI,QAASuD,EACtC,SAAA/gB,EAAE,cAAc,CAAA,CACnB,CAAA,EAEJ,CAEJ,CCrDA,KAAM,CAAA,OAAEwhB,IAAWC,GACb,CAAE,OAAAC,IAAWC,GAgBZ,SAASC,GAAY,CAC1B,WAAAC,EACA,eAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,OAAAC,EACA,eAAAC,EACA,UAAAC,EACA,kBAAAC,CACF,EAAqB,CACnB,KAAM,CAAE,EAAApiB,CAAA,EAAMghB,GAAA,EAEd,OACEM,EAAAA,KAACe,GAAA,CAAI,OAAQ,GAAI,MAAM,SACrB,SAAA,CAAAnB,EAAAA,IAACoB,GAAA,CAAI,KAAK,OACR,SAAApB,EAAAA,IAACQ,GAAA,CACC,YAAa1hB,EAAE,yBAAyB,EACxC,WAAU,GACV,aAASuiB,GAAA,EAAe,EACxB,MAAOV,EACP,SAAW9hB,GAAM+hB,EAAe/hB,EAAE,OAAO,KAAK,EAC9C,MAAO,CAAE,MAAO,MAAA,CAAO,CAAA,EAE3B,EACAmhB,EAAAA,IAACoB,GAAA,CACC,SAAAhB,EAAAA,KAACkB,GAAA,CACC,SAAA,CAAAlB,EAAAA,KAACG,GAAA,CACC,MAAOM,EACP,SAAUC,EACV,MAAO,CAAE,MAAO,GAAA,EAEhB,SAAA,CAAAd,MAACM,GAAA,CAAO,MAAM,MAAO,SAAAxhB,EAAE,iBAAiB,EAAE,QACzCwhB,GAAA,CAAO,MAAM,QAAS,SAAAxhB,EAAE,mBAAmB,EAAE,QAC7CwhB,GAAA,CAAO,MAAM,YAAa,SAAAxhB,EAAE,uBAAuB,EAAE,QACrDwhB,GAAA,CAAO,MAAM,WAAY,SAAAxhB,EAAE,sBAAsB,EAAE,QACnDwhB,GAAA,CAAO,MAAM,WAAY,SAAAxhB,EAAE,sBAAsB,EAAE,QACnDwhB,GAAA,CAAO,MAAM,YAAa,SAAAxhB,EAAE,uBAAuB,EAAE,QACrDwhB,GAAA,CAAO,MAAM,YAAa,SAAAxhB,EAAE,uBAAuB,CAAA,CAAE,CAAA,CAAA,CAAA,EAExDshB,EAAAA,KAACG,GAAA,CACC,MAAOQ,EACP,SAAUC,EACV,MAAO,CAAE,MAAO,GAAA,EAEhB,SAAA,CAAAhB,MAACM,GAAA,CAAO,MAAM,OAAQ,SAAAxhB,EAAE,kBAAkB,EAAE,QAC3CwhB,GAAA,CAAO,MAAM,OAAQ,SAAAxhB,EAAE,kBAAkB,EAAE,QAC3CwhB,GAAA,CAAO,MAAM,eAAgB,SAAAxhB,EAAE,0BAA0B,EAAE,QAC3DwhB,GAAA,CAAO,MAAM,OAAQ,SAAAxhB,EAAE,kBAAkB,EAAE,QAC3CwhB,GAAA,CAAO,MAAM,OAAQ,SAAAxhB,EAAE,kBAAkB,CAAA,CAAE,CAAA,CAAA,CAAA,EAE9CkhB,EAAAA,IAACC,GAAA,CACC,KAAMgB,IAAc,YAASM,GAAA,CAAA,CAAsB,QAAMC,GAAA,EAAuB,EAChF,QAAS,IAAMN,EAAkBD,IAAc,MAAQ,OAAS,KAAK,EAEpE,SAAsBniB,MAAR,MAAU,kBAAuB,kBAAN,CAAwB,CAAA,CACpE,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ,CCnEO,SAAS2iB,GAAe,CAC7B,YAAAC,EACA,MAAAC,EACA,OAAApN,EACA,UAAAqN,CACF,EAAwB,CACtB,KAAM,CAAE,EAAA9iB,CAAA,EAAMghB,GAAA,EAEd,OACEM,EAAAA,KAACe,IAAI,OAAQ,GAAI,MAAO,CAAE,aAAc,IACtC,SAAA,CAAAnB,EAAAA,IAACoB,GAAA,CAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvB,eAACS,GAAA,CACC,SAAA7B,EAAAA,IAAC8B,GAAA,CACC,MAAOhjB,EAAE,mBAAmB,EAC5B,MAAO4iB,EACP,aAASK,GAAA,EAAe,EACxB,WAAY,CAAE,MAAO,SAAA,CAAU,CAAA,EAEnC,CAAA,CACF,EACA/B,EAAAA,IAACoB,IAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvB,SAAApB,EAAAA,IAAC6B,GAAA,CACC,SAAA7B,EAAAA,IAAC8B,GAAA,CACC,MAAOhjB,EAAE,aAAa,EACtB,MAAO6iB,EACP,aAASK,GAAA,EAAa,EACtB,WAAY,CAAE,MAAO,SAAA,CAAU,CAAA,EAEnC,CAAA,CACF,EACAhC,EAAAA,IAACoB,IAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvB,SAAApB,EAAAA,IAAC6B,GAAA,CACC,SAAA7B,EAAAA,IAAC8B,GAAA,CACC,MAAOhjB,EAAE,cAAc,EACvB,MAAOyV,EACP,aAAS0N,GAAA,EAAgB,EACzB,WAAY,CAAE,MAAO,SAAA,CAAU,CAAA,EAEnC,CAAA,CACF,EACAjC,EAAAA,IAACoB,IAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvB,SAAApB,EAAAA,IAAC6B,GAAA,CACC,SAAA7B,EAAAA,IAAC8B,GAAA,CACC,MAAOhjB,EAAE,iBAAiB,EAC1B,MAAO8iB,EACP,WAAY,CAAE,MAAO,SAAA,CAAU,CAAA,EAEnC,CAAA,CACF,CAAA,EACF,CAEJ,CCtDA,MAAMM,GAAkB,CAAC,OAAQ,QAAS,OAAQ,OAAQ,QAAS,MAAM,EACnEC,GAAiB,CAAC,OAAQ,MAAO,OAAO,EA4BvC,SAASC,GAAS,CACvB,MAAAT,EACA,YAAAD,EACA,QAAAW,EAAU,GACV,OAAAtB,EACA,UAAAE,EACA,OAAAqB,EACA,UAAA/I,EACA,SAAAgJ,EACA,WAAA3C,CACF,EAAkB,CAChB,KAAM,CAAE,EAAA9gB,CAAA,EAAMghB,GAAA,EAER0C,EAAkBC,GACjBA,EACDA,EAAQ,KAAa,GAAGA,CAAK,KAC7BA,EAAQ,KAAO,KAAa,IAAIA,EAAQ,MAAM,QAAQ,CAAC,CAAC,MACrD,IAAIA,GAAS,KAAO,OAAO,QAAQ,CAAC,CAAC,MAHzB,IAMfC,EAAeC,GACf5B,IAAW4B,EAAe,KACvB1B,IAAc,MAAQjB,MAACuB,GAAA,CAAA,CAAsB,QAAMC,GAAA,EAAuB,EAI7EoB,EAAW7f,EAAAA,QAAQ,IAChB,CAAC,GAAG2e,EAAa,GAAGC,CAAK,EAC/B,CAACD,EAAaC,CAAK,CAAC,EAEjBkB,EAAU,CACd,CACE,MACEzC,EAAAA,KAAC,OAAA,CACC,MAAO,CAAE,OAAQ,UAAW,WAAY,MAAA,EACxC,QAAS,IAAMkC,EAAO,MAAM,EAE3B,SAAA,CAAAxjB,EAAE,YAAY,EAAE,IAAE4jB,EAAY,MAAM,CAAA,CAAA,CAAA,EAGzC,UAAW,OACX,IAAK,OACL,MAAO,IACP,SAAU,CACR,UAAW,EAAA,EAEb,OAAQ,CAACtiB,EAAc0iB,IACrB1C,EAAAA,KAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,MAAO,OAAQ,SAAU,GAC5E,SAAA,CAAAJ,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,WAAY,EAAG,YAAa,CAAA,EACxC,SAAA8C,EAAO,OAAS,YACf9C,MAAC+B,GAAA,CAAe,MAAO,CAAE,MAAO,UAAW,SAAU,GAAG,CAAG,EACzDG,GAAgB,SAASY,EAAO,WAAW,YAAA,GAAiB,EAAE,QAC/Db,GAAA,CAAgB,MAAO,CAAE,MAAO,UAAW,SAAU,GAAG,CAAG,EAE5DjC,EAAAA,IAAC+C,GAAA,CAAiB,MAAO,CAAE,SAAU,GAAG,CAAG,EAE/C,EACA/C,EAAAA,IAACC,GAAA,CACC,KAAK,OACL,QAAS,IAAM,CACT6C,EAAO,OAAS,YAClBlD,EAAWkD,EAAO,IAAI,EAEtBvJ,EAAUuJ,CAAM,CAEpB,EACA,MAAO,CACL,QAAS,EACT,OAAQ,OACR,KAAM,EACN,SAAU,EACV,SAAU,SACV,aAAc,WACd,WAAY,SACZ,UAAW,MAAA,EAEb,MAAO1iB,EAEN,SAAAA,CAAA,CAAA,CACH,CAAA,CACF,CAAA,EAGJ,CACE,MACEggB,EAAAA,KAAC,OAAA,CACC,MAAO,CAAE,OAAQ,UAAW,WAAY,MAAA,EACxC,QAAS,IAAMkC,EAAO,MAAM,EAE3B,SAAA,CAAAxjB,EAAE,YAAY,EAAE,IAAE4jB,EAAY,MAAM,CAAA,CAAA,CAAA,EAGzC,UAAW,OACX,IAAK,OACL,MAAO,IACP,OAAQ,CAACze,EAAc6e,IAAqB,CAC1C,GAAI7e,IAAS,YACX,OAAO+b,EAAAA,IAACgD,GAAA,CAAI,MAAM,OAAO,WAAOjB,GAAA,CAAA,CAAe,EAAK,SAAAjjB,EAAE,qBAAqB,CAAA,CAAE,EAE/E,MAAMmkB,EAAMH,EAAO,WAAW,YAAA,GAAiB,GAC/C,OAAIZ,GAAgB,SAASe,CAAG,EACvBjD,EAAAA,IAACgD,GAAA,CAAI,MAAM,QAAQ,WAAOf,GAAA,CAAA,CAAgB,EAAK,SAAAnjB,EAAE,iBAAiB,CAAA,CAAE,EAEzEqjB,GAAe,SAASc,CAAG,EACtBjD,EAAAA,IAACgD,GAAA,CAAI,MAAM,SAAS,WAAOD,GAAA,CAAA,CAAiB,EAAK,SAAAjkB,EAAE,gBAAgB,CAAA,CAAE,EAEvEkhB,MAACgD,IAAI,KAAMhD,EAAAA,IAACgC,KAAa,EAAK,SAAAljB,EAAE,gBAAgB,CAAA,CAAE,CAC3D,CAAA,EAEF,CACE,MACEshB,EAAAA,KAAC,OAAA,CACC,MAAO,CAAE,OAAQ,UAAW,WAAY,MAAA,EACxC,QAAS,IAAMkC,EAAO,MAAM,EAE3B,SAAA,CAAAxjB,EAAE,YAAY,EAAE,IAAE4jB,EAAY,MAAM,CAAA,CAAA,CAAA,EAGzC,UAAW,OACX,IAAK,OACL,MAAO,IACP,OAASQ,GAAiBV,EAAeU,CAAI,CAAA,EAE/C,CACE,MACE9C,EAAAA,KAAC,OAAA,CACC,MAAO,CAAE,OAAQ,UAAW,WAAY,MAAA,EACxC,QAAS,IAAMkC,EAAO,MAAM,EAE3B,SAAA,CAAAxjB,EAAE,gBAAgB,EAAE,IAAE4jB,EAAY,MAAM,CAAA,CAAA,CAAA,EAG7C,UAAW,WACX,IAAK,WACL,MAAO,IACP,OAASS,GAAiBC,GAAWD,CAAI,CAAA,EAE3C,CACE,MACE/C,EAAAA,KAAC,OAAA,CACC,MAAO,CAAE,OAAQ,UAAW,WAAY,MAAA,EACxC,QAAS,IAAMkC,EAAO,cAAc,EAEnC,SAAA,CAAAxjB,EAAE,oBAAoB,EAAE,IAAE4jB,EAAY,cAAc,CAAA,CAAA,CAAA,EAGzD,UAAW,eACX,IAAK,eACL,MAAO,IACP,OAAQ,CAACS,EAAiCL,IACpCA,EAAO,OAAS,YAAoB,IACnCK,EACEC,GAAWD,CAAI,EADJnD,MAAC,OAAA,CAAK,MAAO,CAAE,MAAO,MAAA,EAAW,SAAAlhB,EAAE,eAAe,CAAA,CAAE,CAExE,EAEF,CACE,MAAOA,EAAE,eAAe,EACxB,IAAK,SACL,MAAO,IACP,MAAO,QACP,OAAQ,CAACukB,EAAYP,WAClBxB,GAAA,CACE,SAAA,CAAAwB,EAAO,OAAS,SACdZ,GAAgB,SAASY,EAAO,WAAW,YAAA,GAAiB,EAAE,GAC7DX,GAAe,SAASW,EAAO,WAAW,eAAiB,EAAE,IAC7D9C,EAAAA,IAACC,GAAA,CACC,KAAK,OACL,WAAOjC,GAAA,EAAY,EACnB,QAAS,IAAMzE,EAAUuJ,CAAM,EAC/B,KAAK,QAEJ,WAAE,eAAe,CAAA,CAAA,EAGvBA,EAAO,OAAS,QACf9C,EAAAA,IAACsD,GAAA,CACC,MAAOxkB,EAAE,qBAAqB,EAC9B,UAAW,IAAMyjB,EAASO,CAAM,EAChC,OAAQhkB,EAAE,WAAW,EACrB,WAAYA,EAAE,eAAe,EAE7B,SAAAkhB,EAAAA,IAACC,GAAA,CAAO,KAAK,OAAO,OAAM,GAAC,KAAMD,EAAAA,IAACuD,GAAA,CAAA,CAAe,EAAI,KAAK,QACvD,SAAAzkB,EAAE,cAAc,CAAA,CACnB,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAEJ,EAGF,aACG,MAAA,CAAI,MAAO,CAAE,UAAW,QACvB,SAAAkhB,EAAAA,IAACwD,GAAA,CACC,QAAAX,EACA,WAAYD,EACZ,OAAO,OACP,QAAAP,EACA,OAAQ,CAAE,EAAG,GAAA,EACb,WAAY,CACV,SAAU,GACV,gBAAiB,GACjB,UAAW,CAACrN,EAAOyO,IACjB3kB,EAAE,mBAAoB,CAAE,MAAO2kB,EAAM,CAAC,EAAG,IAAKA,EAAM,CAAC,EAAG,MAAAzO,EAAO,EACjE,gBAAiB,CAAC,KAAM,KAAM,MAAO,KAAK,CAAA,CAC5C,CAAA,EAEJ,CAEJ,CC3MO,MAAM0O,GAA4C,CAAC,CACxD,MAAAxiB,EAAQ,UACR,KAAA+C,EAAO,SACP,QAAA0f,EACA,SAAAC,EACA,QAAAvB,EAAU,GACV,cAAAwB,EACA,MAAAhf,EAAQ,IACR,WAAAif,EAAa,GACb,KAAAC,EACA,GAAGC,CACL,IAAM,CACJ,MAAMC,EAAuB,IAAM,CACjC,GAAI5B,EACF,OACErC,MAAC,OAAI,MAAO,CAAE,UAAW,SAAU,QAAS,QAAA,EAC1C,SAAAA,EAAAA,IAACkE,GAAA,CAAK,UAAWlE,MAACmE,GAAA,CAAgB,MAAO,CAAE,SAAU,IAAM,KAAI,GAAC,CAAA,CAAI,CAAA,CACtE,EAIJ,GAAIN,EACF,OAAOA,EAAA,EAGT,OAAQ5f,EAAA,CACN,IAAK,QACH,aACG,MAAA,CAAI,MAAO,CAAE,UAAW,UACvB,SAAA+b,EAAAA,IAAC7C,GAAA,CACC,IAAKyG,IAAa,OAAOD,GAAY,SAAWA,EAAU,QAC1D,IAAKziB,EACL,MAAO,CAAE,SAAU,MAAA,EACnB,QAAS,EAAA,CAAA,EAEb,EAGJ,IAAK,OACH,OACE8e,EAAAA,IAAC,MAAA,CACC,MAAO,CACL,UAAW,OACX,SAAU,OACV,QAAS,OACT,gBAAiB,UACjB,aAAc,MACd,WAAY,YACZ,WAAY,WACZ,UAAW,YAAA,EAGZ,SAA8B2D,CAAU,CAAA,EAI/C,IAAK,OACH,OACE3D,EAAAA,IAAC,MAAA,CACC,MAAO,CACL,UAAW,OACX,SAAU,OACV,QAAS,OACT,gBAAiB,UACjB,aAAc,MACd,WAAY,YACZ,SAAU,OACV,MAAO,MAAA,EAGT,SAAAA,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,OAAQ,EAAG,WAAY,WAAY,UAAW,YAAA,EACxD,UAAA,IAAM,CACN,GAAI,CACF,OACS,KAAK,UADV,OAAO2D,GAAY,SACC,KAAK,MAAMA,CAAO,EAEpBA,EAFuB,KAAM,CAAC,CAGtD,MAAgB,CACd,OAAO,OAAOA,GAAY,SAAWA,EAAU,OAAOA,CAAO,CAC/D,CACF,IAAG,CACL,CAAA,CAAA,EAIN,IAAK,SACL,QACE,OAAO3D,EAAAA,IAAC,OAAK,SAAA2D,CAAA,CAAQ,CAAA,CAE3B,EAEA,OACE3D,EAAAA,IAACoE,GAAA,CACC,MAAAljB,EACA,KAAA6iB,EACA,MAAAlf,EACA,OAAQif,EAAaE,EAAW,OAAS,KACxC,GAAGA,EAEH,SAAAC,EAAA,CAAqB,CAAA,CAG5B,EClJM/B,GAAkB,CAAC,OAAQ,QAAS,OAAQ,OAAQ,QAAS,MAAM,EACnEC,GAAiB,CAAC,OAAQ,MAAO,OAAO,EAsBvC,SAASkC,GAAY,CAAE,QAAA/e,EAAS,KAAAgf,EAAM,SAAAC,EAAU,QAAAle,GAA6B,CAClF,KAAM,CAAE,EAAAvH,CAAA,EAAMghB,GAAA,EACR,CAAC0E,EAAaC,CAAc,EAAI5a,EAAAA,SAAiB,EAAE,EAEnDoZ,EAAMqB,GAAM,WAAW,YAAA,GAAiB,GACxCI,EAAUxC,GAAgB,SAASe,CAAG,EACtC0B,EAASxC,GAAe,SAASc,CAAG,EAEpC,CAAE,WAAA2B,EAAY,UAAWC,CAAA,EAAqBvF,GAClDoF,EAAUJ,GAAM,KAAO,OACvBC,CAAA,EA4BF,GAxBAnW,EAAAA,UAAU,IAAM,CACV9I,GAAWgf,GAAQK,GACG,SAAY,CAClC,GAAI,CACF,MAAMC,EAAa,2BAA2B,mBAAmBN,EAAK,IAAI,CAAC,SAASC,CAAQ,GACtFO,EAAW,MAAM,MAAMF,CAAU,EACvC,GAAIE,EAAS,GAAI,CACf,MAAMC,EAAO,MAAMD,EAAS,KAAA,EAC5BL,EAAeM,CAAI,CACrB,MACEC,GAAQ,MAAMlmB,EAAE,yBAAyB,CAAC,EAC1CuH,EAAA,CAEJ,MAAgB,CACd2e,GAAQ,MAAMlmB,EAAE,yBAAyB,CAAC,EAC1CuH,EAAA,CACF,CACF,GACA,EACUf,GACVmf,EAAe,EAAE,CAErB,EAAG,CAACnf,EAASgf,EAAMK,EAAQJ,EAAUzlB,EAAGuH,CAAO,CAAC,EAE5C,CAACie,EAAM,OAAO,KAGlB,IAAIW,EAA2C,SAC/C,OAAIP,EACFO,EAAc,QACLN,IACTM,EAAc,QAIdjF,EAAAA,IAAC0D,GAAA,CACC,KAAMpe,EACN,MAAOgf,EAAK,KACZ,KAAMW,EACN,SAAUP,GAAUE,GAAc,OAClC,QAASD,EAASH,EAAc,OAChC,QAASK,GAAqBF,GAAU,CAACH,GAAelf,EACxD,SAAUe,EACV,MAAO,IACP,WAAY,EAAA,CAAA,CAGlB,CCrFA,KAAM,CAAA,OAAEia,IAAWC,GACb,CAAE,KAAA2E,IAASC,GAUV,SAASC,GAAoB,CAAE,QAAA9f,EAAS,QAAAe,GAAqC,CAClF,KAAM,CAAE,EAAAvH,CAAA,EAAMghB,GAAA,EACR,CAAE,eAAAuF,EAAgB,cAAAC,EAAe,gBAAAC,CAAA,EAAoB/F,GAAA,EAErD,CAACgG,EAAkBC,CAAmB,EAAI5b,WAAS,CACvD,OAAQ,GACR,eAAgB,GAChB,WAAY,GACZ,eAAgB,GAChB,KAAM,KAAA,CACP,EAEK6b,EAAgB,SAAY,CAChC,GAAI,CACF,MAAML,EAAe,CAAE,GAAGG,EAAkB,OAAQ,GAAM,CAC5D,MAAgB,CAEhB,CACF,EAEMG,EAAgB,SAAY,CAChC,GAAI,CACF,MAAMN,EAAe,CAAE,GAAGG,EAAkB,OAAQ,GAAO,EAC3Dnf,EAAA,CACF,MAAgB,CAEhB,CACF,EAEMuf,EAAc,IAAM,CACxBH,EAAoB,CAClB,OAAQ,GACR,eAAgB,GAChB,WAAY,GACZ,eAAgB,GAChB,KAAM,KAAA,CACP,EACDpf,EAAA,CACF,EAEMwf,EAASN,GAAiB,OAEhC,OACEvF,EAAAA,IAACoE,GAAA,CACC,KAAM9e,EACN,SAAUsgB,EACV,MAAO9mB,EAAE,sBAAsB,EAC/B,MAAO,IACP,OAAQ,OACLmhB,GAAA,CAAoB,QAAS2F,EAC3B,SAAA9mB,EAAE,eAAe,GADR,QAEZ,EACAkhB,EAAAA,IAACC,GAAA,CAEC,QAASyF,EACT,QAASJ,EAER,WAAE,qBAAqB,CAAA,EAJpB,SAAA,EAMNtF,EAAAA,IAACC,GAAA,CAEC,KAAK,UACL,QAAS0F,EACT,QAASL,EACT,OAAQ,CAACE,EAAiB,OAEzB,WAAE,wBAAwB,CAAA,EANvB,SAAA,CAON,EAGF,SAAApF,EAAAA,KAACkB,GAAA,CAAM,UAAU,WAAW,MAAO,CAAE,MAAO,MAAA,EAAU,KAAK,QACzD,SAAA,CAAAtB,EAAAA,IAAC8F,GAAA,CACC,QAAShnB,EAAE,sBAAsB,EACjC,YAAaA,EAAE,4BAA4B,EAC3C,KAAK,OACL,SAAQ,EAAA,CAAA,SAGT,MAAA,CACC,SAAA,CAAAkhB,MAACkF,GAAA,CAAK,OAAM,GAAE,SAAApmB,EAAE,wBAAwB,EAAE,EAC1CshB,EAAAA,KAACkB,GAAA,CAAM,UAAU,WAAW,MAAO,CAAE,UAAW,EAAG,MAAO,MAAA,EACxD,SAAA,CAAAtB,EAAAA,IAAC+F,GAAA,CACC,QAASP,EAAiB,eAC1B,SAAW3mB,GACT4mB,EAAoB,CAAE,GAAGD,EAAkB,eAAgB3mB,EAAE,OAAO,QAAS,EAG9E,WAAE,sBAAsB,CAAA,CAAA,EAE3BmhB,EAAAA,IAAC+F,GAAA,CACC,QAASP,EAAiB,WAC1B,SAAW3mB,GACT4mB,EAAoB,CAAE,GAAGD,EAAkB,WAAY3mB,EAAE,OAAO,QAAS,EAG1E,WAAE,kBAAkB,CAAA,CAAA,EAEvBmhB,EAAAA,IAAC+F,GAAA,CACC,QAASP,EAAiB,eAC1B,SAAW3mB,GACT4mB,EAAoB,CAAE,GAAGD,EAAkB,eAAgB3mB,EAAE,OAAO,QAAS,EAG9E,WAAE,sBAAsB,CAAA,CAAA,CAC3B,CAAA,CACF,CAAA,EACF,SAEC,MAAA,CACC,SAAA,CAAAmhB,MAACkF,GAAA,CAAK,OAAM,GAAE,SAAApmB,EAAE,gBAAgB,EAAE,EAClCshB,EAAAA,KAACG,GAAA,CACC,MAAOiF,EAAiB,KACxB,SAAWQ,GACTP,EAAoB,CAAE,GAAGD,EAAkB,KAAMQ,EAAO,EAE1D,MAAO,CAAE,MAAO,OAAQ,UAAW,CAAA,EAEnC,SAAA,CAAAhG,MAACM,GAAA,CAAO,MAAM,MAAO,SAAAxhB,EAAE,gBAAgB,EAAE,QACxCwhB,GAAA,CAAO,MAAM,eAAgB,SAAAxhB,EAAE,wBAAwB,EAAE,QACzDwhB,GAAA,CAAO,MAAM,QAAS,SAAAxhB,EAAE,iBAAiB,CAAA,CAAE,CAAA,CAAA,CAAA,CAC9C,EACF,EAECwmB,UACE,MAAA,CAAI,MAAO,CAAE,UAAW,SAAU,QAAS,MAAA,EAC1C,SAAA,CAAAtF,EAAAA,IAACkE,GAAA,CAAK,KAAK,OAAA,CAAQ,EACnBlE,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,UAAW,EAAA,EACvB,SAAAA,EAAAA,IAACkF,GAAA,CAAM,SAAApmB,EAAE,kBAAkB,CAAA,CAAE,CAAA,CAC/B,CAAA,EACF,EAGD+mB,UACE,MAAA,CACC,SAAA,CAAA7F,MAACkF,GAAA,CAAK,OAAM,GAAE,SAAApmB,EAAE,uBAAuB,EAAE,EACzCshB,EAAAA,KAAC6F,GAAA,CACC,SAAQ,GACR,OAAQ,EACR,KAAK,QACL,MAAO,CAAE,UAAW,CAAA,EAEpB,SAAA,CAAAjG,EAAAA,IAACiG,GAAa,KAAb,CAAkB,MAAOnnB,EAAE,kBAAkB,EAC3C,WAAO,WACV,EACAkhB,EAAAA,IAACiG,GAAa,KAAb,CAAkB,MAAOnnB,EAAE,sBAAsB,EAC/C,SAAA+mB,EAAO,eACV,EACA7F,EAAAA,IAACiG,GAAa,KAAb,CAAkB,MAAOnnB,EAAE,kBAAkB,EAC5C,SAAAkhB,EAAAA,IAACkF,GAAA,CAAK,KAAK,UACR,SAAAW,EAAO,WACV,EACF,EACA7F,EAAAA,IAACiG,GAAa,KAAb,CAAkB,MAAOnnB,EAAE,oBAAoB,EAC9C,SAAAkhB,EAAAA,IAACkF,GAAA,CAAK,KAAK,UACR,SAAAW,EAAO,aACV,EACF,EACA7F,EAAAA,IAACiG,GAAa,KAAb,CAAkB,MAAOnnB,EAAE,uBAAuB,EACjD,SAAAkhB,EAAAA,IAACkF,GAAA,CAAK,KAAK,UACR,SAAAW,EAAO,gBACV,EACF,EACA7F,EAAAA,IAACiG,GAAa,KAAb,CAAkB,MAAOnnB,EAAE,oBAAoB,EAC7C,SAAA+mB,EAAO,aACV,EACA7F,EAAAA,IAACiG,GAAa,KAAb,CAAkB,MAAOnnB,EAAE,cAAc,EACvC,SAAA+mB,EAAO,QAAQ,OAAS,QACtBX,GAAA,CAAK,KAAK,SACR,SAAAW,EAAO,OAAO,MAAA,CACjB,EAEA7F,EAAAA,IAACkF,GAAA,CAAK,KAAK,UAAU,SAAA,GAAA,CAAC,CAAA,CAE1B,CAAA,CAAA,CAAA,EAGDW,EAAO,QAAUA,EAAO,OAAO,OAAS,GACvC7F,EAAAA,IAAC8F,GAAA,CACC,QAAShnB,EAAE,wBAAwB,EACnC,kBACG,MAAA,CAAI,MAAO,CAAE,UAAW,QAAS,SAAU,MAAA,EACzC,SAAA+mB,EAAO,OAAO,IAAI,CAAC7G,EAAO/d,IACzBmf,OAAC,OAAgB,MAAO,CAAE,aAAc,CAAA,EACtC,SAAA,CAAAA,EAAAA,KAAC8E,GAAA,CAAK,KAAK,SAAS,OAAM,GACvB,SAAA,CAAAlG,EAAM,KAAK,GAAA,EACd,EACAgB,EAAAA,IAACkF,GAAA,CAAK,KAAK,SAAS,MAAO,CAAE,WAAY,CAAA,EACtC,SAAAlG,EAAM,KAAA,CACT,CAAA,GANQ/d,CAOV,CACD,EACH,EAEF,KAAK,QACL,MAAO,CAAE,UAAW,EAAA,CAAG,CAAA,EAI1BukB,EAAiB,QAChBxF,EAAAA,IAAC8F,GAAA,CACC,QAAShnB,EAAE,mBAAmB,EAC9B,YAAaA,EAAE,uBAAuB,EACtC,KAAK,UACL,MAAO,CAAE,UAAW,EAAA,CAAG,CAAA,CACzB,CAAA,CAEJ,CAAA,CAAA,CAEJ,CAAA,CAAA,CAGN,CC7NO,SAASonB,IAAiB,CAC/B,KAAM,CAACvG,EAAawG,CAAc,EAAItc,EAAAA,SAAiB,EAAE,EAEnDuc,EAAiBC,cAAalmB,GAAiB,CACnDgmB,EAAehmB,CAAI,CACrB,EAAG,CAAA,CAAE,EAECmmB,EAAeD,EAAAA,YAAY,IAAM,CACrC,MAAME,EAAQ5G,EAAY,MAAM,GAAG,EACnC4G,EAAM,IAAA,EACNH,EAAeG,EAAM,KAAK,GAAG,CAAC,CAChC,EAAG,CAAC5G,EAAayG,CAAc,CAAC,EAE1BI,EAAYH,EAAAA,YAAY,IAAM,CAClCF,EAAe,EAAE,CACnB,EAAG,CAAA,CAAE,EAEL,MAAO,CACL,YAAAxG,EACA,eAAAyG,EACA,aAAAE,EACA,UAAAE,CAAA,CAEJ,CCvBA,MAAMtE,GAAkB,CAAC,OAAQ,QAAS,OAAQ,OAAQ,QAAS,MAAM,EAKlE,SAASuE,GACdC,EACAnC,EACA3E,EACA,CACA,KAAM,CAAE,EAAA9gB,CAAA,EAAMghB,GAAA,EACR,CAAE,YAAAlB,CAAA,EAAgBC,GAAA,EAClB,CAACnJ,EAAgBiR,CAAiB,EAAI9c,EAAAA,SAAS,EAAK,EACpD,CAAC+c,EAAaC,CAAc,EAAIhd,EAAAA,SAA0B,IAAI,EAE9D6b,EAAgBW,EAAAA,YACnB/B,GAAmB,CAClB,GAAIA,EAAK,OAAS,YAAa,CAC7B1E,IAAa0E,EAAK,IAAI,EACtB,MACF,CAEA,MAAMrB,EAAMqB,EAAK,WAAW,YAAA,GAAiB,GACvCI,EAAUxC,GAAgB,SAASe,CAAG,EACtC0B,EAAS,CAAC,OAAQ,MAAO,OAAO,EAAE,SAAS1B,CAAG,EAEhDyB,GAAWC,GACbkC,EAAevC,CAAI,EACnBqC,EAAkB,EAAI,GAEtB3B,GAAQ,KAAKlmB,EAAE,2BAA2B,CAAC,CAE/C,EACA,CAAC8gB,EAAY9gB,CAAC,CAAA,EAGVgoB,EAAeT,EAAAA,YACnB,MAAO/B,GAAmB,CACxB,GAAI,CACF,MAAMoC,EAAgB,CAAE,GAAIpC,EAAK,KAAM,KAAMA,EAAK,KAAM,KAAMC,EAAU,EACxES,GAAQ,QAAQlmB,EAAE,mBAAmB,CAAC,CACxC,OAASkgB,EAAO,CACdJ,EAAYI,CAAK,CACnB,CACF,EACA,CAAC0H,EAAiBnC,EAAU3F,EAAa9f,CAAC,CAAA,EAGtCioB,EAAeV,EAAAA,YAAY,IAAM,CACrCM,EAAkB,EAAK,EACvBE,EAAe,IAAI,CACrB,EAAG,CAAA,CAAE,EAEL,MAAO,CACL,eAAAnR,EACA,YAAAkR,EACA,cAAAlB,EACA,aAAAoB,EACA,aAAAC,CAAA,CAEJ,CCjDO,SAASC,GACdrF,EACAD,EACAf,EACAE,EACA,CAIA,MAAMoG,EAAeZ,cAAaa,GAAuB,CACvD,GAAIA,IAAW,MACb,MAAO,CAAE,UAAW,KAAM,QAAS,IAAA,EAGrC,MAAMC,MAAU,KAChB,IAAIC,EACAC,EAAuB,KAE3B,OAAQH,EAAA,CACN,IAAK,QACHE,EAAY,IAAI,KAAKD,EAAI,YAAA,EAAeA,EAAI,SAAA,EAAYA,EAAI,SAAS,EACrEE,EAAU,IAAI,KAAKF,EAAI,YAAA,EAAeA,EAAI,SAAA,EAAYA,EAAI,QAAA,EAAW,GAAI,GAAI,GAAI,GAAG,EACpF,MACF,IAAK,YACH,MAAMG,EAAY,IAAI,KAAKH,CAAG,EAC9BG,EAAU,QAAQA,EAAU,QAAA,EAAY,CAAC,EACzCF,EAAY,IAAI,KAAKE,EAAU,YAAA,EAAeA,EAAU,SAAA,EAAYA,EAAU,SAAS,EACvFD,EAAU,IAAI,KACZC,EAAU,YAAA,EACVA,EAAU,SAAA,EACVA,EAAU,QAAA,EACV,GACA,GACA,GACA,GAAA,EAEF,MACF,IAAK,WACH,MAAMC,EAAYJ,EAAI,OAAA,EACtBC,EAAY,IAAI,KAAKD,CAAG,EACxBC,EAAU,QAAQD,EAAI,QAAA,EAAYI,CAAS,EAC3CH,EAAU,SAAS,EAAG,EAAG,EAAG,CAAC,EAC7B,MACF,IAAK,WACH,MAAMI,EAAgB,IAAI,KAAKL,CAAG,EAClCK,EAAc,QAAQL,EAAI,QAAA,EAAYA,EAAI,OAAA,EAAW,CAAC,EACtDK,EAAc,SAAS,EAAG,EAAG,EAAG,CAAC,EACjCJ,EAAYI,EACZ,MAAMC,EAAc,IAAI,KAAKD,CAAa,EAC1CC,EAAY,QAAQD,EAAc,QAAA,EAAY,CAAC,EAC/CC,EAAY,SAAS,GAAI,GAAI,GAAI,GAAG,EACpCJ,EAAUI,EACV,MACF,IAAK,YACHL,EAAY,IAAI,KAAKD,EAAI,YAAA,EAAeA,EAAI,SAAA,EAAY,CAAC,EACzD,MACF,IAAK,YACHC,EAAY,IAAI,KAAKD,EAAI,YAAA,EAAeA,EAAI,SAAA,EAAa,EAAG,CAAC,EAC7DE,EAAU,IAAI,KAAKF,EAAI,YAAA,EAAeA,EAAI,SAAA,EAAY,EAAG,GAAI,GAAI,GAAI,GAAG,EACxE,MACF,QACEC,EAAY,IAAI,KAAK,CAAC,CAAA,CAG1B,MAAO,CAAE,UAAAA,EAAW,QAAAC,CAAA,CACtB,EAAG,CAAA,CAAE,EAGCK,EAAyB3kB,EAAAA,QAAQ,IAAM,CAC3C,IAAIhC,EAAQ,CAAC,GAAG2gB,EAAa,GAAGC,CAAK,EAGrC,GAAIhB,EAAY,CACd,MAAMgH,EAAchH,EAAW,YAAA,EAC/B5f,EAAQA,EAAM,OAAQvB,GAASA,EAAK,KAAK,YAAA,EAAc,SAASmoB,CAAW,CAAC,CAC9E,CAGA,GAAI9G,IAAe,MAAO,CACxB,KAAM,CAAE,UAAAuG,EAAW,QAAAC,GAAYJ,EAAapG,CAAU,EAClDuG,IACFrmB,EAAQA,EAAM,OAAQvB,GAAS,CAC7B,GAAIA,EAAK,OAAS,YAAa,MAAO,GACtC,GAAI,CAACA,EAAK,aAAc,MAAO,GAE/B,MAAMooB,EAAe,IAAI,KAAKpoB,EAAK,YAAY,EACzCqoB,EAAeD,GAAgBR,EAC/BU,EAAcT,EAAUO,GAAgBP,EAAU,GACxD,OAAOQ,GAAgBC,CACzB,CAAC,EAEL,CAKA,OAAO/mB,CACT,EAAG,CAAC2gB,EAAaC,EAAOhB,EAAYE,EAAYoG,CAAY,CAAC,EAGvD,CAAE,oBAAAc,EAAqB,cAAAC,CAAA,EAAkBjlB,EAAAA,QAAQ,IAAM,CAC3D,MAAMklB,EAAOP,EAAuB,OAAQloB,GAASA,EAAK,OAAS,WAAW,EACxE0oB,EAAYR,EAAuB,OAAQloB,GAASA,EAAK,OAAS,MAAM,EAC9E,MAAO,CAAE,oBAAqByoB,EAAM,cAAeC,CAAA,CACrD,EAAG,CAACR,CAAsB,CAAC,EAE3B,MAAO,CACL,oBAAAK,EACA,cAAAC,CAAA,CAEJ,CC5HA,MAAM9F,GAAkB,CAAC,OAAQ,QAAS,OAAQ,OAAQ,QAAS,MAAM,EAKlE,SAASiG,GAAkBxG,EAAmBD,EAAyB,CA4B5E,OA3Bc3e,EAAAA,QAAQ,IAAM,CAC1B,MAAMqlB,EAAM,CAAC,GAAG1G,EAAa,GAAGC,CAAK,EAC/B0G,EAAmBD,EAAI,OAAQ5oB,GAASA,EAAK,OAAS,WAAW,EAAE,OACnE8oB,EAAaF,EAAI,OAAQ5oB,GAASA,EAAK,OAAS,MAAM,EAAE,OACxDoiB,EAAYwG,EACf,OAAQ5oB,GAASA,EAAK,OAAS,QAAUA,EAAK,IAAI,EAClD,OAAO,CAAC+oB,EAAK/oB,IAAS+oB,GAAO/oB,EAAK,MAAQ,GAAI,CAAC,EAC5C+U,EAAS6T,EAAI,OAChB5oB,GACCA,EAAK,OAAS,QACd0iB,GAAgB,SAAS1iB,EAAK,WAAW,YAAA,GAAiB,EAAE,CAAA,EAC9D,OAQF,MAAO,CACL,YAAa6oB,EACb,MAAOC,EACP,WATsB7F,GAClBA,EAAQ,KAAa,GAAGA,CAAK,KAC7BA,EAAQ,KAAO,KAAa,IAAIA,EAAQ,MAAM,QAAQ,CAAC,CAAC,MACrD,IAAIA,GAAS,KAAO,OAAO,QAAQ,CAAC,CAAC,OAMlBb,CAAS,EACnC,OAAArN,CAAA,CAEJ,EAAG,CAACmN,EAAaC,CAAK,CAAC,CAGzB,CCfA,KAAM,CAAE,MAAA6G,IAAUrD,GACZ,CAAE,OAAA7E,IAAWC,GAenB,SAAwBkI,IAAQ,CAC9B,KAAM,CAAE,EAAA3pB,CAAA,EAAMghB,GAAA,EACR,CAACyE,EAAUmE,CAAW,EAAI7e,EAAAA,SAAmC,cAAc,EAC3E,CAAC8e,EAAuBC,CAAwB,EAAI/e,EAAAA,SAAS,EAAK,EAGlE,CAAE,YAAA8V,EAAa,eAAAyG,EAAgB,aAAAE,EAAc,UAAAE,CAAA,EAAcN,GAAA,EAG3D,CAACnF,EAAQ8H,CAAS,EAAIhf,EAAAA,SAA6D,MAAM,EACzF,CAACoX,EAAW6H,CAAY,EAAIjf,EAAAA,SAAyB,KAAK,EAC1D,CAAC8W,EAAYoI,CAAa,EAAIlf,EAAAA,SAAiB,EAAE,EACjD,CAACgX,EAAYmI,CAAa,EAAInf,EAAAA,SAA8F,KAAK,EAGjI,CAAE,MAAA8X,EAAO,YAAAD,EAAa,UAAA3C,EAAW,gBAAA2H,CAAA,EAAoBjI,GAAS,CAClE,KAAMkB,EACN,KAAM4E,EACN,KAAMxD,EACN,MAAOE,EACP,WAAYJ,IAAe,MAAQ,OAAYA,CAAA,CAChD,EAGKoI,EAAcjC,GAAerF,EAAOD,EAAaf,EAAYE,CAAU,EAGvE,CACJ,eAAAnL,EACA,YAAAkR,EACA,cAAAlB,EACA,aAAAoB,EACA,aAAAC,CAAA,EACEN,GAAkBC,EAAiBnC,EAAU6B,CAAc,EAGzD8C,EAAQf,GAAkBxG,EAAOD,CAAW,EAG5CyH,EAAwBnD,GAAoC,CAChE0C,EAAY1C,CAAK,EACjBQ,EAAA,EACAuC,EAAc,EAAE,CAClB,EAGMK,EAAczG,GAA+D,CAC7E5B,IAAW4B,EACbmG,EAAa7H,IAAc,MAAQ,OAAS,KAAK,GAEjD4H,EAAUlG,CAAM,EAChBmG,EAAa,KAAK,EAEtB,EAEA,cACG,MAAA,CACC,SAAA,CAAA1I,EAAAA,KAACe,GAAA,CAAI,QAAQ,gBAAgB,MAAM,SAAS,MAAO,CAAE,aAAc,EAAA,EACjE,SAAA,CAAAnB,EAAAA,IAACoB,GAAA,CACC,SAAApB,EAAAA,IAACwI,GAAA,CAAM,MAAO,EAAG,MAAO,CAAE,OAAQ,GAC/B,SAAA1pB,EAAE,aAAa,EAClB,EACF,EACAkhB,EAAAA,IAACoB,GAAA,CACC,SAAAhB,EAAAA,KAACkB,GAAA,CACC,SAAA,CAAAlB,EAAAA,KAACG,GAAA,CACC,MAAOgE,EACP,SAAU4E,EACV,MAAO,CAAE,MAAO,GAAA,EAEhB,SAAA,CAAA/I,EAAAA,KAACE,GAAA,CAAO,MAAM,eACZ,SAAA,CAAAN,EAAAA,IAACiC,GAAA,EAAgB,EAAE,IAAEnjB,EAAE,yBAAyB,CAAA,EAClD,EACAshB,EAAAA,KAACE,GAAA,CAAO,MAAM,QACZ,SAAA,CAAAN,EAAAA,IAAC+C,GAAA,EAAiB,EAAE,IAAEjkB,EAAE,kBAAkB,CAAA,CAAA,CAC5C,CAAA,CAAA,CAAA,EAEFkhB,EAAAA,IAACC,GAAA,CACC,KAAK,UACL,WAAO7B,GAAA,EAAa,EACpB,QAAS,IAAMwK,EAAyB,EAAI,EAE3C,WAAE,sBAAsB,CAAA,CAAA,CAC3B,CAAA,CACF,CAAA,CACF,CAAA,EACF,EAEA5I,EAAAA,IAACyB,GAAA,CACC,YAAayH,EAAM,YACnB,MAAOA,EAAM,MACb,OAAQA,EAAM,OACd,UAAWA,EAAM,SAAA,CAAA,QAGlBrH,GAAA,CAAK,MAAO,CAAE,SAAU,UACvB,SAAAzB,OAACkB,GAAA,CAAM,UAAU,WAAW,MAAO,CAAE,MAAO,QAAU,KAAK,SACzD,SAAA,CAAAtB,EAAAA,IAACU,GAAA,CACC,WAAAC,EACA,eAAgBoI,EAChB,WAAAlI,EACA,mBAAoBmI,EACpB,OAAAjI,EACA,eAAgB8H,EAChB,UAAA5H,EACA,kBAAmB6H,CAAA,CAAA,EAGrB9I,EAAAA,IAACN,GAAA,CACC,YAAAC,EACA,WAAYyG,EACZ,SAAUE,CAAA,CAAA,EAGZtG,EAAAA,IAACoC,GAAA,CACC,MAAO6G,EAAY,cACnB,YAAaA,EAAY,oBACzB,QAASlK,EACT,OAAAgC,EACA,UAAAE,EACA,OAAQmI,EACR,UAAW1D,EACX,SAAUoB,EACV,WAAYV,EACZ,SAAA7B,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,EAEAvE,EAAAA,IAACqE,GAAA,CACC,QAAS3O,EACT,KAAMkR,EACN,SAAArC,EACA,QAASwC,CAAA,CAAA,EAGX/G,EAAAA,IAACoF,GAAA,CACC,QAASuD,EACT,QAAS,IAAMC,EAAyB,EAAK,CAAA,CAAA,CAC/C,EACF,CAEJ","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]}