@acorex-platform/module-communication-management-client 0.0.33 → 0.0.37

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 (24) hide show
  1. package/fesm2022/{acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-G4wzzccx.mjs → acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-CZh_tBTN.mjs} +28 -12
  2. package/fesm2022/acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-CZh_tBTN.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-communication-management-client-communication-email-send.command-De8K6vIB.mjs → acorex-platform-module-communication-management-client-communication-email-send.command-Bnqy-YMs.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-communication-management-client-communication-email-send.command-De8K6vIB.mjs.map → acorex-platform-module-communication-management-client-communication-email-send.command-Bnqy-YMs.mjs.map} +1 -1
  5. package/fesm2022/acorex-platform-module-communication-management-client-communication-email-show-dialog.command-NuJLiYs_.mjs.map +1 -1
  6. package/fesm2022/{acorex-platform-module-communication-management-client-communication-in-app-inbox-page.component-BjJjqWja.mjs → acorex-platform-module-communication-management-client-communication-in-app-inbox-page.component-D4o0Bhce.mjs} +3 -3
  7. package/fesm2022/{acorex-platform-module-communication-management-client-communication-in-app-inbox-page.component-BjJjqWja.mjs.map → acorex-platform-module-communication-management-client-communication-in-app-inbox-page.component-D4o0Bhce.mjs.map} +1 -1
  8. package/fesm2022/{acorex-platform-module-communication-management-client-communication-send.command-NEXrsogP.mjs → acorex-platform-module-communication-management-client-communication-send.command-BH9jjHfA.mjs} +2 -2
  9. package/fesm2022/{acorex-platform-module-communication-management-client-communication-send.command-NEXrsogP.mjs.map → acorex-platform-module-communication-management-client-communication-send.command-BH9jjHfA.mjs.map} +1 -1
  10. package/fesm2022/acorex-platform-module-communication-management-client-communication-show-sent-message.command-D9KRxkdp.mjs.map +1 -1
  11. package/fesm2022/{acorex-platform-module-communication-management-client-communication-test-smtp.command-Cp5fHOh4.mjs → acorex-platform-module-communication-management-client-communication-test-smtp.command-BMsTVFBN.mjs} +2 -2
  12. package/fesm2022/{acorex-platform-module-communication-management-client-communication-test-smtp.command-Cp5fHOh4.mjs.map → acorex-platform-module-communication-management-client-communication-test-smtp.command-BMsTVFBN.mjs.map} +1 -1
  13. package/fesm2022/acorex-platform-module-communication-management-client-contracts-entities-communication-delivery.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-module-communication-management-client-contracts-entities-communication.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-module-communication-management-client-contracts-entity-catalog-acorex-platform-module-communication-management-client-contracts-entity-catalog-BvLoGDK5.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-module-communication-management-client-contracts-entity-catalog-communication-delivery.entity-DPCU8P32.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-module-communication-management-client-contracts-entity-catalog-communication.entity-DGj9OD3Z.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-module-communication-management-client-contracts-entity-catalog-status.keys-JESc4HlO.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-module-communication-management-client-contracts.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-module-communication-management-client-local-entities.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-module-communication-management-client.mjs +1 -1
  22. package/package.json +3 -3
  23. package/types/acorex-platform-module-communication-management-client.d.ts +2 -0
  24. package/fesm2022/acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-G4wzzccx.mjs.map +0 -1
@@ -1,2 +1,2 @@
1
- export { f as AXMCommunicationManagementMenuProvider, g as AXMCommunicationManagementModule, h as AXMCommunicationManagementPermissionDefinitionProvider, i as AXMCommunicationManagementSearchCommandProvider, j as AXPCommunicationInAppInboxWidgetViewComponent, d as AXPCommunicationManagementClient, A as AXPInAppInboxConnectorService, c as AXPInAppInboxItemComponent, k as AXPInAppInboxPanelComponent, e as AXPInAppInboxRealtimeService, l as AXPInAppInboxSlotComponent, m as AXPMyInAppInboxDashboardWidget, n as AXP_IN_APP_INBOX_CONFIG, b as AXP_IN_APP_INBOX_I18N, o as AXP_IN_APP_INBOX_LEGACY_DB_NAME, p as AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY, q as AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS, r as AXP_IN_APP_INBOX_PORT, s as AXP_IN_APP_INBOX_SYNC_STATUS, t as AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS, u as buildMyInAppInboxDashboardWidget, v as dedupeInAppInboxItems, w as filterInAppInboxItemsLocally, x as getInAppInboxPriorityClass, y as isArchiveCategoryFilter, z as isInAppInboxUnread, B as isInAppInboxUnseen, C as normalizeInAppInboxItem, D as resolveCommunicationDeliveryChannelsSettingsSection, E as sortInAppInboxItems } from './acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-G4wzzccx.mjs';
1
+ export { f as AXMCommunicationManagementMenuProvider, g as AXMCommunicationManagementModule, h as AXMCommunicationManagementPermissionDefinitionProvider, i as AXMCommunicationManagementSearchCommandProvider, j as AXPCommunicationInAppInboxWidgetViewComponent, d as AXPCommunicationManagementClient, A as AXPInAppInboxConnectorService, c as AXPInAppInboxItemComponent, k as AXPInAppInboxPanelComponent, e as AXPInAppInboxRealtimeService, l as AXPInAppInboxSlotComponent, m as AXPMyInAppInboxDashboardWidget, n as AXP_IN_APP_INBOX_CONFIG, b as AXP_IN_APP_INBOX_I18N, o as AXP_IN_APP_INBOX_LEGACY_DB_NAME, p as AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY, q as AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS, r as AXP_IN_APP_INBOX_PORT, s as AXP_IN_APP_INBOX_SYNC_STATUS, t as AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS, u as buildMyInAppInboxDashboardWidget, v as dedupeInAppInboxItems, w as filterInAppInboxItemsLocally, x as getInAppInboxPriorityClass, y as isArchiveCategoryFilter, z as isInAppInboxUnread, B as isInAppInboxUnseen, C as normalizeInAppInboxItem, D as resolveCommunicationDeliveryChannelsSettingsSection, E as sortInAppInboxItems } from './acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-CZh_tBTN.mjs';
2
2
  //# sourceMappingURL=acorex-platform-module-communication-management-client.mjs.map
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@acorex-platform/module-communication-management-client",
3
- "version": "0.0.33",
3
+ "version": "0.0.37",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
- "@acorex-platform/module-dashboard-management-client": "0.0.33",
7
- "@acorex-platform/module-organization-management-client": "0.0.33",
6
+ "@acorex-platform/module-dashboard-management-client": "0.0.37",
7
+ "@acorex-platform/module-organization-management-client": "0.0.37",
8
8
  "@angular/common": "^21.0.0 || ^22.0.0",
9
9
  "@angular/core": "^21.0.0 || ^22.0.0"
10
10
  },
@@ -245,6 +245,8 @@ declare class AXPInAppInboxConnectorService {
245
245
  dismissByCorrelationId(correlationId: string): Promise<void>;
246
246
  /** Removes in-app deliveries whose correlation id starts with the prefix (e.g. chat thread). */
247
247
  dismissByCorrelationIdPrefix(correlationIdPrefix: string): Promise<void>;
248
+ /** Marks chat inbox rows as read (seen + read) without deleting them. */
249
+ markReadByCorrelationIdPrefix(correlationIdPrefix: string): Promise<void>;
248
250
  /**
249
251
  * Upserts rows into the local hot inbox without a server round-trip.
250
252
  * Used for optimistic chat previews while Communication:Send persists the delivery.
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-module-communication-management-client-acorex-platform-module-communication-management-client-G4wzzccx.mjs","sources":["../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-local.constants.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-conversation.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-icon.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-local-filter.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-realtime.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.port.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.connector.service.ts","../../../../libs/modules/communication-management/client/src/lib/badge.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/communication-delivery-status.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/communication-status.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox.providers.ts","../../../../libs/modules/communication-management/client/src/lib/communication-management-client.port.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox-page-query.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox.port.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-realtime.providers.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox-sync-status.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-inbox-fallback.providers.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/communication-in-app-notification.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.types.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox.tokens.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-sync-status.token.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-item.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-item.component.html","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/in-app-inbox-action.service.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-panel.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-panel.component.html","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-slot.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/in-app/inbox/components/in-app-inbox-slot.component.html","../../../../libs/modules/communication-management/client/src/lib/features/settings/communication-user-notifications-settings.provider.ts","../../../../libs/modules/communication-management/client/src/lib/manifest.ts","../../../../libs/modules/communication-management/client/src/lib/menu.provider.ts","../../../../libs/modules/communication-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/communication-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/communication-management/client/src/lib/settings.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/templates/communication-text-template-channel-definition.provider.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/widgets/my-in-app-inbox/communication-in-app-inbox-widget.component.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/widgets/my-in-app-inbox/communication-in-app-inbox-widget.component.html","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/communication-dashboard-widget.dimensions.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/widgets/my-in-app-inbox/communication-in-app-inbox-widget.config.ts","../../../../libs/modules/communication-management/client/src/lib/widget-definition.provider.ts","../../../../libs/modules/communication-management/client/src/lib/communication-management.module.ts","../../../../libs/modules/communication-management/client/src/lib/features/dashboard/dashboard-seed-widget-builders.util.ts","../../../../libs/modules/communication-management/client/src/lib/features/settings/communication-delivery-channels-settings.util.ts","../../../../libs/modules/communication-management/client/src/acorex-platform-module-communication-management-client.ts"],"sourcesContent":["//#region ----- Constants -----\n\n/** Local-entity engine key for the active in-app inbox hot subset. */\nexport const AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY = 'CommunicationManagement.InAppInbox';\n\n/** Max active deliveries kept in the local hot subset. */\nexport const AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS = 100;\n\n/** Legacy IndexedDB name from the inbox-only store (deleted on migrate). */\nexport const AXP_IN_APP_INBOX_LEGACY_DB_NAME = 'ACoreXInAppInbox';\n\n//#endregion\n","//#region ---- Conversation in-app inbox mapping ----\n\nimport type { AXPUserReference } from '@acorex-platform/framework-shared/core';\n\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\n\nexport const IN_APP_CONVERSATION_CHAT_DEFINITION_KEY = 'conversation-chat-message';\n\nexport const IN_APP_CONVERSATION_OPEN_CHAT_COMMAND = 'Conversation:OpenChat';\n\nexport interface ParsedConversationInAppCorrelation {\n conversationId: string;\n messageId: string;\n senderUserId?: string;\n}\n\nexport function parseConversationInAppCorrelationId(\n correlationId: string | null | undefined,\n): ParsedConversationInAppCorrelation | undefined {\n const scoped = correlationId?.trim();\n if (!scoped?.startsWith('conversation:')) {\n return undefined;\n }\n\n const segments = scoped.split(':');\n if (segments.length < 3) {\n return undefined;\n }\n\n const conversationId = segments[1]?.trim();\n const messageId = segments[2]?.trim();\n if (!conversationId || !messageId) {\n return undefined;\n }\n\n const senderUserId = segments[3]?.trim() || undefined;\n return { conversationId, messageId, senderUserId };\n}\n\n/** One inbox row per conversation — used to collapse legacy duplicate chat notifications. */\nexport function resolveConversationInAppDedupeKey(\n correlationId: string | null | undefined,\n): string | undefined {\n const parsed = parseConversationInAppCorrelationId(correlationId);\n return parsed?.conversationId ? `conversation:${parsed.conversationId}` : undefined;\n}\n\n/** Parses `conversation:{conversationId}:` dismiss prefixes from chat open/sync. */\nexport function parseConversationIdFromDismissPrefix(prefix: string): string | undefined {\n const normalized = prefix.trim();\n if (!normalized.startsWith('conversation:') || !normalized.endsWith(':')) {\n return undefined;\n }\n const conversationId = normalized.slice('conversation:'.length, -1).trim();\n return conversationId || undefined;\n}\n\n/** Whether a local inbox row belongs to the conversation being dismissed. */\nexport function matchesConversationInAppDismiss(\n item: Pick<AXPInAppInboxItem, 'definitionKey' | 'correlationId' | 'actions'>,\n conversationId: string,\n): boolean {\n const scopedConversationId = conversationId.trim();\n if (!scopedConversationId || item.definitionKey !== IN_APP_CONVERSATION_CHAT_DEFINITION_KEY) {\n return false;\n }\n\n const correlation = item.correlationId?.trim();\n if (correlation?.startsWith(`conversation:${scopedConversationId}:`)) {\n return true;\n }\n\n const parsed = parseConversationInAppCorrelationId(correlation);\n if (parsed?.conversationId === scopedConversationId) {\n return true;\n }\n\n const options = item.actions?.[0]?.command?.options;\n if (options && typeof options === 'object') {\n const actionConversationId = options['conversationId'];\n if (typeof actionConversationId === 'string' && actionConversationId.trim() === scopedConversationId) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction readSenderUserIdFromActions(\n actions: AXPInAppInboxItem['actions'],\n): string | undefined {\n const options = actions?.[0]?.command?.options;\n if (!options || typeof options !== 'object') {\n return undefined;\n }\n\n const senderUserId = options['senderUserId'];\n return typeof senderUserId === 'string' && senderUserId.trim() ? senderUserId.trim() : undefined;\n}\n\nfunction resolveConversationSenderName(\n title: string | undefined,\n body: string | undefined,\n): string | undefined {\n const bodyText = body?.trim();\n if (bodyText?.includes(':')) {\n const prefix = bodyText.slice(0, bodyText.indexOf(':')).trim();\n if (prefix) {\n return prefix;\n }\n }\n\n const titleText = title?.trim();\n return titleText || undefined;\n}\n\nexport function resolveConversationInAppInboxSender(input: {\n definitionKey?: string;\n title?: string;\n body?: string;\n correlationId?: string | null;\n actions?: AXPInAppInboxItem['actions'];\n}): AXPUserReference | undefined {\n if (input.definitionKey !== IN_APP_CONVERSATION_CHAT_DEFINITION_KEY) {\n return undefined;\n }\n\n const parsed = parseConversationInAppCorrelationId(input.correlationId);\n const senderUserId = parsed?.senderUserId ?? readSenderUserIdFromActions(input.actions);\n const senderName = resolveConversationSenderName(input.title, input.body);\n\n if (!senderUserId || !senderName || senderUserId === 'system') {\n return undefined;\n }\n\n return { id: senderUserId, fullName: senderName };\n}\n\nexport function resolveConversationInAppInboxActions(input: {\n definitionKey?: string;\n correlationId?: string | null;\n actions?: AXPInAppInboxItem['actions'];\n}): AXPInAppInboxItem['actions'] | undefined {\n if (input.definitionKey !== IN_APP_CONVERSATION_CHAT_DEFINITION_KEY) {\n return input.actions;\n }\n\n if (input.actions?.some((action) => action.command?.name?.trim())) {\n return input.actions;\n }\n\n const parsed = parseConversationInAppCorrelationId(input.correlationId);\n if (!parsed?.conversationId) {\n return input.actions;\n }\n\n return [\n {\n title: '@conversation:in-app.actions.open-chat',\n command: {\n name: IN_APP_CONVERSATION_OPEN_CHAT_COMMAND,\n options: {\n conversationId: parsed.conversationId,\n ...(parsed.senderUserId ? { senderUserId: parsed.senderUserId } : {}),\n },\n },\n },\n ];\n}\n\n//#endregion\n","//#region ---- In-app inbox leading icon ----\n\nimport type { AXPUserReference } from '@acorex-platform/framework-shared/core';\n\nimport type { AXPInAppInboxItem, AXPInAppInboxPriority } from './in-app-inbox.types';\n\nconst REPORT_GENERATION_DEFINITION_KEY = 'ReportManagement:ReportGeneration';\n\nexport { REPORT_GENERATION_DEFINITION_KEY as IN_APP_REPORT_GENERATION_DEFINITION_KEY };\n\nexport function isInAppInboxRealUserSender(sender?: AXPUserReference): boolean {\n const senderId = sender?.id?.trim();\n const senderName = sender?.fullName?.trim();\n return Boolean(senderId && senderId !== 'system' && senderName && senderName !== senderId);\n}\n\nexport function resolveInAppInboxIconClass(\n item: Pick<AXPInAppInboxItem, 'iconClass' | 'definitionKey' | 'priority' | 'sender'>,\n): string | undefined {\n if (item.iconClass?.trim()) {\n return item.iconClass.trim();\n }\n\n if (isInAppInboxRealUserSender(item.sender)) {\n return undefined;\n }\n\n if (item.definitionKey === REPORT_GENERATION_DEFINITION_KEY) {\n return 'fa-light fa-file-chart-pie';\n }\n\n return resolveInAppInboxPriorityIconClass(item.priority);\n}\n\nfunction resolveInAppInboxPriorityIconClass(priority: AXPInAppInboxPriority | undefined): string {\n switch (priority) {\n case 'Danger':\n return 'fa-light fa-circle-exclamation';\n case 'Warning':\n return 'fa-light fa-triangle-exclamation';\n default:\n return 'fa-light fa-bell';\n }\n}\n\n//#endregion\n","//#region ---- Shared in-app inbox helpers ----\n\nimport type { AXPInAppInboxItem, AXPInAppInboxPriority } from './in-app-inbox.types';\nimport { resolveConversationInAppDedupeKey } from './in-app-inbox-conversation.util';\nimport { resolveInAppInboxIconClass } from './in-app-inbox-icon.util';\n\nexport function isInAppInboxUnread(readAt: Date | null | undefined): boolean {\n return readAt == null;\n}\n\nexport function isInAppInboxUnseen(seenAt: Date | null | undefined): boolean {\n return seenAt == null;\n}\n\nexport function getInAppInboxPriorityClass(priority: AXPInAppInboxPriority | undefined): string {\n return priority ?? 'Notice';\n}\n\nexport function sortInAppInboxItems<T extends AXPInAppInboxItem>(items: T[]): T[] {\n return dedupeInAppInboxItems([...items]).sort((left, right) => {\n const pinDelta = Number(Boolean(right.isPinned)) - Number(Boolean(left.isPinned));\n if (pinDelta !== 0) {\n return pinDelta;\n }\n return right.createdAt.getTime() - left.createdAt.getTime();\n });\n}\n\n/** Collapse duplicate chat-message rows that share the same correlation id. */\nexport function dedupeInAppInboxItems<T extends AXPInAppInboxItem>(items: T[]): T[] {\n const byCorrelation = new Map<string, T>();\n\n for (const item of items) {\n const dedupeKey =\n item.definitionKey === 'conversation-chat-message'\n ? resolveConversationInAppDedupeKey(item.correlationId)\n : undefined;\n if (!dedupeKey) {\n continue;\n }\n\n const existing = byCorrelation.get(dedupeKey);\n if (!existing || item.createdAt.getTime() >= existing.createdAt.getTime()) {\n byCorrelation.set(dedupeKey, item);\n }\n }\n\n if (byCorrelation.size === 0) {\n return items;\n }\n\n const consumed = new Set<string>();\n const result: T[] = [];\n\n for (const item of items) {\n const dedupeKey =\n item.definitionKey === 'conversation-chat-message'\n ? resolveConversationInAppDedupeKey(item.correlationId)\n : undefined;\n if (!dedupeKey) {\n result.push(item);\n continue;\n }\n\n if (consumed.has(dedupeKey)) {\n continue;\n }\n consumed.add(dedupeKey);\n result.push(byCorrelation.get(dedupeKey) ?? item);\n }\n\n return result;\n}\n\nexport function normalizeInAppInboxItem<T extends Partial<AXPInAppInboxItem>>(item: T): AXPInAppInboxItem {\n return {\n id: String(item.id),\n title: item.title ?? '',\n body: item.body ?? '',\n createdAt: item.createdAt ? new Date(item.createdAt) : new Date(),\n seenAt: item.seenAt ? new Date(item.seenAt) : item.seenAt ?? null,\n readAt: item.readAt ? new Date(item.readAt) : item.readAt ?? null,\n sender: item.sender,\n iconClass: item.iconClass ?? resolveInAppInboxIconClass(item as AXPInAppInboxItem),\n showAvatar: item.showAvatar,\n priority: item.priority ?? 'Notice',\n isPinned: item.isPinned ?? false,\n category: item.category,\n definitionKey: item.definitionKey,\n correlationId: item.correlationId,\n recipientUserId: item.recipientUserId,\n archivedAt: item.archivedAt ? new Date(item.archivedAt) : item.archivedAt ?? null,\n actions: Array.isArray(item.actions) ? item.actions : undefined,\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXP_QUERY_QUICK_SEARCH_FIELD, type AXPFilterQuery } from '@acorex-platform/framework-shared/core';\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\nimport { isInAppInboxUnread, sortInAppInboxItems } from './in-app-inbox.util';\n\n//#endregion\n\n//#region ----- Local inbox filters -----\n\nexport function isArchiveCategoryFilter(filters: AXPFilterQuery[] | undefined): boolean {\n return filters?.some((filter) => filter.field === 'category' && filter.value === 'Archive') ?? false;\n}\n\n/**\n * Filters and sorts active inbox items in memory (search, unread, priority).\n * Archive is never applied here — callers must use the API for archived rows.\n */\nexport function filterInAppInboxItemsLocally(\n items: AXPInAppInboxItem[],\n filters: AXPFilterQuery[] | undefined,\n): AXPInAppInboxItem[] {\n const active = items.filter((item) => item.archivedAt == null);\n if (!filters?.length) {\n return sortInAppInboxItems(active);\n }\n\n const searchFilter = filters.find(\n (filter) => filter.field === 'all' || filter.field === AXP_QUERY_QUICK_SEARCH_FIELD,\n );\n const searchText =\n searchFilter?.value != null ? String(searchFilter.value).trim().toLowerCase() : '';\n\n const readFilter = filters.find((filter) => filter.field === 'readStatus');\n const unreadOnly = readFilter?.value === 'unread';\n\n const priorityFilter = filters.find((filter) => filter.field === 'priority');\n const priority = priorityFilter?.value ? String(priorityFilter.value) : '';\n\n const definitionFilter = filters.find((filter) => filter.field === 'type');\n const definitionKey = definitionFilter?.value ? String(definitionFilter.value) : '';\n\n const filtered = active.filter((item) => {\n if (unreadOnly && !isInAppInboxUnread(item.readAt)) {\n return false;\n }\n if (priority && item.priority !== priority) {\n return false;\n }\n if (definitionKey && item.definitionKey !== definitionKey) {\n return false;\n }\n if (searchText) {\n const haystack = `${item.title} ${item.body} ${item.sender?.fullName ?? ''}`.toLowerCase();\n if (!haystack.includes(searchText)) {\n return false;\n }\n }\n return true;\n });\n\n return sortInAppInboxItems(filtered);\n}\n\n//#endregion\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport type { AXPInAppInboxChangeEvent } from './in-app-inbox.types';\n\n//#region ---- In-app inbox realtime events ----\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPInAppInboxRealtimeService {\n private readonly changedSubject = new Subject<AXPInAppInboxChangeEvent>();\n\n readonly changed$ = this.changedSubject.asObservable();\n\n notifyChanged(event: AXPInAppInboxChangeEvent): void {\n this.changedSubject.next(event);\n }\n}\n\n//#endregion\n","//#region ---- In-app inbox data port ----\n\nimport { InjectionToken } from '@angular/core';\nimport type {\n AXPInAppInboxCapabilities,\n AXPInAppInboxListResult,\n AXPInAppInboxLoadQuery,\n} from './in-app-inbox.types';\n\n/**\n * Module-backed inbox data source. Communication-management registers the primary\n * implementation.\n */\nexport interface AXPInAppInboxPort {\n readonly capabilities: AXPInAppInboxCapabilities;\n loadInbox(query?: AXPInAppInboxLoadQuery): Promise<AXPInAppInboxListResult>;\n /** Fetch specific deliveries by id (used for realtime delta sync). */\n loadByIds?(ids: string[]): Promise<AXPInAppInboxListResult>;\n markSeen(ids: string[]): Promise<void>;\n markRead(ids: string[]): Promise<void>;\n markAllRead(): Promise<void>;\n togglePin?(id: string): Promise<void>;\n archive?(ids: string[]): Promise<void>;\n deleteDeliveries?(ids: string[]): Promise<void>;\n}\n\nexport const AXP_IN_APP_INBOX_PORT = new InjectionToken<AXPInAppInboxPort>('AXP_IN_APP_INBOX_PORT');\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPLocalEntityEngine,\n AXPLocalEntityRealtimeBridge,\n} from '@acorex-platform/framework-client/common';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport type { AXPFilterQuery, AXPPagedListResult } from '@acorex-platform/framework-shared/core';\nimport { computed, DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, distinctUntilChanged, filter, merge } from 'rxjs';\nimport {\n AXP_IN_APP_INBOX_LEGACY_DB_NAME,\n AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY,\n AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS,\n} from './in-app-inbox-local.constants';\nimport {\n filterInAppInboxItemsLocally,\n isArchiveCategoryFilter,\n} from './in-app-inbox-local-filter.util';\nimport { AXPInAppInboxRealtimeService } from './in-app-inbox-realtime.service';\nimport { AXP_IN_APP_INBOX_PORT, type AXPInAppInboxPort } from './in-app-inbox.port';\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\nimport {\n matchesConversationInAppDismiss,\n parseConversationIdFromDismissPrefix,\n} from './in-app-inbox-conversation.util';\nimport {\n isInAppInboxUnread,\n isInAppInboxUnseen,\n normalizeInAppInboxItem,\n sortInAppInboxItems,\n} from './in-app-inbox.util';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype AXPInAppInboxListResult = Awaited<ReturnType<AXPInAppInboxPort['loadInbox']>>;\n\ntype TrackedPageQuery = {\n skip: number;\n take: number;\n filters: AXPFilterQuery[];\n mode: 'local' | 'archive';\n};\n\n//#endregion\n\n//#region ----- Shared in-app inbox connector -----\n\n/**\n * Single source of truth for active in-app inbox UI.\n * Active items live in the shared local-entity engine (max 100) and sync via realtime / reconnect.\n * Archived views always load from the API.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPInAppInboxConnectorService {\n private readonly port = inject(AXP_IN_APP_INBOX_PORT);\n private readonly realtime = inject(AXPInAppInboxRealtimeService);\n private readonly engine = inject(AXPLocalEntityEngine);\n private readonly localBridge = inject(AXPLocalEntityRealtimeBridge);\n private readonly sessionService = inject(AXPSessionService);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly entityKey = AXP_IN_APP_INBOX_LOCAL_ENTITY_KEY;\n private readonly localItems = this.engine.itemsSignal(this.entityKey);\n\n private readonly isLoading = signal(false);\n private readonly pageLoading = signal(false);\n private readonly error = signal<string | null>(null);\n private readonly archivePageItems = signal<AXPInAppInboxItem[]>([]);\n private readonly archiveTotalCount = signal(0);\n private readonly pageQuery = signal<TrackedPageQuery | null>(null);\n private pendingRealtimeRefresh = false;\n private bootstrapPromise: Promise<void> | null = null;\n private syncInFlight: Promise<AXPInAppInboxListResult> | null = null;\n private boundUserKey: string | null = null;\n private legacyDbCleanupDone = false;\n\n readonly capabilities = this.port.capabilities;\n readonly loading = computed(() => this.isLoading());\n readonly pageLoadingState = computed(() => this.pageLoading());\n readonly errorMessage = computed(() => this.error());\n readonly inboxList = computed(() => this.readLocalItems());\n readonly total = computed(() => {\n if (this.pageQuery()?.mode === 'archive') {\n return this.archiveTotalCount();\n }\n return this.readLocalItems().length;\n });\n readonly pagedInboxList = computed(() => {\n const query = this.pageQuery();\n if (!query) {\n return [];\n }\n if (query.mode === 'archive') {\n return this.archivePageItems();\n }\n const filtered = filterInAppInboxItemsLocally(this.readLocalItems(), query.filters);\n return filtered.slice(query.skip, query.skip + query.take);\n });\n readonly pagedTotal = computed(() => {\n const query = this.pageQuery();\n if (!query) {\n return 0;\n }\n if (query.mode === 'archive') {\n return this.archiveTotalCount();\n }\n return filterInAppInboxItemsLocally(this.readLocalItems(), query.filters).length;\n });\n readonly unreadCount = computed(\n () => this.readLocalItems().filter((item) => isInAppInboxUnread(item.readAt)).length,\n );\n\n constructor() {\n this.engine.registerPolicy(this.entityKey, {\n mode: 'local-first',\n maxItems: AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS,\n sortField: 'createdAt',\n role: 'entity',\n });\n\n this.localBridge.register(this.entityKey, {\n fetchByIds: this.port.loadByIds ? (ids) => this.fetchActiveByIds(ids) : undefined,\n fetchHot: () => this.fetchActiveHot(),\n });\n\n this.sessionService.isReadyForAppScopedApi$\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe((isReady) => {\n if (isReady) {\n void this.ensureReady();\n return;\n }\n void this.clearInboxState();\n });\n\n const immediateRealtime$ = this.realtime.changed$.pipe(\n filter((event) => event.type === 'deleted' || event.type === 'archived'),\n );\n const debouncedRealtime$ = this.realtime.changed$.pipe(\n filter((event) => event.type !== 'deleted' && event.type !== 'archived'),\n debounceTime(100),\n );\n merge(immediateRealtime$, debouncedRealtime$)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n void this.handleRealtimeEvent(event);\n });\n }\n\n /** Hydrate from IndexedDB then sync active inbox from the server (idempotent). */\n ensureReady(): Promise<void> {\n if (!this.canLoadInbox()) {\n return Promise.resolve();\n }\n if (!this.bootstrapPromise) {\n this.bootstrapPromise = this.bootstrap();\n }\n return this.bootstrapPromise;\n }\n\n async refresh(): Promise<AXPInAppInboxListResult> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n await this.ensureReady();\n return this.syncActiveFromServer();\n }\n\n async loadPage(\n filtersOrSkip: AXPFilterQuery[] | number,\n skipOrTake?: number,\n takeArg?: number,\n ): Promise<AXPPagedListResult<AXPInAppInboxItem>> {\n const filters = Array.isArray(filtersOrSkip) ? filtersOrSkip : [];\n const skip = Array.isArray(filtersOrSkip) ? (skipOrTake ?? 0) : filtersOrSkip;\n const take = Array.isArray(filtersOrSkip) ? (takeArg ?? 10) : (skipOrTake ?? 10);\n const mode: TrackedPageQuery['mode'] = isArchiveCategoryFilter(filters) ? 'archive' : 'local';\n\n this.pageQuery.set({ skip, take, filters, mode });\n\n if (mode === 'archive') {\n if (!this.canLoadInbox()) {\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n return { items: [], total: 0 };\n }\n return this.loadArchivePage(filters, skip, take);\n }\n\n if (this.canLoadInbox()) {\n await this.ensureReady();\n }\n\n this.pageLoading.set(false);\n return { items: this.pagedInboxList(), total: this.pagedTotal() };\n }\n\n async markUnseenAsSeen(): Promise<void> {\n if (!this.port.capabilities.seenTracking || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const unseenIds = this.readLocalItems()\n .filter((item) => isInAppInboxUnseen(item.seenAt))\n .map((item) => item.id);\n\n if (unseenIds.length === 0) {\n return;\n }\n\n const now = new Date().toISOString();\n await this.engine.patchMany(this.entityKey, unseenIds, (item) =>\n item['seenAt'] ? item : { ...item, seenAt: now },\n );\n\n try {\n await this.port.markSeen(unseenIds);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to mark inbox as seen');\n await this.syncActiveFromServer();\n }\n }\n\n async markAsRead(ids: string[]): Promise<void> {\n if (ids.length === 0 || !this.port.capabilities.readTracking || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const now = new Date().toISOString();\n await this.engine.patchMany(this.entityKey, ids, (item) => ({\n ...item,\n seenAt: item['seenAt'] ?? now,\n readAt: item['readAt'] ?? now,\n }));\n\n try {\n await this.port.markRead(ids);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to mark inbox as read');\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'upsert', ids });\n }\n }\n\n async markAllAsRead(): Promise<void> {\n if (!this.port.capabilities.readTracking || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const now = new Date().toISOString();\n await this.engine.patchAll(this.entityKey, (item) => {\n const readAt = item['readAt'];\n if (readAt != null) {\n return item;\n }\n return { ...item, readAt: now, seenAt: item['seenAt'] ?? now };\n });\n\n try {\n await this.port.markAllRead();\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to mark all as read');\n await this.syncActiveFromServer();\n }\n }\n\n async togglePin(id: string): Promise<void> {\n if (!this.port.capabilities.pinSupport || !this.port.togglePin || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const current = this.readLocalItems().find((item) => item.id === id);\n if (current) {\n await this.engine.patchMany(this.entityKey, [id], (item) => ({\n ...item,\n isPinned: !Boolean(item['isPinned']),\n }));\n }\n\n try {\n await this.port.togglePin(id);\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'upsert', ids: [id] });\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to toggle pin');\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'upsert', ids: [id] });\n }\n }\n\n async archive(ids: string[]): Promise<void> {\n if (!this.port.archive || ids.length === 0 || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n await this.engine.removeMany(this.entityKey, ids);\n\n try {\n await this.port.archive(ids);\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to archive inbox items');\n await this.syncActiveFromServer();\n }\n\n const query = this.pageQuery();\n if (query?.mode === 'archive') {\n await this.loadArchivePage(query.filters, query.skip, query.take);\n }\n }\n\n async deleteOne(id: string): Promise<void> {\n if (!this.port.deleteDeliveries || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n await this.engine.removeMany(this.entityKey, [id]);\n\n try {\n await this.port.deleteDeliveries([id]);\n } catch (err) {\n if (this.isBenignDeliveryDeleteError(err)) {\n this.realtime.notifyChanged({ type: 'deleted', ids: [id] });\n return;\n }\n this.error.set(err instanceof Error ? err.message : 'Failed to delete inbox item');\n await this.syncActiveFromServer();\n return;\n }\n\n this.realtime.notifyChanged({ type: 'deleted', ids: [id] });\n\n const query = this.pageQuery();\n if (query?.mode === 'archive') {\n await this.loadArchivePage(query.filters, query.skip, query.take);\n }\n }\n\n /** Removes in-app deliveries whose communication correlation id matches (best-effort). */\n async dismissByCorrelationId(correlationId: string): Promise<void> {\n const normalized = correlationId.trim();\n if (!normalized || !this.port.deleteDeliveries || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const ids = this.readLocalItems()\n .filter((item) => item.correlationId?.trim() === normalized)\n .map((item) => item.id);\n\n for (const id of ids) {\n await this.deleteOne(id);\n }\n }\n\n /** Removes in-app deliveries whose correlation id starts with the prefix (e.g. chat thread). */\n async dismissByCorrelationIdPrefix(correlationIdPrefix: string): Promise<void> {\n const normalized = correlationIdPrefix.trim();\n if (!normalized || !this.port.deleteDeliveries || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n const ids = this.resolveDeliveryIdsForCorrelationPrefix(normalized);\n for (const id of ids) {\n await this.deleteOne(id);\n }\n }\n\n /**\n * Upserts rows into the local hot inbox without a server round-trip.\n * Used for optimistic chat previews while Communication:Send persists the delivery.\n */\n async upsertLocalItems(items: AXPInAppInboxItem[]): Promise<void> {\n if (!items.length || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n await this.engine.upsertMany(\n this.entityKey,\n items.map((item) => this.toPayload(normalizeInAppInboxItem(item))),\n );\n }\n\n /** Drops local-only rows (e.g. optimistic chat placeholders) without calling the API. */\n async removeLocalIds(ids: string[]): Promise<void> {\n const normalized = [...new Set(ids.map((id) => id?.trim()).filter(Boolean))];\n if (!normalized.length || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n await this.engine.removeMany(this.entityKey, normalized);\n }\n\n /**\n * After Communication:Send, swap the optimistic chat row for the real delivery when\n * the recipient can read it. If the delivery is not visible yet, keep the local preview.\n */\n async replacePendingChatWithDelivery(pendingId: string, deliveryId: string): Promise<void> {\n const pending = pendingId.trim();\n const delivery = deliveryId.trim();\n if (!pending || !delivery || !this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n if (!this.port.loadByIds) {\n return;\n }\n\n const loaded = await this.fetchActiveByIds([delivery]);\n if (loaded.length === 0) {\n return;\n }\n\n await this.engine.upsertMany(this.entityKey, loaded);\n if (pending !== delivery) {\n await this.engine.removeMany(this.entityKey, [pending]);\n }\n }\n\n //#region ----- Bootstrap & sync -----\n\n private async bootstrap(): Promise<void> {\n if (!this.canLoadInbox()) {\n return;\n }\n\n try {\n this.deleteLegacyInboxDb();\n this.boundUserKey = this.engine.resolveUserKey();\n await this.engine.hydrate(this.entityKey);\n if (!this.boundUserKey) {\n return;\n }\n await this.syncActiveFromServer();\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to bootstrap inbox');\n }\n }\n\n private async syncActiveFromServer(): Promise<AXPInAppInboxListResult> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n\n if (this.syncInFlight) {\n return this.syncInFlight;\n }\n\n this.syncInFlight = this.syncActiveFromServerInternal();\n try {\n return await this.syncInFlight;\n } finally {\n this.syncInFlight = null;\n }\n }\n\n private async syncActiveFromServerInternal(): Promise<AXPInAppInboxListResult> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n\n try {\n this.isLoading.set(true);\n this.error.set(null);\n const response = await this.fetchActiveHot();\n const items = sortInAppInboxItems(\n response.items.map((item) => normalizeInAppInboxItem(item as AXPInAppInboxItem)),\n );\n await this.engine.replaceAll(this.entityKey, items.map((item) => this.toPayload(item)));\n const local = this.readLocalItems();\n return { items: local, total: local.length };\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to load inbox');\n const local = this.readLocalItems();\n return { items: local, total: local.length };\n } finally {\n this.isLoading.set(false);\n if (this.pendingRealtimeRefresh) {\n this.pendingRealtimeRefresh = false;\n void this.syncActiveFromServer();\n }\n }\n }\n\n private async fetchActiveHot(): Promise<AXPPagedListResult<unknown>> {\n if (!this.canLoadInbox()) {\n return { items: [], total: 0 };\n }\n\n const response = await this.port.loadInbox({\n skip: 0,\n take: AXP_IN_APP_INBOX_LOCAL_MAX_ITEMS,\n excludeArchived: true,\n });\n return {\n items: response.items.map((item) => this.toPayload(normalizeInAppInboxItem(item))),\n total: response.total,\n };\n }\n\n private async fetchActiveByIds(ids: string[]): Promise<unknown[]> {\n if (!this.canLoadInbox() || !this.port.loadByIds) {\n return [];\n }\n\n try {\n const result = await this.port.loadByIds(ids);\n return result.items\n .filter((item) => item.archivedAt == null)\n .map((item) => this.toPayload(normalizeInAppInboxItem(item)));\n } catch (error) {\n if (this.isBenignDeliveryDeleteError(error)) {\n return [];\n }\n throw error;\n }\n }\n\n //#endregion\n\n //#region ----- Page views -----\n\n private async loadArchivePage(\n filters: AXPFilterQuery[],\n skip: number,\n take: number,\n ): Promise<AXPPagedListResult<AXPInAppInboxItem>> {\n if (!this.canLoadInbox()) {\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n return { items: [], total: 0 };\n }\n\n try {\n this.pageLoading.set(true);\n this.error.set(null);\n const result = await this.port.loadInbox({\n skip,\n take,\n filters,\n excludeArchived: false,\n });\n const items = sortInAppInboxItems(result.items.map((item) => normalizeInAppInboxItem(item)));\n this.archivePageItems.set(items);\n this.archiveTotalCount.set(result.total);\n return { items, total: result.total };\n } catch (err) {\n this.error.set(err instanceof Error ? err.message : 'Failed to load archived inbox');\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n return { items: [], total: 0 };\n } finally {\n this.pageLoading.set(false);\n }\n }\n\n //#endregion\n\n //#region ----- Realtime -----\n\n private async handleRealtimeEvent(event: {\n type: string;\n ids?: string[];\n }): Promise<void> {\n if (!this.canLoadInbox()) {\n return;\n }\n\n await this.ensureReady();\n\n if (event.type === 'seen' || event.type === 'read') {\n // Local optimistic path already patched; ignore echo noise.\n return;\n }\n\n if ((event.type === 'deleted' || event.type === 'archived') && event.ids?.length) {\n await this.localBridge.apply({\n entityKey: this.entityKey,\n type: 'remove',\n ids: event.ids,\n });\n const query = this.pageQuery();\n if (query?.mode === 'archive') {\n await this.loadArchivePage(query.filters, query.skip, query.take);\n }\n return;\n }\n\n if (this.isLoading()) {\n this.pendingRealtimeRefresh = true;\n return;\n }\n\n if (event.ids?.length) {\n await this.localBridge.apply({\n entityKey: this.entityKey,\n type: 'upsert',\n ids: event.ids,\n });\n return;\n }\n\n await this.localBridge.apply({ entityKey: this.entityKey, type: 'invalidate' });\n }\n\n //#endregion\n\n //#region ----- Local helpers -----\n\n private canLoadInbox(): boolean {\n return this.sessionService.isReadyForAppScopedApi;\n }\n\n private async clearInboxState(): Promise<void> {\n this.bootstrapPromise = null;\n this.syncInFlight = null;\n this.boundUserKey = null;\n this.pendingRealtimeRefresh = false;\n this.pageQuery.set(null);\n this.archivePageItems.set([]);\n this.archiveTotalCount.set(0);\n this.error.set(null);\n this.isLoading.set(false);\n this.pageLoading.set(false);\n await this.engine.clear(this.entityKey);\n }\n\n private readLocalItems(): AXPInAppInboxItem[] {\n const userId = this.sessionService.user?.id?.trim();\n const items = sortInAppInboxItems(\n this.localItems().map((row) => normalizeInAppInboxItem(row as Partial<AXPInAppInboxItem>)),\n );\n if (!userId) {\n return [];\n }\n return items.filter((item) => {\n const recipientUserId = item.recipientUserId?.trim();\n return !recipientUserId || recipientUserId === userId;\n });\n }\n\n private resolveDeliveryIdsForCorrelationPrefix(prefix: string): string[] {\n const conversationId = parseConversationIdFromDismissPrefix(prefix);\n return this.readLocalItems()\n .filter((item) => {\n if (item.correlationId?.trim().startsWith(prefix)) {\n return true;\n }\n return conversationId != null && matchesConversationInAppDismiss(item, conversationId);\n })\n .map((item) => item.id);\n }\n\n private toPayload(item: AXPInAppInboxItem): Record<string, unknown> {\n return {\n id: item.id,\n title: item.title,\n body: item.body,\n createdAt: item.createdAt.toISOString(),\n seenAt: item.seenAt ? item.seenAt.toISOString() : null,\n readAt: item.readAt ? item.readAt.toISOString() : null,\n sender: item.sender,\n iconClass: item.iconClass,\n showAvatar: item.showAvatar,\n priority: item.priority ?? 'Notice',\n isPinned: Boolean(item.isPinned),\n category: item.category,\n definitionKey: item.definitionKey,\n correlationId: item.correlationId,\n recipientUserId: item.recipientUserId,\n archivedAt: item.archivedAt ? item.archivedAt.toISOString() : null,\n actions: item.actions,\n };\n }\n\n private deleteLegacyInboxDb(): void {\n if (this.legacyDbCleanupDone || typeof indexedDB === 'undefined') {\n return;\n }\n this.legacyDbCleanupDone = true;\n try {\n indexedDB.deleteDatabase(AXP_IN_APP_INBOX_LEGACY_DB_NAME);\n } catch {\n // Best-effort cleanup of the pre-engine inbox DB.\n }\n }\n\n private isBenignDeliveryDeleteError(error: unknown): boolean {\n const message = collectErrorText(error);\n return /not found|Entity not found/i.test(message);\n }\n\n //#endregion\n}\n\nfunction collectErrorText(error: unknown): string {\n if (error == null) {\n return '';\n }\n if (typeof error === 'string') {\n return error;\n }\n if (error instanceof Error) {\n const extra = (error as { error?: unknown }).error;\n if (extra && typeof extra === 'object') {\n const nested = extra as { message?: unknown; error?: unknown };\n return `${error.message} ${String(nested.message ?? '')} ${String(nested.error ?? '')}`;\n }\n return extra ? `${error.message} ${String(extra)}` : error.message;\n }\n if (typeof error === 'object' && 'message' in error) {\n return String((error as { message?: unknown }).message ?? error);\n }\n return String(error);\n}\n\n//#endregion\n","import { AXPTaskBadgeProvider } from '@acorex-platform/framework-client/layout/components';\nimport { AXPInAppInboxConnectorService } from './features/in-app/inbox/in-app-inbox.connector.service';\nimport { computed, inject, Injectable } from '@angular/core';\n\n//#region ---- Communication in-app inbox badge ----\n\n@Injectable()\nexport class AXMCommunicationInboxBadgeProvider implements AXPTaskBadgeProvider {\n private readonly inbox = inject(AXPInAppInboxConnectorService);\n\n readonly key = 'badge-communication-inbox';\n readonly count = computed(() => this.inbox.unreadCount());\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport {\n AXP_COMMUNICATION_DELIVERY_STATUS_DEFINITION_KEY,\n AXP_COMMUNICATION_DELIVERY_STATUS_PENDING,\n type CommunicationDeliveryStatus,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXPStatusProvider } from '@acorex-platform/framework-shared/core';\n\nconst I18N = '@communication-management:entities.communication-delivery.states';\n\n//#region ---- Communication delivery status provider ----\n\n/** Engine-managed delivery lifecycle — read-only in the UI. */\nexport class AXMCommunicationDeliveryStatusProvider extends AXPStatusProvider {\n readonly key = AXP_COMMUNICATION_DELIVERY_STATUS_DEFINITION_KEY;\n\n readonly defaultStatus: CommunicationDeliveryStatus = AXP_COMMUNICATION_DELIVERY_STATUS_PENDING;\n\n readonly statuses = [\n { name: 'Pending' as const, title: `${I18N}.pending`, color: 'secondary' as AXStyleColorType, generateView: true, isInitial: true },\n { name: 'Queued' as const, title: `${I18N}.queued`, color: 'info' as AXStyleColorType, generateView: true },\n { name: 'Processing' as const, title: `${I18N}.processing`, color: 'primary' as AXStyleColorType, generateView: true },\n { name: 'Accepted' as const, title: `${I18N}.accepted`, color: 'info' as AXStyleColorType, generateView: true },\n { name: 'Sent' as const, title: `${I18N}.sent`, color: 'warning' as AXStyleColorType, generateView: true },\n { name: 'Delivered' as const, title: `${I18N}.delivered`, color: 'success' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'Failed' as const, title: `${I18N}.failed`, color: 'danger' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'RetryScheduled' as const, title: `${I18N}.retry-scheduled`, color: 'warning' as AXStyleColorType, generateView: true },\n { name: 'Cancelled' as const, title: `${I18N}.cancelled`, color: 'secondary' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'DeadLettered' as const, title: `${I18N}.dead-lettered`, color: 'danger' as AXStyleColorType, generateView: true, isFinal: true },\n ];\n\n readonly transitions = [];\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport {\n AXP_COMMUNICATION_STATUS_DEFINITION_KEY,\n AXP_COMMUNICATION_STATUS_PENDING,\n type CommunicationAggregateStatus,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXPStatusProvider } from '@acorex-platform/framework-shared/core';\n\nconst I18N = '@communication-management:entities.communication.states';\n\n//#region ---- Communication status provider ----\n\n/** Engine-managed aggregate communication status — read-only in the UI. */\nexport class AXMCommunicationStatusProvider extends AXPStatusProvider {\n readonly key = AXP_COMMUNICATION_STATUS_DEFINITION_KEY;\n\n readonly defaultStatus: CommunicationAggregateStatus = AXP_COMMUNICATION_STATUS_PENDING;\n\n readonly statuses = [\n { name: 'Pending' as const, title: `${I18N}.pending`, color: 'secondary' as AXStyleColorType, generateView: true, isInitial: true },\n { name: 'Processing' as const, title: `${I18N}.processing`, color: 'primary' as AXStyleColorType, generateView: true },\n { name: 'Completed' as const, title: `${I18N}.completed`, color: 'success' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'Failed' as const, title: `${I18N}.failed`, color: 'danger' as AXStyleColorType, generateView: true, isFinal: true },\n { name: 'Cancelled' as const, title: `${I18N}.cancelled`, color: 'secondary' as AXStyleColorType, generateView: true, isFinal: true },\n ];\n\n readonly transitions = [];\n}\n\n//#endregion\n","import type { AXPInAppInboxConfig, AXPInAppInboxI18nKeys } from './inbox/in-app-inbox.types';\n\n//#region ---- Communication in-app inbox registration values ----\n\nexport const communicationInAppInboxConfig: AXPInAppInboxConfig = {\n headerIconClass: 'fa-regular fa-bell',\n viewAllRoute: (appName) => [`/${appName}/my/notification`],\n settingsRoute: (appName) => [`/${appName}/settings/user/communication-notifications`],\n};\n\nexport const communicationInAppInboxI18n: AXPInAppInboxI18nKeys = {\n panelTitle: '@communication-management:in-app.panel.title',\n unread: '@communication-management:in-app.tabs.unread',\n all: '@communication-management:in-app.tabs.all',\n markAllAsRead: '@communication-management:in-app.actions.mark-all-read',\n viewAll: '@communication-management:in-app.actions.view-all',\n emptyTitle: '@communication-management:in-app.state.empty.title',\n emptyDescription: '@communication-management:in-app.state.empty.description',\n pageTitle: '@communication-management:in-app.page.title',\n pageDescriptionNone: '@communication-management:in-app.page.description.none',\n pageDescriptionUnread: '@communication-management:in-app.page.description.unread',\n pageDescriptionAllRead: '@communication-management:in-app.page.description.all-read',\n refresh: '@communication-management:in-app.actions.refresh',\n pin: '@general:actions.pin.title',\n unpin: '@general:actions.unpin.title',\n delete: '@communication-management:in-app.actions.delete',\n archive: '@communication-management:in-app.actions.archive',\n markAsRead: '@communication-management:in-app.actions.mark-as-read',\n selectItems: '@communication-management:in-app.actions.select-items',\n clearFilters: '@communication-management:in-app.actions.clear-filters',\n liveUpdatesOffline: '@communication-management:in-app.live-updates-offline',\n};\n\n//#endregion\n","import type {\n CommunicationDeliveryEngagementRequest,\n CommunicationDeliveryEngagementResult,\n CommunicationDeliveryMutationResult,\n CommunicationSendInput,\n CommunicationSendResult,\n CommunicationSmtpTestInput,\n CommunicationSmtpTestResult,\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nexport abstract class AXPCommunicationManagementClient {\n abstract send(input: CommunicationSendInput): Promise<CommunicationSendResult>;\n abstract markInAppSeen(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryEngagementResult>;\n abstract markInAppRead(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryEngagementResult>;\n abstract markAllInAppRead(): Promise<CommunicationDeliveryEngagementResult>;\n abstract toggleInAppPin(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryMutationResult>;\n abstract archiveInApp(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryMutationResult>;\n abstract deleteInApp(request: CommunicationDeliveryEngagementRequest): Promise<CommunicationDeliveryMutationResult>;\n abstract testSmtp(input: CommunicationSmtpTestInput): Promise<CommunicationSmtpTestResult>;\n}\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXPFilterQuery, AXPQueryRequest, AXP_QUERY_QUICK_SEARCH_FIELD } from '@acorex-platform/framework-shared/core';\n\nconst UNREAD_DELIVERY_FILTER: AXDataSourceFilterOption = {\n logic: 'or',\n filters: [\n { field: 'readAt', operator: { type: 'isNull' }, value: null },\n { field: 'readAt', operator: { type: 'equal' }, value: false },\n ],\n};\n\nconst INBOX_CATEGORY_FILTER: AXDataSourceFilterOption = {\n field: 'archivedAt',\n operator: { type: 'isNull' },\n value: null,\n};\n\nconst ARCHIVE_CATEGORY_FILTER = {\n field: 'archivedAt',\n operator: { type: 'isNotEmpty' },\n} as unknown as AXDataSourceFilterOption;\n\nexport function buildCommunicationInAppInboxPageQuery(\n filters: AXPFilterQuery[],\n skip: number,\n take: number,\n communicationIds?: string[],\n): AXPQueryRequest {\n const conditions: AXDataSourceFilterOption[] = [\n { field: 'channel', operator: { type: 'equal' }, value: 'in-app' },\n ];\n\n const readFilter = filters.find((f) => f.field === 'readStatus');\n if (readFilter?.value === 'unread') {\n conditions.push(UNREAD_DELIVERY_FILTER);\n }\n\n const categoryFilter = filters.find((f) => f.field === 'category');\n if (categoryFilter?.value === 'Archive') {\n conditions.push(ARCHIVE_CATEGORY_FILTER);\n } else {\n conditions.push(INBOX_CATEGORY_FILTER);\n }\n\n if (communicationIds?.length) {\n conditions.push({\n logic: 'or',\n filters: communicationIds.map((id) => ({\n field: 'communicationId',\n operator: { type: 'equal' as const },\n value: id,\n })),\n });\n } else if (communicationIds?.length === 0) {\n conditions.push({\n field: 'id',\n operator: { type: 'equal' },\n value: '__no_results__',\n });\n }\n\n return {\n skip,\n take,\n sort: [\n { field: 'isPinned', dir: 'desc' },\n { field: 'deliveredAt', dir: 'desc' },\n ],\n filter: { logic: 'and', filters: conditions },\n };\n}\n\nexport function resolveCommunicationInboxCommunicationFilters(\n filters: AXPFilterQuery[],\n): { searchText?: string; definitionKey?: string; priority?: string } {\n const searchFilter = filters.find(\n (f) => f.field === 'all' || f.field === AXP_QUERY_QUICK_SEARCH_FIELD,\n );\n const searchText = searchFilter?.value != null ? String(searchFilter.value).trim() : '';\n\n const typeFilter = filters.find((f) => f.field === 'type');\n const definitionKey = typeFilter?.value ? String(typeFilter.value) : undefined;\n\n const priorityFilter = filters.find((f) => f.field === 'priority');\n const priority = priorityFilter?.value ? String(priorityFilter.value) : undefined;\n\n return {\n searchText: searchText || undefined,\n definitionKey,\n priority,\n };\n}\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport type { AXPFilterQuery } from '@acorex-platform/framework-shared/core';\nimport {\n RootConfig,\n resolveCommunicationMessage,\n type AXMCommunicationDeliveryModel,\n type AXMCommunicationModel,\n type CommunicationPriority,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommunicationManagementClient } from '../../communication-management-client.port';\nimport {\n buildCommunicationInAppInboxPageQuery,\n resolveCommunicationInboxCommunicationFilters,\n} from './communication-in-app-inbox-page-query.util';\nimport type {\n AXPInAppInboxItem,\n AXPInAppInboxListResult,\n AXPInAppInboxLoadQuery,\n} from './inbox/in-app-inbox.types';\nimport type { AXPInAppInboxPort } from './inbox/in-app-inbox.port';\nimport {\n resolveConversationInAppInboxActions,\n resolveConversationInAppInboxSender,\n} from './inbox/in-app-inbox-conversation.util';\nimport { resolveInAppInboxIconClass } from './inbox/in-app-inbox-icon.util';\nimport { sortInAppInboxItems } from './inbox/in-app-inbox.util';\n\nconst IN_APP_CHANNEL = 'in-app';\n\n//#region ---- Communication delivery inbox port ----\n\n@Injectable()\nexport class AXMCommunicationInAppInboxPort implements AXPInAppInboxPort {\n readonly capabilities = {\n seenTracking: true,\n readTracking: true,\n pinSupport: true,\n categoryTabs: false,\n } as const;\n\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly client = inject(AXPCommunicationManagementClient);\n private readonly deliveryData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.communicationDelivery.name)\n .data<string, AXMCommunicationDeliveryModel, AXMCommunicationDeliveryModel>();\n private readonly communicationData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.communication.name)\n .data<string, AXMCommunicationModel, AXMCommunicationModel>();\n\n async loadInbox(query: AXPInAppInboxLoadQuery = {}): Promise<AXPInAppInboxListResult> {\n if (!this.sessionService.isReadyForAppScopedApi) {\n return { items: [], total: 0 };\n }\n\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return { items: [], total: 0 };\n }\n\n const skip = query.skip ?? 0;\n const take = query.take ?? 1000;\n const filters = query.filters ?? [];\n const excludeArchived = query.excludeArchived ?? filters.length === 0;\n\n const communicationIds = await this.resolveCommunicationIds(filters);\n const request = buildCommunicationInAppInboxPageQuery(filters, skip, take, communicationIds);\n const baseFilters = [...(request.filter?.filters ?? [])];\n\n if (userId) {\n baseFilters.push({\n field: 'recipientUserId',\n operator: { type: 'equal' as const },\n value: userId,\n });\n }\n\n if (excludeArchived && !filters.some((filter) => filter.field === 'category' && filter.value === 'Archive')) {\n baseFilters.push({\n field: 'archivedAt',\n operator: { type: 'isNull' },\n value: null,\n });\n }\n\n const result = await this.deliveryData.query({\n ...request,\n filter: { logic: 'and', filters: baseFilters },\n });\n\n const deliveries = result.items as AXMCommunicationDeliveryModel[];\n const items = (await this.mapDeliveriesToInboxItems(deliveries)).filter(\n (item) => item.recipientUserId?.trim() === userId,\n );\n\n return { total: items.length, items };\n }\n\n async loadByIds(ids: string[]): Promise<AXPInAppInboxListResult> {\n if (!this.sessionService.isReadyForAppScopedApi) {\n return { items: [], total: 0 };\n }\n\n const deliveryIds = [...new Set(ids.map((id) => id?.trim()).filter(Boolean))];\n if (deliveryIds.length === 0) {\n return { total: 0, items: [] };\n }\n\n const userId = this.sessionService.user?.id?.trim();\n if (!userId) {\n return { total: 0, items: [] };\n }\n\n const filters: Array<Record<string, unknown>> = [\n { field: 'channel', operator: { type: 'equal' as const }, value: IN_APP_CHANNEL },\n {\n logic: 'or' as const,\n filters: deliveryIds.map((id) => ({\n field: 'id',\n operator: { type: 'equal' as const },\n value: id,\n })),\n },\n ];\n\n filters.push({\n field: 'recipientUserId',\n operator: { type: 'equal' as const },\n value: userId,\n });\n\n const result = await this.deliveryData.query({\n skip: 0,\n take: deliveryIds.length,\n filter: { logic: 'and', filters: filters as never },\n });\n\n const deliveries = result.items as AXMCommunicationDeliveryModel[];\n const items = (await this.mapDeliveriesToInboxItems(deliveries)).filter(\n (item) => item.recipientUserId?.trim() === userId,\n );\n return { total: items.length, items };\n }\n\n async markSeen(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.markInAppSeen({ deliveryIds });\n }\n\n async markRead(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.markInAppRead({ deliveryIds });\n }\n\n async markAllRead(): Promise<void> {\n await this.client.markAllInAppRead();\n }\n\n async togglePin(id: string): Promise<void> {\n if (!id.trim()) {\n return;\n }\n\n await this.client.toggleInAppPin({ deliveryIds: [id] });\n }\n\n async archive(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.archiveInApp({ deliveryIds });\n }\n\n async deleteDeliveries(ids: string[]): Promise<void> {\n const deliveryIds = ids.filter(Boolean);\n if (deliveryIds.length === 0) {\n return;\n }\n\n await this.client.deleteInApp({ deliveryIds });\n }\n\n private async mapDeliveriesToInboxItems(\n deliveries: AXMCommunicationDeliveryModel[],\n ): Promise<AXPInAppInboxItem[]> {\n const communicationMap = await this.loadCommunicationsById(\n [...new Set(deliveries.map((delivery) => delivery.communicationId).filter(Boolean))],\n );\n\n return sortInAppInboxItems(\n deliveries.map((item) => this.toInboxItem(item, communicationMap.get(item.communicationId))),\n );\n }\n\n private async resolveCommunicationIds(filters: AXPFilterQuery[]): Promise<string[] | undefined> {\n const { searchText, definitionKey, priority } = resolveCommunicationInboxCommunicationFilters(filters);\n if (!searchText && !definitionKey && !priority) {\n return undefined;\n }\n\n const conditions = [];\n if (definitionKey) {\n conditions.push({\n field: 'definitionKey',\n operator: { type: 'equal' as const },\n value: definitionKey,\n });\n }\n if (priority) {\n conditions.push({\n field: 'priority',\n operator: { type: 'equal' as const },\n value: priority,\n });\n }\n if (searchText) {\n conditions.push({\n logic: 'or' as const,\n filters: [\n { field: 'title', operator: { type: 'contains' as const }, value: searchText },\n { field: 'message.subject', operator: { type: 'contains' as const }, value: searchText },\n { field: 'message.body', operator: { type: 'contains' as const }, value: searchText },\n ],\n });\n }\n\n const result = await this.communicationData.query({\n take: 1000,\n skip: 0,\n filter: conditions.length > 0 ? { logic: 'and', filters: conditions } : undefined,\n });\n\n return (result.items as AXMCommunicationModel[]).map((item) => item.id);\n }\n\n private async loadCommunicationsById(ids: string[]): Promise<Map<string, AXMCommunicationModel>> {\n const map = new Map<string, AXMCommunicationModel>();\n if (ids.length === 0) {\n return map;\n }\n\n const result = await this.communicationData.query({\n take: ids.length,\n skip: 0,\n filter: {\n logic: 'or',\n filters: ids.map((id) => ({\n field: 'id',\n operator: { type: 'equal' as const },\n value: id,\n })),\n },\n });\n\n for (const communication of result.items as AXMCommunicationModel[]) {\n map.set(communication.id, communication);\n }\n\n return map;\n }\n\n private toInboxItem(\n delivery: AXMCommunicationDeliveryModel,\n communication?: AXMCommunicationModel,\n ): AXPInAppInboxItem {\n const message = communication\n ? resolveCommunicationMessage(communication as unknown as Record<string, unknown>)\n : { subject: '', body: '' };\n\n const definitionKey = communication?.definitionKey;\n const priority = (communication?.priority as CommunicationPriority | undefined) ?? 'Notice';\n const title = message.subject || communication?.title || '';\n const body = message.body;\n const actions = resolveConversationInAppInboxActions({\n definitionKey,\n correlationId: communication?.correlationId,\n actions: communication?.actions,\n });\n const sender = resolveConversationInAppInboxSender({\n definitionKey,\n title,\n body,\n correlationId: communication?.correlationId,\n actions,\n });\n const iconClass = resolveInAppInboxIconClass({ definitionKey, priority, sender });\n\n return {\n id: delivery.id,\n title,\n body,\n createdAt: delivery.deliveredAt ? new Date(delivery.deliveredAt) : new Date(),\n seenAt: delivery.seenAt ? new Date(delivery.seenAt) : delivery.seenAt ?? null,\n readAt: delivery.readAt ? new Date(delivery.readAt) : delivery.readAt ?? null,\n sender,\n iconClass,\n priority,\n isPinned: Boolean(delivery.isPinned),\n definitionKey,\n correlationId: communication?.correlationId ?? undefined,\n recipientUserId: delivery.recipientUserId?.trim() || undefined,\n archivedAt: delivery.archivedAt ? new Date(delivery.archivedAt) : delivery.archivedAt ?? null,\n actions,\n };\n }\n}\n\n//#endregion\n","import { inject, type Provider } from '@angular/core';\nimport {\n AXP_APP_STARTUP_PRIORITY,\n provideAppStartUpTask,\n} from '@acorex-platform/framework-client/core';\nimport { AXPInAppInboxRealtimeService } from './inbox/in-app-inbox-realtime.service';\nimport type { AXPInAppInboxChangeEvent } from './inbox/in-app-inbox.types';\nimport {\n AXPRealtimeDispatcherService,\n AXP_REALTIME_TOPIC_INBOX_REFRESH,\n type AXPRealtimeInboxRefreshPayload,\n} from '@acorex-platform/framework-client/realtime';\n\n//#region ---- Inbox realtime topic handler ----\n\nexport function provideCommunicationInAppRealtimeHandlers(): Provider[] {\n return [\n provideAppStartUpTask(() => {\n const dispatcher = inject(AXPRealtimeDispatcherService, { optional: true });\n const inboxRealtime = inject(AXPInAppInboxRealtimeService);\n return {\n name: 'communication-in-app-realtime-handlers',\n priority: AXP_APP_STARTUP_PRIORITY.realtimeHandlers,\n run: async () => {\n dispatcher?.register({\n topic: AXP_REALTIME_TOPIC_INBOX_REFRESH,\n handle: (envelope) => {\n const payload = (envelope.payload ?? {}) as AXPRealtimeInboxRefreshPayload;\n const ids = [\n ...(payload.deliveryIds ?? []),\n ...(payload.deliveryId ? [payload.deliveryId] : []),\n ].filter(Boolean);\n\n const event: AXPInAppInboxChangeEvent = {\n type: resolveInboxChangeType(payload.op),\n ids: ids.length > 0 ? [...new Set(ids)] : undefined,\n };\n inboxRealtime.notifyChanged(event);\n },\n });\n },\n };\n }),\n ];\n}\n\nfunction resolveInboxChangeType(\n op: AXPRealtimeInboxRefreshPayload['op'],\n): AXPInAppInboxChangeEvent['type'] {\n if (op === 'deleted') {\n return 'deleted';\n }\n if (op === 'archived') {\n return 'archived';\n }\n if (op === 'created' || op === 'updated') {\n return 'refresh';\n }\n return 'refresh';\n}\n\n//#endregion\n","import { Injectable, signal } from '@angular/core';\nimport type { AXPInAppInboxSyncStatus } from './inbox/in-app-inbox-sync-status.token';\n\n//#region ---- In-app inbox sync status ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMCommunicationInAppInboxSyncStatusService implements AXPInAppInboxSyncStatus {\n readonly liveUpdatesConnected = signal(true);\n}\n\n//#endregion\n","import { DestroyRef, inject, type Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AXP_APP_STARTUP_PRIORITY,\n provideAppStartUpTask,\n} from '@acorex-platform/framework-client/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPInAppInboxConnectorService } from './inbox/in-app-inbox.connector.service';\nimport { AXPRealtimeConnectionService } from '@acorex-platform/framework-client/realtime';\nimport { distinctUntilChanged, EMPTY, switchMap, timer } from 'rxjs';\nimport { AXMCommunicationInAppInboxSyncStatusService } from './communication-in-app-inbox-sync-status.service';\n\n//#region ---- Constants ----\n\nconst POLL_INTERVAL_MS = 60_000;\nconst RECONNECT_REFRESH_DELAY_MS = 250;\n\n//#endregion\n\n//#region ---- In-app inbox fallback sync ----\n\n/**\n * Keeps the inbox fresh when Socket.IO is down: poll while disconnected,\n * refresh on reconnect and when the tab becomes visible again.\n */\nexport function provideCommunicationInAppInboxFallbackSync(): Provider[] {\n return [\n provideAppStartUpTask(() => {\n const connector = inject(AXPInAppInboxConnectorService);\n const sessionService = inject(AXPSessionService);\n const syncStatus = inject(AXMCommunicationInAppInboxSyncStatusService);\n const connection = inject(AXPRealtimeConnectionService, { optional: true });\n const destroyRef = inject(DestroyRef);\n\n const refreshIfAuthorized = (): void => {\n if (sessionService.isReadyForAppScopedApi) {\n void connector.refresh();\n }\n };\n\n return {\n name: 'communication-in-app-inbox-fallback',\n priority: AXP_APP_STARTUP_PRIORITY.realtimeSubscriptions,\n run: async () => {\n if (!connection) {\n syncStatus.liveUpdatesConnected.set(false);\n return;\n }\n\n let wasConnected = connection.isSocketConnected();\n\n connection.connectionStatus$\n .pipe(distinctUntilChanged(), takeUntilDestroyed(destroyRef))\n .subscribe((status) => {\n const connected = status === 'connected';\n syncStatus.liveUpdatesConnected.set(connected);\n\n if (connected && !wasConnected) {\n timer(RECONNECT_REFRESH_DELAY_MS)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe(() => {\n refreshIfAuthorized();\n });\n }\n\n wasConnected = connected;\n });\n\n connection.connectionStatus$\n .pipe(\n distinctUntilChanged(),\n switchMap((status) => {\n if (status === 'connected') {\n return EMPTY;\n }\n return timer(POLL_INTERVAL_MS, POLL_INTERVAL_MS);\n }),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe(() => {\n refreshIfAuthorized();\n });\n\n document.addEventListener(\n 'visibilitychange',\n () => {\n if (document.visibilityState === 'visible') {\n // Re-sync active inbox in case realtime was missed while hidden.\n refreshIfAuthorized();\n }\n },\n { passive: true },\n );\n },\n };\n }),\n ];\n}\n\n//#endregion\n","import {\n AXP_IN_APP_NOTIFICATION_SERVICE,\n type AXPInAppNotificationCreateRequest,\n type AXPInAppNotificationService,\n} from '@acorex-platform/framework-client/common';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommunicationManagementClient } from '../../communication-management-client.port';\nimport { AXPInAppInboxRealtimeService } from './inbox/in-app-inbox-realtime.service';\n\n//#region ---- Communication-backed in-app notification port ----\n\n@Injectable()\nexport class AXMCommunicationInAppNotificationService implements AXPInAppNotificationService {\n private readonly client = inject(AXPCommunicationManagementClient);\n private readonly realtime = inject(AXPInAppInboxRealtimeService);\n\n async create(request: AXPInAppNotificationCreateRequest): Promise<void> {\n const recipientUserId = request.receiver.id?.trim();\n if (!recipientUserId) {\n return;\n }\n\n await this.client.send({\n title: request.title,\n message: {\n subject: request.title,\n body: request.body,\n },\n channel: 'in-app',\n recipientUserId,\n recipientName: request.receiver.fullName,\n correlationId: request.id,\n idempotencyKey: request.id,\n });\n\n this.realtime.notifyChanged({ type: 'refresh' });\n }\n}\n\nexport const communicationInAppNotificationServiceProvider = {\n provide: AXP_IN_APP_NOTIFICATION_SERVICE,\n useClass: AXMCommunicationInAppNotificationService,\n};\n\n//#endregion\n","//#region ---- Shared in-app inbox types ----\n\nimport type { AXPFilterQuery, AXPUserReference } from '@acorex-platform/framework-shared/core';\n\nexport type AXPInAppInboxPriority = 'Notice' | 'Danger' | 'Warning';\n\nexport type AXPInAppInboxTabKey = 'Unread' | 'All' | (string & {});\n\nexport interface AXPInAppInboxCapabilities {\n seenTracking: boolean;\n readTracking: boolean;\n pinSupport: boolean;\n categoryTabs: boolean;\n}\n\nexport interface AXPInAppInboxItem {\n id: string;\n title: string;\n body: string;\n createdAt: Date;\n seenAt?: Date | null;\n readAt?: Date | null;\n sender?: AXPUserReference;\n /** Font Awesome classes for a circular leading icon (used instead of user avatar). */\n iconClass?: string;\n /** When false, hide the leading avatar/icon for this row. Omitted = show (if the host also allows it). */\n showAvatar?: boolean;\n priority?: AXPInAppInboxPriority;\n isPinned?: boolean;\n category?: string;\n definitionKey?: string;\n correlationId?: string;\n /** Delivery recipient; used to keep the local inbox scoped to the signed-in user. */\n recipientUserId?: string;\n archivedAt?: Date | null;\n actions?: Array<{\n title: string;\n command: {\n name: string;\n options?: Record<string, unknown>;\n };\n }>;\n}\n\nexport interface AXPInAppInboxLoadQuery {\n skip?: number;\n take?: number;\n filters?: AXPFilterQuery[];\n /** When true (default for tray), exclude archived deliveries. */\n excludeArchived?: boolean;\n}\n\nexport interface AXPInAppInboxListResult {\n total: number;\n items: AXPInAppInboxItem[];\n}\n\nexport interface AXPInAppInboxI18nKeys {\n panelTitle: string;\n unread: string;\n all: string;\n markAllAsRead: string;\n viewAll: string;\n emptyTitle: string;\n emptyDescription: string;\n pageTitle: string;\n pageDescriptionNone: string;\n pageDescriptionUnread: string;\n pageDescriptionAllRead: string;\n refresh: string;\n pin: string;\n unpin: string;\n delete: string;\n archive: string;\n markAsRead: string;\n selectItems: string;\n clearFilters: string;\n liveUpdatesOffline: string;\n}\n\nexport interface AXPInAppInboxConfig {\n headerIconClass: string;\n viewAllRoute: (appName: string) => string[];\n settingsRoute?: (appName: string) => string[];\n}\n\nexport interface AXPInAppInboxChangeEvent {\n type: 'created' | 'seen' | 'read' | 'refresh' | 'deleted' | 'archived' | 'pin';\n item?: AXPInAppInboxItem;\n ids?: string[];\n}\n\n//#endregion\n","//#region ---- In-app inbox configuration tokens ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPInAppInboxConfig, AXPInAppInboxI18nKeys } from './in-app-inbox.types';\n\nexport const AXP_IN_APP_INBOX_CONFIG = new InjectionToken<AXPInAppInboxConfig>('AXP_IN_APP_INBOX_CONFIG');\n\nexport const AXP_IN_APP_INBOX_I18N = new InjectionToken<AXPInAppInboxI18nKeys>('AXP_IN_APP_INBOX_I18N');\n\n//#endregion\n","import { InjectionToken, type Signal } from '@angular/core';\n\n//#region ---- In-app inbox sync status ----\n\nexport interface AXPInAppInboxSyncStatus {\n /** True when Socket.IO live updates are connected. */\n liveUpdatesConnected: Signal<boolean>;\n}\n\nexport const AXP_IN_APP_INBOX_SYNC_STATUS = new InjectionToken<AXPInAppInboxSyncStatus>(\n 'AXP_IN_APP_INBOX_SYNC_STATUS',\n);\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPUserAvatarComponent, AXPUserCardDirective } from '@acorex-platform/framework-client/layout/components';\nimport { containsHtmlMarkup } from '@acorex-platform/framework-shared/core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport type { AXPInAppInboxItem } from '../in-app-inbox.types';\nimport { getInAppInboxPriorityClass, isInAppInboxUnread } from '../in-app-inbox.util';\nimport { isInAppInboxRealUserSender, resolveInAppInboxIconClass } from '../in-app-inbox-icon.util';\n\n//#region ---- Shared in-app inbox row item ----\n\n@Component({\n selector: 'axp-in-app-inbox-item',\n templateUrl: './in-app-inbox-item.component.html',\n styleUrls: ['./in-app-inbox-item.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXPUserAvatarComponent,\n AXPUserCardDirective,\n AXBadgeModule,\n AXFormatModule,\n AXSafePipe,\n AXTranslationModule,\n ],\n})\nexport class AXPInAppInboxItemComponent {\n data = input.required<AXPInAppInboxItem>();\n showAvatar = input(true);\n showDate = input(true);\n showPin = input(false);\n pinLabelKey = input('@general:actions.pin.title');\n unpinLabelKey = input('@general:actions.unpin.title');\n /** When true, unread rows get a subtle background (use on mixed read/unread lists only). */\n highlightUnreadBackground = input(false);\n showDismissUnread = input(true);\n markAsReadLabelKey = input('@communication-management:in-app.actions.mark-as-read');\n\n protected readonly priorityClass = computed(() => getInAppInboxPriorityClass(this.data().priority));\n protected readonly isUnread = computed(() => isInAppInboxUnread(this.data().readAt));\n protected readonly primaryAction = computed(() => this.data().actions?.[0]);\n protected readonly hasDefaultAction = computed(() => !!this.primaryAction()?.command?.name?.trim());\n protected readonly headline = computed(() => {\n const item = this.data();\n if (isInAppInboxRealUserSender(item.sender)) {\n return item.sender!.fullName!.trim();\n }\n return item.title ?? '';\n });\n protected readonly itemIconClass = computed(() => resolveInAppInboxIconClass(this.data()));\n protected readonly showItemLeading = computed(() => this.showAvatar() && this.data().showAvatar !== false);\n protected readonly showItemIcon = computed(() => this.showItemLeading() && !!this.itemIconClass());\n protected readonly showItemAvatar = computed(() => {\n if (!this.showItemLeading() || this.itemIconClass()) {\n return false;\n }\n return isInAppInboxRealUserSender(this.data().sender);\n });\n protected readonly showDismiss = computed(() => this.isUnread() && this.showDismissUnread());\n protected readonly showMeta = computed(() => this.showDate() || this.showDismiss());\n protected readonly bodyIsHtml = computed(\n () => !this.isI18nKey(this.data().body) && containsHtmlMarkup(this.data().body),\n );\n protected readonly bodyHtml = computed(() => stripInboxHeadingMarkup(this.data().body));\n\n itemPress = output<string>();\n markAsRead = output<string>();\n togglePin = output<string>();\n closePopover = output<void>();\n\n protected isI18nKey(value: string): boolean {\n return value.startsWith('@');\n }\n\n protected onPress(id: string): void {\n if (!this.hasDefaultAction()) {\n return;\n }\n this.itemPress.emit(id);\n this.closePopover.emit();\n }\n\n protected onTogglePin(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.togglePin.emit(this.data().id);\n }\n\n protected onDismissMarkAsRead(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.markAsRead.emit(this.data().id);\n }\n}\n\nfunction stripInboxHeadingMarkup(html: string): string {\n return html\n .replace(/<h[1-6]\\b[^>]*>[\\s\\S]*?<\\/h[1-6]>/gi, '')\n .replace(/(?:<p\\b[^>]*>)?\\s*(?:—|&mdash;|&#8212;)\\s*[^<\\n]+(?:<\\/p>)?\\s*$/i, '')\n .trim();\n}\n\n//#endregion\n","<div\n class=\"axp-in-app-inbox-item\"\n [id]=\"data().id\"\n (click)=\"onPress(data().id)\"\n [class]=\"[\n priorityClass(),\n isUnread() ? 'unread' : 'read',\n isUnread() && highlightUnreadBackground() ? 'unread-highlight' : '',\n bodyIsHtml() ? 'axp-in-app-inbox-item--rich' : '',\n ]\"\n>\n @if (showItemIcon()) {\n <!-- ----- Priority icon when the item has no real sender avatar ----- -->\n <div class=\"axp-in-app-inbox-item__icon\" [class]=\"priorityClass()\">\n <i [class]=\"itemIconClass()\" aria-hidden=\"true\"></i>\n </div>\n } @else if (showItemAvatar()) {\n <!-- ----- Sender avatar for conversation-style inbox rows ----- -->\n <div class=\"axp-in-app-inbox-item__avatar\">\n <axp-user-avatar\n [size]=\"48\"\n [userId]=\"data().sender!.id\"\n [axpUserCard]=\"data().sender!.id\"\n ></axp-user-avatar>\n @if (isUnread()) {\n <!-- ----- Unread status dot on the avatar ----- -->\n <div class=\"axp-in-app-inbox-item__unread-badge\"></div>\n }\n </div>\n }\n\n <div class=\"axp-in-app-inbox-item__content\">\n <div class=\"axp-in-app-inbox-item__headline\">\n <div class=\"axp-in-app-inbox-item__title\" [class.--unread]=\"isUnread()\">\n @if (isI18nKey(headline())) {\n <!-- ----- Localized headline ----- -->\n {{ headline() | translate | async }}\n } @else {\n <!-- ----- Plain-text sender name or title ----- -->\n {{ headline() }}\n }\n </div>\n @if (showPin()) {\n @if (data().isPinned) {\n <!-- ----- Pinned state next to the title ----- -->\n <button\n type=\"button\"\n class=\"axp-in-app-inbox-item__pin\"\n [attr.aria-label]=\"unpinLabelKey() | translate | async\"\n (click)=\"onTogglePin($event)\"\n >\n <ax-icon><i class=\"fa-solid fa-thumbtack\"></i></ax-icon>\n </button>\n } @else {\n <!-- ----- Unpinned control shown on hover ----- -->\n <button\n type=\"button\"\n class=\"axp-in-app-inbox-item__pin axp-in-app-inbox-item__pin--muted\"\n [attr.aria-label]=\"pinLabelKey() | translate | async\"\n (click)=\"onTogglePin($event)\"\n >\n <ax-icon><i class=\"fa-regular fa-thumbtack\"></i></ax-icon>\n </button>\n }\n }\n </div>\n\n @if (data().category) {\n <!-- ----- Optional category under the headline ----- -->\n <div class=\"axp-in-app-inbox-item__subline\">\n <span class=\"axp-in-app-inbox-item__category\">{{ data().category }}</span>\n </div>\n }\n\n <div class=\"axp-in-app-inbox-item__body\" [class.axp-in-app-inbox-item__body--html]=\"bodyIsHtml()\">\n @if (isI18nKey(data().body)) {\n <!-- ----- Localized body preview ----- -->\n {{ data().body | translate | async }}\n }\n <!-- ----- Light HTML body (lists, status badges) ----- -->\n @else if (bodyIsHtml()) {\n <div [innerHTML]=\"bodyHtml() | safe: 'html'\"></div>\n }\n <!-- ----- Plain-text body preview ----- -->\n @else {\n {{ data().body }}\n }\n </div>\n </div>\n\n @if (showMeta()) {\n <!-- ----- Time at top-end; close replaces it on hover ----- -->\n <div class=\"axp-in-app-inbox-item__meta\" [class.--has-dismiss]=\"showDismiss()\">\n @if (showDate()) {\n <span class=\"axp-in-app-inbox-item__time\">{{ data().createdAt | format: 'timeleft' | async }}</span>\n }\n @if (showDismiss()) {\n <button\n type=\"button\"\n class=\"axp-in-app-inbox-item__dismiss\"\n [attr.aria-label]=\"markAsReadLabelKey() | translate | async\"\n (click)=\"onDismissMarkAsRead($event)\"\n >\n <ax-icon><i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i></ax-icon>\n </button>\n }\n </div>\n }\n\n @if (showDate() || hasDefaultAction()) {\n <!-- ----- Chevron always vertically centered in the row ----- -->\n <div class=\"axp-in-app-inbox-item__actions\">\n @if (showDate()) {\n <span class=\"axp-in-app-inbox-item__time-sizer\" aria-hidden=\"true\">\n {{ data().createdAt | format: 'timeleft' | async }}\n </span>\n }\n @if (hasDefaultAction()) {\n <div class=\"axp-in-app-inbox-item__chevron\" aria-hidden=\"true\">\n <ax-icon><i class=\"fa-light fa-chevron-right axp-in-app-inbox-item__chevron-icon\"></i></ax-icon>\n </div>\n }\n </div>\n }\n</div>\n","//#region ----- Imports -----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { IN_APP_REPORT_GENERATION_DEFINITION_KEY } from './in-app-inbox-icon.util';\nimport { AXPInAppInboxConnectorService } from './in-app-inbox.connector.service';\nimport type { AXPInAppInboxItem } from './in-app-inbox.types';\n\n//#endregion\n\n//#region ----- Inbox action -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPInAppInboxActionService {\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly commands = inject(AXPCommandService);\n\n async openItem(id: string): Promise<void> {\n const item = this.findItem(id);\n if (this.shouldDeleteOnOpen(item)) {\n await this.connector.deleteOne(id);\n } else {\n await this.connector.markAsRead([id]);\n }\n const action = item?.actions?.[0];\n if (!action?.command?.name) {\n return;\n }\n await this.commands.execute(action.command.name, action.command.options ?? {});\n }\n\n private shouldDeleteOnOpen(item: AXPInAppInboxItem | undefined): boolean {\n return item?.definitionKey === IN_APP_REPORT_GENERATION_DEFINITION_KEY;\n }\n\n private findItem(id: string): AXPInAppInboxItem | undefined {\n return (\n this.connector.inboxList().find((item) => item.id === id) ??\n this.connector.pagedInboxList().find((item) => item.id === id)\n );\n }\n}\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPInAppInboxActionService } from '../in-app-inbox-action.service';\nimport { AXPInAppInboxConnectorService } from '../in-app-inbox.connector.service';\nimport { AXP_IN_APP_INBOX_CONFIG, AXP_IN_APP_INBOX_I18N } from '../in-app-inbox.tokens';\nimport type { AXPInAppInboxItem, AXPInAppInboxTabKey } from '../in-app-inbox.types';\nimport { isInAppInboxUnread } from '../in-app-inbox.util';\nimport { AXPInAppInboxItemComponent } from './in-app-inbox-item.component';\n\n//#region ---- Shared in-app inbox tray panel ----\n\ninterface InboxTabData {\n key: AXPInAppInboxTabKey;\n labelKey: string;\n count: number;\n}\n\n@Component({\n selector: 'axp-in-app-inbox-panel',\n templateUrl: './in-app-inbox-panel.component.html',\n styleUrls: ['./in-app-inbox-panel.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXTabsModule,\n AXDecoratorModule,\n AXBadgeModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPInAppInboxItemComponent,\n ],\n})\nexport class AXPInAppInboxPanelComponent implements OnInit {\n unreadCountChange = output<number>();\n closePopover = output<void>();\n\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly inboxActions = inject(AXPInAppInboxActionService);\n private readonly toastService = inject(AXToastService);\n private readonly router = inject(Router);\n private readonly sessionService = inject(AXPSessionService);\n protected readonly i18n = inject(AXP_IN_APP_INBOX_I18N);\n protected readonly config = inject(AXP_IN_APP_INBOX_CONFIG);\n\n protected readonly items = this.connector.inboxList;\n protected readonly isLoading = this.connector.loading;\n protected activeTab = signal<AXPInAppInboxTabKey>('Unread');\n\n protected readonly tabItems = computed(() => this.buildTabItems(this.items()));\n protected readonly showPin = computed(() => this.connector.capabilities.pinSupport);\n\n constructor() {\n effect(() => {\n const unread = this.tabItems().find((tab) => tab.key === 'Unread')?.count ?? 0;\n this.unreadCountChange.emit(unread);\n });\n }\n\n async ngOnInit(): Promise<void> {\n try {\n await this.connector.ensureReady();\n await this.connector.markUnseenAsSeen();\n } catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to load inbox.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n\n protected changeActiveTab(tab: AXPInAppInboxTabKey): void {\n this.activeTab.set(tab);\n }\n\n protected getItems(tab: AXPInAppInboxTabKey): AXPInAppInboxItem[] {\n const list = this.items();\n if (tab === 'All') {\n return list;\n }\n if (tab === 'Unread') {\n return list.filter((item) => isInAppInboxUnread(item.readAt));\n }\n return list.filter((item) => item.category === tab);\n }\n\n protected async openInboxItem(id: string): Promise<void> {\n await this.inboxActions.openItem(id);\n }\n\n protected async dismissUnread(id: string): Promise<void> {\n await this.connector.markAsRead([id]);\n }\n\n protected async togglePin(id: string): Promise<void> {\n await this.connector.togglePin(id);\n }\n\n protected async markAllAsRead(): Promise<void> {\n await this.connector.markAllAsRead();\n }\n\n protected viewAll(): void {\n this.closePopover.emit();\n const app = this.sessionService.application?.name ?? 'demo';\n void this.router.navigate(this.config.viewAllRoute(app));\n }\n\n protected openSettings(): void {\n if (!this.config.settingsRoute) {\n return;\n }\n this.closePopover.emit();\n const app = this.sessionService.application?.name ?? 'demo';\n void this.router.navigate(this.config.settingsRoute(app));\n }\n\n private buildTabItems(items: AXPInAppInboxItem[]): InboxTabData[] {\n const unreadTotal = items.filter((item) => isInAppInboxUnread(item.readAt)).length;\n return [\n { key: 'Unread', labelKey: this.i18n.unread, count: unreadTotal },\n { key: 'All', labelKey: this.i18n.all, count: unreadTotal },\n ];\n }\n}\n\n//#endregion\n","<div class=\"axp-in-app-inbox-panel__header\">\n <span class=\"axp-in-app-inbox-panel__title\">\n {{ i18n.panelTitle | translate | async }}\n </span>\n @if (config.settingsRoute) {\n <ax-button color=\"default\" look=\"blank\" (onClick)=\"openSettings()\">\n <ax-icon><i class=\"fa-regular fa-gear fa-lg\"></i></ax-icon>\n </ax-button>\n }\n</div>\n<ax-tabs [content]=\"tabContent\" look=\"with-line\" location=\"bottom\">\n @for (tab of tabItems(); track tab.key) {\n <ax-tab-item\n [text]=\"(tab.labelKey | translate | async) ?? ''\"\n [active]=\"activeTab() === tab.key\"\n (activeChange)=\"changeActiveTab(tab.key)\"\n >\n <ax-suffix>\n @if (tab.count && tab.key === 'Unread') {\n <ax-badge [color]=\"activeTab() === tab.key ? 'primary' : 'ghost'\" [text]=\"tab.count.toString()\"></ax-badge>\n }\n </ax-suffix>\n <ax-content>\n <div class=\"axp-in-app-inbox-panel__list\">\n @if (isLoading()) {\n <div class=\"axp-in-app-inbox-panel__loading\">\n @for (_ of [1, 2, 3]; track $index) {\n <div class=\"axp-in-app-inbox-panel__skeleton\">\n <div class=\"axp-in-app-inbox-panel__skeleton-avatar\"></div>\n <div class=\"axp-in-app-inbox-panel__skeleton-lines\">\n <div class=\"axp-in-app-inbox-panel__skeleton-line --wide\"></div>\n <div class=\"axp-in-app-inbox-panel__skeleton-line\"></div>\n </div>\n </div>\n }\n </div>\n } @else if (getItems(tab.key).length === 0) {\n <axp-state-message\n icon=\"fa-regular fa-bell-slash\"\n [title]=\"i18n.emptyTitle\"\n [description]=\"i18n.emptyDescription\"\n />\n } @else {\n @for (item of getItems(tab.key); track item.id) {\n <axp-in-app-inbox-item\n [data]=\"item\"\n [highlightUnreadBackground]=\"tab.key === 'All'\"\n [showPin]=\"showPin()\"\n [pinLabelKey]=\"i18n.pin\"\n [unpinLabelKey]=\"i18n.unpin\"\n [markAsReadLabelKey]=\"i18n.markAsRead\"\n (itemPress)=\"openInboxItem($event)\"\n (markAsRead)=\"dismissUnread($event)\"\n (togglePin)=\"togglePin($event)\"\n (closePopover)=\"closePopover.emit()\"\n />\n }\n }\n </div>\n <div class=\"axp-in-app-inbox-panel__footer\">\n <ax-button\n class=\"ax-sm\"\n [disabled]=\"(tabItems()[0]?.count ?? 0) === 0\"\n look=\"outline\"\n color=\"default\"\n [text]=\"(i18n.markAllAsRead | translate | async) ?? ''\"\n (onClick)=\"markAllAsRead()\"\n />\n <ax-button\n class=\"ax-sm\"\n look=\"outline\"\n color=\"primary\"\n [text]=\"(i18n.viewAll | translate | async) ?? ''\"\n (onClick)=\"viewAll()\"\n />\n </div>\n </ax-content>\n </ax-tab-item>\n }\n</ax-tabs>\n\n<ng-template [axTabContent] #tabContent=\"axTabContent\"></ng-template>\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPInAppInboxConnectorService } from '../in-app-inbox.connector.service';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport { AXP_IN_APP_INBOX_CONFIG, AXP_IN_APP_INBOX_I18N } from '../in-app-inbox.tokens';\nimport { AXP_IN_APP_INBOX_SYNC_STATUS } from '../in-app-inbox-sync-status.token';\nimport { AXPInAppInboxPanelComponent } from './in-app-inbox-panel.component';\n\n//#region ---- Shared in-app inbox header slot ----\n\n@Component({\n selector: 'axp-in-app-inbox-slot',\n templateUrl: './in-app-inbox-slot.component.html',\n styleUrls: ['./in-app-inbox-slot.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXButtonModule,\n AXDecoratorModule,\n AXBadgeModule,\n AXPopoverModule,\n AXTranslationModule,\n AXPInAppInboxPanelComponent,\n ],\n})\nexport class AXPInAppInboxSlotComponent {\n protected readonly config = inject(AXP_IN_APP_INBOX_CONFIG);\n protected readonly i18n = inject(AXP_IN_APP_INBOX_I18N);\n protected readonly themeStore = inject(AXPLayoutThemeService);\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly syncStatus = inject(AXP_IN_APP_INBOX_SYNC_STATUS, { optional: true });\n\n protected liveUpdatesOffline = computed(\n () => this.syncStatus != null && !this.syncStatus.liveUpdatesConnected(),\n );\n\n protected badgeDisplay = computed(() => {\n const total = this.connector.unreadCount();\n if (total <= 0) {\n return '';\n }\n return total > 50 ? '50+' : total.toString();\n });\n\n private popover = viewChild(AXPopoverComponent);\n\n protected closePopover(): void {\n this.popover()?.close();\n }\n}\n\n//#endregion\n","<ax-button\n [iconOnly]=\"true\"\n class=\"relative axp-in-app-inbox-slot__button\"\n [color]=\"themeStore.headerButtonColor()\"\n [look]=\"themeStore.headerButtonLook()\"\n #inboxTrigger\n [title]=\"liveUpdatesOffline() ? ((i18n.liveUpdatesOffline | translate | async) ?? '') : ''\"\n>\n <ax-icon>\n <i [class]=\"config.headerIconClass\"></i>\n </ax-icon>\n</ax-button>\n\n<div\n class=\"axp-in-app-inbox-slot__badge\"\n [class.--xs]=\"badgeDisplay().length > 2\"\n>\n @if (badgeDisplay()) {\n <ax-badge color=\"danger\" [text]=\"badgeDisplay()\"></ax-badge>\n }\n</div>\n<ax-popover\n [target]=\"inboxTrigger\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n>\n <div class=\"bg-lightest rounded-md w-full\">\n <axp-in-app-inbox-panel (closePopover)=\"closePopover()\" />\n </div>\n</ax-popover>\n","import {\n AXPSettingDefinitionProvider,\n AXPSettingDefinitionProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP,\n AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS,\n AXPCommunicationManagementSettingKeys,\n RootConfig,\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nconst I18N = '@communication-management:settings.user-notifications';\n\n//#region ---- User notification preferences settings ----\n\nexport class AXMCommunicationUserNotificationsSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP,\n `${I18N}.nav-title`,\n `${I18N}.description`,\n RootConfig.module.icon,\n `${I18N}.title`,\n 88,\n )\n .addSection(\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n `${I18N}.delivery-channels.title`,\n `${I18N}.delivery-channels.description`,\n )\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.UserChannelInAppEnabled,\n title: `${I18N}.delivery-channels.in-app.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue:\n AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS[\n AXPCommunicationManagementSettingKeys.UserChannelInAppEnabled\n ],\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.delivery-channels.in-app.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.UserChannelEmailEnabled,\n title: `${I18N}.delivery-channels.email.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue:\n AXP_COMMUNICATION_USER_NOTIFICATION_DEFAULTS[\n AXPCommunicationManagementSettingKeys.UserChannelEmailEnabled\n ],\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.delivery-channels.email.description`,\n })\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-communication-management-client/contracts';\n\nexport const CommunicationManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '0.0.1',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'domain',\n domain: 'communication',\n required: false,\n};\n","import { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\n\nimport {\n AXMCommunicationManagementMenuKeys,\n RootConfig,\n AXPCollaborationPermissionKeys,\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nexport class AXMCommunicationManagementMenuProvider implements AXPMenuProvider {\n private readonly entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module.name;\n\n const monitoringMenu = context.find(AXPCommonMenuKeys.Monitoring);\n if (!monitoringMenu.exists) {\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXPCommonMenuKeys.Monitoring,\n priority: 12,\n text: '@general:menus.monitoring.title',\n icon: 'fa-light fa-chart-line',\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.Monitoring).addItems([\n {\n name: AXMCommunicationManagementMenuKeys.Communications,\n text: RootConfig.entities.communication.titlePlural,\n path: this.entityService.createPath(module, RootConfig.entities.communication.name),\n icon: RootConfig.entities.communication.icon,\n priority: 1,\n policy: {\n features: [module],\n permissions: [AXPCollaborationPermissionKeys.MaintainCommunications],\n },\n },\n ]);\n }\n}\n","//#region ----- Imports -----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPCollaborationPermissionKeys\n} from '@acorex-platform/module-communication-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Permission Definition Provider -----\n\n/**\n * Registers communication capabilities into the shared Collaboration group.\n */\n@Injectable()\nexport class AXMCommunicationManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPCollaborationPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:collaboration.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Collaboration.Root, `${G}.collaboration.title`, `${G}.collaboration.description`, { order: 80 });\n\n context\n .addGroup(\n groups.Collaboration.Communications,\n `${G}.collaboration-communications.title`,\n `${G}.collaboration-communications.description`,\n { parent: groups.Collaboration.Root, order: 30 },\n )\n .addPermission(\n keys.MaintainCommunications,\n `${P}.maintain-communications.title`,\n `${P}.maintain-communications.description`,\n )\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPSearchCommandProvider, AXPSearchResult } from '@acorex-platform/framework-client/common';\n\nexport class AXMCommunicationManagementSearchCommandProvider extends AXPSearchCommandProvider {\n commands: AXPSearchResult[] = [];\n}\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport {\n AXPCommunicationManagementSettingKeys,\n AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS,\n AXMCommunicationManagementCommandKeys,\n RootConfig,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport {\n AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION,\n AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP,\n} from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\nconst I18N = '@communication-management:settings.communication';\nconst DEV_TOOLS_I18N = '@platform-dev-tools:settings.communication-debug-redirect';\n\n/** SMTP is server-owned config — never persist to client IndexedDB. */\nconst SMTP_CLIENT_CACHE = {\n cacheable: false as const,\n};\n\nexport class AXMCommunicationManagementSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'communication',\n `${I18N}.nav-title`,\n `${I18N}.description`,\n RootConfig.module.icon,\n `${I18N}.title`,\n 96,\n )\n .addSection('smtp-settings', `${I18N}.smtp.title`, `${I18N}.smtp.description`)\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailServer,\n title: `${I18N}.smtp.server.title`,\n scope: 'P',\n overridableAt: ['T'],\n // Platform-owned SMTP baseline (same pattern as System Insight / Auth).\n // Tenants may still override via overridableAt; runtime inherits parent when unset.\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailServer],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${I18N}.smtp.server.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailPort,\n title: `${I18N}.smtp.port.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailPort],\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n minValue: 1,\n maxValue: 65535,\n },\n },\n description: `${I18N}.smtp.port.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailUsername,\n title: `${I18N}.smtp.username.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailUsername],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${I18N}.smtp.username.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailPassword,\n title: `${I18N}.smtp.password.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n // Server DB at-rest encryption; implies cacheable: false.\n isEncrypted: true,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailPassword],\n widget: {\n type: AXPWidgetsList.Editors.PasswordBox,\n },\n description: `${I18N}.smtp.password.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailFromAddress,\n title: `${I18N}.smtp.from-address.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailFromAddress],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${I18N}.smtp.from-address.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailUseSsl,\n title: `${I18N}.smtp.ssl.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailUseSsl],\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n description: `${I18N}.smtp.ssl.description`,\n })\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.EmailUseTls,\n title: `${I18N}.smtp.tls.title`,\n scope: 'P',\n overridableAt: ['T'],\n isInherited: false,\n ...SMTP_CLIENT_CACHE,\n defaultValue: AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.EmailUseTls],\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n description: `${I18N}.smtp.tls.description`,\n })\n .addAction({\n title: `${I18N}.smtp.test.action`,\n icon: 'fa-light fa-paper-plane',\n color: 'primary',\n look: 'outline',\n disabledWhenDirty: true,\n requiredSettingKeys: [\n AXPCommunicationManagementSettingKeys.EmailServer,\n AXPCommunicationManagementSettingKeys.EmailPort,\n AXPCommunicationManagementSettingKeys.EmailFromAddress,\n ],\n command: {\n name: AXMCommunicationManagementCommandKeys.TestSmtp,\n },\n })\n .endSection()\n .endGroup();\n\n this.registerDevToolsRedirectSettings(context);\n }\n\n private registerDevToolsRedirectSettings(context: AXPSettingDefinitionProviderContext): void {\n const section = resolveCommunicationDebugRedirectSection(context);\n if (!section) {\n return;\n }\n\n section\n .addSetting({\n key: AXPCommunicationManagementSettingKeys.DebugRedirectEmailAddress,\n title: `${DEV_TOOLS_I18N}.email.title`,\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue:\n AXP_COMMUNICATION_SMTP_SETTING_DEFAULTS[AXPCommunicationManagementSettingKeys.DebugRedirectEmailAddress],\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n },\n description: `${DEV_TOOLS_I18N}.email.description`,\n })\n .endSection();\n }\n}\n\nfunction resolveCommunicationDebugRedirectSection(context: AXPSettingDefinitionProviderContext) {\n const devTools = context.group(AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP);\n if (!devTools) {\n return null;\n }\n\n const hasSection = context\n .getGroup(AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP)\n ?.sections.some((section) => section.name === AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION);\n\n if (hasSection) {\n return devTools.section(AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION);\n }\n\n return devTools.addSection(\n AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION,\n `${DEV_TOOLS_I18N}.title`,\n `${DEV_TOOLS_I18N}.description`,\n );\n}\n","import { Injectable } from '@angular/core';\nimport {\n AXPCommunicationManagementSettingKeys,\n RootConfig,\n} from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXP_TEXT_TEMPLATE_CHANNEL_DEFINITION_PROVIDER } from '@acorex-platform/module-content-management-client';\nimport type {\n AXMTextTemplateChannelDefinition,\n AXMTextTemplateChannelDefinitionProvider,\n} from '@acorex-platform/module-content-management-client/contracts';\n\nconst I18N = `@${RootConfig.config.i18n}:templates.channels`;\n\n//#region ---- Built-in text template channels ----\n\n@Injectable()\nexport class AXMCommunicationTextTemplateChannelDefinitionProvider\n implements AXMTextTemplateChannelDefinitionProvider\n{\n getChannels(): AXMTextTemplateChannelDefinition[] {\n return [\n {\n name: 'email',\n communicationChannelKey: 'email-smtp',\n title: `${I18N}.email`,\n type: 'rich',\n hasSubject: true,\n requiredSettingKeys: [\n AXPCommunicationManagementSettingKeys.EmailServer,\n AXPCommunicationManagementSettingKeys.EmailPort,\n AXPCommunicationManagementSettingKeys.EmailFromAddress,\n ],\n notConfiguredMessageKey: `${I18N}.not-configured.email`,\n configureSettings: {\n group: 'communication',\n section: 'smtp-settings',\n scope: 'T',\n },\n },\n {\n name: 'in-app',\n communicationChannelKey: 'in-app',\n title: `${I18N}.in-app`,\n type: 'plain',\n hasSubject: true,\n },\n ];\n }\n}\n\n//#endregion\n\nexport const communicationTextTemplateChannelProvider = {\n provide: AXP_TEXT_TEMPLATE_CHANNEL_DEFINITION_PROVIDER,\n useClass: AXMCommunicationTextTemplateChannelDefinitionProvider,\n multi: true,\n};\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPInAppInboxConnectorService,\n AXP_IN_APP_INBOX_I18N,\n isInAppInboxUnread,\n AXPInAppInboxItemComponent,\n} from '../../../in-app/inbox';\nimport { AXPInAppInboxActionService } from '../../../in-app/inbox/in-app-inbox-action.service';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n inject,\n OnInit,\n} from '@angular/core';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n templateUrl: './communication-in-app-inbox-widget.component.html',\n styleUrls: ['./communication-in-app-inbox-widget.component.css'],\n standalone: true,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPInAppInboxItemComponent,\n AXPStateMessageComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPCommunicationInAppInboxWidgetViewComponent extends AXPValueWidgetComponent<unknown> implements OnInit {\n //#region ----- Services & Dependencies -----\n\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly connector = inject(AXPInAppInboxConnectorService);\n private readonly inboxActions = inject(AXPInAppInboxActionService);\n protected readonly i18n = inject(AXP_IN_APP_INBOX_I18N);\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly maxItems = computed(() => this.options()?.['maxItems'] ?? 10);\n protected readonly showAvatar = computed(() => this.options()?.['showAvatar'] ?? true);\n protected readonly showDate = computed(() => this.options()?.['showDate'] ?? true);\n\n protected readonly inboxItems = computed(() => {\n const items = this.connector.inboxList();\n if (!items?.length) {\n return [];\n }\n\n return items.filter((item) => isInAppInboxUnread(item.readAt)).slice(0, this.maxItems());\n });\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n override ngOnInit(): void {\n super.ngOnInit();\n void this.connector.ensureReady().then(() => this.cdr.detectChanges());\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected async onItemPress(id: string): Promise<void> {\n await this.inboxActions.openItem(id);\n this.cdr.detectChanges();\n }\n\n protected async onDismissUnread(id: string): Promise<void> {\n await this.connector.markAsRead([id]);\n this.cdr.detectChanges();\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"size-full p-3 flex flex-col min-h-0\">\n <div class=\"overflow-auto flex-1 min-h-0 flex flex-col\">\n @for (item of inboxItems(); track item.id) {\n <axp-in-app-inbox-item\n [data]=\"item\"\n [showAvatar]=\"showAvatar()\"\n [showDate]=\"showDate()\"\n [markAsReadLabelKey]=\"i18n.markAsRead\"\n (itemPress)=\"onItemPress($event)\"\n (markAsRead)=\"onDismissUnread($event)\"\n />\n } @empty {\n <axp-state-message\n icon=\"fa-light fa-inbox\"\n [title]=\"i18n.emptyTitle\"\n [description]=\"i18n.emptyDescription\"\n />\n }\n </div>\n</div>\n","//#region ----- Imports -----\n\nimport { defineDashboardWidgetDimensions } from '@acorex-platform/module-dashboard-management-client';\n\n//#endregion\n\n//#region ----- Communication dashboard presets -----\n\n/** Unread in-app inbox dashboard tile. */\nexport const AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 5]],\n md: [\n [3, 4],\n [4, 4],\n ],\n lg: [\n [3, 4],\n [4, 4],\n ],\n xl: [\n [3, 4],\n [4, 4],\n ],\n '2xl': [\n [3, 4],\n [4, 4],\n ],\n '3xl': [\n [3, 4],\n [4, 4],\n ],\n '4xl': [\n [3, 4],\n [4, 4],\n ],\n});\n\n//#endregion\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '@acorex-platform/module-dashboard-management-client';\nimport { AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS } from '../../communication-dashboard-widget.dimensions';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { RootConfig } from '@acorex-platform/module-communication-management-client/contracts';\n\n//#region ---- My in-app inbox dashboard widget config ----\n\nexport const AXPMyInAppInboxDashboardWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.myInAppInboxDashboard,\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.widget-title',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n description: '@communication-management:widgets.my-in-app-inbox-dashboard.widget-description',\n icon: 'fa-regular fa-inbox',\n properties: [\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'maxItems',\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.max-items',\n description: 'Maximum number of unread inbox items to display',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 10,\n dataType: 'number',\n interface: {\n name: 'maxItems',\n path: 'options.maxItems',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n {\n name: 'showAvatar',\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.show-avatar',\n description: 'Whether to show avatars in inbox items',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showAvatar',\n path: 'options.showAvatar',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showDate',\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.show-date',\n description: 'Whether to show date in inbox items',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDate',\n path: 'options.showDate',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () =>\n import('./communication-in-app-inbox-widget.component').then(\n (c) => c.AXPCommunicationInAppInboxWidgetViewComponent,\n ),\n },\n },\n meta: {\n dimensions: AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS,\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPMyInAppInboxDashboardWidget } from './features/dashboard/widgets/my-in-app-inbox';\n\n//#endregion\n\n//#region ---- Communication Management Widgets Provider ----\n\n@Injectable()\nexport class AXMCommunicationManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return [AXPMyInAppInboxDashboardWidget];\n }\n}\n\n//#endregion\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_PROTECTED_ROUTE_GUARDS,\n AXP_SEARCH_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n AXP_STATUS_PROVIDERS,\n} from '@acorex-platform/framework-client/common';\nimport { AXPComponentSlotModule, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_TASK_BADGE_PROVIDERS } from '@acorex-platform/framework-client/layout/components';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { NgModule } from '@angular/core';\nimport { ROUTES, Routes } from '@angular/router';\nimport { AXMCommunicationManagementCommandKeys } from '@acorex-platform/module-communication-management-client/contracts';\nimport { AXMCommunicationInboxBadgeProvider } from './badge.provider';\nimport { AXMCommunicationDeliveryStatusProvider } from './features/communication-delivery-status.provider';\nimport { AXMCommunicationStatusProvider } from './features/communication-status.provider';\nimport {\n communicationInAppInboxConfig,\n communicationInAppInboxI18n,\n} from './features/in-app/communication-in-app-inbox.providers';\nimport { AXMCommunicationInAppInboxPort } from './features/in-app/communication-in-app-inbox.port';\nimport { provideCommunicationInAppRealtimeHandlers } from './features/in-app/communication-in-app-realtime.providers';\nimport { provideCommunicationInAppInboxFallbackSync } from './features/in-app/communication-in-app-inbox-fallback.providers';\nimport { AXMCommunicationInAppInboxSyncStatusService } from './features/in-app/communication-in-app-inbox-sync-status.service';\nimport { communicationInAppNotificationServiceProvider } from './features/in-app/communication-in-app-notification.service';\nimport {\n AXPInAppInboxSlotComponent,\n AXP_IN_APP_INBOX_CONFIG,\n AXP_IN_APP_INBOX_I18N,\n AXP_IN_APP_INBOX_PORT,\n AXP_IN_APP_INBOX_SYNC_STATUS,\n} from './features/in-app/inbox';\nimport { AXMCommunicationUserNotificationsSettingProvider } from './features/settings/communication-user-notifications-settings.provider';\nimport { CommunicationManagementManifest } from './manifest';\n\nimport { AXMCommunicationManagementMenuProvider } from './menu.provider';\nimport { AXMCommunicationManagementPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMCommunicationManagementSearchCommandProvider } from './search-command.provider';\nimport { AXMCommunicationManagementSettingProvider } from './settings.provider';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';\nimport { communicationTextTemplateChannelProvider } from './features/templates/communication-text-template-channel-definition.provider';\nimport { AXMCommunicationManagementWidgetsProvider } from './widget-definition.provider';\n\n/** @deprecated Legacy notification-management command keys — shimmed to communication email commands. */\nconst LEGACY_NOTIFICATION_EMAIL_SHOW_DIALOG_COMMAND_KEY = 'NotificationManagement:Email:ShowDialog' as const;\nconst LEGACY_NOTIFICATION_EMAIL_SEND_COMMAND_KEY = 'NotificationManagement:Email:Send' as const;\n\nfunction routesFactory(): Routes {\n return [\n {\n path: ':app/my/notification',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { rootLayout: true },\n loadComponent: () => AXPRootLayoutComponent,\n title: 'Notifications',\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/in-app/communication-in-app-inbox-page.component').then(\n (m) => m.AXMCommunicationInAppInboxPageComponent,\n ),\n data: { reuse: true },\n },\n ],\n },\n ];\n}\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n 'root-header-end': [\n {\n name: 'communication-inbox',\n component: AXPInAppInboxSlotComponent,\n },\n ],\n }),\n ],\n providers: [\n provideCommandSetups([\n {\n key: AXMCommunicationManagementCommandKeys.Send,\n command: () => import('./commands/communication-send.command').then((m) => m.CommunicationSendCommand),\n },\n {\n key: AXMCommunicationManagementCommandKeys.TestSmtp,\n command: () => import('./commands/communication-test-smtp.command').then((m) => m.CommunicationTestSmtpCommand),\n },\n {\n key: AXMCommunicationManagementCommandKeys.EmailShowDialog,\n command: () =>\n import('./features/email/communication-email-show-dialog.command').then(\n (m) => m.CommunicationManagementEmailShowDialogCommand,\n ),\n },\n {\n key: AXMCommunicationManagementCommandKeys.EmailSend,\n command: () =>\n import('./features/email/communication-email-send.command').then(\n (m) => m.CommunicationManagementEmailSendCommand,\n ),\n },\n {\n key: AXMCommunicationManagementCommandKeys.ShowSentMessage,\n command: () =>\n import('./commands/communication-show-sent-message.command').then(\n (m) => m.CommunicationShowSentMessageCommand,\n ),\n },\n {\n key: LEGACY_NOTIFICATION_EMAIL_SHOW_DIALOG_COMMAND_KEY,\n command: () =>\n import('./features/email/communication-email-show-dialog.command').then(\n (m) => m.CommunicationManagementEmailShowDialogCommand,\n ),\n },\n {\n key: LEGACY_NOTIFICATION_EMAIL_SEND_COMMAND_KEY,\n command: () =>\n import('./features/email/communication-email-send.command').then(\n (m) => m.CommunicationManagementEmailSendCommand,\n ),\n },\n ]),\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: CommunicationManagementManifest,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMCommunicationManagementPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMCommunicationManagementMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMCommunicationStatusProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMCommunicationDeliveryStatusProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMCommunicationManagementSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMCommunicationManagementSettingProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMCommunicationUserNotificationsSettingProvider,\n multi: true,\n },\n communicationTextTemplateChannelProvider,\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMCommunicationManagementWidgetsProvider,\n multi: true,\n },\n {\n provide: AXP_IN_APP_INBOX_PORT,\n useClass: AXMCommunicationInAppInboxPort,\n },\n {\n provide: AXP_IN_APP_INBOX_CONFIG,\n useValue: communicationInAppInboxConfig,\n },\n {\n provide: AXP_IN_APP_INBOX_I18N,\n useValue: communicationInAppInboxI18n,\n },\n {\n provide: AXP_IN_APP_INBOX_SYNC_STATUS,\n useExisting: AXMCommunicationInAppInboxSyncStatusService,\n },\n communicationInAppNotificationServiceProvider,\n {\n provide: AXP_TASK_BADGE_PROVIDERS,\n useClass: AXMCommunicationInboxBadgeProvider,\n multi: true,\n },\n ...provideCommunicationInAppRealtimeHandlers(),\n ...provideCommunicationInAppInboxFallbackSync(),\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n ],\n})\nexport class AXMCommunicationManagementModule {}\n","//#region ----- Imports -----\n\nimport type { AXMCommonDashboardEntityModel } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { layoutFromDimensions } from '@acorex-platform/module-dashboard-management-client';\n\nimport { AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS } from './communication-dashboard-widget.dimensions';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype DashboardSeedWidget = AXMCommonDashboardEntityModel['widgets'][number];\ntype DashboardSeedGridSize = readonly [width: number, height: number];\n\n//#endregion\n\n//#region ----- Builders -----\n\nexport function buildMyInAppInboxDashboardWidget(\n id: string,\n x: number,\n y: number,\n size: DashboardSeedGridSize = [4, 3],\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_MY_IN_APP_INBOX_DASHBOARD_DIMENSIONS, { x, y, lg: size });\n\n return {\n config: {\n ...config,\n title: '@communication-management:widgets.my-in-app-inbox-dashboard.widget-title',\n },\n node: {\n type: 'CommunicationManagement:Widget:Dashboard:MyInAppInboxDashboard',\n meta,\n name: `CommunicationManagement:Widget:Dashboard:MyInAppInboxDashboard-${id}`,\n path: `CommunicationManagement:Widget:Dashboard:MyInAppInboxDashboard-${id}`,\n },\n };\n}\n\n//#endregion\n","import type { AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport {\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP,\n} from '@acorex-platform/module-communication-management-client/contracts';\n\n//#region ---- Delivery channels settings section resolver ----\n\nexport function resolveCommunicationDeliveryChannelsSettingsSection(\n context: AXPSettingDefinitionProviderContext,\n) {\n if (!context.hasGroup(AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP)) {\n return null;\n }\n\n const group = context.getGroup(AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP);\n const hasSection = group?.sections.some(\n (section) => section.name === AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n );\n if (!hasSection) {\n return null;\n }\n\n return context.group(AXP_COMMUNICATION_USER_NOTIFICATIONS_SETTINGS_GROUP)?.section(\n AXP_COMMUNICATION_DELIVERY_CHANNELS_SETTINGS_SECTION,\n ) ?? null;\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["I18N","i1","IN_APP_REPORT_GENERATION_DEFINITION_KEY","i4","i5","i6","i2","RootConfig","AXMCommunicationManagementCommandKeys"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAEA;AACO,MAAM,iCAAiC,GAAG;AAEjD;AACO,MAAM,gCAAgC,GAAG;AAEhD;AACO,MAAM,+BAA+B,GAAG;AAE/C;;ACXA;AAMO,MAAM,uCAAuC,GAAG,2BAA2B;AAE3E,MAAM,qCAAqC,GAAG,uBAAuB;AAQtE,SAAU,mCAAmC,CACjD,aAAwC,EAAA;AAExC,IAAA,MAAM,MAAM,GAAG,aAAa,EAAE,IAAI,EAAE;IACpC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,eAAe,CAAC,EAAE;AACxC,QAAA,OAAO,SAAS;IAClB;IAEA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAClC,IAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,QAAA,OAAO,SAAS;IAClB;IAEA,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;IAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;AACrC,IAAA,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,EAAE;AACjC,QAAA,OAAO,SAAS;IAClB;IAEA,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS;AACrD,IAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE;AACpD;AAEA;AACM,SAAU,iCAAiC,CAC/C,aAAwC,EAAA;AAExC,IAAA,MAAM,MAAM,GAAG,mCAAmC,CAAC,aAAa,CAAC;AACjE,IAAA,OAAO,MAAM,EAAE,cAAc,GAAG,CAAA,aAAA,EAAgB,MAAM,CAAC,cAAc,CAAA,CAAE,GAAG,SAAS;AACrF;AAEA;AACM,SAAU,oCAAoC,CAAC,MAAc,EAAA;AACjE,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE;AAChC,IAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxE,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;IAC1E,OAAO,cAAc,IAAI,SAAS;AACpC;AAEA;AACM,SAAU,+BAA+B,CAC7C,IAA4E,EAC5E,cAAsB,EAAA;AAEtB,IAAA,MAAM,oBAAoB,GAAG,cAAc,CAAC,IAAI,EAAE;IAClD,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,aAAa,KAAK,uCAAuC,EAAE;AAC3F,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;IAC9C,IAAI,WAAW,EAAE,UAAU,CAAC,gBAAgB,oBAAoB,CAAA,CAAA,CAAG,CAAC,EAAE;AACpE,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,MAAM,GAAG,mCAAmC,CAAC,WAAW,CAAC;AAC/D,IAAA,IAAI,MAAM,EAAE,cAAc,KAAK,oBAAoB,EAAE;AACnD,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO;AACnD,IAAA,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC1C,QAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACtD,QAAA,IAAI,OAAO,oBAAoB,KAAK,QAAQ,IAAI,oBAAoB,CAAC,IAAI,EAAE,KAAK,oBAAoB,EAAE;AACpG,YAAA,OAAO,IAAI;QACb;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,2BAA2B,CAClC,OAAqC,EAAA;IAErC,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO;IAC9C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAC5C,OAAO,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,SAAS;AAClG;AAEA,SAAS,6BAA6B,CACpC,KAAyB,EACzB,IAAwB,EAAA;AAExB,IAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE;AAC7B,IAAA,IAAI,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3B,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;QAC9D,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;QACf;IACF;AAEA,IAAA,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,EAAE;IAC/B,OAAO,SAAS,IAAI,SAAS;AAC/B;AAEM,SAAU,mCAAmC,CAAC,KAMnD,EAAA;AACC,IAAA,IAAI,KAAK,CAAC,aAAa,KAAK,uCAAuC,EAAE;AACnE,QAAA,OAAO,SAAS;IAClB;IAEA,MAAM,MAAM,GAAG,mCAAmC,CAAC,KAAK,CAAC,aAAa,CAAC;AACvE,IAAA,MAAM,YAAY,GAAG,MAAM,EAAE,YAAY,IAAI,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC;AACvF,IAAA,MAAM,UAAU,GAAG,6BAA6B,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;IAEzE,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,IAAI,YAAY,KAAK,QAAQ,EAAE;AAC7D,QAAA,OAAO,SAAS;IAClB;IAEA,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE;AACnD;AAEM,SAAU,oCAAoC,CAAC,KAIpD,EAAA;AACC,IAAA,IAAI,KAAK,CAAC,aAAa,KAAK,uCAAuC,EAAE;QACnE,OAAO,KAAK,CAAC,OAAO;IACtB;IAEA,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE;QACjE,OAAO,KAAK,CAAC,OAAO;IACtB;IAEA,MAAM,MAAM,GAAG,mCAAmC,CAAC,KAAK,CAAC,aAAa,CAAC;AACvE,IAAA,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE;QAC3B,OAAO,KAAK,CAAC,OAAO;IACtB;IAEA,OAAO;AACL,QAAA;AACE,YAAA,KAAK,EAAE,wCAAwC;AAC/C,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,qCAAqC;AAC3C,gBAAA,OAAO,EAAE;oBACP,cAAc,EAAE,MAAM,CAAC,cAAc;AACrC,oBAAA,IAAI,MAAM,CAAC,YAAY,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC;AACtE,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AACH;AAEA;;AC1KA;AAMA,MAAM,gCAAgC,GAAG,mCAAmC;AAItE,SAAU,0BAA0B,CAAC,MAAyB,EAAA;IAClE,MAAM,QAAQ,GAAG,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE;IACnC,MAAM,UAAU,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC3C,IAAA,OAAO,OAAO,CAAC,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,UAAU,IAAI,UAAU,KAAK,QAAQ,CAAC;AAC5F;AAEM,SAAU,0BAA0B,CACxC,IAAoF,EAAA;AAEpF,IAAA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE;AAC1B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IAC9B;AAEA,IAAA,IAAI,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC3C,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAI,IAAI,CAAC,aAAa,KAAK,gCAAgC,EAAE;AAC3D,QAAA,OAAO,4BAA4B;IACrC;AAEA,IAAA,OAAO,kCAAkC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1D;AAEA,SAAS,kCAAkC,CAAC,QAA2C,EAAA;IACrF,QAAQ,QAAQ;AACd,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,gCAAgC;AACzC,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,kCAAkC;AAC3C,QAAA;AACE,YAAA,OAAO,kBAAkB;;AAE/B;AAEA;;AC7CA;AAMM,SAAU,kBAAkB,CAAC,MAA+B,EAAA;IAChE,OAAO,MAAM,IAAI,IAAI;AACvB;AAEM,SAAU,kBAAkB,CAAC,MAA+B,EAAA;IAChE,OAAO,MAAM,IAAI,IAAI;AACvB;AAEM,SAAU,0BAA0B,CAAC,QAA2C,EAAA;IACpF,OAAO,QAAQ,IAAI,QAAQ;AAC7B;AAEM,SAAU,mBAAmB,CAA8B,KAAU,EAAA;AACzE,IAAA,OAAO,qBAAqB,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;QAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACjF,QAAA,IAAI,QAAQ,KAAK,CAAC,EAAE;AAClB,YAAA,OAAO,QAAQ;QACjB;AACA,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC7D,IAAA,CAAC,CAAC;AACJ;AAEA;AACM,SAAU,qBAAqB,CAA8B,KAAU,EAAA;AAC3E,IAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAa;AAE1C,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,MAAM,SAAS,GACb,IAAI,CAAC,aAAa,KAAK;AACrB,cAAE,iCAAiC,CAAC,IAAI,CAAC,aAAa;cACpD,SAAS;QACf,IAAI,CAAC,SAAS,EAAE;YACd;QACF;QAEA,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7C,QAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;AACzE,YAAA,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;QACpC;IACF;AAEA,IAAA,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE;AAC5B,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU;IAClC,MAAM,MAAM,GAAQ,EAAE;AAEtB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,MAAM,SAAS,GACb,IAAI,CAAC,aAAa,KAAK;AACrB,cAAE,iCAAiC,CAAC,IAAI,CAAC,aAAa;cACpD,SAAS;QACf,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB;QACF;AAEA,QAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC3B;QACF;AACA,QAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AACvB,QAAA,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACnD;AAEA,IAAA,OAAO,MAAM;AACf;AAEM,SAAU,uBAAuB,CAAuC,IAAO,EAAA;IACnF,OAAO;AACL,QAAA,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACnB,QAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;AACvB,QAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;AACrB,QAAA,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE;QACjE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI;QACjE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI;QACjE,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,0BAA0B,CAAC,IAAyB,CAAC;QAClF,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ;AACnC,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;QAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI;AACjF,QAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS;KAChE;AACH;AAEA;;AChGA;AAMA;AAEA;AAEM,SAAU,uBAAuB,CAAC,OAAqC,EAAA;IAC3E,OAAO,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,KAAK;AACtG;AAEA;;;AAGG;AACG,SAAU,4BAA4B,CAC1C,KAA0B,EAC1B,OAAqC,EAAA;AAErC,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;AAC9D,IAAA,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;AACpB,QAAA,OAAO,mBAAmB,CAAC,MAAM,CAAC;IACpC;IAEA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAC/B,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,4BAA4B,CACpF;IACD,MAAM,UAAU,GACd,YAAY,EAAE,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;AAEpF,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,YAAY,CAAC;AAC1E,IAAA,MAAM,UAAU,GAAG,UAAU,EAAE,KAAK,KAAK,QAAQ;AAEjD,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,UAAU,CAAC;AAC5E,IAAA,MAAM,QAAQ,GAAG,cAAc,EAAE,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE;AAE1E,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC;AAC1E,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE;IAEnF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;QACtC,IAAI,UAAU,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAClD,YAAA,OAAO,KAAK;QACd;QACA,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC1C,YAAA,OAAO,KAAK;QACd;QACA,IAAI,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,EAAE;AACzD,YAAA,OAAO,KAAK;QACd;QACA,IAAI,UAAU,EAAE;YACd,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAA,CAAE,CAAC,WAAW,EAAE;YAC1F,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAClC,gBAAA,OAAO,KAAK;YACd;QACF;AACA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,mBAAmB,CAAC,QAAQ,CAAC;AACtC;AAEA;;AC5DA;MAKa,4BAA4B,CAAA;AAHzC,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAA4B;AAEhE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAKvD,IAAA;AAHC,IAAA,aAAa,CAAC,KAA+B,EAAA;AAC3C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;8GAPW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cAF3B,MAAM,EAAA,CAAA,CAAA;;2FAEP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACRD;MA0Ba,qBAAqB,GAAG,IAAI,cAAc,CAAoB,uBAAuB;AAElG;;AC5BA;AA+CA;AAEA;AAEA;;;;AAIG;MAIU,6BAA6B,CAAA;AA2DxC,IAAA,WAAA,GAAA;AA1DiB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACpC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAC/C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAClD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAE/B,IAAA,CAAA,SAAS,GAAG,iCAAiC;QAC7C,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAEpD,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK;sFAAC;QACzB,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK;wFAAC;QAC3B,IAAA,CAAA,KAAK,GAAG,MAAM,CAAgB,IAAI;kFAAC;QACnC,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAsB,EAAE;6FAAC;QAClD,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,CAAC;8FAAC;QAC7B,IAAA,CAAA,SAAS,GAAG,MAAM,CAA0B,IAAI;sFAAC;QAC1D,IAAA,CAAA,sBAAsB,GAAG,KAAK;QAC9B,IAAA,CAAA,gBAAgB,GAAyB,IAAI;QAC7C,IAAA,CAAA,YAAY,GAA4C,IAAI;QAC5D,IAAA,CAAA,YAAY,GAAkB,IAAI;QAClC,IAAA,CAAA,mBAAmB,GAAG,KAAK;AAE1B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY;QACrC,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE;oFAAC;QAC1C,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE;6FAAC;QACrD,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;yFAAC;QAC3C,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE;sFAAC;AACjD,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YAC7B,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,KAAK,SAAS,EAAE;AACxC,gBAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;YACjC;AACA,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM;QACrC,CAAC;kFAAC;AACO,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;YAC9B,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AAC5B,gBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE;YAChC;AACA,YAAA,MAAM,QAAQ,GAAG,4BAA4B,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;AACnF,YAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAC5D,CAAC;2FAAC;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;YAC9B,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC;YACV;AACA,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AAC5B,gBAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;YACjC;AACA,YAAA,OAAO,4BAA4B,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;QAClF,CAAC;uFAAC;QACO,IAAA,CAAA,WAAW,GAAG,QAAQ,CAC7B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;wFACrF;QAGC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE;AACzC,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,QAAQ,EAAE,gCAAgC;AAC1C,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,IAAI,EAAE,QAAQ;AACf,SAAA,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE;YACxC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,SAAS;AACjF,YAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE;AACtC,SAAA,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC;aACjB,IAAI,CAAC,oBAAoB,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAChE,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;YACrB,IAAI,OAAO,EAAE;AACX,gBAAA,KAAK,IAAI,CAAC,WAAW,EAAE;gBACvB;YACF;AACA,YAAA,KAAK,IAAI,CAAC,eAAe,EAAE;AAC7B,QAAA,CAAC,CAAC;AAEJ,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CACpD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CACzE;AACD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CACpD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,EACxE,YAAY,CAAC,GAAG,CAAC,CAClB;AACD,QAAA,KAAK,CAAC,kBAAkB,EAAE,kBAAkB;AACzC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,KAAK,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACtC,QAAA,CAAC,CAAC;IACN;;IAGA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACxB,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC1B;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE;QAC1C;QACA,OAAO,IAAI,CAAC,gBAAgB;IAC9B;AAEA,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAChC;AACA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;IACpC;AAEA,IAAA,MAAM,QAAQ,CACZ,aAAwC,EACxC,UAAmB,EACnB,OAAgB,EAAA;AAEhB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,GAAG,EAAE;QACjE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,aAAa;QAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,CAAC;AAChF,QAAA,MAAM,IAAI,GAA6B,uBAAuB,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,OAAO;AAE7F,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAEjD,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACxB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAChC;YACA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;QAClD;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,MAAM,IAAI,CAAC,WAAW,EAAE;QAC1B;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;IACnE;AAEA,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YAChE;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AAExB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc;AAClC,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;aAChD,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAEzB,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B;QACF;QAEA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACpC,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,IAAI,KAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CACjD;AAED,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACrC;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,8BAA8B,CAAC;AACnF,YAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;QACnC;IACF;IAEA,MAAM,UAAU,CAAC,GAAa,EAAA;QAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACpF;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;QAExB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACpC,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,MAAM;AAC1D,YAAA,GAAG,IAAI;AACP,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG;AAC7B,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG;AAC9B,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC/B;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,8BAA8B,CAAC;YACnF,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAClF;IACF;AAEA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YAChE;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;QAExB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACpC,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,KAAI;AAClD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC7B,YAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE;AAChE,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QAC/B;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,4BAA4B,CAAC;AACjF,YAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;QACnC;IACF;IAEA,MAAM,SAAS,CAAC,EAAU,EAAA;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACtF;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;QAExB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;QACpE,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,MAAM;AAC3D,gBAAA,GAAG,IAAI;gBACP,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrC,aAAA,CAAC,CAAC;QACL;AAEA,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACxF;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,sBAAsB,CAAC;YAC3E,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACxF;IACF;IAEA,MAAM,OAAO,CAAC,GAAa,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YAClE;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;AAEjD,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAC9B;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,+BAA+B,CAAC;AACpF,YAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;QACnC;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QACnE;IACF;IAEA,MAAM,SAAS,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACvD;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;AAElD,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QACxC;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3D;YACF;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,6BAA6B,CAAC;AAClF,YAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;YACjC;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAE3D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QACnE;IACF;;IAGA,MAAM,sBAAsB,CAAC,aAAqB,EAAA;AAChD,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE;AACvC,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACtE;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AAExB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc;AAC5B,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,UAAU;aAC1D,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAEzB,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AACpB,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B;IACF;;IAGA,MAAM,4BAA4B,CAAC,mBAA2B,EAAA;AAC5D,QAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE;AAC7C,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACtE;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,sCAAsC,CAAC,UAAU,CAAC;AACnE,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AACpB,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B;IACF;AAEA;;;AAGG;IACH,MAAM,gBAAgB,CAAC,KAA0B,EAAA;QAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACzC;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAC1B,IAAI,CAAC,SAAS,EACd,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CACnE;IACH;;IAGA,MAAM,cAAc,CAAC,GAAa,EAAA;AAChC,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YAC9C;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IAC1D;AAEA;;;AAGG;AACH,IAAA,MAAM,8BAA8B,CAAC,SAAiB,EAAE,UAAkB,EAAA;AACxE,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE;AAClC,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACjD;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACxB;QACF;QAEA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtD,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;AACpD,QAAA,IAAI,OAAO,KAAK,QAAQ,EAAE;AACxB,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;QACzD;IACF;;AAIQ,IAAA,MAAM,SAAS,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB;QACF;AAEA,QAAA,IAAI;YACF,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YAChD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB;YACF;AACA,YAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;QACnC;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,2BAA2B,CAAC;QAClF;IACF;AAEQ,IAAA,MAAM,oBAAoB,GAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAChC;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,IAAI,CAAC,YAAY;QAC1B;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,4BAA4B,EAAE;AACvD,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,IAAI,CAAC,YAAY;QAChC;gBAAU;AACR,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;IACF;AAEQ,IAAA,MAAM,4BAA4B,GAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAChC;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YAC5C,MAAM,KAAK,GAAG,mBAAmB,CAC/B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,uBAAuB,CAAC,IAAyB,CAAC,CAAC,CACjF;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACvF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;YACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;QAC9C;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,sBAAsB,CAAC;AAC3E,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;YACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;QAC9C;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,gBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,gBAAA,KAAK,IAAI,CAAC,oBAAoB,EAAE;YAClC;QACF;IACF;AAEQ,IAAA,MAAM,cAAc,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAChC;QAEA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AACzC,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,gCAAgC;AACtC,YAAA,eAAe,EAAE,IAAI;AACtB,SAAA,CAAC;QACF,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;YAClF,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB;IACH;IAEQ,MAAM,gBAAgB,CAAC,GAAa,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAChD,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YAC7C,OAAO,MAAM,CAAC;iBACX,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI;AACxC,iBAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,EAAE;AAC3C,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,MAAM,KAAK;QACb;IACF;;;AAMQ,IAAA,MAAM,eAAe,CAC3B,OAAyB,EACzB,IAAY,EACZ,IAAY,EAAA;AAEZ,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAChC;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBACvC,IAAI;gBACJ,IAAI;gBACJ,OAAO;AACP,gBAAA,eAAe,EAAE,KAAK;AACvB,aAAA,CAAC;YACF,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5F,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;QACvC;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,+BAA+B,CAAC;AACpF,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAChC;gBAAU;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B;IACF;;;IAMQ,MAAM,mBAAmB,CAAC,KAGjC,EAAA;AACC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AAExB,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;;YAElD;QACF;QAEA,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,KAAK,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE;AAChF,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,gBAAA,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,KAAK,CAAC,GAAG;AACf,aAAA,CAAC;AACF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS,EAAE;AAC7B,gBAAA,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;YACnE;YACA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;YAClC;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE;AACrB,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,gBAAA,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,KAAK,CAAC,GAAG;AACf,aAAA,CAAC;YACF;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACjF;;;IAMQ,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,sBAAsB;IACnD;AAEQ,IAAA,MAAM,eAAe,GAAA;AAC3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;IACzC;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE;QACnD,MAAM,KAAK,GAAG,mBAAmB,CAC/B,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,uBAAuB,CAAC,GAAiC,CAAC,CAAC,CAC3F;QACD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE;AACpD,YAAA,OAAO,CAAC,eAAe,IAAI,eAAe,KAAK,MAAM;AACvD,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,sCAAsC,CAAC,MAAc,EAAA;AAC3D,QAAA,MAAM,cAAc,GAAG,oCAAoC,CAAC,MAAM,CAAC;QACnE,OAAO,IAAI,CAAC,cAAc;AACvB,aAAA,MAAM,CAAC,CAAC,IAAI,KAAI;AACf,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACjD,gBAAA,OAAO,IAAI;YACb;YACA,OAAO,cAAc,IAAI,IAAI,IAAI,+BAA+B,CAAC,IAAI,EAAE,cAAc,CAAC;AACxF,QAAA,CAAC;aACA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;IAC3B;AAEQ,IAAA,SAAS,CAAC,IAAuB,EAAA;QACvC,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AACvC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,IAAI;AACtD,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,IAAI;YACtD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ;AACnC,YAAA,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,eAAe,EAAE,IAAI,CAAC,eAAe;AACrC,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,IAAI;YAClE,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB;IACH;IAEQ,mBAAmB,GAAA;QACzB,IAAI,IAAI,CAAC,mBAAmB,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;YAChE;QACF;AACA,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI;AACF,YAAA,SAAS,CAAC,cAAc,CAAC,+BAA+B,CAAC;QAC3D;AAAE,QAAA,MAAM;;QAER;IACF;AAEQ,IAAA,2BAA2B,CAAC,KAAc,EAAA;AAChD,QAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC;AACvC,QAAA,OAAO,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;IACpD;8GAzoBW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cAF5B,MAAM,EAAA,CAAA,CAAA;;2FAEP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;AA+oBD,SAAS,gBAAgB,CAAC,KAAc,EAAA;AACtC,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,QAAA,OAAO,EAAE;IACX;AACA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAI,KAA6B,CAAC,KAAK;AAClD,QAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACtC,MAAM,MAAM,GAAG,KAA+C;YAC9D,OAAO,CAAA,EAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA,CAAE;QACzF;QACA,OAAO,KAAK,GAAG,GAAG,KAAK,CAAC,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO;IACpE;IACA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE;QACnD,OAAO,MAAM,CAAE,KAA+B,CAAC,OAAO,IAAI,KAAK,CAAC;IAClE;AACA,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB;;ACxtBA;MAGa,kCAAkC,CAAA;AAD/C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,6BAA6B,CAAC;QAErD,IAAA,CAAA,GAAG,GAAG,2BAA2B;QACjC,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;kFAAC;AAC1D,IAAA;8GALY,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAlC,kCAAkC,EAAA,CAAA,CAAA;;2FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C;;;ACED,MAAMA,MAAI,GAAG,kEAAkE;AAE/E;AAEA;AACM,MAAO,sCAAuC,SAAQ,iBAAiB,CAAA;AAA7E,IAAA,WAAA,GAAA;;QACW,IAAA,CAAA,GAAG,GAAG,gDAAgD;QAEtD,IAAA,CAAA,aAAa,GAAgC,yCAAyC;AAEtF,QAAA,IAAA,CAAA,QAAQ,GAAG;YAClB,EAAE,IAAI,EAAE,SAAkB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,QAAA,CAAU,EAAE,KAAK,EAAE,WAA+B,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;AACnI,YAAA,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,OAAA,CAAS,EAAE,KAAK,EAAE,MAA0B,EAAE,YAAY,EAAE,IAAI,EAAE;AAC3G,YAAA,EAAE,IAAI,EAAE,YAAqB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,WAAA,CAAa,EAAE,KAAK,EAAE,SAA6B,EAAE,YAAY,EAAE,IAAI,EAAE;AACtH,YAAA,EAAE,IAAI,EAAE,UAAmB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,SAAA,CAAW,EAAE,KAAK,EAAE,MAA0B,EAAE,YAAY,EAAE,IAAI,EAAE;AAC/G,YAAA,EAAE,IAAI,EAAE,MAAe,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,KAAA,CAAO,EAAE,KAAK,EAAE,SAA6B,EAAE,YAAY,EAAE,IAAI,EAAE;YAC1G,EAAE,IAAI,EAAE,WAAoB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,UAAA,CAAY,EAAE,KAAK,EAAE,SAA6B,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YACnI,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,OAAA,CAAS,EAAE,KAAK,EAAE,QAA4B,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;AAC5H,YAAA,EAAE,IAAI,EAAE,gBAAyB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,gBAAA,CAAkB,EAAE,KAAK,EAAE,SAA6B,EAAE,YAAY,EAAE,IAAI,EAAE;YAC/H,EAAE,IAAI,EAAE,WAAoB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,UAAA,CAAY,EAAE,KAAK,EAAE,WAA+B,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YACrI,EAAE,IAAI,EAAE,cAAuB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,cAAA,CAAgB,EAAE,KAAK,EAAE,QAA4B,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;SAC1I;QAEQ,IAAA,CAAA,WAAW,GAAG,EAAE;IAC3B;AAAC;AAED;;AC1BA,MAAMA,MAAI,GAAG,yDAAyD;AAEtE;AAEA;AACM,MAAO,8BAA+B,SAAQ,iBAAiB,CAAA;AAArE,IAAA,WAAA,GAAA;;QACW,IAAA,CAAA,GAAG,GAAG,uCAAuC;QAE7C,IAAA,CAAA,aAAa,GAAiC,gCAAgC;AAE9E,QAAA,IAAA,CAAA,QAAQ,GAAG;YAClB,EAAE,IAAI,EAAE,SAAkB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,QAAA,CAAU,EAAE,KAAK,EAAE,WAA+B,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;AACnI,YAAA,EAAE,IAAI,EAAE,YAAqB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,WAAA,CAAa,EAAE,KAAK,EAAE,SAA6B,EAAE,YAAY,EAAE,IAAI,EAAE;YACtH,EAAE,IAAI,EAAE,WAAoB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,UAAA,CAAY,EAAE,KAAK,EAAE,SAA6B,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YACnI,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,OAAA,CAAS,EAAE,KAAK,EAAE,QAA4B,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YAC5H,EAAE,IAAI,EAAE,WAAoB,EAAE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,UAAA,CAAY,EAAE,KAAK,EAAE,WAA+B,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;SACtI;QAEQ,IAAA,CAAA,WAAW,GAAG,EAAE;IAC3B;AAAC;AAED;;AC3BA;AAEO,MAAM,6BAA6B,GAAwB;AAChE,IAAA,eAAe,EAAE,oBAAoB;IACrC,YAAY,EAAE,CAAC,OAAO,KAAK,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,gBAAA,CAAkB,CAAC;IAC1D,aAAa,EAAE,CAAC,OAAO,KAAK,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,0CAAA,CAA4C,CAAC;CACtF;AAEM,MAAM,2BAA2B,GAA0B;AAChE,IAAA,UAAU,EAAE,8CAA8C;AAC1D,IAAA,MAAM,EAAE,8CAA8C;AACtD,IAAA,GAAG,EAAE,2CAA2C;AAChD,IAAA,aAAa,EAAE,wDAAwD;AACvE,IAAA,OAAO,EAAE,mDAAmD;AAC5D,IAAA,UAAU,EAAE,oDAAoD;AAChE,IAAA,gBAAgB,EAAE,0DAA0D;AAC5E,IAAA,SAAS,EAAE,6CAA6C;AACxD,IAAA,mBAAmB,EAAE,wDAAwD;AAC7E,IAAA,qBAAqB,EAAE,0DAA0D;AACjF,IAAA,sBAAsB,EAAE,4DAA4D;AACpF,IAAA,OAAO,EAAE,kDAAkD;AAC3D,IAAA,GAAG,EAAE,4BAA4B;AACjC,IAAA,KAAK,EAAE,8BAA8B;AACrC,IAAA,MAAM,EAAE,iDAAiD;AACzD,IAAA,OAAO,EAAE,kDAAkD;AAC3D,IAAA,UAAU,EAAE,uDAAuD;AACnE,IAAA,WAAW,EAAE,uDAAuD;AACpE,IAAA,YAAY,EAAE,wDAAwD;AACtE,IAAA,kBAAkB,EAAE,uDAAuD;CAC5E;AAED;;MCvBsB,gCAAgC,CAAA;AASrD;;AChBD,MAAM,sBAAsB,GAA6B;AACvD,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,OAAO,EAAE;AACP,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9D,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;AAC/D,KAAA;CACF;AAED,MAAM,qBAAqB,GAA6B;AACtD,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC5B,IAAA,KAAK,EAAE,IAAI;CACZ;AAED,MAAM,uBAAuB,GAAG;AAC9B,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;CACM;AAElC,SAAU,qCAAqC,CACnD,OAAyB,EACzB,IAAY,EACZ,IAAY,EACZ,gBAA2B,EAAA;AAE3B,IAAA,MAAM,UAAU,GAA+B;AAC7C,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;KACnE;AAED,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC;AAChE,IAAA,IAAI,UAAU,EAAE,KAAK,KAAK,QAAQ,EAAE;AAClC,QAAA,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC;IACzC;AAEA,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC;AAClE,IAAA,IAAI,cAAc,EAAE,KAAK,KAAK,SAAS,EAAE;AACvC,QAAA,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC;IAC1C;SAAO;AACL,QAAA,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC;IACxC;AAEA,IAAA,IAAI,gBAAgB,EAAE,MAAM,EAAE;QAC5B,UAAU,CAAC,IAAI,CAAC;AACd,YAAA,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM;AACrC,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE;AACpC,gBAAA,KAAK,EAAE,EAAE;AACV,aAAA,CAAC,CAAC;AACJ,SAAA,CAAC;IACJ;AAAO,SAAA,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAC,EAAE;QACzC,UAAU,CAAC,IAAI,CAAC;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3B,YAAA,KAAK,EAAE,gBAAgB;AACxB,SAAA,CAAC;IACJ;IAEA,OAAO;QACL,IAAI;QACJ,IAAI;AACJ,QAAA,IAAI,EAAE;AACJ,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE;AAClC,YAAA,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE;AACtC,SAAA;QACD,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE;KAC9C;AACH;AAEM,SAAU,6CAA6C,CAC3D,OAAyB,EAAA;IAEzB,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAC/B,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,4BAA4B,CACrE;IACD,MAAM,UAAU,GAAG,YAAY,EAAE,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE;AAEvF,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;AAC1D,IAAA,MAAM,aAAa,GAAG,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,SAAS;AAE9E,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC;AAClE,IAAA,MAAM,QAAQ,GAAG,cAAc,EAAE,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,SAAS;IAEjF,OAAO;QACL,UAAU,EAAE,UAAU,IAAI,SAAS;QACnC,aAAa;QACb,QAAQ;KACT;AACH;;AC9DA,MAAM,cAAc,GAAG,QAAQ;AAE/B;MAGa,8BAA8B,CAAA;AAD3C,IAAA,WAAA,GAAA;AAEW,QAAA,IAAA,CAAA,YAAY,GAAG;AACtB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE,KAAK;SACX;AAEO,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,gCAAgC,CAAC;QACjD,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC;AAClC,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI;AACjF,aAAA,IAAI,EAAwE;QAC9D,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC;AACvC,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI;AACzE,aAAA,IAAI,EAAwD;AA2QhE,IAAA;AAzQC,IAAA,MAAM,SAAS,CAAC,KAAA,GAAgC,EAAE,EAAA;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE;YAC/C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAChC;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE;QAC3C,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAChC;AAEA,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC;AAC5B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI;AAC/B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE;QACnC,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAErE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;AACpE,QAAA,MAAM,OAAO,GAAG,qCAAqC,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC;AAC5F,QAAA,MAAM,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QAExD,IAAI,MAAM,EAAE;YACV,WAAW,CAAC,IAAI,CAAC;AACf,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE;AACpC,gBAAA,KAAK,EAAE,MAAM;AACd,aAAA,CAAC;QACJ;QAEA,IAAI,eAAe,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE;YAC3G,WAAW,CAAC,IAAI,CAAC;AACf,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC5B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA,CAAC;QACJ;QAEA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3C,YAAA,GAAG,OAAO;YACV,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE;AAC/C,SAAA,CAAC;AAEF,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAwC;AAClE,QAAA,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CACrE,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,KAAK,MAAM,CAClD;QAED,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE;IACvC;IAEA,MAAM,SAAS,CAAC,GAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE;YAC/C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAChC;AAEA,QAAA,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7E,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QAChC;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE;QACnD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QAChC;AAEA,QAAA,MAAM,OAAO,GAAmC;AAC9C,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AACjF,YAAA;AACE,gBAAA,KAAK,EAAE,IAAa;gBACpB,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM;AAChC,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE;AACpC,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA,CAAC,CAAC;AACJ,aAAA;SACF;QAED,OAAO,CAAC,IAAI,CAAC;AACX,YAAA,KAAK,EAAE,iBAAiB;AACxB,YAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE;AACpC,YAAA,KAAK,EAAE,MAAM;AACd,SAAA,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3C,YAAA,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,WAAW,CAAC,MAAM;YACxB,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAgB,EAAE;AACpD,SAAA,CAAC;AAEF,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAwC;AAClE,QAAA,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CACrE,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,KAAK,MAAM,CAClD;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE;IACvC;IAEA,MAAM,QAAQ,CAAC,GAAa,EAAA;QAC1B,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B;QACF;QAEA,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAClD;IAEA,MAAM,QAAQ,CAAC,GAAa,EAAA;QAC1B,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B;QACF;QAEA,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAClD;AAEA,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;IACtC;IAEA,MAAM,SAAS,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;YACd;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACzD;IAEA,MAAM,OAAO,CAAC,GAAa,EAAA;QACzB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B;QACF;QAEA,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IACjD;IAEA,MAAM,gBAAgB,CAAC,GAAa,EAAA;QAClC,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B;QACF;QAEA,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;IAChD;IAEQ,MAAM,yBAAyB,CACrC,UAA2C,EAAA;AAE3C,QAAA,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CACxD,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CACrF;AAED,QAAA,OAAO,mBAAmB,CACxB,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAC7F;IACH;IAEQ,MAAM,uBAAuB,CAAC,OAAyB,EAAA;AAC7D,QAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,6CAA6C,CAAC,OAAO,CAAC;QACtG,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,EAAE;AAC9C,YAAA,OAAO,SAAS;QAClB;QAEA,MAAM,UAAU,GAAG,EAAE;QACrB,IAAI,aAAa,EAAE;YACjB,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE;AACpC,gBAAA,KAAK,EAAE,aAAa;AACrB,aAAA,CAAC;QACJ;QACA,IAAI,QAAQ,EAAE;YACZ,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE;AACpC,gBAAA,KAAK,EAAE,QAAQ;AAChB,aAAA,CAAC;QACJ;QACA,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,KAAK,EAAE,IAAa;AACpB,gBAAA,OAAO,EAAE;AACP,oBAAA,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAmB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;AAC9E,oBAAA,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAmB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;AACxF,oBAAA,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAmB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;AACtF,iBAAA;AACF,aAAA,CAAC;QACJ;QAEA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAChD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS;AAClF,SAAA,CAAC;AAEF,QAAA,OAAQ,MAAM,CAAC,KAAiC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;IACzE;IAEQ,MAAM,sBAAsB,CAAC,GAAa,EAAA;AAChD,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiC;AACpD,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,YAAA,OAAO,GAAG;QACZ;QAEA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAChD,IAAI,EAAE,GAAG,CAAC,MAAM;AAChB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,MAAM,EAAE;AACN,gBAAA,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM;AACxB,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE;AACpC,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,KAAgC,EAAE;YACnE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC;QAC1C;AAEA,QAAA,OAAO,GAAG;IACZ;IAEQ,WAAW,CACjB,QAAuC,EACvC,aAAqC,EAAA;QAErC,MAAM,OAAO,GAAG;AACd,cAAE,2BAA2B,CAAC,aAAmD;cAC/E,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AAE7B,QAAA,MAAM,aAAa,GAAG,aAAa,EAAE,aAAa;AAClD,QAAA,MAAM,QAAQ,GAAI,aAAa,EAAE,QAA8C,IAAI,QAAQ;QAC3F,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,IAAI,aAAa,EAAE,KAAK,IAAI,EAAE;AAC3D,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI;QACzB,MAAM,OAAO,GAAG,oCAAoC,CAAC;YACnD,aAAa;YACb,aAAa,EAAE,aAAa,EAAE,aAAa;YAC3C,OAAO,EAAE,aAAa,EAAE,OAAO;AAChC,SAAA,CAAC;QACF,MAAM,MAAM,GAAG,mCAAmC,CAAC;YACjD,aAAa;YACb,KAAK;YACL,IAAI;YACJ,aAAa,EAAE,aAAa,EAAE,aAAa;YAC3C,OAAO;AACR,SAAA,CAAC;AACF,QAAA,MAAM,SAAS,GAAG,0BAA0B,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAEjF,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,KAAK;YACL,IAAI;AACJ,YAAA,SAAS,EAAE,QAAQ,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI,EAAE;YAC7E,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,IAAI;YAC7E,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,IAAI;YAC7E,MAAM;YACN,SAAS;YACT,QAAQ;AACR,YAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpC,aAAa;AACb,YAAA,aAAa,EAAE,aAAa,EAAE,aAAa,IAAI,SAAS;YACxD,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,SAAS;YAC9D,UAAU,EAAE,QAAQ,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,UAAU,IAAI,IAAI;YAC7F,OAAO;SACR;IACH;8GA1RW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA9B,8BAA8B,EAAA,CAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C;;;ACpBD;SAEgB,yCAAyC,GAAA;IACvD,OAAO;QACL,qBAAqB,CAAC,MAAK;AACzB,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC3E,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,4BAA4B,CAAC;YAC1D,OAAO;AACL,gBAAA,IAAI,EAAE,wCAAwC;gBAC9C,QAAQ,EAAE,wBAAwB,CAAC,gBAAgB;gBACnD,GAAG,EAAE,YAAW;oBACd,UAAU,EAAE,QAAQ,CAAC;AACnB,wBAAA,KAAK,EAAE,gCAAgC;AACvC,wBAAA,MAAM,EAAE,CAAC,QAAQ,KAAI;4BACnB,MAAM,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAmC;AAC1E,4BAAA,MAAM,GAAG,GAAG;AACV,gCAAA,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;AAC9B,gCAAA,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;AACpD,6BAAA,CAAC,MAAM,CAAC,OAAO,CAAC;AAEjB,4BAAA,MAAM,KAAK,GAA6B;AACtC,gCAAA,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;gCACxC,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;6BACpD;AACD,4BAAA,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC;wBACpC,CAAC;AACF,qBAAA,CAAC;gBACJ,CAAC;aACF;AACH,QAAA,CAAC,CAAC;KACH;AACH;AAEA,SAAS,sBAAsB,CAC7B,EAAwC,EAAA;AAExC,IAAA,IAAI,EAAE,KAAK,SAAS,EAAE;AACpB,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,IAAI,EAAE,KAAK,UAAU,EAAE;AACrB,QAAA,OAAO,UAAU;IACnB;IACA,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,EAAE;AACxC,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,OAAO,SAAS;AAClB;AAEA;;AC1DA;MAGa,2CAA2C,CAAA;AADxD,IAAA,WAAA,GAAA;QAEW,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,IAAI;iGAAC;AAC7C,IAAA;8GAFY,2CAA2C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3C,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2CAA2C,cAD9B,MAAM,EAAA,CAAA,CAAA;;2FACnB,2CAA2C,EAAA,UAAA,EAAA,CAAA;kBADvD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACOlC;AAEA,MAAM,gBAAgB,GAAG,MAAM;AAC/B,MAAM,0BAA0B,GAAG,GAAG;AAEtC;AAEA;AAEA;;;AAGG;SACa,0CAA0C,GAAA;IACxD,OAAO;QACL,qBAAqB,CAAC,MAAK;AACzB,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,6BAA6B,CAAC;AACvD,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChD,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,2CAA2C,CAAC;AACtE,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC3E,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YAErC,MAAM,mBAAmB,GAAG,MAAW;AACrC,gBAAA,IAAI,cAAc,CAAC,sBAAsB,EAAE;AACzC,oBAAA,KAAK,SAAS,CAAC,OAAO,EAAE;gBAC1B;AACF,YAAA,CAAC;YAED,OAAO;AACL,gBAAA,IAAI,EAAE,qCAAqC;gBAC3C,QAAQ,EAAE,wBAAwB,CAAC,qBAAqB;gBACxD,GAAG,EAAE,YAAW;oBACd,IAAI,CAAC,UAAU,EAAE;AACf,wBAAA,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;wBAC1C;oBACF;AAEA,oBAAA,IAAI,YAAY,GAAG,UAAU,CAAC,iBAAiB,EAAE;AAEjD,oBAAA,UAAU,CAAC;yBACR,IAAI,CAAC,oBAAoB,EAAE,EAAE,kBAAkB,CAAC,UAAU,CAAC;AAC3D,yBAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,wBAAA,MAAM,SAAS,GAAG,MAAM,KAAK,WAAW;AACxC,wBAAA,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC;AAE9C,wBAAA,IAAI,SAAS,IAAI,CAAC,YAAY,EAAE;4BAC9B,KAAK,CAAC,0BAA0B;AAC7B,iCAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;iCACnC,SAAS,CAAC,MAAK;AACd,gCAAA,mBAAmB,EAAE;AACvB,4BAAA,CAAC,CAAC;wBACN;wBAEA,YAAY,GAAG,SAAS;AAC1B,oBAAA,CAAC,CAAC;AAEJ,oBAAA,UAAU,CAAC;yBACR,IAAI,CACH,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,MAAM,KAAI;AACnB,wBAAA,IAAI,MAAM,KAAK,WAAW,EAAE;AAC1B,4BAAA,OAAO,KAAK;wBACd;AACA,wBAAA,OAAO,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AAClD,oBAAA,CAAC,CAAC,EACF,kBAAkB,CAAC,UAAU,CAAC;yBAE/B,SAAS,CAAC,MAAK;AACd,wBAAA,mBAAmB,EAAE;AACvB,oBAAA,CAAC,CAAC;AAEJ,oBAAA,QAAQ,CAAC,gBAAgB,CACvB,kBAAkB,EAClB,MAAK;AACH,wBAAA,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE;;AAE1C,4BAAA,mBAAmB,EAAE;wBACvB;AACF,oBAAA,CAAC,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB;gBACH,CAAC;aACF;AACH,QAAA,CAAC,CAAC;KACH;AACH;AAEA;;AC1FA;MAGa,wCAAwC,CAAA;AADrD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAuBjE,IAAA;IArBC,MAAM,MAAM,CAAC,OAA0C,EAAA;QACrD,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE;QACnD,IAAI,CAAC,eAAe,EAAE;YACpB;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACrB,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,YAAA,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,KAAK;gBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,aAAA;AACD,YAAA,OAAO,EAAE,QAAQ;YACjB,eAAe;AACf,YAAA,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ;YACxC,aAAa,EAAE,OAAO,CAAC,EAAE;YACzB,cAAc,EAAE,OAAO,CAAC,EAAE;AAC3B,SAAA,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAClD;8GAxBW,wCAAwC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxC,wCAAwC,EAAA,CAAA,CAAA;;2FAAxC,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBADpD;;AA4BM,MAAM,6CAA6C,GAAG;AAC3D,IAAA,OAAO,EAAE,+BAA+B;AACxC,IAAA,QAAQ,EAAE,wCAAwC;CACnD;;AC1CD;AA4FA;;AC5FA;MAKa,uBAAuB,GAAG,IAAI,cAAc,CAAsB,yBAAyB;MAE3F,qBAAqB,GAAG,IAAI,cAAc,CAAwB,uBAAuB;AAEtG;;MCAa,4BAA4B,GAAG,IAAI,cAAc,CAC5D,8BAA8B;AAGhC;;ACAA;MAkBa,0BAA0B,CAAA;AAhBvC,IAAA,WAAA,GAAA;QAiBE,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ;iFAAqB;QAC1C,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,IAAI;uFAAC;QACxB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI;qFAAC;QACtB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;QACtB,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,4BAA4B;wFAAC;QACjD,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,8BAA8B;0FAAC;;QAErD,IAAA,CAAA,yBAAyB,GAAG,KAAK,CAAC,KAAK;sGAAC;QACxC,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,IAAI;8FAAC;QAC/B,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAC,uDAAuD;+FAAC;AAEhE,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC;0FAAC;AAChF,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;qFAAC;AACjE,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;0FAAC;AACxD,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;6FAAC;AAChF,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,IAAI,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC3C,OAAO,IAAI,CAAC,MAAO,CAAC,QAAS,CAAC,IAAI,EAAE;YACtC;AACA,YAAA,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE;QACzB,CAAC;qFAAC;AACiB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;0FAAC;AACvE,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,KAAK,KAAK;4FAAC;AACvF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE;yFAAC;AAC/E,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YAChD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACnD,gBAAA,OAAO,KAAK;YACd;YACA,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;QACvD,CAAC;2FAAC;AACiB,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE;wFAAC;AACzE,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;qFAAC;QAChE,IAAA,CAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;uFAChF;AACkB,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;qFAAC;QAEvF,IAAA,CAAA,SAAS,GAAG,MAAM,EAAU;QAC5B,IAAA,CAAA,UAAU,GAAG,MAAM,EAAU;QAC7B,IAAA,CAAA,SAAS,GAAG,MAAM,EAAU;QAC5B,IAAA,CAAA,YAAY,GAAG,MAAM,EAAQ;AAyB9B,IAAA;AAvBW,IAAA,SAAS,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;IAC9B;AAEU,IAAA,OAAO,CAAC,EAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC5B;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEU,IAAA,WAAW,CAAC,KAAY,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;IACrC;AAEU,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;IACtC;8GAlEW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,q9CC/BvC,wgJA6HA,EAAA,MAAA,EAAA,CAAA,4+MAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxGI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,oBAAoB,+HACpB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEd,mBAAmB,0IADnB,UAAU,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAID,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAhBtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,eAAA,EAGhB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,sBAAsB;wBACtB,oBAAoB;wBACpB,aAAa;wBACb,cAAc;wBACd,UAAU;wBACV,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,wgJAAA,EAAA,MAAA,EAAA,CAAA,4+MAAA,CAAA,EAAA;;AAuEH,SAAS,uBAAuB,CAAC,IAAY,EAAA;AAC3C,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,qCAAqC,EAAE,EAAE;AACjD,SAAA,OAAO,CAAC,kEAAkE,EAAE,EAAE;AAC9E,SAAA,IAAI,EAAE;AACX;;AEzGA;AAQA;AAEA;MAGa,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,6BAA6B,CAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;AA0BtD,IAAA;IAxBC,MAAM,QAAQ,CAAC,EAAU,EAAA;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACjC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC;aAAO;YACL,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC;QACA,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1B;QACF;QACA,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAChF;AAEQ,IAAA,kBAAkB,CAAC,IAAmC,EAAA;AAC5D,QAAA,OAAO,IAAI,EAAE,aAAa,KAAKC,gCAAuC;IACxE;AAEQ,IAAA,QAAQ,CAAC,EAAU,EAAA;QACzB,QACE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;YACzD,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;IAElE;8GA3BW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCuCrB,2BAA2B,CAAA;AAmBtC,IAAA,WAAA,GAAA;QAlBA,IAAA,CAAA,iBAAiB,GAAG,MAAM,EAAU;QACpC,IAAA,CAAA,YAAY,GAAG,MAAM,EAAQ;AAEZ,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,6BAA6B,CAAC;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACpC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAExC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO;QAC3C,IAAA,CAAA,SAAS,GAAG,MAAM,CAAsB,QAAQ;sFAAC;AAExC,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;qFAAC;AAC3D,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU;oFAAC;QAGjF,MAAM,CAAC,MAAK;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC;AAC9E,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAClC,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;QACzC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,OAAO,EAAE,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,uBAAuB;AACpE,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE,eAAe;AACzB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,eAAe,EAAE,IAAI;AACtB,aAAA,CAAC;QACJ;IACF;AAEU,IAAA,eAAe,CAAC,GAAwB,EAAA;AAChD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;IACzB;AAEU,IAAA,QAAQ,CAAC,GAAwB,EAAA;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,GAAG,KAAK,KAAK,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC;IACrD;IAEU,MAAM,aAAa,CAAC,EAAU,EAAA;QACtC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtC;IAEU,MAAM,aAAa,CAAC,EAAU,EAAA;QACtC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IACvC;IAEU,MAAM,SAAS,CAAC,EAAU,EAAA;QAClC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;IACpC;AAEU,IAAA,MAAM,aAAa,GAAA;AAC3B,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;IACtC;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,IAAI,MAAM;AAC3D,QAAA,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1D;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;YAC9B;QACF;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,IAAI,MAAM;AAC3D,QAAA,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3D;AAEQ,IAAA,aAAa,CAAC,KAA0B,EAAA;QAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAClF,OAAO;AACL,YAAA,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;AACjE,YAAA,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE;SAC5D;IACH;8GA9FW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,qKCnDxC,osGAkFA,EAAA,MAAA,EAAA,CAAA,kgCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzCI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,iBAAiB,sVACjB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,wBAAwB,4JACxB,0BAA0B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGjB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAhBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,eAAA,EAGjB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,YAAY;wBACZ,cAAc;wBACd,YAAY;wBACZ,iBAAiB;wBACjB,aAAa;wBACb,mBAAmB;wBACnB,wBAAwB;wBACxB,0BAA0B;AAC3B,qBAAA,EAAA,QAAA,EAAA,osGAAA,EAAA,MAAA,EAAA,CAAA,kgCAAA,CAAA,EAAA;;;AE7BH;MAkBa,0BAA0B,CAAA;AAhBvC,IAAA,WAAA,GAAA;AAiBqB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACxC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,6BAA6B,CAAC;QACjD,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE5E,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CACrC,MAAM,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE;+FACzE;AAES,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAC1C,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,OAAO,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE;QAC9C,CAAC;yFAAC;QAEM,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,kBAAkB;oFAAC;AAKhD,IAAA;IAHW,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;IACzB;8GAvBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,0HAmBT,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzDhD,+1BA+BA,EAAA,MAAA,EAAA,CAAA,gNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDDI,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,aAAa,2IACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,2BAA2B,8GAN3B,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FASA,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAhBtC,SAAS;+BACE,uBAAuB,EAAA,eAAA,EAGhB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,SAAS;wBACT,cAAc;wBACd,iBAAiB;wBACjB,aAAa;wBACb,eAAe;wBACf,mBAAmB;wBACnB,2BAA2B;AAC5B,qBAAA,EAAA,QAAA,EAAA,+1BAAA,EAAA,MAAA,EAAA,CAAA,gNAAA,CAAA,EAAA;yFAqB2B,kBAAkB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE5ChD,MAAMJ,MAAI,GAAG,uDAAuD;AAEpE;MAEa,gDAAgD,CAAA;IAC3D,MAAM,OAAO,CAAC,OAA4C,EAAA;QACxD;aACG,QAAQ,CACP,mDAAmD,EACnD,CAAA,EAAGA,MAAI,CAAA,UAAA,CAAY,EACnB,CAAA,EAAGA,MAAI,CAAA,YAAA,CAAc,EACrBO,YAAU,CAAC,MAAM,CAAC,IAAI,EACtB,GAAGP,MAAI,CAAA,MAAA,CAAQ,EACf,EAAE;aAEH,UAAU,CACT,oDAAoD,EACpD,CAAA,EAAGA,MAAI,0BAA0B,EACjC,CAAA,EAAGA,MAAI,CAAA,8BAAA,CAAgC;AAExC,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,qCAAqC,CAAC,uBAAuB;YAClE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,+BAAA,CAAiC;AAC/C,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,YAAY,EACV,4CAA4C,CAC1C,qCAAqC,CAAC,uBAAuB,CAC9D;YACH,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE;YACrD,WAAW,EAAE,CAAA,EAAGA,MAAI,CAAA,qCAAA,CAAuC;SAC5D;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,qCAAqC,CAAC,uBAAuB;YAClE,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,8BAAA,CAAgC;AAC9C,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,YAAY,EACV,4CAA4C,CAC1C,qCAAqC,CAAC,uBAAuB,CAC9D;YACH,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE;YACrD,WAAW,EAAE,CAAA,EAAGA,MAAI,CAAA,oCAAA,CAAsC;SAC3D;AACA,aAAA,UAAU;AACV,aAAA,QAAQ,EAAE;IACf;AACD;AAED;;AC7DO,MAAM,+BAA+B,GAAsB;AAChE,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AAC9B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,QAAQ,EAAE,KAAK;CAChB;;MCDY,sCAAsC,CAAA;AAAnD,IAAA,WAAA,GAAA;AACmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAiC3D;IA/BE,MAAM,OAAO,CAAC,OAA+B,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;QAErC,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAC1B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;AACtD,gBAAA;oBACE,IAAI,EAAE,iBAAiB,CAAC,UAAU;AAClC,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,IAAI,EAAE,iCAAiC;AACvC,oBAAA,IAAI,EAAE,wBAAwB;AAC9B,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA;AACF,aAAA,CAAC;QACJ;QAEA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC;AAClD,YAAA;gBACE,IAAI,EAAE,kCAAkC,CAAC,cAAc;AACvD,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW;AACnD,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACnF,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI;AAC5C,gBAAA,QAAQ,EAAE,CAAC;AACX,gBAAA,MAAM,EAAE;oBACN,QAAQ,EAAE,CAAC,MAAM,CAAC;AAClB,oBAAA,WAAW,EAAE,CAAC,8BAA8B,CAAC,sBAAsB,CAAC;AACrE,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AACD;;AC9BD;AAEA;AAEA;;AAEG;MAEU,sDAAsD,CAAA;IACjE,MAAM,MAAM,CAAC,OAA+C,EAAA;QAC1D,MAAM,IAAI,GAAG,8BAA8B;QAC3C,MAAM,MAAM,GAAG,4BAA4B;QAC3C,MAAM,CAAC,GAAG,mCAAmC;QAC7C,MAAM,CAAC,GAAG,2BAA2B;QAErC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA,EAAG,CAAC,sBAAsB,EAAE,CAAA,EAAG,CAAC,CAAA,0BAAA,CAA4B,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAExH;AACG,aAAA,QAAQ,CACP,MAAM,CAAC,aAAa,CAAC,cAAc,EACnC,CAAA,EAAG,CAAC,CAAA,mCAAA,CAAqC,EACzC,CAAA,EAAG,CAAC,CAAA,yCAAA,CAA2C,EAC/C,EAAE,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AAEjD,aAAA,aAAa,CACZ,IAAI,CAAC,sBAAsB,EAC3B,CAAA,EAAG,CAAC,CAAA,8BAAA,CAAgC,EACpC,CAAA,EAAG,CAAC,CAAA,oCAAA,CAAsC;AAE3C,aAAA,aAAa;AACb,aAAA,QAAQ,EAAE;IACf;8GAvBW,sDAAsD,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAtD,sDAAsD,EAAA,CAAA,CAAA;;2FAAtD,sDAAsD,EAAA,UAAA,EAAA,CAAA;kBADlE;;;ACpBK,MAAO,+CAAgD,SAAQ,wBAAwB,CAAA;AAA7F,IAAA,WAAA,GAAA;;QACE,IAAA,CAAA,QAAQ,GAAsB,EAAE;IAClC;AAAC;;ACSD,MAAMA,MAAI,GAAG,kDAAkD;AAC/D,MAAM,cAAc,GAAG,2DAA2D;AAElF;AACA,MAAM,iBAAiB,GAAG;AACxB,IAAA,SAAS,EAAE,KAAc;CAC1B;MAEY,yCAAyC,CAAA;IACpD,MAAM,OAAO,CAAC,OAA4C,EAAA;QACxD;aACG,QAAQ,CACP,eAAe,EACf,CAAA,EAAGA,MAAI,CAAA,UAAA,CAAY,EACnB,CAAA,EAAGA,MAAI,CAAA,YAAA,CAAc,EACrBO,YAAU,CAAC,MAAM,CAAC,IAAI,EACtB,GAAGP,MAAI,CAAA,MAAA,CAAQ,EACf,EAAE;aAEH,UAAU,CAAC,eAAe,EAAE,CAAA,EAAGA,MAAI,aAAa,EAAE,CAAA,EAAGA,MAAI,CAAA,iBAAA,CAAmB;AAC5E,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,qCAAqC,CAAC,WAAW;YACtD,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,kBAAA,CAAoB;AAClC,YAAA,KAAK,EAAE,GAAG;YACV,aAAa,EAAE,CAAC,GAAG,CAAC;;;AAGpB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,GAAG,iBAAiB;AACpB,YAAA,YAAY,EAAE,uCAAuC,CAAC,qCAAqC,CAAC,WAAW,CAAC;AACxG,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO;AACrC,aAAA;YACD,WAAW,EAAE,CAAA,EAAGA,MAAI,CAAA,wBAAA,CAA0B;SAC/C;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,qCAAqC,CAAC,SAAS;YACpD,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,gBAAA,CAAkB;AAChC,YAAA,KAAK,EAAE,GAAG;YACV,aAAa,EAAE,CAAC,GAAG,CAAC;AACpB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,GAAG,iBAAiB;AACpB,YAAA,YAAY,EAAE,uCAAuC,CAAC,qCAAqC,CAAC,SAAS,CAAC;AACtG,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS;AACtC,gBAAA,OAAO,EAAE;AACP,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,QAAQ,EAAE,KAAK;AAChB,iBAAA;AACF,aAAA;YACD,WAAW,EAAE,CAAA,EAAGA,MAAI,CAAA,sBAAA,CAAwB;SAC7C;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,qCAAqC,CAAC,aAAa;YACxD,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,oBAAA,CAAsB;AACpC,YAAA,KAAK,EAAE,GAAG;YACV,aAAa,EAAE,CAAC,GAAG,CAAC;AACpB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,GAAG,iBAAiB;AACpB,YAAA,YAAY,EAAE,uCAAuC,CAAC,qCAAqC,CAAC,aAAa,CAAC;AAC1G,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO;AACrC,aAAA;YACD,WAAW,EAAE,CAAA,EAAGA,MAAI,CAAA,0BAAA,CAA4B;SACjD;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,qCAAqC,CAAC,aAAa;YACxD,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,oBAAA,CAAsB;AACpC,YAAA,KAAK,EAAE,GAAG;YACV,aAAa,EAAE,CAAC,GAAG,CAAC;AACpB,YAAA,WAAW,EAAE,KAAK;;AAElB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,YAAY,EAAE,uCAAuC,CAAC,qCAAqC,CAAC,aAAa,CAAC;AAC1G,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,WAAW;AACzC,aAAA;YACD,WAAW,EAAE,CAAA,EAAGA,MAAI,CAAA,0BAAA,CAA4B;SACjD;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,qCAAqC,CAAC,gBAAgB;YAC3D,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,wBAAA,CAA0B;AACxC,YAAA,KAAK,EAAE,GAAG;YACV,aAAa,EAAE,CAAC,GAAG,CAAC;AACpB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,GAAG,iBAAiB;AACpB,YAAA,YAAY,EAAE,uCAAuC,CAAC,qCAAqC,CAAC,gBAAgB,CAAC;AAC7G,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO;AACrC,aAAA;YACD,WAAW,EAAE,CAAA,EAAGA,MAAI,CAAA,8BAAA,CAAgC;SACrD;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,qCAAqC,CAAC,WAAW;YACtD,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,eAAA,CAAiB;AAC/B,YAAA,KAAK,EAAE,GAAG;YACV,aAAa,EAAE,CAAC,GAAG,CAAC;AACpB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,GAAG,iBAAiB;AACpB,YAAA,YAAY,EAAE,uCAAuC,CAAC,qCAAqC,CAAC,WAAW,CAAC;AACxG,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY;AAC1C,aAAA;YACD,WAAW,EAAE,CAAA,EAAGA,MAAI,CAAA,qBAAA,CAAuB;SAC5C;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,qCAAqC,CAAC,WAAW;YACtD,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,eAAA,CAAiB;AAC/B,YAAA,KAAK,EAAE,GAAG;YACV,aAAa,EAAE,CAAC,GAAG,CAAC;AACpB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,GAAG,iBAAiB;AACpB,YAAA,YAAY,EAAE,uCAAuC,CAAC,qCAAqC,CAAC,WAAW,CAAC;AACxG,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY;AAC1C,aAAA;YACD,WAAW,EAAE,CAAA,EAAGA,MAAI,CAAA,qBAAA,CAAuB;SAC5C;AACA,aAAA,SAAS,CAAC;YACT,KAAK,EAAE,CAAA,EAAGA,MAAI,CAAA,iBAAA,CAAmB;AACjC,YAAA,IAAI,EAAE,yBAAyB;AAC/B,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,mBAAmB,EAAE;AACnB,gBAAA,qCAAqC,CAAC,WAAW;AACjD,gBAAA,qCAAqC,CAAC,SAAS;AAC/C,gBAAA,qCAAqC,CAAC,gBAAgB;AACvD,aAAA;AACD,YAAA,OAAO,EAAE;gBACP,IAAI,EAAE,qCAAqC,CAAC,QAAQ;AACrD,aAAA;SACF;AACA,aAAA,UAAU;AACV,aAAA,QAAQ,EAAE;AAEb,QAAA,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC;IAChD;AAEQ,IAAA,gCAAgC,CAAC,OAA4C,EAAA;AACnF,QAAA,MAAM,OAAO,GAAG,wCAAwC,CAAC,OAAO,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;QAEA;AACG,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,qCAAqC,CAAC,yBAAyB;YACpE,KAAK,EAAE,CAAA,EAAG,cAAc,CAAA,YAAA,CAAc;AACtC,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EACV,uCAAuC,CAAC,qCAAqC,CAAC,yBAAyB,CAAC;AAC1G,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO;AACrC,aAAA;YACD,WAAW,EAAE,CAAA,EAAG,cAAc,CAAA,kBAAA,CAAoB;SACnD;AACA,aAAA,UAAU,EAAE;IACjB;AACD;AAED,SAAS,wCAAwC,CAAC,OAA4C,EAAA;IAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC;IACrE,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,UAAU,GAAG;SAChB,QAAQ,CAAC,qCAAqC;AAC/C,UAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,2DAA2D,CAAC;IAE5G,IAAI,UAAU,EAAE;AACd,QAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,2DAA2D,CAAC;IACtF;AAEA,IAAA,OAAO,QAAQ,CAAC,UAAU,CACxB,2DAA2D,EAC3D,CAAA,EAAG,cAAc,CAAA,MAAA,CAAQ,EACzB,CAAA,EAAG,cAAc,CAAA,YAAA,CAAc,CAChC;AACH;;ACxLA,MAAM,IAAI,GAAG,CAAA,CAAA,EAAIO,YAAU,CAAC,MAAM,CAAC,IAAI,CAAA,mBAAA,CAAqB;AAE5D;MAGa,qDAAqD,CAAA;IAGhE,WAAW,GAAA;QACT,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,uBAAuB,EAAE,YAAY;gBACrC,KAAK,EAAE,CAAA,EAAG,IAAI,CAAA,MAAA,CAAQ;AACtB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,mBAAmB,EAAE;AACnB,oBAAA,qCAAqC,CAAC,WAAW;AACjD,oBAAA,qCAAqC,CAAC,SAAS;AAC/C,oBAAA,qCAAqC,CAAC,gBAAgB;AACvD,iBAAA;gBACD,uBAAuB,EAAE,CAAA,EAAG,IAAI,CAAA,qBAAA,CAAuB;AACvD,gBAAA,iBAAiB,EAAE;AACjB,oBAAA,KAAK,EAAE,eAAe;AACtB,oBAAA,OAAO,EAAE,eAAe;AACxB,oBAAA,KAAK,EAAE,GAAG;AACX,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,uBAAuB,EAAE,QAAQ;gBACjC,KAAK,EAAE,CAAA,EAAG,IAAI,CAAA,OAAA,CAAS;AACvB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,UAAU,EAAE,IAAI;AACjB,aAAA;SACF;IACH;8GA/BW,qDAAqD,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArD,qDAAqD,EAAA,CAAA,CAAA;;2FAArD,qDAAqD,EAAA,UAAA,EAAA,CAAA;kBADjE;;AAmCD;AAEO,MAAM,wCAAwC,GAAG;AACtD,IAAA,OAAO,EAAE,6CAA6C;AACtD,IAAA,QAAQ,EAAE,qDAAqD;AAC/D,IAAA,KAAK,EAAE,IAAI;CACZ;;ACxDD;AAsBA;AAEA;AAcM,MAAO,6CAA8C,SAAQ,uBAAgC,CAAA;AAZnG,IAAA,WAAA,GAAA;;;AAemB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,6BAA6B,CAAC;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/C,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,qBAAqB,CAAC;;;AAMpC,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE;qFAAC;AAC7D,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,IAAI,IAAI;uFAAC;AACnE,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,IAAI;qFAAC;AAE/D,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AACxC,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AAClB,gBAAA,OAAO,EAAE;YACX;YAEA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1F,CAAC;uFAAC;AA0BH,IAAA;;;IApBU,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IACxE;;;IAMU,MAAM,WAAW,CAAC,EAAU,EAAA;QACpC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;IAEU,MAAM,eAAe,CAAC,EAAU,EAAA;QACxC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;8GA9CW,6CAA6C,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7C,6CAA6C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtC1D,0oBAoBA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDWI,YAAY,8BACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,0BAA0B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIf,6CAA6C,EAAA,UAAA,EAAA,CAAA;kBAZzD,SAAS;AAGI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,0BAA0B;wBAC1B,wBAAwB;qBACzB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0oBAAA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA;;;;;;;;AEpCjD;AAIA;AAEA;AAEA;AACO,MAAM,wCAAwC,GAAG,+BAA+B,CAAC;AACtF,IAAA,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACZ,IAAA,EAAE,EAAE;QACF,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;AACP,KAAA;AACD,IAAA,EAAE,EAAE;QACF,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;AACP,KAAA;AACD,IAAA,EAAE,EAAE;QACF,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;AACP,KAAA;AACD,IAAA,KAAK,EAAE;QACL,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;AACP,KAAA;AACD,IAAA,KAAK,EAAE;QACL,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;AACP,KAAA;AACD,IAAA,KAAK,EAAE;QACL,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,EAAE,CAAC,CAAC;AACP,KAAA;AACF,CAAA;AAED;;AC1BA;AAEO,MAAM,8BAA8B,GAAoB;AAC7D,IAAA,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,qBAAqB;AAC9C,IAAA,KAAK,EAAE,0EAA0E;IACjF,UAAU,EAAE,CAAC,4BAA4B,CAAC;AAC1C,IAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;AAC5C,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,WAAW,EAAE,gFAAgF;AAC7F,IAAA,IAAI,EAAE,qBAAqB;AAC3B,IAAA,UAAU,EAAE;QACV,aAAa,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACzD,QAAA;AACE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,uEAAuE;AAC9E,YAAA,WAAW,EAAE,iDAAiD;AAC9D,YAAA,KAAK,EAAE,0BAA0B;AACjC,YAAA,MAAM,EAAE;AACN,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,SAAS,EAAE;AACT,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC9B,oBAAA,OAAO,EAAE;AACP,wBAAA,QAAQ,EAAE,CAAC;AACX,wBAAA,QAAQ,EAAE,GAAG;AACd,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,KAAK,EAAE,yEAAyE;AAChF,YAAA,WAAW,EAAE,wCAAwC;AACrD,YAAA,KAAK,EAAE,6BAA6B;AACpC,YAAA,MAAM,EAAE;AACN,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,SAAS,EAAE;AACT,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,IAAI,EAAE,oBAAoB;oBAC1B,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC/B,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,uEAAuE;AAC9E,YAAA,WAAW,EAAE,qCAAqC;AAClD,YAAA,KAAK,EAAE,6BAA6B;AACpC,YAAA,MAAM,EAAE;AACN,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,SAAS,EAAE;AACT,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC/B,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;AACF,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE;AACJ,YAAA,SAAS,EAAE,MACT,uFAAuD,CAAC,IAAI,CAC1D,CAAC,CAAC,KAAK,CAAC,CAAC,6CAA6C,CACvD;AACJ,SAAA;AACF,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,UAAU,EAAE,wCAAwC;AACrD,KAAA;;AAGH;;ACnFA;AAEA;MAGa,yCAAyC,CAAA;IACpD,UAAU,GAAA;QACR,OAAO,CAAC,8BAA8B,CAAC;IACzC;8GAHW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAzC,yCAAyC,EAAA,CAAA,CAAA;;2FAAzC,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD;;;ACmCD;AACA,MAAM,iDAAiD,GAAG,yCAAkD;AAC5G,MAAM,0CAA0C,GAAG,mCAA4C;AAE/F,SAAS,aAAa,GAAA;IACpB,OAAO;AACL,QAAA;AACE,YAAA,IAAI,EAAE,sBAAsB;AAC5B,YAAA,WAAW,EAAE,CAAC,GAAG,0BAA0B,CAAC;AAC5C,YAAA,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;AAC1B,YAAA,aAAa,EAAE,MAAM,sBAAsB;AAC3C,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,QAAQ,EAAE;AACR,gBAAA;AACE,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,aAAa,EAAE,MACb,OAAO,iHAA6D,CAAC,CAAC,IAAI,CACxE,CAAC,CAAC,KAAK,CAAC,CAAC,uCAAuC,CACjD;AACH,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACtB,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AACH;MAyIa,gCAAgC,CAAA;8GAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAhC,gCAAgC,EAAA,OAAA,EAAA,CAAAN,IAAA,CAAA,sBAAA,CAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,SAAA,EA5HhC;AACT,YAAA,oBAAoB,CAAC;AACnB,gBAAA;oBACE,GAAG,EAAEO,uCAAqC,CAAC,IAAI;AAC/C,oBAAA,OAAO,EAAE,MAAM,OAAO,kGAAuC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC;AACvG,iBAAA;AACD,gBAAA;oBACE,GAAG,EAAEA,uCAAqC,CAAC,QAAQ;AACnD,oBAAA,OAAO,EAAE,MAAM,OAAO,uGAA4C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC;AAChH,iBAAA;AACD,gBAAA;oBACE,GAAG,EAAEA,uCAAqC,CAAC,eAAe;AAC1D,oBAAA,OAAO,EAAE,MACP,OAAO,+GAA0D,CAAC,CAAC,IAAI,CACrE,CAAC,CAAC,KAAK,CAAC,CAAC,6CAA6C,CACvD;AACJ,iBAAA;AACD,gBAAA;oBACE,GAAG,EAAEA,uCAAqC,CAAC,SAAS;AACpD,oBAAA,OAAO,EAAE,MACP,OAAO,wGAAmD,CAAC,CAAC,IAAI,CAC9D,CAAC,CAAC,KAAK,CAAC,CAAC,uCAAuC,CACjD;AACJ,iBAAA;AACD,gBAAA;oBACE,GAAG,EAAEA,uCAAqC,CAAC,eAAe;AAC1D,oBAAA,OAAO,EAAE,MACP,OAAO,+GAAoD,CAAC,CAAC,IAAI,CAC/D,CAAC,CAAC,KAAK,CAAC,CAAC,mCAAmC,CAC7C;AACJ,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,iDAAiD;AACtD,oBAAA,OAAO,EAAE,MACP,OAAO,+GAA0D,CAAC,CAAC,IAAI,CACrE,CAAC,CAAC,KAAK,CAAC,CAAC,6CAA6C,CACvD;AACJ,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,0CAA0C;AAC/C,oBAAA,OAAO,EAAE,MACP,OAAO,wGAAmD,CAAC,CAAC,IAAI,CAC9D,CAAC,CAAC,KAAK,CAAC,CAAC,uCAAuC,CACjD;AACJ,iBAAA;aACF,CAAC;AACF,YAAA;AACE,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,QAAQ,EAAE,+BAA+B;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,QAAQ,EAAE,sDAAsD;AAChE,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,sCAAsC;AAChD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,QAAQ,EAAE,8BAA8B;AACxC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,QAAQ,EAAE,sCAAsC;AAChD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,QAAQ,EAAE,+CAA+C;AACzD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,QAAQ,EAAE,yCAAyC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,QAAQ,EAAE,gDAAgD;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;YACD,wCAAwC;AACxC,YAAA;AACE,gBAAA,OAAO,EAAE,8BAA8B;AACvC,gBAAA,QAAQ,EAAE,yCAAyC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,QAAQ,EAAE,8BAA8B;AACzC,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,uBAAuB;AAChC,gBAAA,QAAQ,EAAE,6BAA6B;AACxC,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,QAAQ,EAAE,2BAA2B;AACtC,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,WAAW,EAAE,2CAA2C;AACzD,aAAA;YACD,6CAA6C;AAC7C,YAAA;AACE,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,QAAQ,EAAE,kCAAkC;AAC5C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,GAAG,yCAAyC,EAAE;AAC9C,YAAA,GAAG,0CAA0C,EAAE;AAC/C,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA;SACF,EAAA,OAAA,EAAA,CAnIC,sBAAsB,CAAC,QAAQ,CAAC;AAC9B,gBAAA,iBAAiB,EAAE;AACjB,oBAAA;AACE,wBAAA,IAAI,EAAE,qBAAqB;AAC3B,wBAAA,SAAS,EAAE,0BAA0B;AACtC,qBAAA;AACF,iBAAA;aACF,CAAC,CAAA,EAAA,CAAA,CAAA;;2FA8HO,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAvI5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,sBAAsB,CAAC,QAAQ,CAAC;AAC9B,4BAAA,iBAAiB,EAAE;AACjB,gCAAA;AACE,oCAAA,IAAI,EAAE,qBAAqB;AAC3B,oCAAA,SAAS,EAAE,0BAA0B;AACtC,iCAAA;AACF,6BAAA;yBACF,CAAC;AACH,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,oBAAoB,CAAC;AACnB,4BAAA;gCACE,GAAG,EAAEA,uCAAqC,CAAC,IAAI;AAC/C,gCAAA,OAAO,EAAE,MAAM,OAAO,kGAAuC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC;AACvG,6BAAA;AACD,4BAAA;gCACE,GAAG,EAAEA,uCAAqC,CAAC,QAAQ;AACnD,gCAAA,OAAO,EAAE,MAAM,OAAO,uGAA4C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC;AAChH,6BAAA;AACD,4BAAA;gCACE,GAAG,EAAEA,uCAAqC,CAAC,eAAe;AAC1D,gCAAA,OAAO,EAAE,MACP,OAAO,+GAA0D,CAAC,CAAC,IAAI,CACrE,CAAC,CAAC,KAAK,CAAC,CAAC,6CAA6C,CACvD;AACJ,6BAAA;AACD,4BAAA;gCACE,GAAG,EAAEA,uCAAqC,CAAC,SAAS;AACpD,gCAAA,OAAO,EAAE,MACP,OAAO,wGAAmD,CAAC,CAAC,IAAI,CAC9D,CAAC,CAAC,KAAK,CAAC,CAAC,uCAAuC,CACjD;AACJ,6BAAA;AACD,4BAAA;gCACE,GAAG,EAAEA,uCAAqC,CAAC,eAAe;AAC1D,gCAAA,OAAO,EAAE,MACP,OAAO,+GAAoD,CAAC,CAAC,IAAI,CAC/D,CAAC,CAAC,KAAK,CAAC,CAAC,mCAAmC,CAC7C;AACJ,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,iDAAiD;AACtD,gCAAA,OAAO,EAAE,MACP,OAAO,+GAA0D,CAAC,CAAC,IAAI,CACrE,CAAC,CAAC,KAAK,CAAC,CAAC,6CAA6C,CACvD;AACJ,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,0CAA0C;AAC/C,gCAAA,OAAO,EAAE,MACP,OAAO,wGAAmD,CAAC,CAAC,IAAI,CAC9D,CAAC,CAAC,KAAK,CAAC,CAAC,uCAAuC,CACjD;AACJ,6BAAA;yBACF,CAAC;AACF,wBAAA;AACE,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,QAAQ,EAAE,+BAA+B;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,kCAAkC;AAC3C,4BAAA,QAAQ,EAAE,sDAAsD;AAChE,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,sCAAsC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,QAAQ,EAAE,8BAA8B;AACxC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,QAAQ,EAAE,sCAAsC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,QAAQ,EAAE,+CAA+C;AACzD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,QAAQ,EAAE,yCAAyC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,QAAQ,EAAE,gDAAgD;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;wBACD,wCAAwC;AACxC,wBAAA;AACE,4BAAA,OAAO,EAAE,8BAA8B;AACvC,4BAAA,QAAQ,EAAE,yCAAyC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,QAAQ,EAAE,8BAA8B;AACzC,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,uBAAuB;AAChC,4BAAA,QAAQ,EAAE,6BAA6B;AACxC,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,QAAQ,EAAE,2BAA2B;AACtC,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,WAAW,EAAE,2CAA2C;AACzD,yBAAA;wBACD,6CAA6C;AAC7C,wBAAA;AACE,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,QAAQ,EAAE,kCAAkC;AAC5C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,GAAG,yCAAyC,EAAE;AAC9C,wBAAA,GAAG,0CAA0C,EAAE;AAC/C,wBAAA;AACE,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,UAAU,EAAE,aAAa;AAC1B,yBAAA;AACF,qBAAA;AACF,iBAAA;;;AC7MD;AAcA;AAEA;AAEM,SAAU,gCAAgC,CAC9C,EAAU,EACV,CAAS,EACT,CAAS,EACT,IAAA,GAA8B,CAAC,CAAC,EAAE,CAAC,CAAC,EAAA;IAEpC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAoB,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAE/G,OAAO;AACL,QAAA,MAAM,EAAE;AACN,YAAA,GAAG,MAAM;AACT,YAAA,KAAK,EAAE,0EAA0E;AAClF,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,IAAI,EAAE,gEAAgE;YACtE,IAAI;YACJ,IAAI,EAAE,CAAA,+DAAA,EAAkE,EAAE,CAAA,CAAE;YAC5E,IAAI,EAAE,CAAA,+DAAA,EAAkE,EAAE,CAAA,CAAE;AAC7E,SAAA;KACF;AACH;AAEA;;AClCA;AAEM,SAAU,mDAAmD,CACjE,OAA4C,EAAA;IAE5C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mDAAmD,CAAC,EAAE;AAC1E,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,mDAAmD,CAAC;AACnF,IAAA,MAAM,UAAU,GAAG,KAAK,EAAE,QAAQ,CAAC,IAAI,CACrC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,oDAAoD,CACnF;IACD,IAAI,CAAC,UAAU,EAAE;AACf,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,EAAE,OAAO,CAChF,oDAAoD,CACrD,IAAI,IAAI;AACX;AAEA;;AC5BA;;AAEG;;;;"}