agent-relay-server 0.90.0 → 0.91.1

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 (63) hide show
  1. package/docs/openapi.json +1 -1
  2. package/package.json +2 -2
  3. package/public/assets/{MessageBubble-bI9fFi55.js → MessageBubble-Cl3gC5sO.js} +2 -2
  4. package/public/assets/{MessageBubble-bI9fFi55.js.map → MessageBubble-Cl3gC5sO.js.map} +1 -1
  5. package/public/assets/{PlanGraphPanel-a3Z57nIZ.js → PlanGraphPanel-BAu-lTm9.js} +2 -2
  6. package/public/assets/{PlanGraphPanel-a3Z57nIZ.js.map → PlanGraphPanel-BAu-lTm9.js.map} +1 -1
  7. package/public/assets/{activity-VTlBVIox.js → activity-navjipA_.js} +2 -2
  8. package/public/assets/{activity-VTlBVIox.js.map → activity-navjipA_.js.map} +1 -1
  9. package/public/assets/{agents-C2TNRCn1.js → agents-B09rJRik.js} +2 -2
  10. package/public/assets/{agents-C2TNRCn1.js.map → agents-B09rJRik.js.map} +1 -1
  11. package/public/assets/{automation-CUSyRZla.js → automation-BsXT9mKj.js} +2 -2
  12. package/public/assets/{automation-CUSyRZla.js.map → automation-BsXT9mKj.js.map} +1 -1
  13. package/public/assets/chat-Cmv-YVII.js +2 -0
  14. package/public/assets/chat-Cmv-YVII.js.map +1 -0
  15. package/public/assets/{formatted-body-impl-DBbmythT.js → formatted-body-impl-CwziXint.js} +2 -2
  16. package/public/assets/{formatted-body-impl-DBbmythT.js.map → formatted-body-impl-CwziXint.js.map} +1 -1
  17. package/public/assets/{index-CiBdEE9x.js → index-Dm1zlklN.js} +5 -5
  18. package/public/assets/{index-CiBdEE9x.js.map → index-Dm1zlklN.js.map} +1 -1
  19. package/public/assets/{insights-9P_MGbMS.js → insights-CGH0lI9i.js} +2 -2
  20. package/public/assets/{insights-9P_MGbMS.js.map → insights-CGH0lI9i.js.map} +1 -1
  21. package/public/assets/{maintenance-CA1XujU3.js → maintenance-BhpfPv6u.js} +2 -2
  22. package/public/assets/{maintenance-CA1XujU3.js.map → maintenance-BhpfPv6u.js.map} +1 -1
  23. package/public/assets/{managed-agents-DCfSlqW7.js → managed-agents-CwjcuvR6.js} +2 -2
  24. package/public/assets/{managed-agents-DCfSlqW7.js.map → managed-agents-CwjcuvR6.js.map} +1 -1
  25. package/public/assets/{markdown-preview-impl-MgZ3Nr7K.js → markdown-preview-impl-KBRWvxHt.js} +2 -2
  26. package/public/assets/{markdown-preview-impl-MgZ3Nr7K.js.map → markdown-preview-impl-KBRWvxHt.js.map} +1 -1
  27. package/public/assets/{memory-DatJLjrc.js → memory-CgpkkEKK.js} +2 -2
  28. package/public/assets/{memory-DatJLjrc.js.map → memory-CgpkkEKK.js.map} +1 -1
  29. package/public/assets/{messages-CQsmbtzx.js → messages-BV1z5tMO.js} +2 -2
  30. package/public/assets/{messages-CQsmbtzx.js.map → messages-BV1z5tMO.js.map} +1 -1
  31. package/public/assets/{orchestrators-CAWYWXmh.js → orchestrators-Bv6T_n-l.js} +2 -2
  32. package/public/assets/{orchestrators-CAWYWXmh.js.map → orchestrators-Bv6T_n-l.js.map} +1 -1
  33. package/public/assets/{overview-EqnqXVUb.js → overview-BdErDjo5.js} +2 -2
  34. package/public/assets/{overview-EqnqXVUb.js.map → overview-BdErDjo5.js.map} +1 -1
  35. package/public/assets/{pairs-BfKenirO.js → pairs-BpzbJ5OL.js} +2 -2
  36. package/public/assets/{pairs-BfKenirO.js.map → pairs-BpzbJ5OL.js.map} +1 -1
  37. package/public/assets/{security-CJVJ9MgS.js → security-CRsIxNpi.js} +2 -2
  38. package/public/assets/{security-CJVJ9MgS.js.map → security-CRsIxNpi.js.map} +1 -1
  39. package/public/assets/{select-BcmIzk-E.js → select-DmZ1eEzM.js} +2 -2
  40. package/public/assets/{select-BcmIzk-E.js.map → select-DmZ1eEzM.js.map} +1 -1
  41. package/public/assets/{settings-BWO-UyHv.js → settings-BqmYUpOu.js} +2 -2
  42. package/public/assets/{settings-BWO-UyHv.js.map → settings-BqmYUpOu.js.map} +1 -1
  43. package/public/assets/{tasks-DTdI_MJi.js → tasks-DZ8C8K2N.js} +2 -2
  44. package/public/assets/{tasks-DTdI_MJi.js.map → tasks-DZ8C8K2N.js.map} +1 -1
  45. package/public/assets/{teams-C9C3KVaV.js → teams-VmX_6z_9.js} +2 -2
  46. package/public/assets/{teams-C9C3KVaV.js.map → teams-VmX_6z_9.js.map} +1 -1
  47. package/public/assets/{terminal-viewer-impl-BDBa94-B.js → terminal-viewer-impl-BJilWDSR.js} +2 -2
  48. package/public/assets/{terminal-viewer-impl-BDBa94-B.js.map → terminal-viewer-impl-BJilWDSR.js.map} +1 -1
  49. package/public/assets/{user-avatar-BL-CJwnn.js → user-avatar-jqI4eKDf.js} +2 -2
  50. package/public/assets/{user-avatar-BL-CJwnn.js.map → user-avatar-jqI4eKDf.js.map} +1 -1
  51. package/public/assets/{work-queue-Vc_2-4DG.js → work-queue-lFDBNpds.js} +2 -2
  52. package/public/assets/{work-queue-Vc_2-4DG.js.map → work-queue-lFDBNpds.js.map} +1 -1
  53. package/public/index.html +1 -1
  54. package/runner/src/adapter.ts +4 -0
  55. package/src/config-store.ts +14 -0
  56. package/src/mcp/tools-spawn.ts +3 -0
  57. package/src/routes/agents-spawn.ts +2 -0
  58. package/src/self-resume.ts +21 -5
  59. package/src/services/register-agent.ts +4 -1
  60. package/src/services/spawn-agent.ts +18 -0
  61. package/src/shared-mcp.ts +57 -0
  62. package/public/assets/chat-BEssCn_H.js +0 -2
  63. package/public/assets/chat-BEssCn_H.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"chat-BEssCn_H.js","names":[],"sources":["../../dashboard/src/components/chat/hooks/useChatAgents.ts","../../dashboard/src/components/chat/AgentListPanel.tsx","../../dashboard/src/lib/slash-commands.ts","../../dashboard/src/components/chat/ViewerPresence.tsx","../../dashboard/src/components/chat/ChatHeader.tsx","../../dashboard/src/components/chat/ChatSearchBar.tsx","../../dashboard/src/components/chat/SlashPalette.tsx","../../dashboard/src/components/chat/Composer.tsx","../../dashboard/src/components/chat/FilePreview.tsx","../../dashboard/src/components/chat/hooks/useAgentStatusEvents.ts","../../dashboard/src/components/chat/hooks/useBackNavProtection.ts","../../dashboard/src/components/chat/chatSearch.ts","../../dashboard/src/components/chat/hooks/useChatSearch.ts","../../dashboard/src/components/chat/hooks/usePresenceHeartbeat.ts","../../dashboard/node_modules/react-virtuoso/dist/index.mjs","../../dashboard/src/components/chat/AskQuestionForm.tsx","../../dashboard/src/components/chat/VirtualTimeline.tsx","../../dashboard/src/components/chat/ChatPanel.tsx","../../dashboard/src/components/chat/hooks/useDraftCleanup.ts","../../dashboard/src/components/chat/hooks/useMobileChatHistory.ts","../../dashboard/src/components/chat/ChatView.tsx"],"sourcesContent":["\nimport { useMemo } from 'react'\nimport { useUniqueHosts } from '@/hooks/use-selectors'\nimport { useRelayStore } from '@/store'\nimport { CHAT_STATUS_SORT_ORDER } from '@/lib/constants'\nimport { agentType, displayName, toTimestamp, userFacingCapabilities, visibleAgents } from '@/lib/display'\nimport { compareConversationActivity } from '../helpers'\n\nexport { useUniqueHosts }\n\nexport function useChatAgents() {\n const agents = useRelayStore((s) => s.agents)\n const showBuiltIns = useRelayStore((s) => s.showBuiltIns)\n const showOffline = useRelayStore((s) => s.showOffline)\n const chatAgentSearch = useRelayStore((s) => s.chatAgentSearch)\n const chatAgentProviderFilter = useRelayStore((s) => s.chatAgentProviderFilter)\n const chatAgentStatusFilter = useRelayStore((s) => s.chatAgentStatusFilter)\n const chatAgentTagFilter = useRelayStore((s) => s.chatAgentTagFilter)\n const chatAgentCapFilter = useRelayStore((s) => s.chatAgentCapFilter)\n const chatAgentHostFilter = useRelayStore((s) => s.chatAgentHostFilter)\n const chatAgentSort = useRelayStore((s) => s.chatAgentSort)\n const chatAgentSortDir = useRelayStore((s) => s.chatAgentSortDir)\n const managedPolicies = useRelayStore((s) => s.managedPolicies)\n\n return useMemo(() => {\n let list = visibleAgents(agents, showBuiltIns, managedPolicies)\n if (!showOffline) list = list.filter((a) => a.status !== 'offline')\n\n if (chatAgentSearch) {\n const q = chatAgentSearch.toLowerCase()\n list = list.filter((a) =>\n a.id.toLowerCase().includes(q) ||\n (a.name || '').toLowerCase().includes(q) ||\n (a.label || '').toLowerCase().includes(q) ||\n (a.tags || []).some((t) => t.toLowerCase().includes(q)) ||\n (a.capabilities || []).some((c) => c.toLowerCase().includes(q))\n )\n }\n\n if (chatAgentProviderFilter) list = list.filter((a) => agentType(a) === chatAgentProviderFilter)\n if (chatAgentStatusFilter) list = list.filter((a) => a.status === chatAgentStatusFilter)\n if (chatAgentTagFilter) list = list.filter((a) => (a.tags || []).includes(chatAgentTagFilter))\n if (chatAgentCapFilter) list = list.filter((a) => (a.capabilities || []).includes(chatAgentCapFilter))\n if (chatAgentHostFilter) list = list.filter((a) => (a.machine || '') === chatAgentHostFilter)\n\n const dir = chatAgentSortDir === 'desc' ? -1 : 1\n return [...list].sort((a, b) => {\n if (chatAgentSort === 'name') return displayName(a).localeCompare(displayName(b)) * dir\n // Ascending base so 'asc' (the default, SortAsc) reads oldest→newest, matching the\n // 'lastMessage' conversation-list sort and the toggle icon (#541).\n if (chatAgentSort === 'lastSeen') return compareConversationActivity(toTimestamp(a.lastSeen), toTimestamp(b.lastSeen), dir) || displayName(a).localeCompare(displayName(b))\n const s = ((CHAT_STATUS_SORT_ORDER[a.status] ?? 9) - (CHAT_STATUS_SORT_ORDER[b.status] ?? 9)) * dir\n return s || displayName(a).localeCompare(displayName(b))\n })\n }, [agents, showBuiltIns, showOffline, managedPolicies, chatAgentSearch, chatAgentProviderFilter,\n chatAgentStatusFilter, chatAgentTagFilter, chatAgentCapFilter, chatAgentHostFilter, chatAgentSort, chatAgentSortDir])\n}\n","\nimport { useMemo, type ReactNode } from 'react'\nimport { AlertCircle, Search, Bot, SortAsc, SortDesc, Plus, SlidersHorizontal, ChevronDown, ChevronRight, ChevronUp, CornerDownRight } from 'lucide-react'\nimport { useRelayStore, useNow } from '@/store'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { ContextRing, agentWorkspaceMeta, agentProjectName, agentHasContextTelemetry } from '@/components/shared/agent-runtime-summary'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { agentNeedsHumanResponse, displayName, fmtTime, messagePreview, timeAgo, userFacingCapabilities } from '@/lib/display'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport type { Agent, InboxThread } from '@/types'\nimport { cn } from '@/lib/utils'\nimport { agentLineageRows, type AgentLineageRow } from '@/lib/agent-lineage'\nimport { compareConversationActivity, lastFinalResponseTimestamp, threadActivityTimestamp } from './helpers'\nimport { useChatAgents, useUniqueHosts } from './hooks/useChatAgents'\n\n// Inline markdown for the single-line conversation preview (#524): bold, italic,\n// strikethrough, inline code, and link text. Newlines are collapsed to spaces by the\n// caller so block constructs never appear; an unmatched marker renders literally.\ntype InlinePattern = { re: RegExp; recurse: boolean; wrap: (children: ReactNode, key: string) => ReactNode }\n\nconst INLINE_PATTERNS: InlinePattern[] = [\n { re: /`([^`]+)`/, recurse: false, wrap: (c, k) => <code key={k} className=\"rounded bg-muted px-1 font-mono text-[0.9em]\">{c}</code> },\n { re: /\\*\\*([^*]+)\\*\\*/, recurse: true, wrap: (c, k) => <strong key={k} className=\"font-semibold text-foreground/90\">{c}</strong> },\n { re: /__([^_]+)__/, recurse: true, wrap: (c, k) => <strong key={k} className=\"font-semibold text-foreground/90\">{c}</strong> },\n { re: /~~([^~]+)~~/, recurse: true, wrap: (c, k) => <s key={k}>{c}</s> },\n { re: /\\*([^*]+)\\*/, recurse: true, wrap: (c, k) => <em key={k}>{c}</em> },\n { re: /_([^_]+)_/, recurse: true, wrap: (c, k) => <em key={k}>{c}</em> },\n { re: /\\[([^\\]]+)\\]\\([^)]+\\)/, recurse: true, wrap: (c, k) => <span key={k} className=\"underline decoration-dotted underline-offset-2\">{c}</span> },\n]\n\nfunction renderInlineMarkdown(text: string, keyPrefix = 'i'): ReactNode[] {\n let best: { index: number; length: number; inner: string; pattern: InlinePattern } | null = null\n for (const pattern of INLINE_PATTERNS) {\n const m = pattern.re.exec(text)\n if (m && m[1] && (best === null || m.index < best.index)) {\n best = { index: m.index, length: m[0].length, inner: m[1], pattern }\n }\n }\n if (!best) return [text]\n const nodes: ReactNode[] = []\n if (best.index > 0) nodes.push(text.slice(0, best.index))\n const inner = best.pattern.recurse ? renderInlineMarkdown(best.inner, `${keyPrefix}x`) : best.inner\n nodes.push(best.pattern.wrap(inner, `${keyPrefix}m`))\n const rest = text.slice(best.index + best.length)\n if (rest) nodes.push(...renderInlineMarkdown(rest, `${keyPrefix}r`))\n return nodes\n}\n\nexport function AgentListPanel({ threads, onSelectAgent }: { threads: InboxThread[]; onSelectAgent?: (id: string) => void }) {\n const set = useRelayStore((s) => s.set)\n const openInboxThread = useRelayStore((s) => s.openInboxThread)\n const openAgentSpawn = useRelayStore((s) => s.openAgentSpawn)\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const chatAgentSearch = useRelayStore((s) => s.chatAgentSearch)\n const chatAgentSort = useRelayStore((s) => s.chatAgentSort)\n const chatAgentSortDir = useRelayStore((s) => s.chatAgentSortDir)\n const chatAgentProviderFilter = useRelayStore((s) => s.chatAgentProviderFilter)\n const chatAgentStatusFilter = useRelayStore((s) => s.chatAgentStatusFilter)\n const chatAgentTagFilter = useRelayStore((s) => s.chatAgentTagFilter)\n const chatAgentCapFilter = useRelayStore((s) => s.chatAgentCapFilter)\n const chatAgentHostFilter = useRelayStore((s) => s.chatAgentHostFilter)\n const chatAgentGroupBy = useRelayStore((s) => s.chatAgentGroupBy)\n const chatAgentFiltersCollapsed = useRelayStore((s) => s.chatAgentFiltersCollapsed)\n const agentsById = useRelayStore((s) => s.agentsById)\n const collapsedChildrenList = useRelayStore((s) => s.chatCollapsedChildren)\n const toggleChildrenCollapsed = useRelayStore((s) => s.toggleChatChildrenCollapsed)\n const now = useNow()\n const chatAgents = useChatAgents()\n const collapsedChildren = useMemo(() => new Set(collapsedChildrenList), [collapsedChildrenList])\n\n const threadByPeer = useMemo(() => {\n const m = new Map<string, InboxThread>()\n for (const t of threads) m.set(t.peer, t)\n return m\n }, [threads])\n\n const sortedAgents = useMemo(() => {\n if (chatAgentSort !== 'lastMessage') return chatAgents\n const dir = chatAgentSortDir === 'desc' ? -1 : 1\n return [...chatAgents].sort((a, b) => {\n const ta = threadActivityTimestamp(threadByPeer.get(a.id))\n const tb = threadActivityTimestamp(threadByPeer.get(b.id))\n return compareConversationActivity(ta, tb, dir) || displayName(a).localeCompare(displayName(b))\n })\n }, [chatAgents, chatAgentSort, chatAgentSortDir, threadByPeer])\n\n const uniqueTags = useMemo(() => [...new Set(chatAgents.flatMap((a) => a.tags || []))], [chatAgents])\n const uniqueCaps = useMemo(() => [...new Set(chatAgents.flatMap((a) => userFacingCapabilities(a.capabilities || [])))], [chatAgents])\n const uniqueHosts = useUniqueHosts()\n\n // Group the (already sorted) agents by project, preserving sort order within\n // each group. null when grouping is off → render a flat list.\n const groupedAgents = useMemo(() => {\n if (chatAgentGroupBy !== 'project') return null\n const groups = new Map<string, Agent[]>()\n for (const a of sortedAgents) {\n const key = agentProjectName(a) || 'No project'\n const bucket = groups.get(key)\n if (bucket) bucket.push(a)\n else groups.set(key, [a])\n }\n return [...groups.entries()].sort((a, b) => a[0].localeCompare(b[0]))\n }, [sortedAgents, chatAgentGroupBy])\n\n const activeFilterCount = [chatAgentProviderFilter, chatAgentStatusFilter, chatAgentTagFilter, chatAgentCapFilter, chatAgentHostFilter].filter(Boolean).length\n const lineageRows = useMemo(() => agentLineageRows(sortedAgents, agentsById, now), [sortedAgents, agentsById, now])\n\n function handleSelect(id: string) {\n openInboxThread(id, threadByPeer.get(id)?.messages)\n onSelectAgent?.(id)\n }\n\n function renderAgentRow(row: AgentLineageRow) {\n const { agent } = row\n // Hide children whose parent group is folded (#525).\n if (row.depth === 1 && row.parent && collapsedChildren.has(row.parent.id)) return null\n const thread = threadByPeer.get(agent.id)\n const unread = thread?.attention.unread || 0\n const needsHumanResponse = agentNeedsHumanResponse(agent)\n const lastMsg = thread?.previewMessage\n // Show the agent's last final-response time (#523); fall back to any message\n // activity when it hasn't responded yet so the row still carries a timestamp.\n const lastActivityAt = lastFinalResponseTimestamp(thread) || threadActivityTimestamp(thread)\n const isSelected = selectedInboxThread === agent.id\n const ws = agentWorkspaceMeta(agent)\n const project = agentProjectName(agent)\n const WsIcon = ws.Icon\n const parentLabel = row.parent ? displayName(row.parent) : agent.spawnedBy\n const childCount = row.children.length\n const isParentWithChildren = row.depth === 0 && childCount > 0\n const childrenCollapsed = collapsedChildren.has(agent.id)\n\n return (\n <li key={agent.id} className={cn('relative', row.depth === 1 && 'pl-4')}>\n {row.depth === 1 && (\n <div className=\"absolute left-2 top-3.5 text-muted-foreground/55\">\n <CornerDownRight className=\"h-3.5 w-3.5\" />\n </div>\n )}\n <button\n className={cn(\n 'w-full text-left px-3 py-2.5 flex items-start gap-2.5 hover:bg-muted/50 transition-colors border-b border-border/50',\n row.depth === 1 && 'bg-muted/15',\n isSelected && 'bg-muted/60'\n )}\n onClick={() => handleSelect(agent.id)}\n >\n <div className=\"relative shrink-0 mt-0.5\">\n <AgentTypeIcon agent={agent} />\n <StatusDot agent={agent} now={now} className=\"absolute -bottom-0.5 -right-0.5 w-2 h-2\" />\n </div>\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-1 mb-0.5\">\n <span className=\"text-xs font-medium truncate\">{displayName(agent)}</span>\n <div className=\"flex items-center gap-1 shrink-0\">\n {lastActivityAt > 0 && (\n <span className=\"text-[10px] text-muted-foreground\" title={fmtTime(lastActivityAt)}>\n {timeAgo(now, lastActivityAt)}\n </span>\n )}\n {unread > 0 && (\n <Badge className=\"bg-red-500 text-white text-xs min-w-[18px] h-[18px] flex items-center justify-center shrink-0 px-1\">\n {unread}\n </Badge>\n )}\n {!unread && needsHumanResponse && (\n <Badge className=\"bg-amber-500 text-black text-xs min-w-[18px] h-[18px] flex items-center justify-center shrink-0 px-1\" title=\"Needs response\">\n <AlertCircle className=\"h-3 w-3\" />\n </Badge>\n )}\n </div>\n </div>\n\n {/* Workspace icon + project name, with context usage on the right */}\n <div className=\"flex items-center gap-1.5 mb-0.5 text-[10px] text-muted-foreground\">\n <span title={ws.title} className=\"inline-flex shrink-0\">\n <WsIcon className={cn('h-3 w-3', ws.iconColor)} />\n </span>\n <span className=\"truncate\">{project || ws.label}</span>\n {agentHasContextTelemetry(agent) && (\n <span className=\"ml-auto shrink-0\">\n <ContextRing context={agent.context} expected size={18} />\n </span>\n )}\n </div>\n {row.depth === 0 && agent.spawnedBy && parentLabel && (\n <div className=\"mb-0.5\">\n <Badge variant=\"outline\" className=\"max-w-full text-[9px] h-4 px-1.5 text-muted-foreground\">\n <span className=\"truncate\">spawned by {parentLabel}</span>\n </Badge>\n </div>\n )}\n\n {lastMsg && (\n <p className=\"text-xs text-muted-foreground truncate leading-tight\">\n {lastMsg.from === HUMAN_AGENT_ID ? 'You: ' : ''}\n {renderInlineMarkdown(messagePreview(lastMsg).replace(/\\s+/g, ' '))}\n </p>\n )}\n </div>\n </button>\n\n {/* Collapse bar for spawned children (#612): carries the child count so the\n parent reads as having N children even when the group is folded, and the\n arrow toggles the fold. Replaces the old per-header child-count badge. */}\n {isParentWithChildren && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); toggleChildrenCollapsed(agent.id) }}\n className=\"flex w-full items-center gap-1.5 border-b border-border/50 bg-muted/20 py-1 pl-8 pr-3 text-[10px] text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground\"\n aria-expanded={!childrenCollapsed}\n title={childrenCollapsed ? `Show ${childCount} child ${childCount === 1 ? 'agent' : 'agents'}` : 'Hide children'}\n >\n {childrenCollapsed ? <ChevronRight className=\"h-3.5 w-3.5 shrink-0\" /> : <ChevronDown className=\"h-3.5 w-3.5 shrink-0\" />}\n <span className=\"font-medium\">{childCount} child {childCount === 1 ? 'agent' : 'agents'}</span>\n </button>\n )}\n </li>\n )\n }\n\n return (\n <div className=\"flex flex-col h-full border-r border-border min-w-0\">\n {/* Search + filters */}\n <div className=\"p-3 border-b border-border space-y-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground pointer-events-none\" />\n <Input\n placeholder=\"Search agents...\"\n value={chatAgentSearch}\n onChange={(e) => set({ chatAgentSearch: e.target.value })}\n className=\"pl-8 h-7 text-xs\"\n />\n </div>\n\n {/* Filters toggle — mobile only; on desktop the panel is always open */}\n <button\n type=\"button\"\n onClick={() => set({ chatAgentFiltersCollapsed: !chatAgentFiltersCollapsed })}\n className=\"sm:hidden flex w-full items-center justify-between h-6 px-1.5 text-xs rounded-md border border-border bg-background text-muted-foreground\"\n >\n <span className=\"inline-flex items-center gap-1.5\">\n <SlidersHorizontal className=\"w-3.5 h-3.5\" />\n Filters &amp; sort\n {activeFilterCount > 0 && (\n <Badge className=\"bg-primary/20 text-primary text-[10px] h-4 min-w-4 px-1 flex items-center justify-center\">{activeFilterCount}</Badge>\n )}\n </span>\n {chatAgentFiltersCollapsed ? <ChevronDown className=\"w-3.5 h-3.5\" /> : <ChevronUp className=\"w-3.5 h-3.5\" />}\n </button>\n\n <div className={cn('space-y-2', chatAgentFiltersCollapsed ? 'hidden' : 'block', 'sm:block')}>\n {/* Sort row */}\n <div className=\"flex items-center gap-1.5\">\n <select\n value={chatAgentSort}\n onChange={(e) => set({ chatAgentSort: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"status\">By status</option>\n <option value=\"name\">By name</option>\n <option value=\"lastSeen\">By last seen</option>\n <option value=\"lastMessage\">By last activity</option>\n </select>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => set({ chatAgentSortDir: chatAgentSortDir === 'asc' ? 'desc' : 'asc' })}\n >\n {chatAgentSortDir === 'asc' ? <SortAsc className=\"w-3.5 h-3.5\" /> : <SortDesc className=\"w-3.5 h-3.5\" />}\n </Button>\n </div>\n\n {/* Grouping */}\n <select\n value={chatAgentGroupBy}\n onChange={(e) => set({ chatAgentGroupBy: e.target.value })}\n className=\"w-full h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">No grouping</option>\n <option value=\"project\">Group by project</option>\n </select>\n\n {/* Filter row */}\n <div className=\"flex gap-1\">\n <select\n value={chatAgentProviderFilter}\n onChange={(e) => set({ chatAgentProviderFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All types</option>\n <option value=\"claude\">Claude</option>\n <option value=\"codex\">Codex</option>\n <option value=\"agent\">Agent</option>\n <option value=\"user\">User</option>\n </select>\n <select\n value={chatAgentStatusFilter}\n onChange={(e) => set({ chatAgentStatusFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All status</option>\n <option value=\"online\">Online</option>\n <option value=\"idle\">Idle</option>\n <option value=\"busy\">Busy</option>\n <option value=\"offline\">Offline</option>\n </select>\n {uniqueHosts.length > 1 && (\n <select\n value={chatAgentHostFilter}\n onChange={(e) => set({ chatAgentHostFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All hosts</option>\n {uniqueHosts.map((h) => <option key={h} value={h}>{h}</option>)}\n </select>\n )}\n </div>\n\n {(uniqueTags.length > 0 || uniqueCaps.length > 0) && (\n <div className=\"flex gap-1\">\n {uniqueTags.length > 0 && (\n <select\n value={chatAgentTagFilter}\n onChange={(e) => set({ chatAgentTagFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All tags</option>\n {uniqueTags.map((t) => <option key={t} value={t}>#{t}</option>)}\n </select>\n )}\n {uniqueCaps.length > 0 && (\n <select\n value={chatAgentCapFilter}\n onChange={(e) => set({ chatAgentCapFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All caps</option>\n {uniqueCaps.map((c) => <option key={c} value={c}>{c}</option>)}\n </select>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Spawn — pinned above the list so it never scrolls out of reach */}\n <button\n type=\"button\"\n className=\"flex w-full shrink-0 items-center gap-2.5 border-b border-border px-3 py-2 text-left transition-colors hover:bg-muted/50\"\n onClick={openAgentSpawn}\n >\n <div className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-full border border-dashed border-primary/50 bg-primary/10 text-primary\">\n <Plus className=\"h-3.5 w-3.5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-xs font-medium\">New Agent</div>\n <div className=\"truncate text-[10px] text-muted-foreground\">Spawn a fresh chat agent</div>\n </div>\n </button>\n\n {/* Agent list */}\n <div className=\"flex-1 overflow-y-auto\">\n {sortedAgents.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-10 text-center px-4\">\n <Bot className=\"w-8 h-8 text-zinc-600 mb-2\" />\n <p className=\"text-xs text-muted-foreground\">No agents match filters</p>\n </div>\n ) : groupedAgents ? (\n groupedAgents.map(([project, agents]) => (\n <div key={project}>\n <div className=\"sticky top-0 z-10 flex items-center gap-1.5 border-b border-border/50 bg-background/95 px-3 py-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground backdrop-blur\">\n <span className=\"truncate\">{project}</span>\n <span className=\"text-muted-foreground/50\">{agents.length}</span>\n </div>\n <ul>{agentLineageRows(agents, agentsById, now).map(renderAgentRow)}</ul>\n </div>\n ))\n ) : (\n <ul>{lineageRows.map(renderAgentRow)}</ul>\n )}\n </div>\n </div>\n )\n}\n","// Slash-command catalog for the chat-input autocomplete palette. Dashboard-only\n// UI data (the runner/server never need it), so it lives here rather than in the\n// SDK — which keeps the dashboard build free of a cross-package value dependency.\n\nexport interface SlashCommand {\n name: string\n description?: string\n /** \"builtin\" | \"skill\" — purely for grouping/icons. */\n source?: string\n /** Argument hint shown after the name, e.g. \"<message>\". */\n argumentHint?: string\n}\n\n// Agent Relay slash commands bundled into every managed session (the runner ships\n// these skills for both providers). Exact and stable — sourced from this repo.\nconst RELAY_SLASH_COMMANDS: SlashCommand[] = [\n { name: '/reply', source: 'skill', description: 'Reply to a relay message by id', argumentHint: '<messageId> <body>' },\n { name: '/message', source: 'skill', description: 'Send a relay message to an agent, label, tag, or broadcast', argumentHint: '<target> <body>' },\n { name: '/pair', source: 'skill', description: 'Start or manage a two-agent pair session' },\n { name: '/react', source: 'skill', description: 'Add a reaction to a relay message', argumentHint: '<messageId> <emoji>' },\n { name: '/read-message', source: 'skill', description: 'Fetch a full relay message by id', argumentHint: '<messageId>' },\n { name: '/send-claimable', source: 'skill', description: 'Enqueue a claimable work item for one agent to claim' },\n { name: '/status', source: 'skill', description: \"Show this agent's relay status\" },\n { name: '/tags', source: 'skill', description: \"List or update this agent's relay tags\" },\n { name: '/label', source: 'skill', description: \"Read, set, or clear this agent's relay label\" },\n { name: '/disconnect', source: 'skill', description: 'End the current relay pair session' },\n]\n\n// Stable provider built-ins. Deliberately conservative — only commands known to\n// exist across versions of each provider — so the palette never offers a command\n// that isn't there. Project/skill commands are grown in organically later.\nconst CLAUDE_BUILTIN_SLASH_COMMANDS: SlashCommand[] = [\n { name: '/clear', source: 'builtin', description: 'Clear conversation history and free up context' },\n { name: '/compact', source: 'builtin', description: 'Compact the conversation to reclaim context', argumentHint: '[instructions]' },\n { name: '/model', source: 'builtin', description: 'Switch the active model', argumentHint: '[model]' },\n { name: '/help', source: 'builtin', description: 'Show help' },\n]\n\nconst CODEX_BUILTIN_SLASH_COMMANDS: SlashCommand[] = [\n { name: '/compact', source: 'builtin', description: 'Compact the conversation to reclaim context' },\n { name: '/new', source: 'builtin', description: 'Start a new thread' },\n]\n\n/** Slash-command catalog for a provider's chat-input autocomplete palette. */\nexport function providerSlashCommands(provider: string | undefined): SlashCommand[] {\n const builtins = provider === 'claude' ? CLAUDE_BUILTIN_SLASH_COMMANDS\n : provider === 'codex' ? CODEX_BUILTIN_SLASH_COMMANDS\n : []\n return [...builtins, ...RELAY_SLASH_COMMANDS]\n}\n","import { Eye, Pencil } from 'lucide-react'\nimport { useRelayStore } from '@/store'\nimport { dashboardClientId } from '@/lib/dashboard-attribution'\nimport { humanDisplayName } from '@/lib/display'\nimport { cn } from '@/lib/utils'\n\n// \"X is viewing / typing\" for an agent thread (#390). Reads live viewers from the presence\n// store (fed by the dashboard.presence SSE event), excludes our own browser, and resolves each\n// viewer's name via the users directory. Renders nothing when no one else is watching — so a\n// single solo operator (today's default) sees no presence chrome at all.\nexport function ViewerPresence({ agentId, className }: { agentId: string; className?: string }) {\n const viewers = useRelayStore((s) => s.presenceByAgent[agentId])\n const usersById = useRelayStore((s) => s.usersById)\n const selfClientId = dashboardClientId()\n\n const others = (viewers ?? []).filter((v) => v.clientId !== selfClientId)\n if (others.length === 0) return null\n\n // Unique human names among the other viewers (a person on two devices collapses to one name).\n const names = Array.from(new Set(others.map((v) => humanDisplayName(v.userId, usersById))))\n const typing = others.some((v) => v.typing)\n const label = names.length === 1 ? names[0] : `${names.length} viewers`\n const Icon = typing ? Pencil : Eye\n\n return (\n <span\n title={`${names.join(', ')}${typing ? ' · typing' : ' · viewing'}`}\n className={cn('inline-flex items-center gap-1 rounded-full bg-muted/40 px-2 py-0.5 text-[11px] text-muted-foreground', className)}\n >\n <Icon className={cn('h-3 w-3 shrink-0', typing && 'text-emerald-400')} />\n <span className=\"truncate max-w-[12ch]\">{label}{typing && names.length === 1 ? ' is typing…' : ''}</span>\n </span>\n )\n}\n","import {\n ArrowLeft,\n CircleStop,\n Download,\n Eraser,\n Flag,\n FolderOpen,\n GitFork,\n MailOpen,\n MailX,\n Minimize2,\n MoreHorizontal,\n Power,\n Search,\n Terminal,\n Volume2,\n VolumeX,\n} from 'lucide-react'\nimport { AgentRuntimeChips, ContextRing, agentHasContextTelemetry } from '@/components/shared/agent-runtime-summary'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { BranchStateBadge } from '@/components/shared/branch-state-badge'\nimport { CopyButton } from '@/components/shared/copy-button'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { ViewerPresence } from './ViewerPresence'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\nimport { voiceTts } from '@/lib/voice'\nimport { displayName, providerBlockedState, shortPath } from '@/lib/display'\nimport type { Agent, ChatHistoryImport, InboxThread, Message } from '@/types'\n\ntype ExportableThread = InboxThread | { peer: string; messages: Message[]; importedHistory: ChatHistoryImport[] }\n\nexport function ChatHeader({\n selectedInboxThread,\n agent,\n now,\n blockedState,\n thread,\n exportableThread,\n importedHistory,\n showBackButton,\n onBack,\n openAgentDetail,\n openWorkspaceFocus,\n voiceTtsEnabled,\n setVoiceTtsEnabled,\n canOpenTerminal,\n terminalOpening,\n handleOpenTerminal,\n canInterrupt,\n interruptAgent,\n canCompact,\n canClearContext,\n canShutdown,\n openConfirm,\n workspaceAction,\n doAgentAction,\n openFilesForAgent,\n forkFromAgent,\n markInboxThreadUnread,\n markInboxThreadRead,\n exportThread,\n onOpenSearch,\n}: {\n selectedInboxThread: string\n agent: Agent | null\n now: number\n blockedState: ReturnType<typeof providerBlockedState>\n thread: InboxThread | null\n exportableThread: ExportableThread | null\n importedHistory: ChatHistoryImport[]\n showBackButton?: boolean\n onBack?: () => void\n openAgentDetail: (agent: Agent) => void\n openWorkspaceFocus: (workspaceId: string) => void\n voiceTtsEnabled: boolean\n setVoiceTtsEnabled: (enabled: boolean) => void\n canOpenTerminal: boolean\n terminalOpening: boolean\n handleOpenTerminal: () => void | Promise<void>\n canInterrupt: boolean\n interruptAgent: () => void\n canCompact: boolean\n canClearContext: boolean\n canShutdown: boolean\n openConfirm: (title: string, body: string, action: () => void) => void\n workspaceAction: (workspaceId: string, action: 'ready') => void | Promise<void>\n doAgentAction: (agent: Agent, action: 'interrupt' | 'compact' | 'clearContext' | 'shutdown') => void | Promise<void>\n openFilesForAgent: (agent: Agent) => void | Promise<void>\n forkFromAgent: (agentId: string, messages: Message[]) => void\n markInboxThreadUnread: (peer: string) => void\n markInboxThreadRead: (peer: string, messages: Message[]) => void\n exportThread: (thread: ExportableThread, format: 'json') => void\n onOpenSearch?: () => void\n}) {\n return (\n <div className=\"flex items-center justify-between px-3 md:px-4 py-2.5 md:py-3 border-b border-border shrink-0\">\n <div className=\"flex items-center gap-2 md:gap-2.5 min-w-0\">\n {showBackButton && (\n <Button variant=\"ghost\" size=\"icon-sm\" onClick={onBack} className=\"shrink-0 -ml-1\">\n <ArrowLeft className=\"w-4 h-4\" />\n </Button>\n )}\n <button\n type=\"button\"\n className=\"flex items-center gap-2 md:gap-2.5 min-w-0 hover:opacity-80 transition-opacity\"\n onClick={() => agent && openAgentDetail(agent)}\n disabled={!agent}\n >\n <div className=\"relative shrink-0\">\n <AgentTypeIcon agent={agent} />\n <StatusDot agent={agent} now={now} className=\"absolute -bottom-0.5 -right-0.5 w-2 h-2\" />\n </div>\n <div className=\"min-w-0 text-left\">\n <p className=\"text-sm font-medium truncate\">{agent ? displayName(agent) : selectedInboxThread}</p>\n {agent && (\n <p className=\"text-xs text-muted-foreground truncate\">\n {blockedState ? `blocked: ${blockedState.label}` : agent.status}\n {agent.machine && ` · ${agent.machine}`}\n {typeof agent.meta?.cwd === 'string' && agent.meta.cwd && ` · ${shortPath(agent.meta.cwd as string, 1)}`}\n </p>\n )}\n </div>\n </button>\n {agent && <AgentRuntimeChips agent={agent} compact className=\"hidden @4xl/chat:flex shrink-0\" />}\n {agent && agentHasContextTelemetry(agent) && <ContextRing context={agent.context} expected />}\n {agent?.branchState && agent.branchWorkspaceId && (\n <BranchStateBadge state={agent.branchState} className=\"shrink-0\" onClick={() => void openWorkspaceFocus(agent.branchWorkspaceId!)} />\n )}\n {thread?.attention.unread ? (\n <Badge className=\"bg-red-500/20 text-red-400 text-xs shrink-0 hidden @2xl/chat:flex\">{thread.attention.unread} unread</Badge>\n ) : null}\n {agent && <ViewerPresence agentId={agent.id} className=\"shrink-0 hidden @3xl/chat:inline-flex\" />}\n </div>\n \n <div className=\"flex items-center gap-0.5 md:gap-1 shrink-0\">\n {agent && (\n <>\n <CopyButton value={agent.id} label=\"Copy agent ID\" size=\"icon-sm\" />\n {onOpenSearch && <Button variant=\"ghost\" size=\"icon-sm\" title=\"Search this chat\" onClick={onOpenSearch}><Search className=\"w-3.5 h-3.5\" /></Button>}\n {voiceTts.available && <Button variant=\"ghost\" size=\"icon-sm\" title={voiceTtsEnabled ? 'Speaking agent responses aloud — click to mute (engine & voice in Settings)' : 'Speak agent responses aloud (active chat) — engine & voice in Settings'} className={voiceTtsEnabled ? 'text-primary' : ''} onClick={() => setVoiceTtsEnabled(!voiceTtsEnabled)}>{voiceTtsEnabled ? <Volume2 className=\"w-3.5 h-3.5\" /> : <VolumeX className=\"w-3.5 h-3.5\" />}</Button>}\n {canOpenTerminal && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" disabled={terminalOpening} title=\"Terminal\" onClick={() => void handleOpenTerminal()}><Terminal className=\"w-3.5 h-3.5\" /></Button>}\n {canInterrupt && <Button variant=\"ghost\" size=\"icon-sm\" className=\"text-red-400 hover:text-red-300\" title=\"Interrupt\" onClick={interruptAgent}><CircleStop className=\"w-3.5 h-3.5\" /></Button>}\n {(agent.branchState === 'changes' || agent.branchState === 'idle') && agent.branchWorkspaceId && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex text-amber-400 hover:text-amber-300\" title=\"Mark workspace ready — hand off to the auto-merge\" onClick={() => openConfirm('Mark Workspace Ready', `Mark ${displayName(agent)}'s branch ready to land? The relay auto-merge will rebase and land it.`, () => workspaceAction(agent.branchWorkspaceId!, 'ready'))}><Flag className=\"w-3.5 h-3.5\" /></Button>}\n {canCompact && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Compact\" onClick={() => openConfirm('Compact Agent', `Compact context for ${displayName(agent)}?`, () => doAgentAction(agent, 'compact'))}><Minimize2 className=\"w-3.5 h-3.5\" /></Button>}\n {canClearContext && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Clear context\" onClick={() => openConfirm('Clear Context', `Clear context for ${displayName(agent)}?`, () => doAgentAction(agent, 'clearContext'))}><Eraser className=\"w-3.5 h-3.5\" /></Button>}\n {canShutdown && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Shutdown\" onClick={() => openConfirm('Shutdown Agent', `Shutdown ${displayName(agent)}?`, () => doAgentAction(agent, 'shutdown'))}><Power className=\"w-3.5 h-3.5\" /></Button>}\n {agent && typeof agent.meta?.cwd === 'string' && agent.meta.cwd && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title={`Open ${agent.meta.cwd as string} in Files`} onClick={() => void openFilesForAgent(agent)}><FolderOpen className=\"w-3.5 h-3.5\" /></Button>}\n {agent && thread && thread.messages.length > 0 && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Fork — spawn new agent with this chat history\" onClick={() => forkFromAgent(agent.id, thread.messages)}><GitFork className=\"w-3.5 h-3.5\" /></Button>}\n {thread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Mark unread\" onClick={() => markInboxThreadUnread(selectedInboxThread)}><MailX className=\"w-3.5 h-3.5\" /></Button>}\n {thread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Mark read\" onClick={() => markInboxThreadRead(thread.peer, thread.messages)}><MailOpen className=\"w-3.5 h-3.5\" /></Button>}\n {exportableThread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Export thread\" onClick={() => exportThread({ ...exportableThread, importedHistory }, 'json')}><Download className=\"w-3.5 h-3.5\" /></Button>}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" className=\"@4xl/chat:hidden\"><MoreHorizontal className=\"w-3.5 h-3.5\" /></Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {canOpenTerminal && <DropdownMenuItem disabled={terminalOpening} onClick={() => void handleOpenTerminal()}><Terminal className=\"w-3.5 h-3.5\" />Terminal</DropdownMenuItem>}\n {canInterrupt && <DropdownMenuItem onClick={interruptAgent}><CircleStop className=\"w-3.5 h-3.5\" />Interrupt</DropdownMenuItem>}\n {(agent.branchState === 'changes' || agent.branchState === 'idle') && agent.branchWorkspaceId && <DropdownMenuItem onClick={() => openConfirm('Mark Workspace Ready', `Mark ${displayName(agent)}'s branch ready to land? The relay auto-merge will rebase and land it.`, () => workspaceAction(agent.branchWorkspaceId!, 'ready'))}><Flag className=\"w-3.5 h-3.5\" />Mark Ready</DropdownMenuItem>}\n {canCompact && <DropdownMenuItem onClick={() => openConfirm('Compact Agent', `Compact context for ${displayName(agent)}?`, () => doAgentAction(agent, 'compact'))}><Minimize2 className=\"w-3.5 h-3.5\" />Compact</DropdownMenuItem>}\n {canClearContext && <DropdownMenuItem onClick={() => openConfirm('Clear Context', `Clear context for ${displayName(agent)}?`, () => doAgentAction(agent, 'clearContext'))}><Eraser className=\"w-3.5 h-3.5\" />Clear Context</DropdownMenuItem>}\n {canShutdown && <DropdownMenuItem onClick={() => openConfirm('Shutdown Agent', `Shutdown ${displayName(agent)}?`, () => doAgentAction(agent, 'shutdown'))}><Power className=\"w-3.5 h-3.5\" />Shutdown</DropdownMenuItem>}\n {agent && typeof agent.meta?.cwd === 'string' && agent.meta.cwd && <DropdownMenuItem onClick={() => void openFilesForAgent(agent)}><FolderOpen className=\"w-3.5 h-3.5\" />Open Files</DropdownMenuItem>}\n {agent && thread && thread.messages.length > 0 && <DropdownMenuItem onClick={() => forkFromAgent(agent.id, thread.messages)}><GitFork className=\"w-3.5 h-3.5\" />Fork</DropdownMenuItem>}\n {(canOpenTerminal || canCompact || canClearContext || canShutdown) && <DropdownMenuSeparator />}\n {thread && <DropdownMenuItem onClick={() => markInboxThreadUnread(selectedInboxThread)}><MailX className=\"w-3.5 h-3.5\" />Mark Unread</DropdownMenuItem>}\n {thread && <DropdownMenuItem onClick={() => markInboxThreadRead(thread.peer, thread.messages)}><MailOpen className=\"w-3.5 h-3.5\" />Mark Read</DropdownMenuItem>}\n {exportableThread && <DropdownMenuItem onClick={() => exportThread({ ...exportableThread, importedHistory }, 'json')}><Download className=\"w-3.5 h-3.5\" />Download</DropdownMenuItem>}\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n )}\n </div>\n </div>\n )\n}\n","import { useRef } from 'react'\nimport { ChevronDown, ChevronUp, Search, X } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\n\n// Sticky search toolbar at the top of the chat, below any other sticky top element\n// (e.g. the plan bar) by virtue of its column order in ChatPanel. shrink-0 + a bottom\n// border match the plan bar so the two stack as one header stack above the timeline.\nexport function ChatSearchBar({\n query,\n position,\n total,\n onQueryChange,\n onNext,\n onPrev,\n onClose,\n}: {\n query: string\n position: number\n total: number\n onQueryChange: (value: string) => void\n onNext: () => void\n onPrev: () => void\n onClose: () => void\n}) {\n const inputRef = useRef<HTMLInputElement>(null)\n const hasQuery = query.trim().length > 0\n const noMatches = hasQuery && total === 0\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'Escape') {\n e.preventDefault()\n onClose()\n return\n }\n if (e.key === 'Enter') {\n e.preventDefault()\n if (e.shiftKey) onPrev()\n else onNext()\n }\n }\n\n return (\n <section className=\"flex shrink-0 items-center gap-2 border-b border-border bg-card/45 px-3 py-2\">\n <Search className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <Input\n ref={inputRef}\n autoFocus\n value={query}\n onChange={(e) => onQueryChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Search this chat…\"\n aria-label=\"Search this chat\"\n className=\"h-7 flex-1 text-sm\"\n />\n <span\n className={\n 'shrink-0 tabular-nums text-xs ' + (noMatches ? 'text-red-400' : 'text-muted-foreground')\n }\n >\n {hasQuery ? (noMatches ? 'No results' : `${position}/${total}`) : ''}\n </span>\n <div className=\"flex shrink-0 items-center gap-0.5\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n title=\"Previous match (Shift+Enter)\"\n disabled={total === 0}\n onClick={onPrev}\n >\n <ChevronUp className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n title=\"Next match (Enter)\"\n disabled={total === 0}\n onClick={onNext}\n >\n <ChevronDown className=\"h-3.5 w-3.5\" />\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" title=\"Close search (Esc)\" onClick={onClose}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </section>\n )\n}\n","\nimport type { SlashCommand } from '@/lib/slash-commands'\nimport { cn } from '@/lib/utils'\n\nexport function SlashPalette({\n matches,\n activeIndex,\n onAccept,\n onHover,\n}: {\n matches: SlashCommand[]\n activeIndex: number\n onAccept: (cmd: SlashCommand) => void\n onHover: (index: number) => void\n}) {\n if (matches.length === 0) return null\n return (\n <div className=\"absolute bottom-full left-3 right-3 md:left-4 md:right-4 mb-2 z-20 max-h-64 overflow-auto rounded-xl border border-border bg-popover shadow-lg\">\n {matches.map((cmd, i) => (\n <button\n key={cmd.name}\n onMouseDown={(e) => { e.preventDefault(); onAccept(cmd) }}\n onMouseEnter={() => onHover(i)}\n className={cn('flex w-full items-baseline gap-2 px-3 py-1.5 text-left text-sm', i === activeIndex ? 'bg-accent' : 'hover:bg-accent/50')}\n >\n <span className=\"font-medium shrink-0\">{cmd.name}</span>\n {cmd.argumentHint && <span className=\"text-xs text-muted-foreground shrink-0\">{cmd.argumentHint}</span>}\n {cmd.description && <span className=\"ml-auto truncate text-xs text-muted-foreground/70\">{cmd.description}</span>}\n </button>\n ))}\n </div>\n )\n}\n","\nimport { useEffect, useRef, useState } from 'react'\nimport { AlertCircle, FileText, Loader2, Mic, Paperclip, Send, X, ZoomIn } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport { Dialog, DialogContent, DialogTitle } from '@/components/ui/dialog'\nimport { cn } from '@/lib/utils'\nimport type { PendingAttachment } from './types'\nimport { formatBytes } from './helpers'\nimport { SlashPalette } from './SlashPalette'\nimport type { SlashCommand } from '@/lib/slash-commands'\n\nfunction AutoGrowTextarea({\n value, onChange, onKeyDown, onPaste, placeholder, className,\n}: {\n value: string\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void\n onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n onPaste?: (e: React.ClipboardEvent<HTMLTextAreaElement>) => void\n placeholder: string\n className?: string\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n useEffect(() => {\n const el = textareaRef.current\n if (!el) return\n el.style.height = 'auto'\n el.style.height = Math.min(el.scrollHeight, 200) + 'px'\n }, [value])\n\n // Handle mobile keyboard: keep input visible\n useEffect(() => {\n const vv = window.visualViewport\n if (!vv) return\n\n function handleResize() {\n const el = textareaRef.current\n if (!el || document.activeElement !== el) return\n // Scroll the input into view when keyboard appears\n requestAnimationFrame(() => {\n el.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n })\n }\n\n vv.addEventListener('resize', handleResize)\n return () => vv.removeEventListener('resize', handleResize)\n }, [])\n\n return (\n <textarea\n ref={textareaRef}\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n rows={1}\n className={cn(\n 'w-full resize-none rounded-xl border border-border bg-background px-3.5 py-2.5 text-sm',\n 'placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'min-h-[42px] max-h-[200px] overflow-y-auto',\n className\n )}\n />\n )\n}\n\nfunction PendingAttachmentPreview({ item, onRemove }: { item: PendingAttachment; onRemove: () => void }) {\n const [open, setOpen] = useState(false)\n const canPreview = Boolean(item.previewUrl && !item.error)\n\n return (\n <>\n <div className=\"flex min-w-0 items-center gap-2 rounded-md border border-border bg-card px-2.5 py-2 text-xs\">\n <button\n type=\"button\"\n disabled={!canPreview}\n onClick={() => setOpen(true)}\n className=\"group/pending relative flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded bg-muted disabled:cursor-default\"\n title={canPreview ? 'Preview image' : item.fileName}\n >\n {item.previewUrl ? (\n <>\n <img src={item.previewUrl} alt={item.fileName} className=\"h-full w-full object-cover\" />\n <span className=\"absolute inset-0 flex items-center justify-center bg-black/0 group-hover/pending:bg-black/30 transition-colors\">\n <ZoomIn className=\"h-3.5 w-3.5 text-white opacity-0 group-hover/pending:opacity-100 transition-opacity drop-shadow-md\" />\n </span>\n </>\n ) : (\n item.error ? <AlertCircle className=\"h-4 w-4 text-red-400\" /> : item.uploading ? <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" /> : <FileText className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium\">{item.fileName}</p>\n <p className={cn('truncate text-muted-foreground', item.error && 'text-red-400')}>{item.error || (item.uploading ? 'Uploading' : formatBytes(item.size))}</p>\n </div>\n <Button variant=\"ghost\" size=\"icon-sm\" title=\"Remove attachment\" onClick={onRemove}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n {item.previewUrl && (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent className=\"max-w-[95vw] max-h-[95vh] w-auto p-0 bg-black/95 border-zinc-800 gap-0 overflow-hidden\" showCloseButton={false}>\n <DialogTitle className=\"sr-only\">{item.fileName}</DialogTitle>\n <div className=\"relative flex items-center justify-center min-h-[200px]\">\n <img src={item.previewUrl} alt={item.fileName} className=\"max-w-[93vw] max-h-[90vh] object-contain\" />\n <button type=\"button\" onClick={() => setOpen(false)} className=\"absolute top-2 right-2 rounded-md bg-black/60 hover:bg-black/80 p-2 text-white transition-colors\" title=\"Close\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </DialogContent>\n </Dialog>\n )}\n </>\n )\n}\n\nexport function Composer({\n draft,\n placeholder,\n chatSending,\n disabled,\n hasPendingUploads,\n readyAttachmentCount,\n pendingAttachments,\n micAvailable,\n micState,\n slashMatches,\n slashActiveIndex,\n onDraftChange,\n onKeyDown,\n onPaste,\n onUploadFiles,\n onRemovePendingAttachment,\n onSend,\n onAcceptSlash,\n onSlashHover,\n onStartPtt,\n onStopPtt,\n footerText,\n}: {\n draft: string\n placeholder: string\n chatSending: boolean\n disabled: boolean\n hasPendingUploads: boolean\n readyAttachmentCount: number\n pendingAttachments: PendingAttachment[]\n micAvailable: boolean\n micState: 'idle' | 'recording' | 'transcribing'\n slashMatches: SlashCommand[]\n slashActiveIndex: number\n onDraftChange: (value: string) => void\n onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n onPaste: (e: React.ClipboardEvent<HTMLTextAreaElement>) => void\n onUploadFiles: (files: FileList | File[]) => void\n onRemovePendingAttachment: (id: string) => void\n onSend: () => void\n onAcceptSlash: (cmd: SlashCommand) => void\n onSlashHover: (index: number) => void\n onStartPtt: () => void\n onStopPtt: () => void\n footerText?: string\n}) {\n const fileInputRef = useRef<HTMLInputElement>(null)\n const [dragActive, setDragActive] = useState(false)\n const sendDisabled = (!draft.trim() && readyAttachmentCount === 0) || hasPendingUploads || chatSending || disabled\n\n return (\n <div\n className={cn(\n 'relative shrink-0 border-t border-border px-3 md:px-4 py-2.5 md:py-3 safe-area-bottom',\n dragActive && 'bg-primary/5 ring-1 ring-primary/40'\n )}\n onDragOver={(e) => { e.preventDefault(); setDragActive(true) }}\n onDragLeave={() => setDragActive(false)}\n onDrop={(e) => {\n e.preventDefault()\n setDragActive(false)\n onUploadFiles(e.dataTransfer.files)\n }}\n >\n {pendingAttachments.length > 0 && (\n <div className=\"mb-2 grid gap-2 sm:grid-cols-2\">\n {pendingAttachments.map((item) => (\n <PendingAttachmentPreview key={item.id} item={item} onRemove={() => onRemovePendingAttachment(item.id)} />\n ))}\n </div>\n )}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => {\n if (e.target.files) onUploadFiles(e.target.files)\n e.currentTarget.value = ''\n }}\n />\n <SlashPalette matches={slashMatches} activeIndex={slashActiveIndex} onAccept={onAcceptSlash} onHover={onSlashHover} />\n <div className=\"hidden md:flex items-end gap-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Attach files\"\n disabled={chatSending}\n onClick={() => fileInputRef.current?.click()}\n className=\"shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px]\"\n >\n <Paperclip className=\"w-4 h-4\" />\n </Button>\n <AutoGrowTextarea\n value={draft}\n onChange={(e) => onDraftChange(e.target.value)}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n className=\"flex-1\"\n />\n {micAvailable && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={micState === 'recording' ? 'Release to transcribe' : 'Hold to talk'}\n disabled={chatSending || micState === 'transcribing'}\n onPointerDown={(e) => { e.preventDefault(); e.currentTarget.setPointerCapture(e.pointerId); onStartPtt() }}\n onPointerUp={(e) => { e.preventDefault(); try { e.currentTarget.releasePointerCapture(e.pointerId) } catch { /* ignore */ } onStopPtt() }}\n className={`shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px] ${micState === 'recording' ? 'text-red-400 animate-pulse' : ''}`}\n >\n {micState === 'transcribing' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Mic className=\"w-4 h-4\" />}\n </Button>\n )}\n <Button\n size=\"icon\"\n disabled={sendDisabled}\n onClick={onSend}\n className=\"shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px]\"\n >\n <Send className=\"w-4 h-4\" />\n </Button>\n </div>\n <div className=\"md:hidden space-y-2\">\n <AutoGrowTextarea\n value={draft}\n onChange={(e) => onDraftChange(e.target.value)}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n className=\"w-full\"\n />\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Attach files\"\n disabled={chatSending}\n onClick={() => fileInputRef.current?.click()}\n className=\"rounded-xl h-9 w-9\"\n >\n <Paperclip className=\"w-4 h-4\" />\n </Button>\n {micAvailable && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={micState === 'recording' ? 'Release to transcribe' : 'Hold to talk'}\n disabled={chatSending || micState === 'transcribing'}\n onPointerDown={(e) => { e.preventDefault(); e.currentTarget.setPointerCapture(e.pointerId); onStartPtt() }}\n onPointerUp={(e) => { e.preventDefault(); try { e.currentTarget.releasePointerCapture(e.pointerId) } catch { /* ignore */ } onStopPtt() }}\n className={`rounded-xl h-9 w-9 ${micState === 'recording' ? 'text-red-400 animate-pulse' : ''}`}\n >\n {micState === 'transcribing' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Mic className=\"w-4 h-4\" />}\n </Button>\n )}\n </div>\n <Button\n size=\"icon\"\n disabled={sendDisabled}\n onClick={onSend}\n className=\"rounded-xl h-9 w-9\"\n >\n <Send className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n {footerText && (\n <p className=\"text-xs text-muted-foreground mt-1.5 hidden md:block\">\n {footerText}\n </p>\n )}\n </div>\n )\n}\n","\nimport { createPortal } from 'react-dom'\nimport { DirectoryContent, FileContent } from '@/components/views/files'\nimport type { ReferencedPathInfo } from './types'\n\nexport function FloatingFilePreview({\n preview,\n error,\n onReadError,\n onMouseEnter,\n onMouseLeave,\n}: {\n preview: { orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type']; anchor: DOMRect }\n error: string\n onReadError: (error: string) => void\n onMouseEnter: () => void\n onMouseLeave: () => void\n}) {\n const { anchor } = preview\n const gap = 8\n const width = Math.min(560, window.innerWidth - 24)\n const height = Math.min(380, window.innerHeight - 24)\n const left = Math.max(12, Math.min(anchor.left, window.innerWidth - width - 12))\n const spaceBelow = window.innerHeight - anchor.bottom\n const top = spaceBelow >= height + gap\n ? anchor.bottom + gap\n : anchor.top - gap - height >= 12\n ? anchor.top - gap - height\n : Math.max(12, window.innerHeight - height - 12)\n\n return createPortal(\n <div\n className=\"fixed z-50 flex flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl\"\n style={{ top, left, width, height }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <div className=\"flex h-8 shrink-0 items-center gap-2 border-b border-border px-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-[11px] font-medium text-muted-foreground\">{preview.path}</span>\n {error && <span className=\"max-w-[12rem] truncate text-[11px] text-red-400\">{error}</span>}\n <span className=\"shrink-0 text-[10px] text-muted-foreground/70\">click to pin</span>\n </div>\n <div className=\"min-h-0 flex-1\">\n {preview.type === 'directory' ? (\n <DirectoryContent orchestratorId={preview.orchestratorId} selectedPath={preview.path} onReadError={onReadError} />\n ) : (\n <FileContent orchestratorId={preview.orchestratorId} selectedPath={preview.path} line={preview.line} onReadError={onReadError} />\n )}\n </div>\n </div>,\n document.body,\n )\n}\n","\nimport { useRelayStore, type ChatStatusEvent as StatusEvent } from '@/store'\n\nconst NO_STATUS_EVENTS: StatusEvent[] = []\n\nexport function useAgentStatusEvents(agentId: string): StatusEvent[] {\n return useRelayStore((s) => s.chatStatusEvents[agentId] ?? NO_STATUS_EVENTS)\n}\n","\nimport { useEffect, useRef } from 'react'\n\nexport function useBackNavProtection(hasDraft: boolean, onBack: () => void) {\n const historyPushedRef = useRef(false)\n\n useEffect(() => {\n if (!hasDraft) return\n\n if (!historyPushedRef.current) {\n window.history.pushState({ chatGuard: true }, '')\n historyPushedRef.current = true\n }\n\n function handlePopState(e: PopStateEvent) {\n if (e.state?.chatGuard !== undefined || !historyPushedRef.current) {\n // Re-push state to keep the guard active\n window.history.pushState({ chatGuard: true }, '')\n onBack()\n }\n }\n\n function handleBeforeUnload(e: BeforeUnloadEvent) {\n e.preventDefault()\n }\n\n window.addEventListener('popstate', handlePopState)\n window.addEventListener('beforeunload', handleBeforeUnload)\n return () => {\n window.removeEventListener('popstate', handlePopState)\n window.removeEventListener('beforeunload', handleBeforeUnload)\n }\n }, [hasDraft, onBack])\n\n useEffect(() => {\n if (!hasDraft && historyPushedRef.current) {\n historyPushedRef.current = false\n }\n }, [hasDraft])\n}\n","import { type TimelineEntry, timelineEntryKey, timelineEntryText } from './sessionTrace'\n\n// Smart fuzzy match for chat search. The query matches a text if EITHER:\n// - it appears as a (case-insensitive) substring — the common, high-confidence case, or\n// - its characters appear in order as a subsequence within a single word run — the\n// \"fuzzy\" case that tolerates dropped letters (e.g. \"tmln\" → \"timeline\").\n// Substring wins because it's what people expect from a search box; the subsequence\n// fallback keeps a near-miss typo from returning zero results. Whitespace in the query\n// is collapsed so multi-word queries match across the gaps the user typed.\nexport function fuzzyMatches(text: string, query: string): boolean {\n const haystack = text.toLowerCase()\n const needle = query.trim().toLowerCase()\n if (!needle) return false\n if (haystack.includes(needle)) return true\n // Subsequence fallback only for a single contiguous token — fuzzing across spaces\n // produces too many false positives in long messages.\n if (/\\s/.test(needle)) return false\n // Very short needles (< 4 chars) are too ambiguous for subsequence matching —\n // single-char abbreviations like \"e\" would match almost everything.\n if (needle.length < 4) return false\n return isSubsequence(haystack, needle)\n}\n\n// maxGap caps the number of unmatched characters allowed between two consecutive\n// matched needle chars. Without this, \"abcdef\" matches any long English sentence.\nfunction isSubsequence(haystack: string, needle: string, maxGap = 4): boolean {\n let i = 0\n let lastMatch = -1\n for (let h = 0; h < haystack.length && i < needle.length; h += 1) {\n if (haystack[h] === needle[i]) {\n if (lastMatch !== -1 && h - lastMatch - 1 > maxGap) return false\n lastMatch = h\n i += 1\n }\n }\n return i === needle.length\n}\n\n// Returns the timeline-entry keys that match the query, in timeline (chronological)\n// order — that ordering is what powers the prev/next navigation and the \"1/N\" counter.\nexport function searchTimeline(timeline: TimelineEntry[], query: string): string[] {\n const needle = query.trim()\n if (!needle) return []\n const keys: string[] = []\n for (const entry of timeline) {\n const text = timelineEntryText(entry)\n if (text && fuzzyMatches(text, needle)) keys.push(timelineEntryKey(entry))\n }\n return keys\n}\n","import { useCallback, useMemo, useState } from 'react'\nimport type { TimelineEntry } from '../sessionTrace'\nimport { searchTimeline } from '../chatSearch'\n\ninterface ChatSearch {\n open: boolean\n query: string\n /** Match keys in timeline order (empty when query is blank or no matches). */\n matchKeys: string[]\n /** Set form for O(1) per-row highlight checks in the timeline. */\n matchKeySet: Set<string>\n /** Total match count. */\n total: number\n /** 1-based index of the current match (0 when there are none). */\n position: number\n /** Timeline key of the current match, or null. */\n currentKey: string | null\n openSearch: () => void\n close: () => void\n setQuery: (value: string) => void\n next: () => void\n prev: () => void\n}\n\n// Chat-session search state. All match computation is render-time derived from the\n// live timeline + query (no effects); navigation and query changes are plain event\n// handlers. The current match is clamped during render so a shrinking timeline (older\n// matches scrolling out, agent switch) can never strand the index out of range.\nexport function useChatSearch(timeline: TimelineEntry[]): ChatSearch {\n const [open, setOpen] = useState(false)\n const [query, setQueryState] = useState('')\n const [index, setIndex] = useState(0)\n\n const matchKeys = useMemo(() => (open ? searchTimeline(timeline, query) : []), [open, query, timeline])\n const matchKeySet = useMemo(() => new Set(matchKeys), [matchKeys])\n const total = matchKeys.length\n const safeIndex = total ? Math.min(index, total - 1) : 0\n const currentKey = total ? matchKeys[safeIndex] ?? null : null\n\n const openSearch = useCallback(() => setOpen(true), [])\n const close = useCallback(() => {\n setOpen(false)\n setQueryState('')\n setIndex(0)\n }, [])\n // Typing always re-anchors to the first match — the expected find-as-you-type behaviour.\n const setQuery = useCallback((value: string) => {\n setQueryState(value)\n setIndex(0)\n }, [])\n const next = useCallback(() => {\n setIndex((i) => (total ? (i + 1) % total : 0))\n }, [total])\n const prev = useCallback(() => {\n setIndex((i) => (total ? (i - 1 + total) % total : 0))\n }, [total])\n\n return {\n open,\n query,\n matchKeys,\n matchKeySet,\n total,\n position: total ? safeIndex + 1 : 0,\n currentKey,\n openSearch,\n close,\n setQuery,\n next,\n prev,\n }\n}\n","import { useEffect, useRef } from 'react'\nimport { useRelayStore } from '@/store'\n\nconst HEARTBEAT_MS = 10_000\n\n// Announce this dashboard's presence on an agent thread while its chat is open (#390). A\n// genuine external-sync effect: it drives the server-side presence registry via a timer +\n// announce, and fires a \"leaving\" beacon on cleanup so other dashboards drop us immediately\n// instead of waiting for the TTL. `typing` is folded into the heartbeat (via a ref so the\n// interval always sends the current value) plus an immediate re-announce on each flip, so the\n// \"is typing\" indicator updates without a 10s lag.\nexport function usePresenceHeartbeat(agentId: string, typing: boolean): void {\n const announcePresence = useRelayStore((s) => s.announcePresence)\n const typingRef = useRef(typing)\n typingRef.current = typing\n\n // Interval heartbeat + leave beacon, keyed only on the thread so a typing flip never tears\n // down the timer.\n useEffect(() => {\n if (!agentId) return\n void announcePresence(agentId, typingRef.current)\n const timer = setInterval(() => { void announcePresence(agentId, typingRef.current) }, HEARTBEAT_MS)\n return () => {\n clearInterval(timer)\n void announcePresence(agentId, false, true)\n }\n }, [agentId, announcePresence])\n\n // Push a typing transition straight through rather than waiting for the next tick.\n useEffect(() => {\n if (!agentId) return\n void announcePresence(agentId, typing)\n }, [agentId, typing, announcePresence])\n}\n","import { jsx as G, jsxs as $t } from \"react/jsx-runtime\";\nimport E, { createElement as Dt } from \"react\";\nimport So from \"react-dom\";\nconst we = 0, Pt = 1, Xt = 2, Wn = 4;\nfunction fn(t) {\n return () => t;\n}\nfunction xo(t) {\n t();\n}\nfunction re(t, e) {\n return (n) => t(e(n));\n}\nfunction mn(t, e) {\n return () => t(e);\n}\nfunction vo(t, e) {\n return (n) => t(e, n);\n}\nfunction _e(t) {\n return t !== void 0;\n}\nfunction To(...t) {\n return () => {\n t.map(xo);\n };\n}\nfunction Jt() {\n}\nfunction ye(t, e) {\n return e(t), t;\n}\nfunction Co(t, e) {\n return e(t);\n}\nfunction rt(...t) {\n return t;\n}\nfunction Y(t, e) {\n return t(Pt, e);\n}\nfunction _(t, e) {\n t(we, e);\n}\nfunction Ne(t) {\n t(Xt);\n}\nfunction it(t) {\n return t(Wn);\n}\nfunction k(t, e) {\n return Y(t, vo(e, we));\n}\nfunction yt(t, e) {\n const n = t(Pt, (o) => {\n n(), e(o);\n });\n return n;\n}\nfunction pn(t) {\n let e, n;\n return (o) => (r) => {\n e = r, n && clearTimeout(n), n = setTimeout(() => {\n o(e);\n }, t);\n };\n}\nfunction Pn(t, e) {\n return t === e;\n}\nfunction nt(t = Pn) {\n let e;\n return (n) => (o) => {\n t(e, o) || (e = o, n(o));\n };\n}\nfunction P(t) {\n return (e) => (n) => {\n t(n) && e(n);\n };\n}\nfunction B(t) {\n return (e) => re(e, t);\n}\nfunction Bt(t) {\n return (e) => () => {\n e(t);\n };\n}\nfunction x(t, ...e) {\n const n = wo(...e);\n return ((o, r) => {\n switch (o) {\n case Xt:\n Ne(t);\n return;\n case Pt:\n return Y(t, n(r));\n }\n });\n}\nfunction Lt(t, e) {\n return (n) => (o) => {\n n(e = t(e, o));\n };\n}\nfunction Ut(t) {\n return (e) => (n) => {\n t > 0 ? t-- : e(n);\n };\n}\nfunction zt(t) {\n let e = null, n;\n return (o) => (r) => {\n e = r, !n && (n = setTimeout(() => {\n n = void 0, o(e);\n }, t));\n };\n}\nfunction $(...t) {\n const e = new Array(t.length);\n let n = 0, o = null;\n const r = 2 ** t.length - 1;\n return t.forEach((s, i) => {\n const l = 2 ** i;\n Y(s, (c) => {\n const d = n;\n n |= l, e[i] = c, d !== r && n === r && o && (o(), o = null);\n });\n }), (s) => (i) => {\n const l = () => {\n s([i].concat(e));\n };\n n === r ? l() : o = l;\n };\n}\nfunction wo(...t) {\n return (e) => t.reduceRight(Co, e);\n}\nfunction yo(t) {\n let e, n;\n const o = () => e?.();\n return function(r, s) {\n switch (r) {\n case Pt:\n return s ? n === s ? void 0 : (o(), n = s, e = Y(t, s), e) : (o(), Jt);\n case Xt:\n o(), n = null;\n return;\n }\n };\n}\nfunction T(t) {\n let e = t;\n const n = U();\n return ((o, r) => {\n switch (o) {\n case we:\n e = r;\n break;\n case Pt: {\n r(e);\n break;\n }\n case Wn:\n return e;\n }\n return n(o, r);\n });\n}\nfunction ht(t, e) {\n return ye(T(e), (n) => k(t, n));\n}\nfunction U() {\n const t = [];\n return ((e, n) => {\n switch (e) {\n case we:\n t.slice().forEach((o) => {\n o(n);\n });\n return;\n case Xt:\n t.splice(0, t.length);\n return;\n case Pt:\n return t.push(n), () => {\n const o = t.indexOf(n);\n o > -1 && t.splice(o, 1);\n };\n }\n });\n}\nfunction Tt(t) {\n return ye(U(), (e) => k(t, e));\n}\nfunction j(t, e = [], { singleton: n } = { singleton: !0 }) {\n return {\n constructor: t,\n dependencies: e,\n id: bo(),\n singleton: n\n };\n}\nconst bo = () => Symbol();\nfunction Ro(t) {\n const e = /* @__PURE__ */ new Map(), n = ({ constructor: o, dependencies: r, id: s, singleton: i }) => {\n if (i && e.has(s))\n return e.get(s);\n const l = o(r.map((c) => n(c)));\n return i && e.set(s, l), l;\n };\n return n(t);\n}\nfunction at(...t) {\n const e = U(), n = new Array(t.length);\n let o = 0;\n const r = 2 ** t.length - 1;\n return t.forEach((s, i) => {\n const l = 2 ** i;\n Y(s, (c) => {\n n[i] = c, o |= l, o === r && _(e, n);\n });\n }), function(s, i) {\n switch (s) {\n case Xt: {\n Ne(e);\n return;\n }\n case Pt:\n return o === r && i(n), Y(e, i);\n }\n };\n}\nfunction W(t, e = Pn) {\n return x(t, nt(e));\n}\nfunction Fe(...t) {\n return function(e, n) {\n switch (e) {\n case Xt:\n return;\n case Pt:\n return To(...t.map((o) => Y(o, n)));\n }\n };\n}\nconst ft = {\n /** Detailed debugging information including item measurements */\n DEBUG: 0,\n /** General informational messages */\n INFO: 1,\n /** Warning messages for potential issues */\n WARN: 2,\n /** Error messages for failures (default level) */\n ERROR: 3\n}, Ho = {\n [ft.DEBUG]: \"debug\",\n [ft.ERROR]: \"error\",\n [ft.INFO]: \"log\",\n [ft.WARN]: \"warn\"\n}, Eo = () => typeof globalThis > \"u\" ? window : globalThis, Gt = j(\n () => {\n const t = T(ft.ERROR);\n return {\n log: T((n, o, r = ft.INFO) => {\n const s = Eo().VIRTUOSO_LOG_LEVEL ?? it(t);\n r >= s && console[Ho[r]](\n \"%creact-virtuoso: %c%s %o\",\n \"color: #0253b3; font-weight: bold\",\n \"color: initial\",\n n,\n o\n );\n }),\n logLevel: t\n };\n },\n [],\n { singleton: !0 }\n), Ve = /* @__PURE__ */ new WeakMap();\nfunction Gn(t) {\n return \"self\" in t ? t.document.documentElement : t;\n}\nfunction Bo(t) {\n const e = Gn(t), n = Ve.get(e);\n if (n !== void 0)\n return n;\n const o = e.ownerDocument.defaultView.getComputedStyle(e).direction === \"rtl\";\n return Ve.set(e, o), o;\n}\nfunction hn(t) {\n Ve.delete(Gn(t));\n}\nfunction An(t, e) {\n return Bo(t) ? -e : e;\n}\nconst _t = An;\nfunction gn(t, e) {\n return An(t, e);\n}\nfunction Ot(t, e, n) {\n return De(t, e, n).callbackRef;\n}\nfunction De(t, e, n) {\n const o = E.useRef(null);\n let r = (i) => {\n };\n const s = E.useMemo(() => typeof ResizeObserver < \"u\" ? new ResizeObserver((i) => {\n const l = () => {\n const c = i[0].target;\n c.offsetParent !== null && t(c);\n };\n n ? l() : requestAnimationFrame(l);\n }) : null, [t, n]);\n return r = (i) => {\n i && e ? (s?.observe(i), o.current = i) : (o.current && s?.unobserve(o.current), o.current = null);\n }, { callbackRef: r, ref: o };\n}\nfunction Mn(t, e, n, o, r, s, i, l, c) {\n const d = E.useCallback(\n (m) => {\n const v = Lo(m.children, e, l ? \"offsetWidth\" : \"offsetHeight\", r);\n let p = m.parentElement;\n for (; p.dataset.virtuosoScroller === void 0; )\n p = p.parentElement;\n const I = p.lastElementChild.dataset.viewportType === \"window\";\n let w;\n I && (w = p.ownerDocument.defaultView);\n const R = i ? l ? i.scrollWidth : i.scrollHeight : I ? l ? w.document.documentElement.scrollWidth : w.document.documentElement.scrollHeight : l ? p.scrollWidth : p.scrollHeight, h = i ? l ? i.offsetWidth : i.offsetHeight : I ? l ? w.innerWidth : w.innerHeight : l ? p.offsetWidth : p.offsetHeight, f = i ? l ? _t(i, i.scrollLeft) : i.scrollTop : I ? l ? _t(w, w.scrollX || w.document.documentElement.scrollLeft) : w.scrollY || w.document.documentElement.scrollTop : l ? _t(p, p.scrollLeft) : p.scrollTop;\n o({\n scrollHeight: R,\n scrollTop: Math.max(f, 0),\n viewportHeight: h\n }), s?.(\n l ? In(\"column-gap\", getComputedStyle(m).columnGap, r) : In(\"row-gap\", getComputedStyle(m).rowGap, r)\n ), v !== null && t(v);\n },\n [t, e, r, s, i, o, l]\n );\n return De(d, n, c);\n}\nfunction Lo(t, e, n, o) {\n const r = t.length;\n if (r === 0)\n return null;\n const s = [];\n for (let i = 0; i < r; i++) {\n const l = t.item(i);\n if (l.dataset.index === void 0)\n continue;\n const c = parseInt(l.dataset.index), d = parseFloat(l.dataset.knownSize), m = e(l, n);\n if (m === 0 && o(\"Zero-sized element, this should not happen\", { child: l }, ft.ERROR), m === d)\n continue;\n const v = s[s.length - 1];\n s.length === 0 || v.size !== m || v.endIndex !== c - 1 ? s.push({ endIndex: c, size: m, startIndex: c }) : s[s.length - 1].endIndex++;\n }\n return s;\n}\nfunction In(t, e, n) {\n return e !== \"normal\" && e?.endsWith(\"px\") !== !0 && n(`${t} was not resolved to pixel value correctly`, e, ft.WARN), e === \"normal\" ? 0 : parseInt(e ?? \"0\", 10);\n}\nfunction $e(t, e, n) {\n const o = E.useRef(null), r = E.useCallback(\n (c) => {\n if (!c?.offsetParent)\n return;\n const d = c.getBoundingClientRect(), m = d.width;\n let v, p;\n if (e) {\n const I = e.getBoundingClientRect(), w = d.top - I.top;\n p = I.height - Math.max(0, w), v = w + e.scrollTop;\n } else {\n const I = i.current.ownerDocument.defaultView;\n p = I.innerHeight - Math.max(0, d.top), v = d.top + I.scrollY;\n }\n o.current = {\n listHeight: d.height,\n offsetTop: v,\n visibleHeight: p,\n visibleWidth: m\n }, t(o.current);\n },\n // oxlint-disable-next-line exhaustive-deps\n [t, e]\n ), { callbackRef: s, ref: i } = De(r, !0, n), l = E.useCallback(() => {\n r(i.current);\n }, [r, i]);\n return E.useEffect(() => {\n if (e) {\n e.addEventListener(\"scroll\", l);\n const d = new ResizeObserver(() => {\n requestAnimationFrame(l);\n });\n return d.observe(e), () => {\n e.removeEventListener(\"scroll\", l), d.unobserve(e);\n };\n }\n const c = i.current?.ownerDocument.defaultView;\n return c?.addEventListener(\"scroll\", l), c?.addEventListener(\"resize\", l), () => {\n c?.removeEventListener(\"scroll\", l), c?.removeEventListener(\"resize\", l);\n };\n }, [l, e, i]), s;\n}\nconst It = j(\n () => {\n const t = U(), e = U(), n = T(0), o = U(), r = T(0), s = U(), i = U(), l = T(0), c = T(0), d = T(0), m = T(0), v = U(), p = U(), I = T(!1), w = T(!1), R = T(!1);\n return k(\n x(\n t,\n B(({ scrollTop: h }) => h)\n ),\n e\n ), k(\n x(\n t,\n B(({ scrollHeight: h }) => h)\n ),\n i\n ), k(e, r), {\n deviation: n,\n fixedFooterHeight: d,\n fixedHeaderHeight: c,\n footerHeight: m,\n headerHeight: l,\n horizontalDirection: w,\n scrollBy: p,\n // input\n scrollContainerState: t,\n scrollHeight: i,\n scrollingInProgress: I,\n // signals\n scrollTo: v,\n scrollTop: e,\n skipAnimationFrameInResizeObserver: R,\n smoothScrollTargetReached: o,\n // state\n statefulScrollTop: r,\n viewportHeight: s\n };\n },\n [],\n { singleton: !0 }\n), se = { lvl: 0 };\nfunction _n(t, e) {\n const n = t.length;\n if (n === 0)\n return [];\n let { index: o, value: r } = e(t[0]);\n const s = [];\n for (let i = 1; i < n; i++) {\n const { index: l, value: c } = e(t[i]);\n s.push({ end: l - 1, start: o, value: r }), o = l, r = c;\n }\n return s.push({ end: 1 / 0, start: o, value: r }), s;\n}\nfunction J(t) {\n return t === se;\n}\nfunction ie(t, e) {\n if (!J(t))\n return e === t.k ? t.v : e < t.k ? ie(t.l, e) : ie(t.r, e);\n}\nfunction Rt(t, e, n = \"k\") {\n if (J(t))\n return [-1 / 0, void 0];\n if (Number(t[n]) === e)\n return [t.k, t.v];\n if (Number(t[n]) < e) {\n const o = Rt(t.r, e, n);\n return o[0] === -1 / 0 ? [t.k, t.v] : o;\n }\n return Rt(t.l, e, n);\n}\nfunction vt(t, e, n) {\n return J(t) ? $n(e, n, 1) : e === t.k ? dt(t, { k: e, v: n }) : e < t.k ? Sn(dt(t, { l: vt(t.l, e, n) })) : Sn(dt(t, { r: vt(t.r, e, n) }));\n}\nfunction Yt() {\n return se;\n}\nfunction Zt(t, e, n) {\n if (J(t))\n return [];\n const o = Rt(t, e)[0];\n return Oo(Pe(t, o, n));\n}\nfunction We(t, e) {\n if (J(t))\n return se;\n const { k: n, l: o, r } = t;\n if (e === n) {\n if (J(o))\n return r;\n if (J(r))\n return o;\n const [s, i] = Dn(o);\n return xe(dt(t, { k: s, l: Nn(o), v: i }));\n }\n return e < n ? xe(dt(t, { l: We(o, e) })) : xe(dt(t, { r: We(r, e) }));\n}\nfunction Nt(t) {\n return J(t) ? [] : [...Nt(t.l), { k: t.k, v: t.v }, ...Nt(t.r)];\n}\nfunction Pe(t, e, n) {\n if (J(t))\n return [];\n const { k: o, l: r, r: s, v: i } = t;\n let l = [];\n return o > e && (l = l.concat(Pe(r, e, n))), o >= e && o <= n && l.push({ k: o, v: i }), o <= n && (l = l.concat(Pe(s, e, n))), l;\n}\nfunction xe(t) {\n const { l: e, lvl: n, r: o } = t;\n if (o.lvl >= n - 1 && e.lvl >= n - 1)\n return t;\n if (n > o.lvl + 1) {\n if (Be(e))\n return Un(dt(t, { lvl: n - 1 }));\n if (!J(e) && !J(e.r))\n return dt(e.r, {\n l: dt(e, { r: e.r.l }),\n lvl: n,\n r: dt(t, {\n l: e.r.r,\n lvl: n - 1\n })\n });\n throw new Error(\"Unexpected empty nodes\");\n }\n if (Be(t))\n return Ge(dt(t, { lvl: n - 1 }));\n if (!J(o) && !J(o.l)) {\n const r = o.l, s = Be(r) ? o.lvl - 1 : o.lvl;\n return dt(r, {\n l: dt(t, {\n lvl: n - 1,\n r: r.l\n }),\n lvl: r.lvl + 1,\n r: Ge(dt(o, { l: r.r, lvl: s }))\n });\n }\n throw new Error(\"Unexpected empty nodes\");\n}\nfunction dt(t, e) {\n return $n(\n e.k !== void 0 ? e.k : t.k,\n e.v !== void 0 ? e.v : t.v,\n e.lvl !== void 0 ? e.lvl : t.lvl,\n e.l !== void 0 ? e.l : t.l,\n e.r !== void 0 ? e.r : t.r\n );\n}\nfunction Nn(t) {\n return J(t.r) ? t.l : xe(dt(t, { r: Nn(t.r) }));\n}\nfunction Be(t) {\n return J(t) || t.lvl > t.r.lvl;\n}\nfunction Dn(t) {\n return J(t.r) ? [t.k, t.v] : Dn(t.r);\n}\nfunction $n(t, e, n, o = se, r = se) {\n return { k: t, l: o, lvl: n, r, v: e };\n}\nfunction Sn(t) {\n return Ge(Un(t));\n}\nfunction Un(t) {\n const { l: e } = t;\n return !J(e) && e.lvl === t.lvl ? dt(e, { r: dt(t, { l: e.r }) }) : t;\n}\nfunction Ge(t) {\n const { lvl: e, r: n } = t;\n return !J(n) && !J(n.r) && n.lvl === e && n.r.lvl === e ? dt(n, { l: dt(t, { r: n.l }), lvl: e + 1 }) : t;\n}\nfunction Oo(t) {\n return _n(t, ({ k: e, v: n }) => ({ index: e, value: n }));\n}\nfunction Kn(t, e) {\n return !!(t && t.startIndex === e.startIndex && t.endIndex === e.endIndex);\n}\nfunction le(t, e) {\n return !!(t && t[0] === e[0] && t[1] === e[1]);\n}\nconst Ue = j(\n () => ({ recalcInProgress: T(!1) }),\n [],\n { singleton: !0 }\n);\nfunction jn(t, e, n) {\n return t[Te(t, e, n)];\n}\nfunction Te(t, e, n, o = 0) {\n let r = t.length - 1;\n for (; o <= r; ) {\n const s = Math.floor((o + r) / 2), i = t[s], l = n(i, e);\n if (l === 0)\n return s;\n if (l === -1) {\n if (r - o < 2)\n return s - 1;\n r = s - 1;\n } else {\n if (r === o)\n return s;\n o = s + 1;\n }\n }\n throw new Error(`Failed binary finding record in array - ${t.join(\",\")}, searched for ${e}`);\n}\nfunction ko(t, e, n, o) {\n const r = Te(t, e, o), s = Te(t, n, o, r);\n return t.slice(r, s + 1);\n}\nfunction Ht(t, e) {\n return Math.round(t.getBoundingClientRect()[e]);\n}\nfunction be(t) {\n return !J(t.groupOffsetTree);\n}\nfunction Ke({ index: t }, e) {\n return e === t ? 0 : e < t ? -1 : 1;\n}\nfunction zo() {\n return {\n groupIndices: [],\n groupOffsetTree: Yt(),\n lastIndex: 0,\n lastOffset: 0,\n lastSize: 0,\n offsetTree: [],\n sizeTree: Yt()\n };\n}\nfunction Fo(t, e) {\n let n = J(t) ? 0 : 1 / 0;\n for (const o of e) {\n const { endIndex: r, size: s, startIndex: i } = o;\n if (n = Math.min(n, i), J(t)) {\n t = vt(t, 0, s);\n continue;\n }\n const l = Zt(t, i - 1, r + 1);\n if (l.some(_o(o)))\n continue;\n let c = !1, d = !1;\n for (const { end: m, start: v, value: p } of l)\n c ? (r >= v || s === p) && (t = We(t, v)) : (d = p !== s, c = !0), m > r && r >= v && p !== s && (t = vt(t, r + 1, p));\n d && (t = vt(t, i, s));\n }\n return [t, n];\n}\nfunction Vo(t) {\n return typeof t.groupIndex < \"u\";\n}\nfunction Wo({ offset: t }, e) {\n return e === t ? 0 : e < t ? -1 : 1;\n}\nfunction ce(t, e, n) {\n if (e.length === 0)\n return 0;\n const { index: o, offset: r, size: s } = jn(e, t, Ke), i = t - o, l = s * i + (i - 1) * n + r;\n return l > 0 ? l + n : l;\n}\nfunction qn(t, e) {\n if (!be(e))\n return t;\n let n = 0;\n for (; e.groupIndices[n] <= t + n; )\n n++;\n return t + n;\n}\nfunction Yn(t, e, n) {\n if (Vo(t))\n return e.groupIndices[t.groupIndex] + 1;\n const o = t.index === \"LAST\" ? n : t.index;\n let r = qn(o, e);\n return r = Math.max(0, r, Math.min(n, r)), r;\n}\nfunction Po(t, e, n, o = 0) {\n return o > 0 && (e = Math.max(e, jn(t, o, Ke).offset)), _n(ko(t, e, n, Wo), Mo);\n}\nfunction Go(t, [e, n, o, r]) {\n e.length > 0 && o(\"received item sizes\", e, ft.DEBUG);\n const s = t.sizeTree;\n let i = s, l = 0;\n if (n.length > 0 && J(s) && e.length === 2) {\n const p = e[0].size, I = e[1].size;\n i = n.reduce((w, R) => vt(vt(w, R, p), R + 1, I), i);\n } else\n [i, l] = Fo(i, e);\n if (i === s)\n return t;\n const { lastIndex: c, lastOffset: d, lastSize: m, offsetTree: v } = Ae(t.offsetTree, l, i, r);\n return {\n groupIndices: n,\n groupOffsetTree: n.reduce((p, I) => vt(p, I, ce(I, v, r)), Yt()),\n lastIndex: c,\n lastOffset: d,\n lastSize: m,\n offsetTree: v,\n sizeTree: i\n };\n}\nfunction Ao(t) {\n return Nt(t).map(({ k: e, v: n }, o, r) => {\n const s = r[o + 1];\n return { endIndex: s !== void 0 ? s.k - 1 : 1 / 0, size: n, startIndex: e };\n });\n}\nfunction xn(t, e) {\n let n = 0, o = 0;\n for (; n < t; )\n n += e[o + 1] - e[o] - 1, o++;\n return o - (n === t ? 0 : 1);\n}\nfunction Ae(t, e, n, o) {\n let r = t, s = 0, i = 0, l = 0, c = 0;\n if (e !== 0) {\n c = Te(r, e - 1, Ke), l = r[c].offset;\n const m = Rt(n, e - 1);\n s = m[0], i = m[1], r.length && r[c].size === Rt(n, e)[1] && (c -= 1), r = r.slice(0, c + 1);\n } else\n r = [];\n for (const { start: d, value: m } of Zt(n, e, 1 / 0)) {\n const v = d - s, p = v * i + l + v * o;\n r.push({\n index: d,\n offset: p,\n size: m\n }), s = d, l = p, i = m;\n }\n return {\n lastIndex: s,\n lastOffset: l,\n lastSize: i,\n offsetTree: r\n };\n}\nfunction Mo(t) {\n return { index: t.index, value: t };\n}\nfunction _o(t) {\n const { endIndex: e, size: n, startIndex: o } = t;\n return (r) => r.start === o && (r.end === e || r.end === 1 / 0) && r.value === n;\n}\nconst No = {\n offsetHeight: \"height\",\n offsetWidth: \"width\"\n}, kt = j(\n ([{ log: t }, { recalcInProgress: e }]) => {\n const n = U(), o = U(), r = ht(o, 0), s = U(), i = U(), l = T(0), c = T([]), d = T(void 0), m = T(void 0), v = T(void 0), p = T(void 0), I = T((u, g) => Ht(u, No[g])), w = T(void 0), R = T(0), h = zo(), f = ht(\n x(n, $(c, t, R), Lt(Go, h), nt()),\n h\n ), a = ht(\n x(\n c,\n nt(),\n Lt((u, g) => ({ current: g, prev: u.current }), {\n current: [],\n prev: []\n }),\n B(({ prev: u }) => u)\n ),\n []\n );\n k(\n x(\n c,\n P((u) => u.length > 0),\n $(f, R),\n B(([u, g, C]) => {\n const z = u.reduce((L, V, N) => vt(L, V, ce(V, g.offsetTree, C) || N), Yt());\n return {\n ...g,\n groupIndices: u,\n groupOffsetTree: z\n };\n })\n ),\n f\n ), k(\n x(\n o,\n $(f),\n P(([u, { lastIndex: g }]) => u < g),\n B(([u, { lastIndex: g, lastSize: C }]) => [\n {\n endIndex: g,\n size: C,\n startIndex: u\n }\n ])\n ),\n n\n ), k(d, m);\n const S = ht(\n x(\n d,\n B((u) => u === void 0)\n ),\n !0\n );\n k(\n x(\n m,\n P((u) => u !== void 0 && J(it(f).sizeTree)),\n B((u) => {\n const g = it(v), C = it(c).length > 0;\n return g !== void 0 && g !== 0 ? C ? [\n { endIndex: 0, size: g, startIndex: 0 },\n { endIndex: 1, size: u, startIndex: 1 }\n ] : [] : [{ endIndex: 0, size: u, startIndex: 0 }];\n })\n ),\n n\n ), k(\n x(\n p,\n P((u) => u !== void 0 && u.length > 0 && J(it(f).sizeTree)),\n B((u) => {\n const g = [];\n let C = u[0], z = 0;\n for (let L = 1; L < u.length; L++) {\n const V = u[L];\n V !== C && (g.push({\n endIndex: L - 1,\n size: C,\n startIndex: z\n }), C = V, z = L);\n }\n return g.push({\n endIndex: u.length - 1,\n size: C,\n startIndex: z\n }), g;\n })\n ),\n n\n ), k(\n x(\n c,\n $(v, m),\n P(([, u, g]) => u !== void 0 && g !== void 0),\n B(([u, g, C]) => {\n const z = [];\n for (let L = 0; L < u.length; L++) {\n const V = u[L], N = u[L + 1];\n z.push({\n startIndex: V,\n endIndex: V,\n size: g\n }), N !== void 0 && z.push({\n startIndex: V + 1,\n endIndex: N - 1,\n size: C\n });\n }\n return z;\n })\n ),\n n\n );\n const H = Tt(\n x(\n n,\n $(f),\n Lt(\n ({ sizes: u }, [g, C]) => ({\n changed: C !== u,\n sizes: C\n }),\n { changed: !1, sizes: h }\n ),\n B((u) => u.changed)\n )\n );\n Y(\n x(\n l,\n Lt(\n (u, g) => ({ diff: u.prev - g, prev: g }),\n { diff: 0, prev: 0 }\n ),\n B((u) => u.diff)\n ),\n (u) => {\n const { groupIndices: g } = it(f);\n if (u > 0)\n _(e, !0), _(s, u + xn(u, g));\n else if (u < 0) {\n const C = it(a);\n C.length > 0 && (u -= xn(-u, C)), _(i, u);\n }\n }\n ), Y(x(l, $(t)), ([u, g]) => {\n u < 0 && g(\n \"`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value\",\n { firstItemIndex: l },\n ft.ERROR\n );\n });\n const y = Tt(s);\n k(\n x(\n s,\n $(f),\n B(([u, g]) => {\n const C = g.groupIndices.length > 0, z = [], L = g.lastSize;\n if (C) {\n const V = ie(g.sizeTree, 0);\n let N = 0, Z = 0;\n for (; N < u; ) {\n const q = g.groupIndices[Z], Q = g.groupIndices.length === Z + 1 ? 1 / 0 : g.groupIndices[Z + 1] - q - 1;\n z.push({\n endIndex: q,\n size: V,\n startIndex: q\n }), z.push({\n endIndex: q + 1 + Q - 1,\n size: L,\n startIndex: q + 1\n }), Z++, N += Q + 1;\n }\n const F = Nt(g.sizeTree);\n return N !== u && F.shift(), F.reduce(\n (q, { k: Q, v: gt }) => {\n let ut = q.ranges;\n return q.prevSize !== 0 && (ut = [\n ...q.ranges,\n {\n endIndex: Q + u - 1,\n size: q.prevSize,\n startIndex: q.prevIndex\n }\n ]), {\n prevIndex: Q + u,\n prevSize: gt,\n ranges: ut\n };\n },\n {\n prevIndex: u,\n prevSize: 0,\n ranges: z\n }\n ).ranges;\n }\n return Nt(g.sizeTree).reduce(\n (V, { k: N, v: Z }) => ({\n prevIndex: N + u,\n prevSize: Z,\n ranges: [...V.ranges, { endIndex: N + u - 1, size: V.prevSize, startIndex: V.prevIndex }]\n }),\n {\n prevIndex: 0,\n prevSize: L,\n ranges: []\n }\n ).ranges;\n })\n ),\n n\n );\n const O = Tt(\n x(\n i,\n $(f, R),\n B(([u, { offsetTree: g }, C]) => {\n const z = -u;\n return ce(z, g, C);\n })\n )\n );\n return k(\n x(\n i,\n $(f, R),\n B(([u, g, C]) => {\n if (g.groupIndices.length > 0) {\n if (J(g.sizeTree))\n return g;\n let V = Yt();\n const N = it(a);\n let Z = 0, F = 0, mt = 0;\n for (; Z < -u; ) {\n mt = N[F];\n const Q = N[F + 1] - mt - 1;\n F++, Z += Q + 1;\n }\n if (V = Nt(g.sizeTree).reduce((Q, { k: gt, v: ut }) => vt(Q, Math.max(0, gt + u), ut), V), Z !== -u) {\n const Q = ie(g.sizeTree, mt);\n V = vt(V, 0, Q);\n const gt = Rt(g.sizeTree, -u + 1)[1];\n V = vt(V, 1, gt);\n }\n return {\n ...g,\n sizeTree: V,\n ...Ae(g.offsetTree, 0, V, C)\n };\n }\n const L = Nt(g.sizeTree).reduce((V, { k: N, v: Z }) => vt(V, Math.max(0, N + u), Z), Yt());\n return {\n ...g,\n sizeTree: L,\n ...Ae(g.offsetTree, 0, L, C)\n };\n })\n ),\n f\n ), {\n beforeUnshiftWith: y,\n // input\n data: w,\n defaultItemSize: m,\n firstItemIndex: l,\n fixedItemSize: d,\n fixedGroupSize: v,\n gap: R,\n groupIndices: c,\n heightEstimates: p,\n itemSize: I,\n listRefresh: H,\n shiftWith: i,\n shiftWithOffset: O,\n sizeRanges: n,\n // output\n sizes: f,\n statefulTotalCount: r,\n totalCount: o,\n trackItemSizes: S,\n unshiftWith: s\n };\n },\n rt(Gt, Ue),\n { singleton: !0 }\n);\nfunction Do(t) {\n return t.reduce(\n (e, n) => (e.groupIndices.push(e.totalCount), e.totalCount += n + 1, e),\n {\n groupIndices: [],\n totalCount: 0\n }\n );\n}\nconst Zn = j(\n ([{ groupIndices: t, sizes: e, totalCount: n }, { headerHeight: o, scrollTop: r }]) => {\n const s = U(), i = U(), l = Tt(x(s, B(Do)));\n return k(\n x(\n l,\n B((c) => c.totalCount)\n ),\n n\n ), k(\n x(\n l,\n B((c) => c.groupIndices)\n ),\n t\n ), k(\n x(\n at(r, e, o),\n P(([c, d]) => be(d)),\n B(([c, d, m]) => Rt(d.groupOffsetTree, Math.max(c - m, 0), \"v\")[0]),\n nt(),\n B((c) => [c])\n ),\n i\n ), { groupCounts: s, topItemsIndexes: i };\n },\n rt(kt, It)\n), At = j(\n ([{ log: t }]) => {\n const e = T(!1), n = Tt(\n x(\n e,\n P((o) => o),\n nt()\n )\n );\n return Y(e, (o) => {\n o && it(t)(\"props updated\", {}, ft.DEBUG);\n }), { didMount: n, propsReady: e };\n },\n rt(Gt),\n { singleton: !0 }\n), $o = typeof document < \"u\" && \"scrollBehavior\" in document.documentElement.style;\nfunction Xn(t) {\n const e = typeof t == \"number\" ? { index: t } : t;\n return e.align || (e.align = \"start\"), (!e.behavior || !$o) && (e.behavior = \"auto\"), e.offset === void 0 && (e.offset = 0), e;\n}\nconst fe = j(\n ([\n { gap: t, listRefresh: e, sizes: n, totalCount: o },\n {\n fixedFooterHeight: r,\n fixedHeaderHeight: s,\n footerHeight: i,\n headerHeight: l,\n scrollingInProgress: c,\n scrollTo: d,\n smoothScrollTargetReached: m,\n viewportHeight: v\n },\n { log: p }\n ]) => {\n const I = U(), w = U(), R = T(0);\n let h = null, f = null, a = null;\n function S() {\n h !== null && (h(), h = null), a !== null && (a(), a = null), f && (clearTimeout(f), f = null), _(c, !1);\n }\n return k(\n x(\n I,\n $(n, v, o, R, l, i, p),\n $(t, s, r),\n B(\n ([\n [H, y, O, u, g, C, z, L],\n V,\n N,\n Z\n ]) => {\n const F = Xn(H), { align: mt, behavior: q, offset: Q } = F, gt = u - 1, ut = Yn(F, y, gt);\n let St = ce(ut, y.offsetTree, V) + C;\n mt === \"end\" ? (St += N + Rt(y.sizeTree, ut)[1] - O + Z, ut === gt && (St += z)) : mt === \"center\" ? St += (N + Rt(y.sizeTree, ut)[1] - O + Z) / 2 : St -= g, Q !== void 0 && Q !== 0 && (St += Q);\n const Ft = (pt) => {\n S(), pt ? (L(\"retrying to scroll to\", { location: H }, ft.DEBUG), _(I, H)) : (_(w, !0), L(\"list did not change, scroll successful\", {}, ft.DEBUG));\n };\n if (S(), q === \"smooth\") {\n let pt = !1;\n a = Y(e, (jt) => {\n pt = pt || jt;\n }), h = yt(m, () => {\n Ft(pt);\n });\n } else\n h = yt(x(e, Uo(150)), Ft);\n return f = setTimeout(() => {\n S();\n }, 1200), _(c, !0), L(\"scrolling from index to\", { behavior: q, index: ut, top: St }, ft.DEBUG), { behavior: q, top: St };\n }\n )\n ),\n d\n ), {\n scrollTargetReached: w,\n scrollToIndex: I,\n topListHeight: R\n };\n },\n rt(kt, It, Gt),\n { singleton: !0 }\n);\nfunction Uo(t) {\n return (e) => {\n const n = setTimeout(() => {\n e(!1);\n }, t);\n return (o) => {\n o && (e(!0), clearTimeout(n));\n };\n };\n}\nfunction je(t, e) {\n t === 0 ? e() : requestAnimationFrame(() => {\n je(t - 1, e);\n });\n}\nfunction qe(t, e) {\n const n = e - 1;\n return typeof t == \"number\" ? t : t.index === \"LAST\" ? n : t.index;\n}\nconst me = j(\n ([{ defaultItemSize: t, listRefresh: e, sizes: n }, { scrollTop: o }, { scrollTargetReached: r, scrollToIndex: s }, { didMount: i }]) => {\n const l = T(!0), c = T(0), d = T(!0);\n return k(\n x(\n i,\n $(c),\n P(([m, v]) => v !== 0),\n Bt(!1)\n ),\n l\n ), k(\n x(\n i,\n $(c),\n P(([m, v]) => v !== 0),\n Bt(!1)\n ),\n d\n ), Y(\n x(\n at(e, i),\n $(l, n, t, d),\n P(([[, m], v, { sizeTree: p }, I, w]) => m && (!J(p) || _e(I)) && !v && !w),\n $(c)\n ),\n ([, m]) => {\n yt(r, () => {\n _(d, !0);\n }), je(4, () => {\n yt(o, () => {\n _(l, !0);\n }), _(s, m);\n });\n }\n ), {\n initialItemFinalLocationReached: d,\n initialTopMostItemIndex: c,\n scrolledToInitialItem: l\n };\n },\n rt(kt, It, fe, At),\n { singleton: !0 }\n);\nfunction Jn(t, e) {\n return Math.abs(t - e) < 1.01;\n}\nconst ue = \"up\", ne = \"down\", Ko = \"none\", jo = {\n atBottom: !1,\n notAtBottomBecause: \"NOT_SHOWING_LAST_ITEM\",\n state: {\n offsetBottom: 0,\n scrollHeight: 0,\n scrollTop: 0,\n viewportHeight: 0\n }\n}, qo = 0, pe = j(([{ footerHeight: t, headerHeight: e, scrollBy: n, scrollContainerState: o, scrollTop: r, viewportHeight: s }]) => {\n const i = T(!1), l = T(!0), c = U(), d = U(), m = T(4), v = T(qo), p = ht(\n x(\n Fe(x(W(r), Ut(1), Bt(!0)), x(W(r), Ut(1), Bt(!1), pn(100))),\n nt()\n ),\n !1\n ), I = ht(\n x(Fe(x(n, Bt(!0)), x(n, Bt(!1), pn(200))), nt()),\n !1\n );\n k(\n x(\n at(W(r), W(v)),\n B(([a, S]) => a <= S),\n nt()\n ),\n l\n ), k(x(l, zt(50)), d);\n const w = Tt(\n x(\n at(o, W(s), W(e), W(t), W(m)),\n Lt((a, [{ scrollHeight: S, scrollTop: H }, y, O, u, g]) => {\n const C = H + y - S > -g, z = {\n scrollHeight: S,\n scrollTop: H,\n viewportHeight: y\n };\n if (C) {\n let V, N;\n return H > a.state.scrollTop ? (V = \"SCROLLED_DOWN\", N = a.state.scrollTop - H) : (V = \"SIZE_DECREASED\", N = a.state.scrollTop - H || a.scrollTopDelta), {\n atBottom: !0,\n atBottomBecause: V,\n scrollTopDelta: N,\n state: z\n };\n }\n let L;\n return z.scrollHeight > a.state.scrollHeight ? L = \"SIZE_INCREASED\" : y < a.state.viewportHeight ? L = \"VIEWPORT_HEIGHT_DECREASING\" : H < a.state.scrollTop ? L = \"SCROLLING_UPWARDS\" : L = \"NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM\", {\n atBottom: !1,\n notAtBottomBecause: L,\n state: z\n };\n }, jo),\n nt((a, S) => a !== void 0 && a.atBottom === S.atBottom)\n )\n ), R = ht(\n x(\n o,\n Lt(\n (a, { scrollHeight: S, scrollTop: H, viewportHeight: y }) => {\n if (!Jn(a.scrollHeight, S)) {\n const O = S - (H + y) < 1;\n return a.scrollTop !== H && O ? {\n changed: !0,\n jump: a.scrollTop - H,\n scrollHeight: S,\n scrollTop: H\n } : {\n changed: !0,\n jump: 0,\n scrollHeight: S,\n scrollTop: H\n };\n }\n return {\n changed: !1,\n jump: 0,\n scrollHeight: S,\n scrollTop: H\n };\n },\n { changed: !1, jump: 0, scrollHeight: 0, scrollTop: 0 }\n ),\n P((a) => a.changed),\n B((a) => a.jump)\n ),\n 0\n );\n k(\n x(\n w,\n B((a) => a.atBottom)\n ),\n i\n ), k(x(i, zt(50)), c);\n const h = T(ne);\n k(\n x(\n o,\n B(({ scrollTop: a }) => a),\n nt(),\n Lt(\n (a, S) => it(I) ? { direction: a.direction, prevScrollTop: S } : { direction: S < a.prevScrollTop ? ue : ne, prevScrollTop: S },\n { direction: ne, prevScrollTop: 0 }\n ),\n B((a) => a.direction)\n ),\n h\n ), k(x(o, zt(50), Bt(Ko)), h);\n const f = T(0);\n return k(\n x(\n p,\n P((a) => !a),\n Bt(0)\n ),\n f\n ), k(\n x(\n r,\n zt(100),\n $(p),\n P(([a, S]) => S),\n Lt(([a, S], [H]) => [S, H], [0, 0]),\n B(([a, S]) => S - a)\n ),\n f\n ), {\n atBottomState: w,\n atBottomStateChange: c,\n atBottomThreshold: m,\n atTopStateChange: d,\n atTopThreshold: v,\n isAtBottom: i,\n isAtTop: l,\n isScrolling: p,\n lastJumpDueToItemResize: R,\n scrollDirection: h,\n scrollVelocity: f\n };\n}, rt(It)), ae = \"top\", de = \"bottom\", vn = \"none\";\nfunction Tn(t, e, n) {\n return typeof t == \"number\" ? n === ue && e === ae || n === ne && e === de ? t : 0 : n === ue ? e === ae ? t.main : t.reverse : e === de ? t.main : t.reverse;\n}\nfunction Cn(t, e) {\n return typeof t == \"number\" ? t : t[e] ?? 0;\n}\nconst Ye = j(\n ([{ deviation: t, fixedHeaderHeight: e, headerHeight: n, scrollTop: o, viewportHeight: r }]) => {\n const s = U(), i = T(0), l = T(0), c = T(0), d = ht(\n x(\n at(\n W(o),\n W(r),\n W(n),\n W(s, le),\n W(c),\n W(i),\n W(e),\n W(t),\n W(l)\n ),\n B(\n ([\n m,\n v,\n p,\n [I, w],\n R,\n h,\n f,\n a,\n S\n ]) => {\n const H = m - a, y = h + f, O = Math.max(p - H, 0);\n let u = vn;\n const g = Cn(S, ae), C = Cn(S, de);\n return I -= a, I += p + f, w += p + f, w -= a, I > m + y - g && (u = ue), w < m - O + v + C && (u = ne), u !== vn ? [\n Math.max(H - p - Tn(R, ae, u) - g, 0),\n H - O - f + v + Tn(R, de, u) + C\n ] : null;\n }\n ),\n P((m) => m !== null),\n nt(le)\n ),\n [0, 0]\n );\n return {\n increaseViewportBy: l,\n // input\n listBoundary: s,\n overscan: c,\n topListHeight: i,\n // output\n visibleRange: d\n };\n },\n rt(It),\n { singleton: !0 }\n);\nfunction Yo(t, e, n) {\n if (be(e)) {\n const o = qn(t, e);\n return [\n { index: Rt(e.groupOffsetTree, o)[0], offset: 0, size: 0 },\n { data: n?.[0], index: o, offset: 0, size: 0 }\n ];\n }\n return [{ data: n?.[0], index: t, offset: 0, size: 0 }];\n}\nconst Le = {\n bottom: 0,\n firstItemIndex: 0,\n items: [],\n offsetBottom: 0,\n offsetTop: 0,\n top: 0,\n topItems: [],\n topListHeight: 0,\n totalCount: 0\n};\nfunction ve(t, e, n, o, r, s) {\n const { lastIndex: i, lastOffset: l, lastSize: c } = r;\n let d = 0, m = 0;\n if (t.length > 0) {\n d = t[0].offset;\n const R = t[t.length - 1];\n m = R.offset + R.size;\n }\n const v = n - i, p = l + v * c + (v - 1) * o, I = d, w = p - m;\n return {\n bottom: m,\n firstItemIndex: s,\n items: wn(t, r, s),\n offsetBottom: w,\n offsetTop: d,\n top: I,\n topItems: wn(e, r, s),\n topListHeight: e.reduce((R, h) => h.size + R, 0),\n totalCount: n\n };\n}\nfunction Qn(t, e, n, o, r, s) {\n let i = 0;\n if (n.groupIndices.length > 0)\n for (const m of n.groupIndices) {\n if (m - i >= t)\n break;\n i++;\n }\n const l = t + i, c = qe(e, l), d = Array.from({ length: l }).map((m, v) => ({\n data: s[v + c],\n index: v + c,\n offset: 0,\n size: 0\n }));\n return ve(d, [], l, r, n, o);\n}\nfunction wn(t, e, n) {\n if (t.length === 0)\n return [];\n if (!be(e))\n return t.map((d) => ({ ...d, index: d.index + n, originalIndex: d.index }));\n const o = t[0].index, r = t[t.length - 1].index, s = [], i = Zt(e.groupOffsetTree, o, r);\n let l, c = 0;\n for (const d of t) {\n (!l || l.end < d.index) && (l = i.shift(), c = e.groupIndices.indexOf(l.start));\n let m;\n d.index === l.start ? m = {\n index: c,\n type: \"group\"\n } : m = {\n groupIndex: c,\n index: d.index - (c + 1) + n\n }, s.push({\n ...m,\n data: d.data,\n offset: d.offset,\n originalIndex: d.index,\n size: d.size\n });\n }\n return s;\n}\nfunction yn(t, e) {\n return t === void 0 ? 0 : typeof t == \"number\" ? t : t[e] ?? 0;\n}\nconst Kt = j(\n ([\n { data: t, firstItemIndex: e, gap: n, sizes: o, totalCount: r },\n s,\n { listBoundary: i, topListHeight: l, visibleRange: c },\n { initialTopMostItemIndex: d, scrolledToInitialItem: m },\n { topListHeight: v },\n p,\n { didMount: I },\n { recalcInProgress: w }\n ]) => {\n const R = T([]), h = T(0), f = U(), a = T(0);\n k(s.topItemsIndexes, R);\n const S = ht(\n x(\n at(\n I,\n w,\n W(c, le),\n W(r),\n W(o),\n W(d),\n m,\n W(R),\n W(e),\n W(n),\n W(a),\n t\n ),\n P(([u, g, , C, , , , , , , , z]) => {\n const L = z !== void 0 && z.length !== C;\n return u && !g && !L;\n }),\n B(\n ([\n ,\n ,\n [u, g],\n C,\n z,\n L,\n V,\n N,\n Z,\n F,\n mt,\n q\n ]) => {\n const Q = z, { offsetTree: gt, sizeTree: ut } = Q, St = it(h);\n if (C === 0)\n return { ...Le, totalCount: C };\n if (u === 0 && g === 0)\n return St === 0 ? { ...Le, totalCount: C } : Qn(St, L, z, Z, F, q || []);\n if (J(ut))\n return St > 0 ? null : ve(\n Yo(qe(L, C), Q, q),\n [],\n C,\n F,\n Q,\n Z\n );\n const Ft = [];\n if (N.length > 0) {\n const D = N[0], K = N[N.length - 1];\n let st = 0;\n for (const tt of Zt(ut, D, K)) {\n const X = tt.value, lt = Math.max(tt.start, D), xt = Math.min(tt.end, K);\n for (let ct = lt; ct <= xt; ct++)\n Ft.push({ data: q?.[ct], index: ct, offset: st, size: X }), st += X;\n }\n }\n if (!V)\n return ve([], Ft, C, F, Q, Z);\n const pt = N.length > 0 ? N[N.length - 1] + 1 : 0, jt = Po(gt, u, g, pt);\n if (jt.length === 0)\n return null;\n const Qt = C - 1, Et = ye([], (D) => {\n for (const K of jt) {\n const st = K.value;\n let tt = st.offset, X = K.start;\n const lt = st.size;\n if (st.offset < u) {\n X += Math.floor((u - st.offset + F) / (lt + F));\n const ct = X - K.start;\n tt += ct * lt + ct * F;\n }\n X < pt && (tt += (pt - X) * lt, X = pt);\n const xt = Math.min(K.end, Qt);\n for (let ct = X; ct <= xt && !(tt >= g); ct++)\n D.push({ data: q?.[ct], index: ct, offset: tt, size: lt }), tt += lt + F;\n }\n }), te = yn(mt, ae), b = yn(mt, de);\n if (Et.length > 0 && (te > 0 || b > 0)) {\n const D = Et[0], K = Et[Et.length - 1];\n if (te > 0 && D.index > pt) {\n const st = Math.min(te, D.index - pt), tt = [];\n let X = D.offset;\n for (let lt = D.index - 1; lt >= D.index - st; lt--) {\n const ct = Zt(ut, lt, lt)[0]?.value ?? D.size;\n X -= ct + F, tt.unshift({ data: q?.[lt], index: lt, offset: X, size: ct });\n }\n Et.unshift(...tt);\n }\n if (b > 0 && K.index < Qt) {\n const st = Math.min(b, Qt - K.index);\n let tt = K.offset + K.size + F;\n for (let X = K.index + 1; X <= K.index + st; X++) {\n const xt = Zt(ut, X, X)[0]?.value ?? K.size;\n Et.push({ data: q?.[X], index: X, offset: tt, size: xt }), tt += xt + F;\n }\n }\n }\n return ve(Et, Ft, C, F, Q, Z);\n }\n ),\n //@ts-expect-error filter needs to be fixed\n P((u) => u !== null),\n nt()\n ),\n Le\n );\n k(\n x(\n t,\n P(_e),\n B((u) => u?.length)\n ),\n r\n ), k(\n x(\n S,\n B((u) => u.topListHeight)\n ),\n v\n ), k(v, l), k(\n x(\n S,\n B((u) => [u.top, u.bottom])\n ),\n i\n ), k(\n x(\n S,\n B((u) => u.items)\n ),\n f\n );\n const H = Tt(\n x(\n S,\n P(({ items: u }) => u.length > 0),\n $(r, t),\n P(([{ items: u }, g]) => u[u.length - 1].originalIndex === g - 1),\n B(([, u, g]) => [u - 1, g]),\n nt(le),\n B(([u]) => u)\n )\n ), y = Tt(\n x(\n S,\n zt(200),\n P(({ items: u, topItems: g }) => u.length > 0 && u[0].originalIndex === g.length),\n B(({ items: u }) => u[0].index),\n nt()\n )\n ), O = Tt(\n x(\n S,\n P(({ items: u }) => u.length > 0),\n B(({ items: u }) => {\n let g = 0, C = u.length - 1;\n for (; u[g].type === \"group\" && g < C; )\n g++;\n for (; u[C].type === \"group\" && C > g; )\n C--;\n return {\n endIndex: u[C].index,\n startIndex: u[g].index\n };\n }),\n nt(Kn)\n )\n );\n return {\n endReached: H,\n initialItemCount: h,\n itemsRendered: f,\n listState: S,\n minOverscanItemCount: a,\n rangeChanged: O,\n startReached: y,\n topItemsIndexes: R,\n ...p\n };\n },\n rt(\n kt,\n Zn,\n Ye,\n me,\n fe,\n pe,\n At,\n Ue\n ),\n { singleton: !0 }\n), to = j(\n ([{ fixedFooterHeight: t, fixedHeaderHeight: e, footerHeight: n, headerHeight: o }, { listState: r }]) => {\n const s = U(), i = ht(\n x(\n at(n, t, o, e, r),\n B(([l, c, d, m, v]) => l + c + d + m + v.offsetBottom + v.bottom)\n ),\n 0\n );\n return k(W(i), s), { totalListHeight: i, totalListHeightChanged: s };\n },\n rt(It, Kt),\n { singleton: !0 }\n), Zo = j(\n ([{ viewportHeight: t }, { totalListHeight: e }]) => {\n const n = T(!1), o = ht(\n x(\n at(n, t, e),\n P(([r]) => r),\n B(([, r, s]) => Math.max(0, r - s)),\n zt(0),\n nt()\n ),\n 0\n );\n return { alignToBottom: n, paddingTopAddition: o };\n },\n rt(It, to),\n { singleton: !0 }\n), eo = j(() => ({\n context: T(null)\n})), Xo = ({\n itemBottom: t,\n itemTop: e,\n locationParams: { align: n, behavior: o, ...r },\n viewportBottom: s,\n viewportTop: i\n}) => e < i ? { ...r, align: n ?? \"start\", ...o !== void 0 ? { behavior: o } : {} } : t > s ? { ...r, align: n ?? \"end\", ...o !== void 0 ? { behavior: o } : {} } : null, no = j(\n ([\n { gap: t, sizes: e, totalCount: n },\n { fixedFooterHeight: o, fixedHeaderHeight: r, headerHeight: s, scrollingInProgress: i, scrollTop: l, viewportHeight: c },\n { scrollToIndex: d }\n ]) => {\n const m = U();\n return k(\n x(\n m,\n $(e, c, n, s, r, o, l),\n $(t),\n B(([[v, p, I, w, R, h, f, a], S]) => {\n const { calculateViewLocation: H = Xo, done: y, ...O } = v, u = Yn(v, p, w - 1), g = ce(u, p.offsetTree, S) + R + h, C = g + Rt(p.sizeTree, u)[1], z = a + h, L = a + I - f, V = H({\n itemBottom: C,\n itemTop: g,\n locationParams: O,\n viewportBottom: L,\n viewportTop: z\n });\n return V !== null ? y && yt(\n x(\n i,\n P((N) => !N),\n // skips the initial publish of false, and the cleanup call.\n // but if scrollingInProgress is true, we skip the initial publish.\n Ut(it(i) ? 1 : 2)\n ),\n y\n ) : y?.(), V;\n }),\n P((v) => v !== null)\n ),\n d\n ), {\n scrollIntoView: m\n };\n },\n rt(kt, It, fe, Kt, Gt),\n { singleton: !0 }\n);\nfunction bn(t) {\n return t === !1 ? !1 : t === \"smooth\" ? \"smooth\" : \"auto\";\n}\nconst Jo = (t, e) => typeof t == \"function\" ? bn(t(e)) : e && bn(t), Qo = j(\n ([\n { listRefresh: t, totalCount: e, fixedItemSize: n, data: o },\n { atBottomState: r, isAtBottom: s },\n { scrollToIndex: i },\n { scrolledToInitialItem: l },\n { didMount: c, propsReady: d },\n { log: m },\n { scrollingInProgress: v },\n { context: p },\n { scrollIntoView: I }\n ]) => {\n const w = T(!1), R = U();\n let h = null;\n function f(y) {\n _(i, {\n align: \"end\",\n behavior: y,\n index: \"LAST\"\n });\n }\n Y(\n x(\n at(x(W(e), Ut(1)), c),\n $(W(w), s, l, v),\n B(([[y, O], u, g, C, z]) => {\n let L = O && C, V = \"auto\";\n return L && (V = Jo(u, g || z), L = L && V !== !1), { followOutputBehavior: V, shouldFollow: L, totalCount: y };\n }),\n P(({ shouldFollow: y }) => y)\n ),\n ({ followOutputBehavior: y, totalCount: O }) => {\n h !== null && (h(), h = null), it(n) !== void 0 ? requestAnimationFrame(() => {\n it(m)(\"following output to \", { totalCount: O }, ft.DEBUG), f(y);\n }) : h = yt(t, () => {\n it(m)(\"following output to \", { totalCount: O }, ft.DEBUG), f(y), h = null;\n });\n }\n );\n function a(y) {\n const O = yt(r, (u) => {\n y && !u.atBottom && u.notAtBottomBecause === \"SIZE_INCREASED\" && h === null && (it(m)(\"scrolling to bottom due to increased size\", {}, ft.DEBUG), f(\"auto\"));\n });\n setTimeout(O, 100);\n }\n Y(\n x(\n at(W(w), e, d),\n P(([y, , O]) => y !== !1 && O),\n Lt(\n ({ value: y }, [, O]) => ({ refreshed: y === O, value: O }),\n { refreshed: !1, value: 0 }\n ),\n P(({ refreshed: y }) => y),\n $(w, e)\n ),\n ([, y]) => {\n it(l) && a(y !== !1);\n }\n ), Y(R, () => {\n a(it(w) !== !1);\n }), Y(at(W(w), r), ([y, O]) => {\n y !== !1 && !O.atBottom && O.notAtBottomBecause === \"VIEWPORT_HEIGHT_DECREASING\" && f(\"auto\");\n });\n const S = T(null), H = U();\n return k(\n Fe(\n x(\n W(o),\n B((y) => y?.length ?? 0)\n ),\n x(W(e))\n ),\n H\n ), Y(\n x(\n at(x(H, Ut(1)), c),\n $(W(S), l, v, p),\n B(([[y, O], u, g, C, z]) => O && g && u?.({ context: z, totalCount: y, scrollingInProgress: C })),\n P((y) => !!y),\n zt(0)\n ),\n (y) => {\n h !== null && (h(), h = null), it(n) !== void 0 ? requestAnimationFrame(() => {\n it(m)(\"scrolling into view\", {}), _(I, y);\n }) : h = yt(t, () => {\n it(m)(\"scrolling into view\", {}), _(I, y), h = null;\n });\n }\n ), { autoscrollToBottom: R, followOutput: w, scrollIntoViewOnChange: S };\n },\n rt(\n kt,\n pe,\n fe,\n me,\n At,\n Gt,\n It,\n eo,\n no\n )\n), tr = j(\n ([{ data: t, firstItemIndex: e, gap: n, sizes: o }, { initialTopMostItemIndex: r }, { initialItemCount: s, listState: i }, { didMount: l }]) => (k(\n x(\n l,\n $(s),\n P(([, c]) => c !== 0),\n $(r, o, e, n, t),\n B(([[, c], d, m, v, p, I = []]) => Qn(c, d, m, v, p, I))\n ),\n i\n ), {}),\n rt(kt, me, Kt, At),\n { singleton: !0 }\n), er = j(\n ([{ didMount: t }, { scrollTo: e }, { listState: n }]) => {\n const o = T(0);\n return Y(\n x(\n t,\n $(o),\n P(([, r]) => r !== 0),\n B(([, r]) => ({ top: r }))\n ),\n (r) => {\n yt(\n x(\n n,\n Ut(1),\n P((s) => s.items.length > 1)\n ),\n () => {\n requestAnimationFrame(() => {\n _(e, r);\n });\n }\n );\n }\n ), {\n initialScrollTop: o\n };\n },\n rt(At, It, Kt),\n { singleton: !0 }\n), oo = j(\n ([{ scrollVelocity: t }]) => {\n const e = T(!1), n = U(), o = T(!1);\n return k(\n x(\n t,\n $(o, e, n),\n P(([r, s]) => s !== !1 && s !== void 0),\n B(([r, s, i, l]) => {\n const { enter: c, exit: d } = s;\n if (i) {\n if (d(r, l))\n return !1;\n } else if (c(r, l))\n return !0;\n return i;\n }),\n nt()\n ),\n e\n ), Y(\n x(at(e, t, n), $(o)),\n ([[r, s, i], l]) => {\n r && l !== !1 && l !== void 0 && l.change && l.change(s, i);\n }\n ), { isSeeking: e, scrollSeekConfiguration: o, scrollSeekRangeChanged: n, scrollVelocity: t };\n },\n rt(pe),\n { singleton: !0 }\n), Ze = j(([{ scrollContainerState: t, scrollTo: e }]) => {\n const n = U(), o = U(), r = U(), s = T(!1), i = T(void 0);\n return k(\n x(\n at(n, o),\n B(([{ scrollTop: l, viewportHeight: c }, { offsetTop: d, listHeight: m }]) => ({\n scrollHeight: m,\n scrollTop: Math.max(0, l - d),\n viewportHeight: c\n }))\n ),\n t\n ), k(\n x(\n e,\n $(o),\n B(([l, { offsetTop: c }]) => ({\n ...l,\n top: l.top + c\n }))\n ),\n r\n ), {\n customScrollParent: i,\n // config\n useWindowScroll: s,\n // input\n windowScrollContainerState: n,\n // signals\n windowScrollTo: r,\n windowViewportRect: o\n };\n}, rt(It)), nr = j(\n ([\n { sizeRanges: t, sizes: e },\n { headerHeight: n, scrollTop: o },\n { initialTopMostItemIndex: r },\n { didMount: s },\n { useWindowScroll: i, windowScrollContainerState: l, windowViewportRect: c }\n ]) => {\n const d = U(), m = T(void 0), v = T(null), p = T(null);\n return k(l, v), k(c, p), Y(\n x(\n d,\n $(e, o, i, v, p, n)\n ),\n ([I, w, R, h, f, a, S]) => {\n const H = Ao(w.sizeTree);\n h && f !== null && a !== null && (R = f.scrollTop - a.offsetTop), R -= S, I({ ranges: H, scrollTop: R });\n }\n ), k(x(m, P(_e), B(or)), r), k(\n x(\n s,\n $(m),\n P(([, I]) => I !== void 0),\n nt(),\n B(([, I]) => I.ranges)\n ),\n t\n ), {\n getState: d,\n restoreStateFrom: m\n };\n },\n rt(kt, It, me, At, Ze)\n);\nfunction or(t) {\n return { align: \"start\", index: 0, offset: t.scrollTop };\n}\nconst rr = j(([{ topItemsIndexes: t }]) => {\n const e = T(0);\n return k(\n x(\n e,\n P((n) => n >= 0),\n B((n) => Array.from({ length: n }).map((o, r) => r))\n ),\n t\n ), { topItemCount: e };\n}, rt(Kt));\nfunction ro(t) {\n let e = !1, n;\n return (() => (e || (e = !0, n = t()), n));\n}\nconst sr = ro(() => /iP(ad|od|hone)/i.test(navigator.userAgent) && /WebKit/i.test(navigator.userAgent)), ir = j(\n ([\n { deviation: t, scrollBy: e, scrollingInProgress: n, scrollTop: o },\n { isAtBottom: r, isScrolling: s, lastJumpDueToItemResize: i, scrollDirection: l },\n { listState: c },\n { beforeUnshiftWith: d, gap: m, shiftWithOffset: v, sizes: p },\n { log: I },\n { recalcInProgress: w }\n ]) => {\n const R = Tt(\n x(\n c,\n $(i),\n Lt(\n ([, f, a, S], [{ bottom: H, items: y, offsetBottom: O, totalCount: u }, g]) => {\n const C = H + O;\n let z = 0;\n return a === u && f.length > 0 && y.length > 0 && (y[0].originalIndex === 0 && f[0].originalIndex === 0 || (z = C - S, z !== 0 && (z += g))), [z, y, u, C];\n },\n [0, [], 0, 0]\n ),\n P(([f]) => f !== 0),\n $(o, l, n, r, I, w),\n P(([, f, a, S, , , H]) => !H && !S && f !== 0 && a === ue),\n B(([[f], , , , , a]) => (a(\"Upward scrolling compensation\", { amount: f }, ft.DEBUG), f))\n )\n );\n function h(f) {\n f > 0 ? (_(e, { behavior: \"auto\", top: -f }), _(t, 0)) : (_(t, 0), _(e, { behavior: \"auto\", top: -f }));\n }\n return Y(x(R, $(t, s)), ([f, a, S]) => {\n S && sr() ? _(t, a - f) : h(-f);\n }), Y(\n x(\n at(ht(s, !1), t, w),\n P(([f, a, S]) => !f && !S && a !== 0),\n B(([f, a]) => a),\n zt(1)\n ),\n h\n ), k(\n x(\n v,\n B((f) => ({ top: -f }))\n ),\n e\n ), Y(\n x(\n d,\n $(p, m),\n B(([f, { groupIndices: a, lastSize: S, sizeTree: H }, y]) => {\n function O(L) {\n return L * (S + y);\n }\n if (a.length === 0)\n return O(f);\n let u = 0;\n const g = ie(H, 0);\n let C = 0, z = 0;\n for (; C < f; ) {\n C++, u += g;\n let L = a.length === z + 1 ? 1 / 0 : a[z + 1] - a[z] - 1;\n C + L > f && (u -= g, L = f - C + 1), C += L, u += O(L), z++;\n }\n return u;\n })\n ),\n (f) => {\n _(t, f), requestAnimationFrame(() => {\n _(e, { top: f }), requestAnimationFrame(() => {\n _(t, 0), _(w, !1);\n });\n });\n }\n ), { deviation: t };\n },\n rt(It, pe, Kt, kt, Gt, Ue)\n), lr = j(\n ([\n t,\n e,\n n,\n o,\n r,\n s,\n i,\n l,\n c,\n d,\n m\n ]) => ({\n ...t,\n ...e,\n ...n,\n ...o,\n ...r,\n ...s,\n ...i,\n ...l,\n ...c,\n ...d,\n ...m\n }),\n rt(\n Ye,\n tr,\n At,\n oo,\n to,\n er,\n Zo,\n Ze,\n no,\n Gt,\n eo\n )\n), so = j(\n ([\n {\n data: t,\n defaultItemSize: e,\n firstItemIndex: n,\n fixedItemSize: o,\n fixedGroupSize: r,\n gap: s,\n groupIndices: i,\n heightEstimates: l,\n itemSize: c,\n sizeRanges: d,\n sizes: m,\n statefulTotalCount: v,\n totalCount: p,\n trackItemSizes: I\n },\n { initialItemFinalLocationReached: w, initialTopMostItemIndex: R, scrolledToInitialItem: h },\n f,\n a,\n S,\n H,\n { scrollToIndex: y },\n O,\n { topItemCount: u },\n { groupCounts: g },\n C\n ]) => {\n const { listState: z, minOverscanItemCount: L, topItemsIndexes: V, rangeChanged: N, ...Z } = H;\n return k(N, C.scrollSeekRangeChanged), k(\n x(\n C.windowViewportRect,\n B((F) => F.visibleHeight)\n ),\n f.viewportHeight\n ), {\n data: t,\n defaultItemHeight: e,\n firstItemIndex: n,\n fixedItemHeight: o,\n fixedGroupHeight: r,\n gap: s,\n groupCounts: g,\n heightEstimates: l,\n initialItemFinalLocationReached: w,\n initialTopMostItemIndex: R,\n scrolledToInitialItem: h,\n sizeRanges: d,\n topItemCount: u,\n topItemsIndexes: V,\n // input\n totalCount: p,\n ...S,\n groupIndices: i,\n itemSize: c,\n listState: z,\n minOverscanItemCount: L,\n scrollToIndex: y,\n // output\n statefulTotalCount: v,\n trackItemSizes: I,\n // exported from stateFlagsSystem\n rangeChanged: N,\n ...Z,\n // the bag of IO from featureGroup1System\n ...C,\n ...f,\n sizes: m,\n ...a\n };\n },\n rt(\n kt,\n me,\n It,\n nr,\n Qo,\n Kt,\n fe,\n ir,\n rr,\n Zn,\n lr\n )\n);\nfunction cr(t, e) {\n const n = {}, o = {};\n let r = 0;\n const s = t.length;\n for (; r < s; )\n o[t[r]] = 1, r += 1;\n for (const i in e)\n Object.hasOwn(o, i) || (n[i] = e[i]);\n return n;\n}\nconst Ie = typeof document < \"u\" ? E.useLayoutEffect : E.useEffect;\nfunction Xe(t, e, n) {\n const o = Object.keys(e.required || {}), r = Object.keys(e.optional || {}), s = Object.keys(e.methods || {}), i = Object.keys(e.events || {}), l = E.createContext({});\n function c(f, a) {\n f.propsReady !== void 0 && _(f.propsReady, !1);\n for (const S of o) {\n const H = f[e.required[S]];\n _(H, a[S]);\n }\n for (const S of r)\n if (S in a) {\n const H = f[e.optional[S]];\n _(H, a[S]);\n }\n f.propsReady !== void 0 && _(f.propsReady, !0);\n }\n function d(f) {\n return s.reduce((a, S) => (a[S] = (H) => {\n const y = f[e.methods[S]];\n _(y, H);\n }, a), {});\n }\n function m(f) {\n return i.reduce((a, S) => (a[S] = yo(f[e.events[S]]), a), {});\n }\n const v = E.forwardRef(function(a, S) {\n const { children: H, ...y } = a, [O] = E.useState(() => ye(Ro(t), (C) => {\n c(C, y);\n })), [u] = E.useState(mn(m, O));\n Ie(() => {\n for (const C of i)\n C in y && Y(u[C], y[C]);\n return () => {\n Object.values(u).map(Ne);\n };\n }, [y, u, O]), Ie(() => {\n c(O, y);\n }), E.useImperativeHandle(S, fn(d(O)));\n const g = n;\n return /* @__PURE__ */ G(l.Provider, { value: O, children: n !== void 0 ? /* @__PURE__ */ G(g, { ...cr([...o, ...r, ...i], y), children: H }) : H });\n }), p = (f) => {\n const a = E.useContext(l);\n return E.useCallback(\n (S) => {\n _(a[f], S);\n },\n [a, f]\n );\n }, I = (f) => {\n const S = E.useContext(l)[f], H = E.useCallback(\n (y) => Y(S, y),\n [S]\n );\n return E.useSyncExternalStore(\n H,\n () => it(S),\n () => it(S)\n );\n }, w = (f) => {\n const S = E.useContext(l)[f], [H, y] = E.useState(mn(it, S));\n return Ie(\n () => Y(S, (O) => {\n O !== H && y(fn(O));\n }),\n [S, H]\n ), H;\n }, R = parseInt(E.version) >= 18 ? I : w;\n return {\n Component: v,\n useEmitter: (f, a) => {\n const H = E.useContext(l)[f];\n Ie(() => Y(H, a), [a, H]);\n },\n useEmitterValue: R,\n usePublisher: p\n };\n}\nconst Re = E.createContext(void 0), io = E.createContext(void 0), Oe = \"-webkit-sticky\", Rn = \"sticky\", Je = ro(() => {\n if (typeof document > \"u\")\n return Rn;\n const t = document.createElement(\"div\");\n return t.style.position = Oe, t.style.position === Oe ? Oe : Rn;\n}), lo = typeof document < \"u\" ? E.useLayoutEffect : E.useEffect;\nfunction ke(t) {\n return \"self\" in t;\n}\nfunction ur(t) {\n return \"body\" in t;\n}\nfunction co(t, e, n, o = Jt, r, s) {\n const i = E.useRef(null), l = E.useRef(null), c = E.useRef(null), d = E.useCallback(\n (p) => {\n let I, w, R;\n const h = p.target;\n if (ur(h) || ke(h)) {\n const a = ke(h) ? h : h.defaultView;\n R = s === !0 ? _t(a, a.scrollX) : a.scrollY, I = s === !0 ? a.document.documentElement.scrollWidth : a.document.documentElement.scrollHeight, w = s === !0 ? a.innerWidth : a.innerHeight;\n } else\n R = s === !0 ? _t(h, h.scrollLeft) : h.scrollTop, I = s === !0 ? h.scrollWidth : h.scrollHeight, w = s === !0 ? h.offsetWidth : h.offsetHeight;\n const f = () => {\n t({\n scrollHeight: I,\n scrollTop: Math.max(R, 0),\n viewportHeight: w\n });\n };\n p.suppressFlushSync === !0 ? f() : So.flushSync(f), l.current !== null && (R === l.current || R <= 0 || R === I - w) && (l.current = null, e(!0), c.current && (clearTimeout(c.current), c.current = null));\n },\n [t, e, s]\n );\n E.useEffect(() => {\n const p = r || i.current;\n return hn(p), o(r || i.current), d({ suppressFlushSync: !0, target: p }), p.addEventListener(\"scroll\", d, { passive: !0 }), () => {\n hn(p), o(null), p.removeEventListener(\"scroll\", d);\n };\n }, [i, d, n, o, r]);\n function m(p) {\n const I = i.current;\n if (!I || (s === !0 ? \"offsetWidth\" in I && I.offsetWidth === 0 : \"offsetHeight\" in I && I.offsetHeight === 0))\n return;\n const w = p.behavior === \"smooth\";\n let R, h, f;\n ke(I) ? (h = Math.max(\n Ht(I.document.documentElement, s === !0 ? \"width\" : \"height\"),\n s === !0 ? I.document.documentElement.scrollWidth : I.document.documentElement.scrollHeight\n ), R = s === !0 ? I.innerWidth : I.innerHeight, f = s === !0 ? _t(I, I.scrollX) : I.scrollY) : (h = I[s === !0 ? \"scrollWidth\" : \"scrollHeight\"], R = Ht(I, s === !0 ? \"width\" : \"height\"), f = s === !0 ? _t(I, I.scrollLeft) : I.scrollTop);\n const a = h - R;\n if (p.top === void 0) {\n I.scrollTo(p);\n return;\n }\n const S = Math.ceil(Math.max(Math.min(a, p.top), 0));\n if (p.top = S, Jn(R, h) || S === f) {\n t({ scrollHeight: h, scrollTop: f, viewportHeight: R }), w && e(!0);\n return;\n }\n w ? (l.current = S, c.current && clearTimeout(c.current), c.current = setTimeout(() => {\n c.current = null, l.current = null, e(!0);\n }, 1e3)) : l.current = null, s === !0 && (p = {\n ...p.behavior !== void 0 ? { behavior: p.behavior } : {},\n left: gn(I, S)\n }), I.scrollTo(p);\n }\n function v(p) {\n s === !0 && (p = {\n ...p.behavior !== void 0 ? { behavior: p.behavior } : {},\n ...p.top !== void 0 ? { left: gn(i.current, p.top) } : {}\n }), i.current.scrollBy(p);\n }\n return { scrollByCallback: v, scrollerRef: i, scrollToCallback: m };\n}\nfunction Qe(t) {\n return t;\n}\nconst ar = /* @__PURE__ */ j(() => {\n const t = T((l) => `Item ${l}`), e = T((l) => `Group ${l}`), n = T({}), o = T(Qe), r = T(\"div\"), s = T(Jt), i = (l, c = null) => ht(\n x(\n n,\n B((d) => d[l]),\n nt()\n ),\n c\n );\n return {\n components: n,\n computeItemKey: o,\n EmptyPlaceholder: i(\"EmptyPlaceholder\"),\n FooterComponent: i(\"Footer\"),\n GroupComponent: i(\"Group\", \"div\"),\n groupContent: e,\n HeaderComponent: i(\"Header\"),\n HeaderFooterTag: r,\n ItemComponent: i(\"Item\", \"div\"),\n itemContent: t,\n ListComponent: i(\"List\", \"div\"),\n ScrollerComponent: i(\"Scroller\", \"div\"),\n scrollerRef: s,\n ScrollSeekPlaceholder: i(\"ScrollSeekPlaceholder\"),\n TopItemListComponent: i(\"TopItemList\")\n };\n}), dr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(so, ar)\n), fr = ({ height: t }) => /* @__PURE__ */ G(\"div\", { style: { height: t } }), mr = { overflowAnchor: \"none\", position: Je(), zIndex: 1 }, uo = { overflowAnchor: \"none\" }, pr = { ...uo, display: \"inline-block\", height: \"100%\" }, Hn = /* @__PURE__ */ E.memo(function({ showTopList: e = !1 }) {\n const n = A(\"listState\"), o = Ct(\"sizeRanges\"), r = A(\"useWindowScroll\"), s = A(\"customScrollParent\"), i = Ct(\"windowScrollContainerState\"), l = Ct(\"scrollContainerState\"), c = s || r ? i : l, d = A(\"itemContent\"), m = A(\"context\"), v = A(\"groupContent\"), p = A(\"trackItemSizes\"), I = A(\"itemSize\"), w = A(\"log\"), R = Ct(\"gap\"), h = A(\"horizontalDirection\"), { callbackRef: f } = Mn(\n o,\n I,\n p,\n e ? Jt : c,\n w,\n R,\n s,\n h,\n A(\"skipAnimationFrameInResizeObserver\")\n ), [a, S] = E.useState(0);\n on(\"deviation\", (F) => {\n a !== F && S(F);\n });\n const H = A(\"EmptyPlaceholder\"), y = A(\"ScrollSeekPlaceholder\") ?? fr, O = A(\"ListComponent\"), u = A(\"ItemComponent\"), g = A(\"GroupComponent\"), C = A(\"computeItemKey\"), z = A(\"isSeeking\"), L = A(\"groupIndices\").length > 0, V = A(\"alignToBottom\"), N = A(\"initialItemFinalLocationReached\"), Z = e ? {} : {\n boxSizing: \"border-box\",\n ...h ? {\n display: \"inline-block\",\n height: \"100%\",\n marginInlineStart: a !== 0 ? a : V ? \"auto\" : 0,\n paddingInlineEnd: n.offsetBottom,\n paddingInlineStart: n.offsetTop,\n whiteSpace: \"nowrap\"\n } : {\n marginTop: a !== 0 ? a : V ? \"auto\" : 0,\n paddingBottom: n.offsetBottom,\n paddingTop: n.offsetTop\n },\n ...N ? {} : { visibility: \"hidden\" }\n };\n return !e && n.totalCount === 0 && H !== null && H !== void 0 ? /* @__PURE__ */ G(H, { ...ot(H, m) }) : /* @__PURE__ */ G(\n O,\n {\n ...ot(O, m),\n \"data-testid\": e ? \"virtuoso-top-item-list\" : \"virtuoso-item-list\",\n ref: f,\n style: Z,\n children: (e ? n.topItems : n.items).map((F) => {\n const mt = F.originalIndex, q = C(mt + n.firstItemIndex, F.data, m);\n return z ? /* @__PURE__ */ Dt(\n y,\n {\n ...ot(y, m),\n height: F.size,\n index: F.index,\n key: q,\n type: F.type || \"item\",\n ...F.type === \"group\" ? {} : { groupIndex: F.groupIndex }\n }\n ) : F.type === \"group\" ? /* @__PURE__ */ Dt(\n g,\n {\n ...ot(g, m),\n \"data-index\": mt,\n \"data-item-index\": F.index,\n \"data-known-size\": F.size,\n key: q,\n style: mr\n },\n v(F.index, m)\n ) : /* @__PURE__ */ Dt(\n u,\n {\n ...ot(u, m),\n ...ao(u, F.data),\n \"data-index\": mt,\n \"data-item-group-index\": F.groupIndex,\n \"data-item-index\": F.index,\n \"data-known-size\": F.size,\n key: q,\n style: h ? pr : uo\n },\n L ? d(F.index, F.groupIndex, F.data, m) : d(F.index, F.data, m)\n );\n })\n }\n );\n}), hr = {\n height: \"100%\",\n outline: \"none\",\n overflowY: \"auto\",\n position: \"relative\",\n WebkitOverflowScrolling: \"touch\"\n}, gr = {\n outline: \"none\",\n overflowX: \"auto\",\n position: \"relative\"\n}, He = (t) => ({\n height: \"100%\",\n position: \"absolute\",\n top: 0,\n width: \"100%\",\n ...t ? { display: \"flex\", flexDirection: \"column\" } : void 0\n}), tn = (t, e, n = 0) => ({\n ...He(t),\n position: e ? \"relative\" : \"absolute\",\n top: e ? -n : 0\n}), Ir = {\n position: Je(),\n top: 0,\n width: \"100%\",\n zIndex: 1\n};\nfunction ot(t, e) {\n if (typeof t != \"string\")\n return { context: e };\n}\nfunction ao(t, e) {\n return { item: typeof t == \"string\" ? void 0 : e };\n}\nconst Sr = /* @__PURE__ */ E.memo(function() {\n const e = A(\"HeaderComponent\"), n = Ct(\"headerHeight\"), o = A(\"HeaderFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n A(\"skipAnimationFrameInResizeObserver\")\n ), s = A(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), xr = /* @__PURE__ */ E.memo(function() {\n const e = A(\"FooterComponent\"), n = Ct(\"footerHeight\"), o = A(\"HeaderFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n A(\"skipAnimationFrameInResizeObserver\")\n ), s = A(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n});\nfunction en({ useEmitter: t, useEmitterValue: e, usePublisher: n }) {\n return E.memo(function({ children: s, style: i, context: l, ...c }) {\n const d = n(\"scrollContainerState\"), m = e(\"ScrollerComponent\"), v = n(\"smoothScrollTargetReached\"), p = e(\"scrollerRef\"), I = e(\"horizontalDirection\") || !1, { scrollByCallback: w, scrollerRef: R, scrollToCallback: h } = co(\n d,\n v,\n m,\n p,\n void 0,\n I\n );\n return t(\"scrollTo\", h), t(\"scrollBy\", w), /* @__PURE__ */ G(\n m,\n {\n \"data-testid\": \"virtuoso-scroller\",\n \"data-virtuoso-scroller\": !0,\n ref: R,\n style: { ...I ? gr : hr, ...i },\n tabIndex: 0,\n ...c,\n ...ot(m, l),\n children: s\n }\n );\n });\n}\nfunction nn({ useEmitter: t, useEmitterValue: e, usePublisher: n }) {\n return E.memo(function({ children: s, style: i, context: l, ...c }) {\n const d = n(\"windowScrollContainerState\"), m = e(\"ScrollerComponent\"), v = n(\"smoothScrollTargetReached\"), p = e(\"totalListHeight\"), I = e(\"deviation\"), w = e(\"customScrollParent\"), R = E.useRef(null), h = e(\"scrollerRef\"), { scrollByCallback: f, scrollerRef: a, scrollToCallback: S } = co(\n d,\n v,\n m,\n h,\n w\n );\n return lo(() => (a.current = w || R.current?.ownerDocument.defaultView, () => {\n a.current = null;\n }), [a, w]), t(\"windowScrollTo\", S), t(\"scrollBy\", f), /* @__PURE__ */ G(\n m,\n {\n ref: R,\n \"data-virtuoso-scroller\": !0,\n style: { position: \"relative\", ...i, ...p !== 0 ? { height: p + I } : void 0 },\n ...c,\n ...ot(m, l),\n children: s\n }\n );\n });\n}\nconst vr = ({ children: t }) => {\n const e = E.useContext(Re), n = Ct(\"viewportHeight\"), o = Ct(\"fixedItemHeight\"), r = A(\"alignToBottom\"), s = A(\"horizontalDirection\"), i = E.useMemo(\n () => re(n, (c) => Ht(c, s ? \"width\" : \"height\")),\n [n, s]\n ), l = Ot(i, !0, A(\"skipAnimationFrameInResizeObserver\"));\n return E.useEffect(() => {\n e && (n(e.viewportHeight), o(e.itemHeight));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"element\", ref: l, style: He(r), children: t });\n}, Tr = ({ children: t }) => {\n const e = E.useContext(Re), n = Ct(\"windowViewportRect\"), o = Ct(\"fixedItemHeight\"), r = A(\"customScrollParent\"), s = A(\"useWindowScroll\"), i = A(\"topListHeight\"), l = $e(\n n,\n r,\n A(\"skipAnimationFrameInResizeObserver\")\n ), c = A(\"alignToBottom\");\n return E.useEffect(() => {\n e && (o(e.itemHeight), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: 100 }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"window\", ref: l, style: tn(c, s, i), children: t });\n}, Cr = ({ children: t }) => {\n const e = A(\"TopItemListComponent\") ?? \"div\", n = A(\"headerHeight\"), o = { ...Ir, marginTop: `${n}px` }, r = A(\"context\");\n return /* @__PURE__ */ G(e, { style: o, ...ot(e, r), children: t });\n}, wr = /* @__PURE__ */ E.memo(function(e) {\n const n = A(\"useWindowScroll\"), o = A(\"topItemsIndexes\").length > 0, r = A(\"customScrollParent\"), s = A(\"context\");\n return /* @__PURE__ */ $t(r || n ? br : yr, { ...e, context: s, children: [\n o && /* @__PURE__ */ G(Cr, { children: /* @__PURE__ */ G(Hn, { showTopList: !0 }) }),\n /* @__PURE__ */ $t(r || n ? Tr : vr, { children: [\n /* @__PURE__ */ G(Sr, {}),\n /* @__PURE__ */ G(Hn, {}),\n /* @__PURE__ */ G(xr, {})\n ] })\n ] });\n}), {\n Component: fo,\n useEmitter: on,\n useEmitterValue: A,\n usePublisher: Ct\n} = /* @__PURE__ */ Xe(\n dr,\n {\n optional: {\n restoreStateFrom: \"restoreStateFrom\",\n context: \"context\",\n followOutput: \"followOutput\",\n scrollIntoViewOnChange: \"scrollIntoViewOnChange\",\n itemContent: \"itemContent\",\n groupContent: \"groupContent\",\n overscan: \"overscan\",\n increaseViewportBy: \"increaseViewportBy\",\n minOverscanItemCount: \"minOverscanItemCount\",\n totalCount: \"totalCount\",\n groupCounts: \"groupCounts\",\n topItemCount: \"topItemCount\",\n firstItemIndex: \"firstItemIndex\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n components: \"components\",\n atBottomThreshold: \"atBottomThreshold\",\n atTopThreshold: \"atTopThreshold\",\n computeItemKey: \"computeItemKey\",\n defaultItemHeight: \"defaultItemHeight\",\n fixedGroupHeight: \"fixedGroupHeight\",\n // Must be set above 'fixedItemHeight'\n fixedItemHeight: \"fixedItemHeight\",\n heightEstimates: \"heightEstimates\",\n itemSize: \"itemSize\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n headerFooterTag: \"HeaderFooterTag\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n initialScrollTop: \"initialScrollTop\",\n alignToBottom: \"alignToBottom\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\",\n horizontalDirection: \"horizontalDirection\",\n skipAnimationFrameInResizeObserver: \"skipAnimationFrameInResizeObserver\"\n },\n methods: {\n scrollToIndex: \"scrollToIndex\",\n scrollIntoView: \"scrollIntoView\",\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n autoscrollToBottom: \"autoscrollToBottom\",\n getState: \"getState\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n totalListHeightChanged: \"totalListHeightChanged\",\n itemsRendered: \"itemsRendered\",\n groupIndices: \"groupIndices\"\n }\n },\n wr\n), yr = /* @__PURE__ */ en({ useEmitter: on, useEmitterValue: A, usePublisher: Ct }), br = /* @__PURE__ */ nn({ useEmitter: on, useEmitterValue: A, usePublisher: Ct }), ns = fo, os = fo, Rr = /* @__PURE__ */ j(() => {\n const t = T((d) => /* @__PURE__ */ $t(\"td\", { children: [\n \"Item $\",\n d\n ] })), e = T(null), n = T((d) => /* @__PURE__ */ $t(\"td\", { colSpan: 1e3, children: [\n \"Group \",\n d\n ] })), o = T(null), r = T(null), s = T({}), i = T(Qe), l = T(Jt), c = (d, m = null) => ht(\n x(\n s,\n B((v) => v[d]),\n nt()\n ),\n m\n );\n return {\n components: s,\n computeItemKey: i,\n context: e,\n EmptyPlaceholder: c(\"EmptyPlaceholder\"),\n FillerRow: c(\"FillerRow\"),\n fixedFooterContent: r,\n fixedHeaderContent: o,\n itemContent: t,\n groupContent: n,\n ScrollerComponent: c(\"Scroller\", \"div\"),\n scrollerRef: l,\n ScrollSeekPlaceholder: c(\"ScrollSeekPlaceholder\"),\n TableBodyComponent: c(\"TableBody\", \"tbody\"),\n TableComponent: c(\"Table\", \"table\"),\n TableFooterComponent: c(\"TableFoot\", \"tfoot\"),\n TableHeadComponent: c(\"TableHead\", \"thead\"),\n TableRowComponent: c(\"TableRow\", \"tr\"),\n GroupComponent: c(\"Group\", \"tr\")\n };\n}), Hr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(so, Rr)\n), Er = ({ height: t }) => /* @__PURE__ */ G(\"tr\", { children: /* @__PURE__ */ G(\"td\", { style: { height: t } }) }), Br = ({ height: t }) => /* @__PURE__ */ G(\"tr\", { children: /* @__PURE__ */ G(\"td\", { style: { border: 0, height: t, padding: 0 } }) }), Lr = { overflowAnchor: \"none\" }, En = { position: Je(), zIndex: 2, overflowAnchor: \"none\" }, Bn = /* @__PURE__ */ E.memo(function({ showTopList: e = !1 }) {\n const n = M(\"listState\"), o = M(\"computeItemKey\"), r = M(\"firstItemIndex\"), s = M(\"context\"), i = M(\"isSeeking\"), l = M(\"fixedHeaderHeight\"), c = M(\"groupIndices\").length > 0, d = M(\"itemContent\"), m = M(\"groupContent\"), v = M(\"ScrollSeekPlaceholder\") ?? Er, p = M(\"GroupComponent\"), I = M(\"TableRowComponent\"), w = (e ? n.topItems : []).reduce((h, f, a) => (a === 0 ? h.push(f.size) : h.push(h[a - 1] + f.size), h), []);\n return (e ? n.topItems : n.items).map((h) => {\n const f = h.originalIndex, a = o(f + r, h.data, s), S = e ? f === 0 ? 0 : w[f - 1] : 0;\n return i ? /* @__PURE__ */ Dt(\n v,\n {\n ...ot(v, s),\n height: h.size,\n index: h.index,\n key: a,\n type: h.type || \"item\"\n }\n ) : h.type === \"group\" ? /* @__PURE__ */ Dt(\n p,\n {\n ...ot(p, s),\n \"data-index\": f,\n \"data-item-index\": h.index,\n \"data-known-size\": h.size,\n key: a,\n style: {\n ...En,\n top: l\n }\n },\n m(h.index, s)\n ) : /* @__PURE__ */ Dt(\n I,\n {\n ...ot(I, s),\n ...ao(I, h.data),\n \"data-index\": f,\n \"data-item-index\": h.index,\n \"data-known-size\": h.size,\n \"data-item-group-index\": h.groupIndex,\n key: a,\n style: e ? { ...En, top: l + S } : Lr\n },\n c ? d(h.index, h.groupIndex, h.data, s) : d(h.index, h.data, s)\n );\n });\n}), Or = /* @__PURE__ */ E.memo(function() {\n const e = M(\"listState\"), n = M(\"topItemsIndexes\").length > 0, o = bt(\"sizeRanges\"), r = M(\"useWindowScroll\"), s = M(\"customScrollParent\"), i = bt(\"windowScrollContainerState\"), l = bt(\"scrollContainerState\"), c = s || r ? i : l, d = M(\"trackItemSizes\"), m = M(\"itemSize\"), v = M(\"log\"), { callbackRef: p, ref: I } = Mn(\n o,\n m,\n d,\n c,\n v,\n void 0,\n s,\n !1,\n M(\"skipAnimationFrameInResizeObserver\")\n ), [w, R] = E.useState(0);\n rn(\"deviation\", (L) => {\n w !== L && (I.current.style.marginTop = `${L}px`, R(L));\n });\n const h = M(\"EmptyPlaceholder\"), f = M(\"FillerRow\") ?? Br, a = M(\"TableBodyComponent\"), S = M(\"paddingTopAddition\"), H = M(\"statefulTotalCount\"), y = M(\"context\");\n if (H === 0 && h !== null && h !== void 0)\n return /* @__PURE__ */ G(h, { ...ot(h, y) });\n const O = (n ? e.topItems : []).reduce((L, V) => L + V.size, 0), u = e.offsetTop + S + w - O, g = e.offsetBottom, C = u > 0 ? /* @__PURE__ */ G(f, { context: y, height: u }, \"padding-top\") : null, z = g > 0 ? /* @__PURE__ */ G(f, { context: y, height: g }, \"padding-bottom\") : null;\n return /* @__PURE__ */ $t(a, { \"data-testid\": \"virtuoso-item-list\", ref: p, ...ot(a, y), children: [\n C,\n n && /* @__PURE__ */ G(Bn, { showTopList: !0 }),\n /* @__PURE__ */ G(Bn, {}),\n z\n ] });\n}), kr = ({ children: t }) => {\n const e = E.useContext(Re), n = bt(\"viewportHeight\"), o = bt(\"fixedItemHeight\"), r = Ot(\n E.useMemo(() => re(n, (s) => Ht(s, \"height\")), [n]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n );\n return E.useEffect(() => {\n e && (n(e.viewportHeight), o(e.itemHeight));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"element\", ref: r, style: He(!1), children: t });\n}, zr = ({ children: t }) => {\n const e = E.useContext(Re), n = bt(\"windowViewportRect\"), o = bt(\"fixedItemHeight\"), r = M(\"customScrollParent\"), s = M(\"useWindowScroll\"), i = $e(\n n,\n r,\n M(\"skipAnimationFrameInResizeObserver\")\n );\n return E.useEffect(() => {\n e && (o(e.itemHeight), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: 100 }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"window\", ref: i, style: tn(!1, s), children: t });\n}, Fr = /* @__PURE__ */ E.memo(function(e) {\n const n = M(\"useWindowScroll\"), o = M(\"customScrollParent\"), r = bt(\"fixedHeaderHeight\"), s = bt(\"fixedFooterHeight\"), i = M(\"fixedHeaderContent\"), l = M(\"fixedFooterContent\"), c = M(\"context\"), d = Ot(\n E.useMemo(() => re(r, (a) => Ht(a, \"height\")), [r]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n ), m = Ot(\n E.useMemo(() => re(s, (a) => Ht(a, \"height\")), [s]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n ), v = o || n ? Wr : Vr, p = o || n ? zr : kr, I = M(\"TableComponent\"), w = M(\"TableHeadComponent\"), R = M(\"TableFooterComponent\"), h = i ? /* @__PURE__ */ G(\n w,\n {\n ref: d,\n style: { position: \"sticky\", top: 0, zIndex: 2 },\n ...ot(w, c),\n children: i()\n },\n \"TableHead\"\n ) : null, f = l ? /* @__PURE__ */ G(\n R,\n {\n ref: m,\n style: { bottom: 0, position: \"sticky\", zIndex: 1 },\n ...ot(R, c),\n children: l()\n },\n \"TableFoot\"\n ) : null;\n return /* @__PURE__ */ G(v, { ...e, ...ot(v, c), children: /* @__PURE__ */ G(p, { children: /* @__PURE__ */ $t(I, { style: { borderSpacing: 0, overflowAnchor: \"none\" }, ...ot(I, c), children: [\n h,\n /* @__PURE__ */ G(Or, {}, \"TableBody\"),\n f\n ] }) }) });\n}), {\n Component: mo,\n useEmitter: rn,\n useEmitterValue: M,\n usePublisher: bt\n} = /* @__PURE__ */ Xe(\n Hr,\n {\n optional: {\n restoreStateFrom: \"restoreStateFrom\",\n context: \"context\",\n followOutput: \"followOutput\",\n firstItemIndex: \"firstItemIndex\",\n itemContent: \"itemContent\",\n groupContent: \"groupContent\",\n fixedHeaderContent: \"fixedHeaderContent\",\n fixedFooterContent: \"fixedFooterContent\",\n overscan: \"overscan\",\n increaseViewportBy: \"increaseViewportBy\",\n minOverscanItemCount: \"minOverscanItemCount\",\n totalCount: \"totalCount\",\n topItemCount: \"topItemCount\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n components: \"components\",\n groupCounts: \"groupCounts\",\n atBottomThreshold: \"atBottomThreshold\",\n atTopThreshold: \"atTopThreshold\",\n computeItemKey: \"computeItemKey\",\n defaultItemHeight: \"defaultItemHeight\",\n fixedGroupHeight: \"fixedGroupHeight\",\n // Must be set above 'fixedItemHeight'\n fixedItemHeight: \"fixedItemHeight\",\n itemSize: \"itemSize\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n initialScrollTop: \"initialScrollTop\",\n alignToBottom: \"alignToBottom\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\"\n },\n methods: {\n scrollToIndex: \"scrollToIndex\",\n scrollIntoView: \"scrollIntoView\",\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n getState: \"getState\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n totalListHeightChanged: \"totalListHeightChanged\",\n itemsRendered: \"itemsRendered\",\n groupIndices: \"groupIndices\"\n }\n },\n Fr\n), Vr = /* @__PURE__ */ en({ useEmitter: rn, useEmitterValue: M, usePublisher: bt }), Wr = /* @__PURE__ */ nn({ useEmitter: rn, useEmitterValue: M, usePublisher: bt }), rs = mo, ss = mo, Ln = {\n bottom: 0,\n itemHeight: 0,\n items: [],\n itemWidth: 0,\n offsetBottom: 0,\n offsetTop: 0,\n top: 0\n}, Pr = {\n bottom: 0,\n itemHeight: 0,\n items: [{ index: 0 }],\n itemWidth: 0,\n offsetBottom: 0,\n offsetTop: 0,\n top: 0\n}, { ceil: On, floor: Ce, max: oe, min: ze, round: kn } = Math;\nfunction zn(t, e, n) {\n return Array.from({ length: e - t + 1 }).map((o, r) => ({ data: n === null ? null : n[r + t], index: r + t }));\n}\nfunction Gr(t) {\n return {\n ...Pr,\n items: t\n };\n}\nfunction Se(t, e) {\n return t !== void 0 && t.width === e.width && t.height === e.height;\n}\nfunction Ar(t, e) {\n return t !== void 0 && t.column === e.column && t.row === e.row;\n}\nconst Mr = /* @__PURE__ */ j(\n ([\n { increaseViewportBy: t, listBoundary: e, overscan: n, visibleRange: o },\n { footerHeight: r, headerHeight: s, scrollBy: i, scrollContainerState: l, scrollTo: c, scrollTop: d, smoothScrollTargetReached: m, viewportHeight: v },\n p,\n I,\n { didMount: w, propsReady: R },\n { customScrollParent: h, useWindowScroll: f, windowScrollContainerState: a, windowScrollTo: S, windowViewportRect: H },\n y\n ]) => {\n const O = T(0), u = T(0), g = T(Ln), C = T({ height: 0, width: 0 }), z = T({ height: 0, width: 0 }), L = U(), V = U(), N = T(0), Z = T(null), F = T({ column: 0, row: 0 }), mt = U(), q = U(), Q = T(!1), gt = T(0), ut = T(!0), St = T(!1), Ft = T(!1);\n Y(\n x(\n w,\n $(gt),\n P(([b, D]) => D !== 0)\n ),\n () => {\n _(ut, !1);\n }\n ), Y(\n x(\n at(w, ut, z, C, gt, St),\n P(([b, D, K, st, , tt]) => b && !D && K.height !== 0 && st.height !== 0 && !tt)\n ),\n ([, , , , b]) => {\n _(St, !0), je(1, () => {\n _(L, b);\n }), yt(x(d), () => {\n _(e, [0, 0]), _(ut, !0);\n });\n }\n ), k(\n x(\n q,\n P((b) => b != null && b.scrollTop > 0),\n Bt(0)\n ),\n u\n ), Y(\n x(\n w,\n $(q),\n P(([, b]) => b != null)\n ),\n ([, b]) => {\n b && (_(C, b.viewport), _(z, b.item), _(F, b.gap), b.scrollTop > 0 && (_(Q, !0), yt(x(d, Ut(1)), (D) => {\n _(Q, !1);\n }), _(c, { top: b.scrollTop })));\n }\n ), k(\n x(\n C,\n B(({ height: b }) => b)\n ),\n v\n ), k(\n x(\n at(\n W(C, Se),\n W(z, Se),\n W(F, (b, D) => b !== void 0 && b.column === D.column && b.row === D.row),\n W(d)\n ),\n B(([b, D, K, st]) => ({\n gap: K,\n item: D,\n scrollTop: st,\n viewport: b\n }))\n ),\n mt\n ), k(\n x(\n at(\n W(O),\n o,\n W(F, Ar),\n W(z, Se),\n W(C, Se),\n W(Z),\n W(u),\n W(Q),\n W(ut),\n W(gt)\n ),\n P(([, , , , , , , b]) => !b),\n B(\n ([\n b,\n [D, K],\n st,\n tt,\n X,\n lt,\n xt,\n ,\n ct,\n Vt\n ]) => {\n const { column: Wt, row: ee } = st, { height: he, width: Ee } = tt, { width: sn } = X;\n if (xt === 0 && (b === 0 || sn === 0))\n return Ln;\n if (Ee === 0) {\n const dn = qe(Vt, b), Io = dn + Math.max(xt - 1, 0);\n return Gr(zn(dn, Io, lt));\n }\n const ge = po(sn, Ee, Wt);\n let qt, Mt;\n ct ? D === 0 && K === 0 && xt > 0 ? (qt = 0, Mt = xt - 1) : (qt = ge * Ce((D + ee) / (he + ee)), Mt = ge * On((K + ee) / (he + ee)) - 1, Mt = ze(b - 1, oe(Mt, ge - 1)), qt = ze(Mt, oe(0, qt))) : (qt = 0, Mt = -1);\n const ln = zn(qt, Mt, lt), { bottom: cn, top: un } = Fn(X, st, tt, ln), an = On(b / ge), go = an * he + (an - 1) * ee - cn;\n return { bottom: cn, itemHeight: he, items: ln, itemWidth: Ee, offsetBottom: go, offsetTop: un, top: un };\n }\n )\n ),\n g\n ), k(\n x(\n Z,\n P((b) => b !== null),\n B((b) => b.length)\n ),\n O\n ), k(\n x(\n at(C, z, g, F),\n P(([b, D, { items: K }]) => K.length > 0 && D.height !== 0 && b.height !== 0),\n B(([b, D, { items: K }, st]) => {\n const { bottom: tt, top: X } = Fn(b, st, D, K);\n return [X, tt];\n }),\n nt(le)\n ),\n e\n );\n const pt = T(!1);\n k(\n x(\n d,\n $(pt),\n B(([b, D]) => D || b !== 0)\n ),\n pt\n );\n const jt = Tt(\n x(\n at(g, O),\n P(([{ items: b }]) => b.length > 0),\n $(pt),\n P(([[b, D], K]) => {\n const tt = b.items[b.items.length - 1].index === D - 1;\n return (K || b.bottom > 0 && b.itemHeight > 0 && b.offsetBottom === 0 && b.items.length === D) && tt;\n }),\n B(([[, b]]) => b - 1),\n nt()\n )\n ), Qt = Tt(\n x(\n W(g),\n P(({ items: b }) => b.length > 0 && b[0].index === 0),\n Bt(0),\n nt()\n )\n ), Et = Tt(\n x(\n W(g),\n $(Q),\n P(([{ items: b }, D]) => b.length > 0 && !D),\n B(([{ items: b }]) => ({\n endIndex: b[b.length - 1].index,\n startIndex: b[0].index\n })),\n nt(Kn),\n zt(0)\n )\n );\n k(Et, I.scrollSeekRangeChanged), k(\n x(\n L,\n $(C, z, O, F),\n B(([b, D, K, st, tt]) => {\n const X = Xn(b), { align: lt, behavior: xt, offset: ct } = X;\n let Vt = X.index;\n Vt === \"LAST\" && (Vt = st - 1), Vt = oe(0, Vt, ze(st - 1, Vt));\n let Wt = Me(D, tt, K, Vt);\n return lt === \"end\" ? Wt = kn(Wt - D.height + K.height) : lt === \"center\" && (Wt = kn(Wt - D.height / 2 + K.height / 2)), ct !== void 0 && ct !== 0 && (Wt += ct), { behavior: xt, top: Wt };\n })\n ),\n c\n );\n const te = ht(\n x(\n g,\n B((b) => b.offsetBottom + b.bottom)\n ),\n 0\n );\n return k(\n x(\n H,\n B((b) => ({ height: b.visibleHeight, width: b.visibleWidth }))\n ),\n C\n ), {\n customScrollParent: h,\n // input\n data: Z,\n deviation: N,\n footerHeight: r,\n gap: F,\n headerHeight: s,\n increaseViewportBy: t,\n initialItemCount: u,\n itemDimensions: z,\n overscan: n,\n restoreStateFrom: q,\n scrollBy: i,\n scrollContainerState: l,\n scrollHeight: V,\n scrollTo: c,\n scrollToIndex: L,\n scrollTop: d,\n smoothScrollTargetReached: m,\n totalCount: O,\n useWindowScroll: f,\n viewportDimensions: C,\n windowScrollContainerState: a,\n windowScrollTo: S,\n windowViewportRect: H,\n ...I,\n // output\n gridState: g,\n horizontalDirection: Ft,\n initialTopMostItemIndex: gt,\n totalListHeight: te,\n ...p,\n endReached: jt,\n propsReady: R,\n rangeChanged: Et,\n startReached: Qt,\n stateChanged: mt,\n stateRestoreInProgress: Q,\n ...y\n };\n },\n rt(Ye, It, pe, oo, At, Ze, Gt)\n);\nfunction po(t, e, n) {\n return oe(1, Ce((t + n) / (Ce(e) + n)));\n}\nfunction Fn(t, e, n, o) {\n const { height: r } = n;\n if (r === void 0 || o.length === 0)\n return { bottom: 0, top: 0 };\n const s = Me(t, e, n, o[0].index);\n return { bottom: Me(t, e, n, o[o.length - 1].index) + r, top: s };\n}\nfunction Me(t, e, n, o) {\n const r = po(t.width, n.width, e.column), s = Ce(o / r), i = s * n.height + oe(0, s - 1) * e.row;\n return i > 0 ? i + e.row : i;\n}\nconst _r = /* @__PURE__ */ j(() => {\n const t = T((v) => `Item ${v}`), e = T({}), n = T(null), o = T(\"virtuoso-grid-item\"), r = T(\"virtuoso-grid-list\"), s = T(Qe), i = T(\"div\"), l = T(Jt), c = (v, p = null) => ht(\n x(\n e,\n B((I) => I[v]),\n nt()\n ),\n p\n ), d = T(!1), m = T(!1);\n return k(W(m), d), {\n components: e,\n computeItemKey: s,\n context: n,\n FooterComponent: c(\"Footer\"),\n HeaderComponent: c(\"Header\"),\n headerFooterTag: i,\n itemClassName: o,\n ItemComponent: c(\"Item\", \"div\"),\n itemContent: t,\n listClassName: r,\n ListComponent: c(\"List\", \"div\"),\n readyStateChanged: d,\n reportReadyState: m,\n ScrollerComponent: c(\"Scroller\", \"div\"),\n scrollerRef: l,\n ScrollSeekPlaceholder: c(\"ScrollSeekPlaceholder\", \"div\")\n };\n}), Nr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(Mr, _r)\n), Dr = /* @__PURE__ */ E.memo(function() {\n const e = et(\"gridState\"), n = et(\"listClassName\"), o = et(\"itemClassName\"), r = et(\"itemContent\"), s = et(\"computeItemKey\"), i = et(\"isSeeking\"), l = wt(\"scrollHeight\"), c = et(\"ItemComponent\"), d = et(\"ListComponent\"), m = et(\"ScrollSeekPlaceholder\"), v = et(\"context\"), p = wt(\"itemDimensions\"), I = wt(\"gap\"), w = et(\"log\"), R = et(\"stateRestoreInProgress\"), h = wt(\"reportReadyState\"), f = Ot(\n E.useMemo(\n () => (a) => {\n const S = a.parentElement.parentElement.scrollHeight;\n l(S);\n const H = a.firstChild;\n if (H !== null) {\n const { height: y, width: O } = H.getBoundingClientRect();\n p({ height: y, width: O });\n }\n I({\n column: Vn(\"column-gap\", getComputedStyle(a).columnGap, w),\n row: Vn(\"row-gap\", getComputedStyle(a).rowGap, w)\n });\n },\n [l, p, I, w]\n ),\n !0,\n !1\n );\n return lo(() => {\n e.itemHeight > 0 && e.itemWidth > 0 && h(!0);\n }, [e]), R ? null : /* @__PURE__ */ G(\n d,\n {\n className: n,\n ref: f,\n ...ot(d, v),\n \"data-testid\": \"virtuoso-item-list\",\n style: { paddingBottom: e.offsetBottom, paddingTop: e.offsetTop },\n children: e.items.map((a) => {\n const S = s(a.index, a.data, v);\n return i ? /* @__PURE__ */ G(\n m,\n {\n ...ot(m, v),\n height: e.itemHeight,\n index: a.index,\n width: e.itemWidth\n },\n S\n ) : /* @__PURE__ */ Dt(\n c,\n {\n ...ot(c, v),\n className: o,\n \"data-index\": a.index,\n key: S\n },\n r(a.index, a.data, v)\n );\n })\n }\n );\n}), $r = E.memo(function() {\n const e = et(\"HeaderComponent\"), n = wt(\"headerHeight\"), o = et(\"headerFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n !1\n ), s = et(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), Ur = E.memo(function() {\n const e = et(\"FooterComponent\"), n = wt(\"footerHeight\"), o = et(\"headerFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n !1\n ), s = et(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), Kr = ({ children: t }) => {\n const e = E.useContext(io), n = wt(\"itemDimensions\"), o = wt(\"viewportDimensions\"), r = Ot(\n E.useMemo(\n () => (s) => {\n o(s.getBoundingClientRect());\n },\n [o]\n ),\n !0,\n !1\n );\n return E.useEffect(() => {\n e && (o({ height: e.viewportHeight, width: e.viewportWidth }), n({ height: e.itemHeight, width: e.itemWidth }));\n }, [e, o, n]), /* @__PURE__ */ G(\"div\", { ref: r, style: He(!1), children: t });\n}, jr = ({ children: t }) => {\n const e = E.useContext(io), n = wt(\"windowViewportRect\"), o = wt(\"itemDimensions\"), r = et(\"customScrollParent\"), s = et(\"useWindowScroll\"), i = $e(n, r, !1);\n return E.useEffect(() => {\n e && (o({ height: e.itemHeight, width: e.itemWidth }), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: e.viewportWidth }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { ref: i, style: tn(!1, s), children: t });\n}, qr = /* @__PURE__ */ E.memo(function({ ...e }) {\n const n = et(\"useWindowScroll\"), o = et(\"customScrollParent\"), r = o || n ? Xr : Zr, s = o || n ? jr : Kr, i = et(\"context\");\n return /* @__PURE__ */ G(r, { ...e, ...ot(r, i), children: /* @__PURE__ */ $t(s, { children: [\n /* @__PURE__ */ G($r, {}),\n /* @__PURE__ */ G(Dr, {}),\n /* @__PURE__ */ G(Ur, {})\n ] }) });\n}), {\n Component: Yr,\n useEmitter: ho,\n useEmitterValue: et,\n usePublisher: wt\n} = /* @__PURE__ */ Xe(\n Nr,\n {\n optional: {\n context: \"context\",\n totalCount: \"totalCount\",\n overscan: \"overscan\",\n itemContent: \"itemContent\",\n components: \"components\",\n computeItemKey: \"computeItemKey\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n headerFooterTag: \"headerFooterTag\",\n listClassName: \"listClassName\",\n itemClassName: \"itemClassName\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\",\n restoreStateFrom: \"restoreStateFrom\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n increaseViewportBy: \"increaseViewportBy\"\n },\n methods: {\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n scrollToIndex: \"scrollToIndex\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n stateChanged: \"stateChanged\",\n readyStateChanged: \"readyStateChanged\"\n }\n },\n qr\n), Zr = /* @__PURE__ */ en({ useEmitter: ho, useEmitterValue: et, usePublisher: wt }), Xr = /* @__PURE__ */ nn({ useEmitter: ho, useEmitterValue: et, usePublisher: wt });\nfunction Vn(t, e, n) {\n return e !== \"normal\" && e?.endsWith(\"px\") !== !0 && n(`${t} was not resolved to pixel value correctly`, e, ft.WARN), e === \"normal\" ? 0 : parseInt(e ?? \"0\", 10);\n}\nconst is = Yr;\nexport {\n ss as GroupedTableVirtuoso,\n os as GroupedVirtuoso,\n ft as LogLevel,\n rs as TableVirtuoso,\n ns as Virtuoso,\n is as VirtuosoGrid,\n io as VirtuosoGridMockContext,\n Re as VirtuosoMockContext\n};\n","\nimport { useState } from 'react'\nimport { AlertCircle, Check, ChevronLeft, ChevronRight, ListChecks, Loader2, MessageCircleQuestion } from 'lucide-react'\nimport { useRelayStore } from '@/store'\nimport { FormattedBody } from '@/components/shared/formatted-body'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Textarea } from '@/components/ui/textarea'\nimport type { ProviderPendingApproval, ProviderQuestion } from '@/lib/display'\nimport { cn } from '@/lib/utils'\n\nexport function PermissionRequestBubble({ agentId, approval }: { agentId: string; approval?: ProviderPendingApproval }) {\n const sendPermissionDecision = useRelayStore((s) => s.sendPermissionDecision)\n const [submitting, setSubmitting] = useState<string | null>(null)\n if (!approval) return null\n if (approval.questions && approval.questions.length) {\n return <QuestionForm agentId={agentId} approval={approval} questions={approval.questions} />\n }\n const currentApproval = approval\n const choices = approval.choices.length ? approval.choices : [\n { id: 'approve' as const, label: 'Approve' },\n { id: 'deny' as const, label: 'Deny' },\n ]\n\n async function choose(choice: typeof choices[number]) {\n if (submitting) return\n setSubmitting(choice.id)\n try {\n await sendPermissionDecision(agentId, currentApproval.id, choice.id)\n } finally {\n setSubmitting(null)\n }\n }\n\n const isPlan = approval.kind === 'plan'\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"max-w-[92%] md:max-w-[78%] rounded-2xl rounded-bl-sm bg-card ring-1 ring-amber-500/35 px-3.5 py-3 text-sm\">\n <div className=\"flex items-start gap-2\">\n {isPlan ? <ListChecks className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-400\" /> : <AlertCircle className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-400\" />}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium text-amber-100\">{approval.title}</div>\n {approval.body && (isPlan\n ? <div className=\"mt-2 max-h-72 overflow-auto rounded-md bg-background/60 p-2.5 text-xs leading-relaxed\"><FormattedBody text={approval.body} rawBody={approval.body} className=\"leading-relaxed\" /></div>\n : <pre className=\"mt-2 max-h-44 overflow-auto whitespace-pre-wrap break-words rounded-md bg-background/80 p-2 font-mono text-xs leading-relaxed text-muted-foreground\">{approval.body}</pre>)}\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {choices.map((choice) => (\n <Button\n key={choice.id}\n size=\"sm\"\n variant={choice.id === 'deny' || choice.id === 'abort' ? 'outline' : 'default'}\n disabled={Boolean(submitting)}\n onClick={() => void choose(choice)}\n className=\"h-7 px-2 text-xs\"\n >\n {submitting === choice.id && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n {choice.label}\n </Button>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\ninterface QState { labels: string[]; other: string; otherActive: boolean }\n\nfunction questionAnswered(s: QState | undefined): boolean {\n if (!s) return false\n if (s.otherActive && s.other.trim()) return true\n return s.labels.length > 0\n}\n\nfunction answerValue(s: QState): string {\n const parts = [...s.labels]\n if (s.otherActive && s.other.trim()) parts.push(s.other.trim())\n return parts.join(', ')\n}\n\n// Renders a Claude AskUserQuestion as a sequential form (one question at a\n// time). Collects all answers, then submits a single 'answer' decision that the\n// runner turns into a PreToolUse allow + updatedInput so the tool completes.\nfunction QuestionForm({ agentId, approval, questions }: { agentId: string; approval: ProviderPendingApproval; questions: ProviderQuestion[] }) {\n const sendPermissionDecision = useRelayStore((s) => s.sendPermissionDecision)\n const [step, setStep] = useState(0)\n const [state, setState] = useState<Record<number, QState>>({})\n const [submitting, setSubmitting] = useState<null | 'answer' | 'dismiss'>(null)\n\n const q = questions[Math.min(step, questions.length - 1)]\n const cur = state[step]\n if (!q) return null\n const multi = Boolean(q.multiSelect)\n const total = questions.length\n const isLast = step === total - 1\n const answered = questionAnswered(cur)\n const allAnswered = questions.every((_, i) => questionAnswered(state[i]))\n const busy = Boolean(submitting)\n\n function update(patch: Partial<QState>) {\n setState((prev) => {\n const base: QState = prev[step] ?? { labels: [], other: '', otherActive: false }\n return { ...prev, [step]: { ...base, ...patch } }\n })\n }\n function pickOption(label: string) {\n if (multi) {\n const has = cur?.labels.includes(label)\n update({ labels: has ? (cur?.labels ?? []).filter((l) => l !== label) : [...(cur?.labels ?? []), label] })\n } else {\n update({ labels: [label], otherActive: false })\n }\n }\n function pickOther() {\n if (multi) update({ otherActive: !cur?.otherActive })\n else update({ labels: [], otherActive: true })\n }\n\n async function submit() {\n if (!allAnswered || busy) return\n setSubmitting('answer')\n try {\n const answers: Record<string, string> = {}\n questions.forEach((qq, i) => { const s = state[i]; if (s) answers[qq.question] = answerValue(s) })\n await sendPermissionDecision(agentId, approval.id, 'answer', answers)\n } finally { setSubmitting(null) }\n }\n async function dismiss() {\n if (busy) return\n setSubmitting('dismiss')\n try { await sendPermissionDecision(agentId, approval.id, 'deny') } finally { setSubmitting(null) }\n }\n\n const otherActive = Boolean(cur?.otherActive)\n\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"w-full max-w-[92%] md:max-w-[78%] rounded-2xl rounded-bl-sm bg-card ring-1 ring-amber-500/35 px-3.5 py-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <MessageCircleQuestion className=\"h-4 w-4 shrink-0 text-amber-400\" />\n <div className=\"text-sm font-medium text-amber-100\">{approval.title}</div>\n {total > 1 && (\n <Badge variant=\"outline\" className=\"ml-auto h-5 px-1.5 text-[10px] text-muted-foreground\">{step + 1} / {total}</Badge>\n )}\n </div>\n\n <div className=\"mt-3\">\n {q.header && <div className=\"text-[11px] font-semibold uppercase tracking-wide text-amber-300/80\">{q.header}</div>}\n <div className=\"mt-0.5 text-sm text-foreground whitespace-pre-wrap break-words\">{q.question}</div>\n {multi && <div className=\"mt-0.5 text-[11px] text-muted-foreground\">Select all that apply</div>}\n\n <div className=\"mt-2 flex flex-col gap-1.5\">\n {q.options.map((opt) => {\n const selected = Boolean(cur?.labels.includes(opt.label))\n return (\n <button\n key={opt.label}\n type=\"button\"\n disabled={busy}\n onClick={() => pickOption(opt.label)}\n className={cn(\n 'flex items-start gap-2 rounded-lg border px-2.5 py-2 text-left transition-colors',\n selected ? 'border-amber-500/60 bg-amber-500/10' : 'border-border bg-background/60 hover:bg-background',\n busy && 'opacity-60',\n )}\n >\n <span className={cn(\n 'mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center border text-amber-300',\n multi ? 'rounded' : 'rounded-full',\n selected ? 'border-amber-400 bg-amber-400/20' : 'border-muted-foreground/40',\n )}>\n {selected && <Check className=\"h-3 w-3\" />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"text-sm text-foreground\">{opt.label}</span>\n {opt.description && <span className=\"block text-xs text-muted-foreground\">{opt.description}</span>}\n </span>\n </button>\n )\n })}\n\n <button\n type=\"button\"\n disabled={busy}\n onClick={pickOther}\n className={cn(\n 'flex items-start gap-2 rounded-lg border px-2.5 py-2 text-left transition-colors',\n otherActive ? 'border-amber-500/60 bg-amber-500/10' : 'border-border bg-background/60 hover:bg-background',\n busy && 'opacity-60',\n )}\n >\n <span className={cn(\n 'mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center border text-amber-300',\n multi ? 'rounded' : 'rounded-full',\n otherActive ? 'border-amber-400 bg-amber-400/20' : 'border-muted-foreground/40',\n )}>\n {otherActive && <Check className=\"h-3 w-3\" />}\n </span>\n <span className=\"text-sm text-foreground\">Other…</span>\n </button>\n {otherActive && (\n <Textarea\n autoFocus\n rows={2}\n disabled={busy}\n value={cur?.other ?? ''}\n onChange={(e) => update({ other: e.target.value, otherActive: true })}\n placeholder=\"Type your answer\"\n className=\"mt-1 text-sm\"\n />\n )}\n </div>\n </div>\n\n <div className=\"mt-3 flex items-center gap-1.5\">\n {step > 0 && (\n <Button size=\"sm\" variant=\"outline\" disabled={busy} onClick={() => setStep((s) => s - 1)} className=\"h-7 px-2 text-xs\">\n <ChevronLeft className=\"mr-1 h-3 w-3\" />Back\n </Button>\n )}\n {!isLast ? (\n <Button size=\"sm\" disabled={busy || !answered} onClick={() => setStep((s) => s + 1)} className=\"h-7 px-2 text-xs\">\n Next<ChevronRight className=\"ml-1 h-3 w-3\" />\n </Button>\n ) : (\n <Button size=\"sm\" disabled={busy || !allAnswered} onClick={() => void submit()} className=\"h-7 px-2 text-xs\">\n {submitting === 'answer' && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n Send answer{total > 1 ? 's' : ''}\n </Button>\n )}\n <Button size=\"sm\" variant=\"ghost\" disabled={busy} onClick={() => void dismiss()} className=\"ml-auto h-7 px-2 text-xs text-muted-foreground\">\n {submitting === 'dismiss' && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n Dismiss\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { ArrowDownToLine, Loader2, MessageSquare } from 'lucide-react'\nimport { Virtuoso, type VirtuosoHandle } from 'react-virtuoso'\nimport { Button } from '@/components/ui/button'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport type { ProviderPendingApproval } from '@/lib/display'\nimport { useRelayStore } from '@/store'\nimport { MessageBubble } from './MessageBubble'\nimport { PermissionRequestBubble } from './AskQuestionForm'\nimport {\n AgentActionEntry,\n ActivityTrace,\n BusyIndicator,\n CreatedMarker,\n DateSeparator,\n ImportedHistoryMarker,\n ImportedMessageBubble,\n InitialPromptBubble,\n NoticePill,\n RelayInjectionRow,\n StatusMarker,\n} from './TraceView'\nimport { type TimelineEntry, timelineEntryKey } from './sessionTrace'\nimport { cn } from '@/lib/utils'\n\nconst FIRST_ITEM_INDEX_BASE = 1_000_000\n\n// Per-agent scroll memory, keyed by agentId. The key={agentId} remount (see the note on the\n// Virtuoso element) intentionally gives each agent a clean component instance, which also wipes\n// scroll state — so switching back always snapped to the bottom. This module-level map outlives\n// the remount and lets a fresh mount restore whether the user was end-sticky or, if they were\n// reading history, the row that was at the top of their viewport (#517). Module scope (not the\n// store slice) keeps it entirely within this component's concern and avoids a store-type change.\nconst agentScrollMemory = new Map<string, { stick: boolean; topKey: string | null }>()\n\n// Horizontal gutter lives on the ROWS, not the Virtuoso scroller. Virtuoso sizes\n// its inner list to the scroller's padding-box width, so padding on the scroller\n// insets content on the left but is negated on the right — which let justify-end\n// (outbound) bubbles clip against the screen edge. Padding on each row is real.\nconst GUTTER = 'px-3 md:px-4'\n\ninterface TimelineFooterContext {\n agentId: string\n busy: boolean\n pendingApproval?: ProviderPendingApproval\n blockedLabel?: string\n canInterrupt: boolean\n onInterrupt: () => void\n}\n\n// Module-stable component (see footerContext note in VirtualTimeline). Virtuoso reconciles\n// its custom components by function identity, so this MUST NOT be recreated per-render or the\n// pending-approval form it hosts remounts and loses the user's in-progress selection. Dynamic\n// values arrive via Virtuoso's `context` prop. The PermissionRequestBubble is keyed by the\n// approval id so it remounts only on a genuinely new prompt, not on every poll/SSE refresh.\nfunction TimelineFooter({ context }: { context?: TimelineFooterContext }) {\n if (!context) return null\n const { agentId, busy, pendingApproval, blockedLabel, canInterrupt, onInterrupt } = context\n const showBusy = busy && !pendingApproval\n if (!pendingApproval && !showBusy) return null\n // pb gives the busy / approval bubble real breathing room above the composer.\n // A margin on the bubble itself is the scroller's LAST-child margin, which\n // browsers collapse at the scroll end (Safari especially) — so it sat flush\n // against the prompt area. Padding on this wrapper is part of its box and\n // always renders, so scrollHeight (and jump-to-latest) clears the bubble too.\n return (\n <div className={`${GUTTER} pb-3 md:pb-4`}>\n {pendingApproval && <PermissionRequestBubble key={pendingApproval.id} agentId={agentId} approval={pendingApproval} />}\n {showBusy && <BusyIndicator blockedLabel={blockedLabel} onInterrupt={canInterrupt ? onInterrupt : undefined} />}\n </div>\n )\n}\n\ninterface VirtualTimelineProps {\n agentId: string\n agentStatus?: string\n timeline: TimelineEntry[]\n hasMore: boolean\n loading: boolean\n loadedInitial: boolean\n showReasoning: boolean\n pendingApproval?: ProviderPendingApproval\n blockedLabel?: string\n canInterrupt: boolean\n // Chat search (#535): the set of matched row keys (highlighted), the current match key\n // (scrolled into view + emphasized), and whether search is active at all.\n searchActive?: boolean\n searchCurrentKey?: string | null\n searchMatchKeys?: Set<string>\n onAtBottomChange?: (atBottom: boolean) => void\n // Lift the Virtuoso scroller element up to ChatPanel so the pinned \"Last prompt\" banner\n // (StickyPromptBanner, rendered as a sibling above this timeline) can observe it (#545).\n onScrollerRef?: (el: HTMLElement | null) => void\n onLoadOlder: () => void\n onInterrupt: () => void\n onOpenReferencedPath: (path: string, line?: number) => void\n onPreviewReferencedPath: (path: string, line?: number, anchor?: DOMRect) => void\n onPreviewReferencedPathEnd: () => void\n}\n\ninterface TimelineAnchor {\n key: string | null\n index: number\n}\n\nfunction anchorForTimeline(timeline: TimelineEntry[]): TimelineAnchor {\n const anchorIndex = timeline.findIndex((entry) => entry.type !== 'date' && entry.type !== 'created')\n const index = anchorIndex >= 0 ? anchorIndex : 0\n const entry = timeline[index]\n return { key: entry ? timelineEntryKey(entry) : null, index }\n}\n\nfunction usePrependFirstItemIndex(agentId: string, timeline: TimelineEntry[]): number {\n const [firstItemIndex, setFirstItemIndex] = useState(() => FIRST_ITEM_INDEX_BASE - timeline.length)\n const previous = useRef<{ agentId: string; anchor: TimelineAnchor }>({\n agentId,\n anchor: anchorForTimeline(timeline),\n })\n\n useLayoutEffect(() => {\n const nextAnchor = anchorForTimeline(timeline)\n const prev = previous.current\n\n setFirstItemIndex((current) => {\n if (prev.agentId !== agentId) return FIRST_ITEM_INDEX_BASE - timeline.length\n if (!prev.anchor.key) return current\n const anchorIndex = timeline.findIndex((entry) => timelineEntryKey(entry) === prev.anchor.key)\n const prependedRows = anchorIndex - prev.anchor.index\n return prependedRows > 0 ? current - prependedRows : current\n })\n\n previous.current = { agentId, anchor: nextAnchor }\n }, [agentId, timeline])\n\n return firstItemIndex\n}\n\nexport function VirtualTimeline({\n agentId,\n agentStatus,\n timeline,\n hasMore,\n loading,\n loadedInitial,\n showReasoning,\n pendingApproval,\n blockedLabel,\n canInterrupt,\n searchActive,\n searchCurrentKey,\n searchMatchKeys,\n onAtBottomChange,\n onScrollerRef,\n onLoadOlder,\n onInterrupt,\n onOpenReferencedPath,\n onPreviewReferencedPath,\n onPreviewReferencedPathEnd,\n}: VirtualTimelineProps) {\n const virtuosoRef = useRef<VirtuosoHandle>(null)\n const scrollerRef = useRef<HTMLElement | null>(null)\n const [atBottom, setAtBottom] = useState(true)\n // Debounced busy state for the footer. agentStatus flips idle→busy→idle rapidly between an\n // agent's tool/narration steps; the raw value would mount/unmount the busy footer on every\n // flip, and each mount/unmount changes the list height → fires totalListHeightChanged → the\n // pin re-scrolls, so the whole chat \"shakes\" through a turn (#510). Going busy shows the\n // footer immediately (responsive), but going idle lingers briefly so a momentary idle between\n // steps doesn't collapse it — the footer stays a stable height for the whole turn and only\n // settles once when the agent is genuinely done.\n const isBusy = agentStatus === 'busy'\n const [stableBusy, setStableBusy] = useState(isBusy)\n useLayoutEffect(() => {\n if (isBusy) {\n setStableBusy(true)\n return\n }\n const timer = setTimeout(() => setStableBusy(false), 600)\n return () => clearTimeout(timer)\n }, [isBusy])\n const firstItemIndex = usePrependFirstItemIndex(agentId, timeline)\n const latestEntry = timeline.length > 0 ? timeline[timeline.length - 1]! : null\n const latestKey = latestEntry ? timelineEntryKey(latestEntry) : null\n // The newest tail entry is the user's OWN just-sent prompt. When you send, you always want\n // to see your prompt (and the response that follows) regardless of where you had scrolled —\n // so this re-arms the stick and forces the settle pin even if you were reading history.\n const latestIsOwnPrompt = (latestEntry?.type === 'message' || latestEntry?.type === 'initial-prompt') && latestEntry.msg.from === HUMAN_AGENT_ID\n\n // Scroll-memory plumbing (#517). The rangeChanged handler records the key of the row at the\n // top of the viewport; refs let it stay a stable callback while reading the live timeline +\n // firstItemIndex (Virtuoso reports range indices in the firstItemIndex-offset space, so the\n // data-array index is range.startIndex - firstItemIndex). On unmount we save {stick, topKey}.\n const timelineRef = useRef(timeline)\n timelineRef.current = timeline\n const firstItemIndexRef = useRef(firstItemIndex)\n firstItemIndexRef.current = firstItemIndex\n const topKeyRef = useRef<string | null>(null)\n const handleRangeChanged = useCallback((range: { startIndex: number }) => {\n const idx = range.startIndex - firstItemIndexRef.current\n const entry = timelineRef.current[idx]\n topKeyRef.current = entry ? timelineEntryKey(entry) : null\n }, [])\n // Compute the initial top-most data index ONCE per mount. If the user was reading history,\n // start Virtuoso at the saved row (no bottom-snap flicker on the cached path); otherwise the\n // usual \"start at the last item\". Resolved against the timeline present at first render — for\n // an uncached chat the row may not be loaded yet, so the restore effect retries on arrival.\n const initialTopIndexRef = useRef<number | null>(null)\n if (initialTopIndexRef.current === null) {\n const saved = agentScrollMemory.get(agentId)\n let idx = -1\n if (saved && !saved.stick && saved.topKey) idx = timeline.findIndex((entry) => timelineEntryKey(entry) === saved.topKey)\n initialTopIndexRef.current = idx >= 0 ? idx : Math.max(0, timeline.length - 1)\n }\n\n const lastSeenAtBottomKey = useRef<string | null>(latestKey)\n const previousAgentId = useRef(agentId)\n if (previousAgentId.current !== agentId) {\n previousAgentId.current = agentId\n lastSeenAtBottomKey.current = latestKey\n }\n const lastSeenIndex = lastSeenAtBottomKey.current\n ? timeline.findIndex((entry) => timelineEntryKey(entry) === lastSeenAtBottomKey.current)\n : -1\n // Count only what the AGENT sent — your own outbound prompt is appended to the\n // tail too, but it isn't \"new\" to you, so counting it made the badge tick up the\n // instant you hit send. Outbound = from HUMAN_AGENT_ID. Notice pills don't count.\n const newTailCount = !atBottom && lastSeenIndex >= 0\n ? timeline.slice(lastSeenIndex + 1).filter((entry) => entry.type === 'message' && entry.msg.from !== HUMAN_AGENT_ID).length\n : 0\n\n useLayoutEffect(() => {\n if (atBottom) lastSeenAtBottomKey.current = latestKey\n }, [atBottom, latestKey])\n\n // Read at-bottom live without making it an effect dependency: the settle below\n // must fire on NEW tail content, not when you happen to scroll near the bottom\n // (which would yank away the atBottomThreshold slack and feel grabby).\n const atBottomRef = useRef(atBottom)\n atBottomRef.current = atBottom\n\n // \"Stick to bottom\" INTENT — gates the settle pin AND followOutput. Starts true per\n // mount (opening a chat shows its latest), and the key={agentId} remount resets it true\n // on every switch. It must NOT be Virtuoso's atBottom state: during a fresh mount the\n // content renders in stages and momentarily leaves us at the TOP (atBottom flips false),\n // which would suppress the very pin that should drive us to the bottom — the exact reason\n // the loop never ran and the tail stayed clipped. It is instead driven by a real-scroll\n // detector (see setScrollerRef): a genuine USER scroll-up releases it, reaching the bottom\n // re-arms it. Crucially it is NOT released by atBottom flipping false, because an in-place\n // row growth (streaming Codex/Claude activity, async Shiki/image/font) flips atBottom false\n // on the same tick it grows — indistinguishable from a scroll-up — and that false release\n // was the #515 jump-to-end-while-scrolled-up bug. hasPinnedRef tracks whether the initial\n // settle has reached the bottom once (used only inside pinToBottom's loop).\n // Initial stick intent is restored from per-agent scroll memory (#517): if the user left this\n // chat reading history, switching back stays unstuck (and the restore effect below returns\n // them to their row) instead of snapping to the bottom. Defaults to true for a never-seen chat.\n const stickToBottomRef = useRef(agentScrollMemory.get(agentId)?.stick ?? true)\n const hasPinnedRef = useRef(false)\n\n // Real-scroll detector state (see setScrollerRef). lastScrollTopRef tracks the previous\n // scrollTop so we can read scroll DIRECTION; programmaticUntilRef marks a short window\n // after our own programmatic scrolls (pins, footer nudges) so they never masquerade as a\n // user scroll-up and release the stick. markProgrammatic is called by every code path that\n // scrolls the list itself.\n const lastScrollTopRef = useRef(0)\n const programmaticUntilRef = useRef(0)\n const markProgrammatic = useCallback(() => {\n programmaticUntilRef.current = performance.now() + 150\n }, [])\n\n // Convergent bottom pin — the ONE routine shared by the agent-switch/append\n // settle and the manual jump button. Off-screen rows are only height-ESTIMATED,\n // so a bare scrollTo(scrollHeight) from far up under-shoots: the real (taller)\n // heights only land as rows render mid-scroll, stranding you mid-conversation.\n // Worst on a fresh key={agentId} mount (agent switch) with tall, height-variable\n // Codex activity rows — those measure LAZILY, so the content height keeps GROWING\n // for several frames after the scroll. A fixed 2-frame settle (the prior fix)\n // stopped before that growth finished and undershot; Claude's shorter rows happen\n // to converge inside 2 frames, which is why it only rouletted on Codex chats.\n //\n // ONE scrollToIndex up front forces Virtuoso to render+measure the true tail — needed\n // when jumping from far up (the manual button), where the last rows aren't in the\n // rendered window and a bare scrollTo(scrollHeight) would target an under-estimated\n // height. Then hard-pin to scrollHeight every frame for the whole settle window.\n //\n // Why pin EVERY frame to a time cap instead of detecting convergence and exiting\n // early: on a fresh key={agentId} mount Virtuoso does a one-time async scroll-anchor\n // reposition that lands the tail ~50px SHORT of the true bottom, and it happens a\n // handful of frames AFTER the size estimate has already gone stable. So ANY early\n // exit — whether it watches scrollHeight stability (the prior fix's trap, and my\n // first pass) or even live position — can declare victory in ~30ms and quit before\n // that late reposition fires, leaving the last message clipped with nothing left to\n // correct it (verified live: the loop ended at dist≈0, then Virtuoso pulled it to 56\n // and it stuck). Re-pinning every frame across the full window simply OVERWRITES that\n // reposition the frame after it happens; the last frame before the cap lands us at\n // the true bottom, and once the mount settles a scrollTo holds there (verified). The\n // cap also guarantees it can never spin forever. scrollToIndex is NOT repeated in the\n // loop — its align:'end' rests ~50px short on a still-settling estimate and re-queues\n // that position each frame, FIGHTING the scrollTo. Always 'auto' (instant): a 'smooth'\n // scroll re-armed each frame never completes and re-arms the streaming jitter we\n // fixed. scrollHeight includes the Footer (busy / pending-approval bubble renders\n // inside the scroller), so the pin clears it too. The big-distance bail respects a\n // user who deliberately flings up mid-window (a reposition is only tens of px, a real\n // scroll is hundreds) without aborting the jump-from-far-up button (whose up-front\n // scrollTo already brought us near the bottom before the loop's first frame). Returns\n // a cleanup that cancels the in-flight loop so a rapid re-fire (streaming tail\n // appends, or a fast double agent-switch) replaces the previous loop, not stacks it.\n const pinToBottom = useCallback(() => {\n markProgrammatic()\n virtuosoRef.current?.scrollToIndex({ index: 'LAST', align: 'end' })\n const MAX_MS = 800\n const USER_SCROLL_BAIL = 300\n const AT_BOTTOM = 64\n const start = performance.now()\n let raf = 0\n let cancelled = false\n let reachedBottom = false\n const step = () => {\n if (cancelled) return\n // Re-read the scroller EVERY frame, never abort on a null one. On a key={agentId}\n // remount with cached data this routine fires (settle effect) BEFORE Virtuoso has\n // mounted its scroller, so scrollerRef is still null on the first frame(s) — the\n // old early `if (!el) return` meant the whole pin silently no-opped on remounts\n // and the tail sat clipped. Spinning until the scroller appears (within the window)\n // and pinning from then on fixes it; the first mount only ever worked because async\n // data load happened to delay this past the scroller mount.\n const el = scrollerRef.current\n if (el) {\n const dist = el.scrollHeight - el.clientHeight - el.scrollTop\n // \"At bottom\" only COUNTS once the conversation has actually loaded — i.e. there\n // is real scrollable content. A chat opens on an empty placeholder whose\n // scrollHeight == clientHeight (zero scroll range): the loop sees dist 0 there and\n // would mark hasPinned, but that's the bottom of NOTHING. Then the real content\n // explodes in, atBottom flips false, and a premature hasPinned releases the stick\n // (misread as a user scroll-up) — leaving the tail clipped on ~40% of switches.\n const hasContent = el.scrollHeight - el.clientHeight > AT_BOTTOM\n if (dist <= AT_BOTTOM && hasContent) {\n reachedBottom = true\n hasPinnedRef.current = true\n }\n // Bail only on a LARGE distance AFTER we've actually pinned to loaded content —\n // that's a user scrolling up. Before then a large distance is just mount churn\n // (content rendering in stages leaves us far from the bottom); bailing there would\n // re-introduce the clipped tail.\n if (reachedBottom && dist > USER_SCROLL_BAIL) return\n markProgrammatic()\n el.scrollTo({ top: el.scrollHeight, behavior: 'auto' })\n }\n if (performance.now() - start > MAX_MS) return\n raf = requestAnimationFrame(step)\n }\n raf = requestAnimationFrame(step)\n return () => {\n cancelled = true\n cancelAnimationFrame(raf)\n }\n }, [markProgrammatic])\n\n // Pin to the measured bottom whenever the tail changes while we're sticking to it:\n // a fresh agent message, your own sent prompt, OR a fresh key={agentId} mount on\n // agent switch (where this effect's first run IS the mount). followOutput /\n // initialTopMostItemIndex only pin to the ESTIMATED height, then the real (taller)\n // content renders and the true bottom drops below the fold — worst on a Codex switch\n // with tall activity rows, which stranded you mid-conversation. pinToBottom drives to\n // the bottom and re-pins across the settle window until lazy measurement finishes.\n // Gated on stickToBottomRef, NOT atBottomRef: on a switch the content renders in\n // stages and atBottom briefly reads false (we're momentarily at the top), which used\n // to suppress this pin entirely on ~30% of switches and leave the tail clipped. stick\n // stays true through that churn and only releases on a genuine user scroll-up (see its\n // note + handleAtBottomChange). Keyed on latestKey only — and latestKey is the turn's\n // FIRST step, so in-place streaming growth doesn't retrigger it; only a genuinely new\n // tail entry (or an agent switch) does. The cleanup cancels an in-flight settle loop.\n useLayoutEffect(() => {\n // Sending your own prompt always re-arms the stick: you want to watch your prompt and the\n // ensuing response land, even if you had scrolled up reading history (#514). The settle\n // loop runs across the layout window, so the prompt is in view by the time it finishes,\n // and the response — a later, separate latestKey change — re-pins while still stuck.\n if (latestIsOwnPrompt) stickToBottomRef.current = true\n if (!stickToBottomRef.current) return\n return pinToBottom()\n }, [latestKey, latestIsOwnPrompt, pinToBottom])\n\n // Restore the saved read position on mount (#517). initialTopMostItemIndex already starts a\n // CACHED chat at the saved row with no flicker; this covers the UNCACHED path, where the row\n // isn't loaded at first render — retry across a short window until it arrives, then land on it.\n // Only runs when the saved state was \"reading history\" (not sticky); the sticky case is driven\n // by the pin settle effect above. Mount-only by design.\n useLayoutEffect(() => {\n const saved = agentScrollMemory.get(agentId)\n if (!saved || saved.stick || !saved.topKey) return\n const targetKey = saved.topKey\n let raf = 0\n const start = performance.now()\n const tryRestore = () => {\n const idx = timelineRef.current.findIndex((entry) => timelineEntryKey(entry) === targetKey)\n if (idx >= 0) {\n markProgrammatic()\n virtuosoRef.current?.scrollToIndex({ index: idx, align: 'start' })\n return\n }\n if (performance.now() - start < 1500) raf = requestAnimationFrame(tryRestore)\n }\n raf = requestAnimationFrame(tryRestore)\n return () => cancelAnimationFrame(raf)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // Persist this agent's scroll state when the component unmounts (an agent switch, via the\n // key={agentId} remount) so switching back can restore it (#517). topKeyRef is the row at the\n // top of the viewport, maintained by handleRangeChanged.\n useEffect(() => {\n return () => {\n agentScrollMemory.set(agentId, { stick: stickToBottomRef.current, topKey: topKeyRef.current })\n }\n }, [agentId])\n\n // The Footer (busy bubble / pending approval) renders BELOW the last data item, and\n // followOutput / totalListHeightChanged only react to DATA rows — the footer is neither, so\n // when it first appears nothing scrolls and the agent can silently look idle (#512). Nudge to\n // the true bottom on appearance, gated on the stick INTENT (not Virtuoso's atBottom, which is\n // unreliable during the churn around a status flip and left the indicator clipped). After\n // sending a prompt the stick is armed (#514), so the busy indicator that follows reliably\n // scrolls in; once the user has scrolled up the stick is clear and we leave them put (#515).\n // A retry across a short window covers the footer mounting a frame or two after the status\n // flip. Keyed on the footer's PRESENCE (status + approval id, never the approval object which\n // is rebuilt every poll) so it fires once on appearance, not on every refresh.\n const approvalId = pendingApproval?.id\n useLayoutEffect(() => {\n if (!stableBusy && !approvalId) return\n if (!stickToBottomRef.current) return\n let raf = 0\n const start = performance.now()\n const nudge = () => {\n const el = scrollerRef.current\n if (el && stickToBottomRef.current) {\n // Only act while there's a real gap below the fold. Re-arming a scroll every frame\n // once we're already at the bottom is wasteful and a re-armed smooth scroll never\n // settles — instant pinning of just the small footer gap reads fine and converges.\n const dist = el.scrollHeight - el.clientHeight - el.scrollTop\n if (dist > 2) {\n markProgrammatic()\n el.scrollTo({ top: el.scrollHeight, behavior: 'auto' })\n }\n }\n if (performance.now() - start < 300) raf = requestAnimationFrame(nudge)\n }\n raf = requestAnimationFrame(nudge)\n return () => cancelAnimationFrame(raf)\n }, [stableBusy, approvalId, markProgrammatic])\n\n // Scroll the current search match into view (#535). User-driven: fires only when the\n // selected match key changes (typing re-anchors to the first match; prev/next move it).\n // Releasing the stick keeps the bottom-pin from immediately yanking the view back down,\n // and markProgrammatic stops this scroll from reading back as a user scroll-up. centre\n // alignment puts the match mid-viewport so surrounding context is visible.\n useLayoutEffect(() => {\n if (!searchActive || !searchCurrentKey) return\n const idx = timelineRef.current.findIndex((entry) => timelineEntryKey(entry) === searchCurrentKey)\n if (idx < 0) return\n stickToBottomRef.current = false\n markProgrammatic()\n virtuosoRef.current?.scrollToIndex({ index: idx, align: 'center' })\n }, [searchActive, searchCurrentKey, markProgrammatic])\n\n // The real-scroll detector lives on the scroller element. A native 'scroll' listener fires\n // for EVERY scroll cause (wheel, touch, scrollbar drag, keyboard) so it captures user intent\n // regardless of input method. We read DIRECTION + position: reaching the bottom re-arms the\n // stick; a genuine user scroll-up away from the bottom releases it. Scrolls WE trigger (pins,\n // footer nudges) are flagged via markProgrammatic and never release the stick — that is what\n // distinguishes a real scroll-up from a programmatic reposition or an in-place growth's\n // scroll-anchor adjustment, the corruption that the old atBottom-derived release suffered.\n const detachScrollDetectorRef = useRef<(() => void) | null>(null)\n const setScrollerRef = useCallback((ref: HTMLElement | Window | null) => {\n const el = ref instanceof HTMLElement ? ref : null\n scrollerRef.current = el\n onScrollerRef?.(el)\n detachScrollDetectorRef.current?.()\n detachScrollDetectorRef.current = null\n if (!el) return\n lastScrollTopRef.current = el.scrollTop\n const onScroll = () => {\n const top = el.scrollTop\n const dist = el.scrollHeight - el.clientHeight - top\n const programmatic = performance.now() < programmaticUntilRef.current\n if (dist <= 64) {\n stickToBottomRef.current = true\n } else if (!programmatic && top < lastScrollTopRef.current - 1) {\n stickToBottomRef.current = false\n }\n lastScrollTopRef.current = top\n }\n el.addEventListener('scroll', onScroll, { passive: true })\n detachScrollDetectorRef.current = () => el.removeEventListener('scroll', onScroll)\n }, [onScrollerRef])\n\n const handleAtBottomChange = useCallback((bottom: boolean) => {\n setAtBottom(bottom)\n // Re-arm the stick when Virtuoso confirms we're at the bottom (belt-and-suspenders with\n // the scroll detector). We deliberately do NOT release the stick here on bottom=false:\n // an in-place row growth flips atBottom false on the same tick it grows, which is\n // indistinguishable from a user scroll-up at this layer and caused the #515 jump. Release\n // is owned solely by the real-scroll detector (setScrollerRef), which reads scroll\n // direction and ignores our own programmatic scrolls.\n if (bottom) stickToBottomRef.current = true\n onAtBottomChange?.(bottom)\n }, [onAtBottomChange])\n\n const handleStartReached = useCallback(() => {\n if (!hasMore || loading) return\n onLoadOlder()\n }, [hasMore, loading, onLoadOlder])\n\n const jumpToLatest = useCallback(() => {\n lastSeenAtBottomKey.current = latestKey\n // Same convergent pin as the settle effect. The button can land far up a tall\n // Codex chat where lazy measurement is heaviest, so it needs the converge-to-\n // settled-height loop exactly as much as the agent switch does (iPad Safari first\n // exposed the undershoot here; Android's continuous re-measure on manual drag hid\n // it). Instant, not smooth: a per-frame re-armed smooth scroll never completes on\n // growing content — the convergent snap is the robust choice and reads fine.\n stickToBottomRef.current = true\n pinToBottom()\n }, [latestKey, pinToBottom])\n\n const Header = useMemo(() => {\n return function TimelineHeader() {\n return (\n <div className={GUTTER}>\n <TimelineStartMarker hasMore={hasMore} loading={loading} loadedInitial={loadedInitial} hasItems={timeline.length > 0} />\n </div>\n )\n }\n }, [hasMore, loadedInitial, loading, timeline])\n\n // Keep the Footer component identity module-stable (TimelineFooter) and pass the dynamic\n // values through Virtuoso's context. pendingApproval gets a fresh object reference on every\n // poll/SSE refresh (providerPendingApproval rebuilds it, no upstream memo); recreating the\n // Footer closure on that churn made Virtuoso remount the approval form and discard the user's\n // selection ~1s after they clicked. Context updates re-render the footer without remounting.\n const footerContext = useMemo<TimelineFooterContext>(\n () => ({ agentId, busy: stableBusy, pendingApproval, blockedLabel, canInterrupt, onInterrupt }),\n [agentId, stableBusy, blockedLabel, canInterrupt, onInterrupt, pendingApproval],\n )\n\n const EmptyPlaceholder = useMemo(() => {\n return function TimelineEmptyPlaceholder() {\n return (\n <div className=\"flex h-full flex-col items-center justify-center text-center\">\n {loading ? <Loader2 className=\"mb-2 h-5 w-5 animate-spin text-muted-foreground\" /> : <MessageSquare className=\"mb-2 h-8 w-8 text-zinc-600\" />}\n <p className=\"text-xs text-muted-foreground\">{loading ? 'Loading messages' : 'No messages yet'}</p>\n </div>\n )\n }\n }, [loading])\n\n const components = useMemo(() => ({ Header, Footer: TimelineFooter, EmptyPlaceholder }), [EmptyPlaceholder, Header])\n\n return (\n <div className=\"relative min-h-0 flex-1\">\n {/*\n key={agentId} is KEPT (not swapped for a mounted-Virtuoso + scrollToIndex-on-switch).\n Each agent's timeline is entirely different data with per-agent computeItemKeys, so a\n mounted instance reuses zero measurement cache across a switch anyway — the only thing\n keeping it mounted would buy is avoiding the remount, at the cost of having to manually\n reset scroll position, firstItemIndex anchoring, and atBottom state on every agentId\n change (cross-agent state bleed is exactly the kind of bug this view has fought before).\n The remount gives a clean slate for free; the roulette was never the remount, it was the\n fixed-frame settle — now convergent (pinToBottom), which makes the clean-mount path solid.\n */}\n <Virtuoso\n key={agentId}\n ref={virtuosoRef}\n scrollerRef={setScrollerRef}\n className=\"h-full py-3 md:py-4\"\n // Clip horizontal overflow so a bubble can never make the chat scroll sideways past\n // the screen edge. Virtuoso only sets overflowY inline, so this takes effect; code\n // blocks/tables already scroll internally, so nothing meaningful is clipped.\n // Horizontal padding is on the rows (GUTTER), not here — see GUTTER note above.\n // overscrollBehavior contain stops iOS Safari's rubber-band overscroll at the\n // top/bottom from chaining to the page and bouncing back — that bounce fought\n // Virtuoso's programmatic positioning at the bottom (the \"vibrating\" jitter).\n style={{ height: '100%', overflowX: 'hidden', overscrollBehavior: 'contain' }}\n context={footerContext}\n data={timeline}\n firstItemIndex={firstItemIndex}\n // Restored read position for a cached chat (#517) — defaults to the last item (bottom).\n initialTopMostItemIndex={initialTopIndexRef.current ?? Math.max(0, timeline.length - 1)}\n computeItemKey={(_, entry) => timelineEntryKey(entry)}\n rangeChanged={handleRangeChanged}\n itemContent={(index, entry) => {\n // Search highlight is applied at the ROW level (a ring around the matched\n // content), never inside the message renderer — keeps formatted-body untouched\n // while still flagging every hit and emphasizing the current one.\n const key = searchActive ? timelineEntryKey(entry) : ''\n const isMatch = searchActive && searchMatchKeys?.has(key)\n const isCurrent = isMatch && key === searchCurrentKey\n // Avatar grouping (#420 Tier B): show on the LAST bubble of a consecutive same-sender\n // run so the avatar anchors visually to the newest message in the run (iMessage style).\n // Compare against the next entry's sender — a different sender (or a non-message next\n // entry) ends the run and the avatar appears on this bubble.\n const dataIndex = index - firstItemIndex\n const msgSender = (entry.type === 'message' || entry.type === 'initial-prompt') ? entry.msg.from : null\n const nextEntry = timeline[dataIndex + 1]\n const nextSender = (nextEntry?.type === 'message' || nextEntry?.type === 'initial-prompt') ? nextEntry.msg.from : null\n const showAvatar = msgSender !== null && msgSender !== nextSender\n return (\n <div className={GUTTER}>\n <div\n className={cn(\n isMatch && 'rounded-xl ring-1 ring-amber-400/40 transition-shadow',\n isCurrent && 'ring-2 ring-amber-400 bg-amber-400/5',\n )}\n >\n <TimelineRow\n entry={entry}\n agentId={agentId}\n showReasoning={showReasoning}\n showAvatar={showAvatar}\n onOpenReferencedPath={onOpenReferencedPath}\n onPreviewReferencedPath={onPreviewReferencedPath}\n onPreviewReferencedPathEnd={onPreviewReferencedPathEnd}\n />\n </div>\n </div>\n )\n }}\n components={components}\n startReached={handleStartReached}\n atBottomStateChange={handleAtBottomChange}\n atBottomThreshold={64}\n // Driven by the stick INTENT, not Virtuoso's momentary isAtBottom. isAtBottom is\n // corrupted the instant a tall entry appends or grows (it flips false on the same tick\n // the new content lands, before the follow scroll runs), which intermittently dropped\n // the follow and left a fresh message/activity-step/status entry just below the fold —\n // exactly the \"not reliably sticky\" gap #518 targets. stickToBottomRef stays true\n // through that churn (released only by a genuine user scroll-up via the detector), so\n // every appended entry type follows into view while at the bottom, and none follows\n // once the user has scrolled up.\n //\n // 'auto' (instant), NOT 'smooth': react-virtuoso documents that a smooth follow\n // animation can't keep up with rapidly appended content — each new chunk restarts\n // the animation. On iOS Safari that perpetual programmatic scroll fought OS momentum\n // and pinned the layer in a low-res composited state (the \"vibrating + blurry\" bug).\n // Instant pinning settles each frame, so the layer rasterizes sharp and stays put.\n followOutput={() => (stickToBottomRef.current ? 'auto' : false)}\n // followOutput only reacts to item APPENDS — not to an existing row growing\n // taller after mount (async Shiki syntax-highlight / image load / web-font swap,\n // common in tall Codex activity rows). When that late growth lands while we're\n // at the bottom, the true bottom drops below the fold and nothing follows it —\n // this is the residual ~50–90px clip that survived every fixed-window settle:\n // the growth can finish just past any time cap, and the prior fix's 2-frame\n // settle never even looked this late. totalListHeightChanged fires from Virtuoso\n // on EVERY measured-height change, so re-pinning here catches late growth at any\n // time, with no arbitrary window.\n //\n // Gated on the stick INTENT (the real-scroll detector keeps it correct through\n // growth — see stickToBottomRef) AND a small distance. The distance check stays as a\n // second guard so even with stick true we only re-pin a growth-sized drop, never a\n // large jump. Previously this was gated on distance ALONE (≤240px), which yanked a\n // user who had scrolled up only 64–240px to the bottom on every streaming step — the\n // #515 jump-while-scrolled-up bug. With the intent gate, a deliberate scroll-up clears\n // the stick and these height changes leave the viewport untouched; at the bottom the\n // stick stays armed and late growth still scrolls into view. The own scrollTo is\n // flagged programmatic so it can't feed back into the detector as a scroll-up.\n totalListHeightChanged={() => {\n if (!stickToBottomRef.current) return\n const el = scrollerRef.current\n if (!el) return\n const dist = el.scrollHeight - el.clientHeight - el.scrollTop\n if (dist >= 0 && dist <= 240) {\n markProgrammatic()\n el.scrollTo({ top: el.scrollHeight, behavior: 'auto' })\n }\n }}\n increaseViewportBy={{ top: 600, bottom: 600 }}\n />\n {!atBottom && timeline.length > 0 && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n className=\"absolute bottom-3 right-4 z-20 h-8 gap-1.5 rounded-full border border-border/70 bg-background/95 px-3 text-xs shadow-lg backdrop-blur\"\n onClick={jumpToLatest}\n >\n <ArrowDownToLine className=\"h-3.5 w-3.5\" />\n Latest\n {newTailCount > 0 && (\n <span className=\"ml-0.5 min-w-4 rounded-full bg-primary px-1.5 py-0.5 text-[10px] font-medium leading-none text-primary-foreground\">\n {newTailCount > 99 ? '99+' : newTailCount}\n </span>\n )}\n </Button>\n )}\n </div>\n )\n}\n\nfunction TimelineStartMarker({ hasMore, loading, loadedInitial, hasItems }: { hasMore: boolean; loading: boolean; loadedInitial: boolean; hasItems: boolean }) {\n if (loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 pb-3 text-xs text-muted-foreground\">\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n <span>Loading earlier messages</span>\n </div>\n )\n }\n if (!hasMore && loadedInitial && hasItems) {\n return (\n <div className=\"flex items-center justify-center gap-2 pb-3 text-xs text-muted-foreground/70\">\n <div className=\"h-px flex-1 bg-border\" />\n <span>Beginning of conversation</span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n }\n return null\n}\n\nfunction TimelineRow({\n entry,\n agentId,\n showReasoning,\n showAvatar,\n onOpenReferencedPath,\n onPreviewReferencedPath,\n onPreviewReferencedPathEnd,\n}: {\n entry: TimelineEntry\n agentId: string\n showReasoning: boolean\n showAvatar: boolean\n onOpenReferencedPath: (path: string, line?: number) => void\n onPreviewReferencedPath: (path: string, line?: number, anchor?: DOMRect) => void\n onPreviewReferencedPathEnd: () => void\n}) {\n // Per-project #NNN linkify (#533): the conversation peer's resolved project repo, shared\n // across all non-MessageBubble rows (MessageBubble resolves it itself from `peer`).\n const issueRepo = useRelayStore((s) => s.agentsById[agentId]?.issueRepo)\n if (entry.type === 'message') {\n return (\n <MessageBubble\n msg={entry.msg}\n peer={agentId}\n showAvatar={showAvatar}\n onOpenReferencedPath={onOpenReferencedPath}\n onPreviewReferencedPath={onPreviewReferencedPath}\n onPreviewReferencedPathEnd={onPreviewReferencedPathEnd}\n />\n )\n }\n if (entry.type === 'initial-prompt') return <InitialPromptBubble msg={entry.msg} issueRepo={issueRepo} />\n if (entry.type === 'notice') return <NoticePill msg={entry.msg} />\n if (entry.type === 'relay-injection') return <RelayInjectionRow entry={entry} />\n if (entry.type === 'agent-action') return <AgentActionEntry entry={entry} />\n if (entry.type === 'activity') return <ActivityTrace steps={entry.steps} showReasoning={showReasoning} issueRepo={issueRepo} />\n if (entry.type === 'import-boundary') return <ImportedHistoryMarker history={entry.history} />\n if (entry.type === 'imported-message') return <ImportedMessageBubble entry={entry.entry} sourceLabel={entry.history.sourceAgentLabel || entry.history.sourcePeerId} issueRepo={issueRepo} />\n if (entry.type === 'status') return <StatusMarker event={entry.event} />\n if (entry.type === 'date') return <DateSeparator date={entry.date} />\n return <CreatedMarker timestamp={entry.timestamp} />\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n ArrowLeft,\n CircleStop,\n Download,\n Eraser,\n Flag,\n FolderOpen,\n GitFork,\n MailOpen,\n MailX,\n MessageSquare,\n Minimize2,\n MoreHorizontal,\n Power,\n Terminal,\n Volume2,\n VolumeX,\n X,\n} from 'lucide-react'\nimport { useAgentTerminal } from '@/hooks/use-agent-terminal'\nimport { useRelayStore, useNow } from '@/store'\nimport { AgentRuntimeChips, ContextRing } from '@/components/shared/agent-runtime-summary'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { BranchStateBadge } from '@/components/shared/branch-state-badge'\nimport { CopyButton } from '@/components/shared/copy-button'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { TerminalDialog } from '@/components/shared/terminal-viewer'\nimport { DirectoryContent, FileContent } from '@/components/views/files'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\nimport { api, apiUpload } from '@/lib/api'\nimport { providerSlashCommands } from '@/lib/slash-commands'\nimport type { SlashCommand } from '@/lib/slash-commands'\nimport { micAvailable, PttRecorder, transcribeClip, voiceTts } from '@/lib/voice'\nimport {\n agentSupportsControlAction,\n displayName,\n isReactionEventMessage,\n messageBody,\n messageMatchesAgentChat,\n providerBlockedState,\n shortPath,\n toTimestamp,\n} from '@/lib/display'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport type { Artifact, AttachmentRef, FileStatResult, InboxThread, Message } from '@/types'\nimport { cn } from '@/lib/utils'\nimport { ChatHeader } from './ChatHeader'\nimport { ChatSearchBar } from './ChatSearchBar'\nimport { Composer } from './Composer'\nimport { FloatingFilePreview } from './FilePreview'\nimport type { PendingAttachment, ReferencedPathInfo } from './types'\nimport {\n chatTimestamp,\n orchestratorForFilePreview,\n parentPath,\n revokePendingAttachmentUrls,\n resolveChatPlanContext,\n supportsSideFilePreview,\n} from './helpers'\nimport { buildTimeline } from './sessionTrace'\nimport { useAgentStatusEvents } from './hooks/useAgentStatusEvents'\nimport { useBackNavProtection } from './hooks/useBackNavProtection'\nimport { useChatSearch } from './hooks/useChatSearch'\nimport { usePresenceHeartbeat } from './hooks/usePresenceHeartbeat'\nimport { PlanGraphPanel } from './PlanGraphPanel'\nimport { StickyPromptBanner } from './TraceView'\nimport { VirtualTimeline } from './VirtualTimeline'\n\nconst NO_THREAD_HISTORY: Message[] = []\n\n// A human prompt can be captured twice: as a live-session mirror echo\n// (kind:\"session\", type:\"prompt\") and as the relay chat message (kind:\"chat\", from\n// the human). They carry different ids so mergeListById never dedups them. Drop the\n// session echo when a matching human chat message exists — keeping the chat message,\n// which carries delivery/read receipts — so only one prompt bubble renders (#520).\nconst PROMPT_DEDUP_WINDOW_MS = 15_000\n\nfunction isSessionPromptEcho(msg: Message): boolean {\n return msg.kind === 'session' && (msg.payload?.session as { type?: string } | undefined)?.type === 'prompt'\n}\n\nfunction dedupePromptEcho(messages: Message[]): Message[] {\n const humanPrompts = messages.filter((m) => m.kind === 'chat' && m.from === HUMAN_AGENT_ID)\n if (!humanPrompts.length) return messages\n return messages.filter((m) => {\n if (!isSessionPromptEcho(m) || m.from !== HUMAN_AGENT_ID) return true\n const body = messageBody(m).trim()\n if (!body) return true\n const ts = toTimestamp(m.createdAt)\n return !humanPrompts.some((chat) =>\n messageBody(chat).trim() === body && Math.abs(toTimestamp(chat.createdAt) - ts) <= PROMPT_DEDUP_WINDOW_MS\n )\n })\n}\n\nexport function ChatPanel({ threads, onBack, showBackButton }: { threads: InboxThread[]; onBack?: () => void; showBackButton?: boolean }) {\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const agentsById = useRelayStore((s) => s.agentsById)\n const inboxDrafts = useRelayStore((s) => s.inboxDrafts)\n const now = useNow()\n const sendChatMessage = useRelayStore((s) => s.sendChatMessage)\n const openFilesAt = useRelayStore((s) => s.openFilesAt)\n const openFilesForAgent = useRelayStore((s) => s.openFilesForAgent)\n const openAgentDetail = useRelayStore((s) => s.openAgentDetail)\n const chatSending = useRelayStore((s) => s.chatSending)\n const markInboxThreadRead = useRelayStore((s) => s.markInboxThreadRead)\n const markInboxThreadUnread = useRelayStore((s) => s.markInboxThreadUnread)\n const setReplyDraft = useRelayStore((s) => s.setReplyDraft)\n const exportThread = useRelayStore((s) => s.exportThread)\n const doAgentAction = useRelayStore((s) => s.doAgentAction)\n const workspaceAction = useRelayStore((s) => s.workspaceAction)\n const openWorkspaceFocus = useRelayStore((s) => s.openWorkspaceFocus)\n const forkFromAgent = useRelayStore((s) => s.forkFromAgent)\n const chatHistoryImports = useRelayStore((s) => s.chatHistoryImports)\n const agentChatWindow = useRelayStore((s) => s.agentChatByAgent[s.selectedInboxThread])\n const agentChatMessages = agentChatWindow?.messages ?? NO_THREAD_HISTORY\n const loadOlder = useRelayStore((s) => s.loadOlder)\n const openConfirm = useRelayStore((s) => s.openConfirm)\n const showError = useRelayStore((s) => s.showError)\n const orchestrators = useRelayStore((s) => s.orchestrators)\n const fetchOrchestrators = useRelayStore((s) => s.fetchOrchestrators)\n const showReasoning = useRelayStore((s) => s.showReasoning)\n const voiceTtsEnabled = useRelayStore((s) => s.voiceTtsEnabled)\n const setVoiceTtsEnabled = useRelayStore((s) => s.setVoiceTtsEnabled)\n const voiceInputMode = useRelayStore((s) => s.voiceInputMode)\n const plansByThread = useRelayStore((s) => s.plansByThread)\n\n const fileInputRef = useRef<HTMLInputElement>(null)\n const pttRecorderRef = useRef<PttRecorder | null>(null)\n const [micState, setMicState] = useState<'idle' | 'recording' | 'transcribing'>('idle')\n const pendingAttachmentsRef = useRef<PendingAttachment[]>([])\n const [pendingAttachments, setPendingAttachments] = useState<PendingAttachment[]>([])\n const [dragActive, setDragActive] = useState(false)\n const [filePreview, setFilePreview] = useState<{ orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type'] } | null>(null)\n const [floatingPreview, setFloatingPreview] = useState<{ orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type']; anchor: DOMRect } | null>(null)\n const [filePreviewError, setFilePreviewError] = useState('')\n const filePreviewCloseTimer = useRef<number | null>(null)\n const filePreviewRequest = useRef(0)\n // The Virtuoso scroller element, lifted from VirtualTimeline so the pinned \"Last prompt\"\n // banner (rendered above the timeline) can observe whether the prompt is on-screen (#545).\n const [chatScroller, setChatScroller] = useState<HTMLElement | null>(null)\n const statusEvents = useAgentStatusEvents(selectedInboxThread)\n\n const thread = useMemo(\n () => threads.find((t) => t.peer === selectedInboxThread) || null,\n [threads, selectedInboxThread]\n )\n\n const threadMessages = useMemo(() => {\n const ordered = agentChatMessages\n .filter((message) => messageMatchesAgentChat(selectedInboxThread, message) && !isReactionEventMessage(message))\n .sort((a, b) => a.id - b.id)\n return dedupePromptEcho(ordered)\n }, [agentChatMessages, selectedInboxThread])\n\n const agent = agentsById[selectedInboxThread] || null\n // Pre-session-destroy window (#183): the agent is running end-of-session work before a\n // compact/clear/restart/shutdown and is intentionally non-addressable. Block the composer\n // so a message can't be fired into a session that's tearing down.\n const agentFinalizing = typeof agent?.meta?.lifecycleAction === 'string' && agent.meta.lifecycleAction.startsWith('finalizing-')\n const { terminalOpen, terminalTarget, terminalOpening, openTerminal: handleOpenTerminal, closeTerminal: handleCloseTerminal } = useAgentTerminal(agent?.id)\n const agentSpawnRequestId = typeof agent?.meta?.spawnRequestId === 'string' ? agent.meta.spawnRequestId as string : ''\n const importedHistory = useMemo(() => {\n return chatHistoryImports.filter((history) =>\n history.targetAgentId === selectedInboxThread ||\n Boolean(agentSpawnRequestId && history.targetSpawnRequestId === agentSpawnRequestId)\n )\n }, [agentSpawnRequestId, chatHistoryImports, selectedInboxThread])\n const blockedState = providerBlockedState(agent)\n const pendingApproval = blockedState?.pendingApproval\n const chatThread = useMemo(() => {\n if (!selectedInboxThread) return null\n if (!thread && threadMessages.length === 0) return null\n const lastMessage = threadMessages[threadMessages.length - 1] ?? thread?.lastMessage ?? null\n const previewMessage = thread?.previewMessage && threadMessages.some((message) => message.id === thread.previewMessage?.id)\n ? thread.previewMessage\n : lastMessage\n return {\n id: thread?.id ?? selectedInboxThread,\n peer: selectedInboxThread,\n messages: threadMessages,\n lastMessage,\n previewMessage,\n attention: thread?.attention ?? { unread: 0, needsHumanResponse: false, score: 0 },\n archived: thread?.archived ?? false,\n draft: thread?.draft ?? '',\n }\n }, [selectedInboxThread, thread, threadMessages])\n const exportableThread = chatThread || (importedHistory.length > 0 ? { peer: selectedInboxThread, messages: [], importedHistory } : null)\n const draft = inboxDrafts[selectedInboxThread] || ''\n\n const tmuxSession = typeof agent?.meta?.tmuxSession === 'string' && (agent.meta.tmuxSession as string).trim() ? agent.meta.tmuxSession as string : null\n const termOrch = tmuxSession ? orchestrators.find((o) => (o as any).managedAgents?.some((m: any) => m.agentId === agent!.id || m.tmuxSession === tmuxSession)) ?? null : null\n const canReadTerminal = Boolean(tmuxSession && termOrch?.status === 'online' && agent?.providerCapabilities?.terminal?.live?.read)\n const runtimeProvider = agent?.providerCapabilities?.model?.provider ?? (typeof agent?.meta?.provider === 'string' ? agent.meta.provider : undefined)\n const canWriteTerminal = Boolean(canReadTerminal && (agent?.providerCapabilities?.terminal?.live?.write || runtimeProvider === 'claude'))\n const canAttachTerminal = agent?.providerCapabilities?.terminal?.attach?.create === true\n const canOpenTerminal = canReadTerminal || canAttachTerminal\n const canCompact = agentSupportsControlAction(agent, 'compact')\n const canClearContext = agentSupportsControlAction(agent, 'clearContext')\n const canShutdown = agentSupportsControlAction(agent, 'shutdown')\n const canInterrupt = agentSupportsControlAction(agent, 'interrupt')\n const interruptAgent = () => { if (agent) void doAgentAction(agent, 'interrupt') }\n\n // Slash-command palette (item 6). Derived purely from the draft during render —\n // no effect syncs it. slashClosed lets Escape dismiss until the draft changes.\n const [slashIndex, setSlashIndex] = useState(0)\n const [slashClosed, setSlashClosed] = useState(false)\n const slashEnabled = agent?.providerCapabilities?.liveSession?.slashCommands === true\n const slashProvider = agent?.providerCapabilities?.model?.provider ?? (typeof agent?.meta?.provider === 'string' ? agent.meta.provider : undefined)\n const slashMatches = (slashEnabled && !slashClosed && /^\\/\\S*$/.test(draft))\n ? providerSlashCommands(slashProvider).filter((c) => c.name.toLowerCase().startsWith(draft.toLowerCase()))\n : []\n const slashActiveIndex = slashMatches.length ? Math.min(slashIndex, slashMatches.length - 1) : 0\n function acceptSlash(cmd: SlashCommand) {\n setReplyDraft(selectedInboxThread, `${cmd.name} `)\n setSlashIndex(0)\n }\n function handleDraftChange(value: string) {\n setReplyDraft(selectedInboxThread, value)\n if (slashClosed) setSlashClosed(false)\n setSlashIndex(0)\n }\n const hasPendingUploads = pendingAttachments.some((item) => item.uploading)\n const readyAttachments = pendingAttachments.filter((item) => item.artifact)\n const hasDraft = draft.trim().length > 0 || pendingAttachments.length > 0\n\n // Broadcast our viewer presence on this agent thread (#390): \"I'm viewing / typing\".\n usePresenceHeartbeat(agent?.id ?? '', draft.trim().length > 0)\n\n // Back navigation protection when draft exists\n const handleBackNav = useCallback(() => {\n // Don't navigate away — the draft is protected\n }, [])\n useBackNavProtection(hasDraft, handleBackNav)\n\n pendingAttachmentsRef.current = pendingAttachments\n\n useEffect(() => {\n return () => {\n revokePendingAttachmentUrls(pendingAttachmentsRef.current)\n }\n }, [])\n\n useEffect(() => {\n if (agent?.meta?.tmuxSession && orchestrators.length === 0) void fetchOrchestrators()\n }, [agent?.id, agent?.meta?.tmuxSession, orchestrators.length])\n\n useEffect(() => {\n return () => {\n if (filePreviewCloseTimer.current !== null) window.clearTimeout(filePreviewCloseTimer.current)\n }\n }, [])\n\n const spawnedById = typeof agent?.spawnedBy === 'string' ? agent.spawnedBy : undefined\n const spawnedByProvider = spawnedById ? (agentsById[spawnedById]?.meta?.provider as string | undefined) : undefined\n const timeline = useMemo(\n () => buildTimeline(threadMessages, statusEvents, agent?.createdAt, importedHistory, spawnedById ? { spawnedBy: { agentId: spawnedById, provider: spawnedByProvider } } : undefined),\n [threadMessages, statusEvents, agent?.createdAt, importedHistory, spawnedById, spawnedByProvider]\n )\n const planContext = useMemo(() => {\n return resolveChatPlanContext(agent, threadMessages, chatThread?.lastMessage, plansByThread)\n }, [agent, chatThread?.lastMessage, plansByThread, threadMessages])\n\n const search = useChatSearch(timeline)\n\n const loadOlderForSelectedAgent = useCallback(() => {\n if (!selectedInboxThread || !agentChatWindow?.hasMore || agentChatWindow.loading) return\n void loadOlder(selectedInboxThread)\n }, [agentChatWindow?.hasMore, agentChatWindow?.loading, loadOlder, selectedInboxThread])\n\n const clearFilePreviewCloseTimer = useCallback(() => {\n if (filePreviewCloseTimer.current === null) return\n window.clearTimeout(filePreviewCloseTimer.current)\n filePreviewCloseTimer.current = null\n }, [])\n\n const resolveReferencedFile = useCallback(async (path: string): Promise<ReferencedPathInfo | null> => {\n const orchestrator = orchestratorForFilePreview(orchestrators, path)\n if (!orchestrator) return null\n try {\n const stat = await api<FileStatResult>('GET', `/orchestrators/${encodeURIComponent(orchestrator.id)}/files/stat?path=${encodeURIComponent(path)}`)\n return { orchestratorId: orchestrator.id, path: stat.path, type: stat.type }\n } catch {\n return null\n }\n }, [orchestrators])\n\n // Hover shows a lightweight floating preview anchored to the link — it does\n // not reflow the chat, so the link stays under the cursor.\n const previewReferencedFile = useCallback((path: string, line?: number, anchor?: DOMRect) => {\n if (!supportsSideFilePreview() || !anchor) return\n const request = ++filePreviewRequest.current\n void resolveReferencedFile(path).then((info) => {\n if (filePreviewRequest.current !== request) return\n if (!info) return\n clearFilePreviewCloseTimer()\n setFloatingPreview({ ...info, line: line || 0, anchor })\n setFilePreviewError('')\n })\n }, [clearFilePreviewCloseTimer, resolveReferencedFile])\n\n const scheduleCloseReferencedFilePreview = useCallback(() => {\n filePreviewRequest.current += 1\n clearFilePreviewCloseTimer()\n filePreviewCloseTimer.current = window.setTimeout(() => {\n setFloatingPreview(null)\n }, 250)\n }, [clearFilePreviewCloseTimer])\n\n // Clicking the link commits to the side panel — and dismisses the floating\n // preview so the two never show at once.\n const openReferencedFile = useCallback((path: string, line?: number) => {\n void resolveReferencedFile(path).then((info) => {\n if (!info) {\n showError('File Not Found', path)\n return\n }\n if (supportsSideFilePreview()) {\n filePreviewRequest.current += 1\n clearFilePreviewCloseTimer()\n setFloatingPreview(null)\n setFilePreview({ ...info, line: line || 0 })\n setFilePreviewError('')\n return\n }\n if (info.type === 'directory') void openFilesAt({ orchestratorId: info.orchestratorId, path: info.path, overlay: true })\n else void openFilesAt({ orchestratorId: info.orchestratorId, path: parentPath(info.path), selectedPath: info.path, line, overlay: true })\n })\n }, [clearFilePreviewCloseTimer, openFilesAt, resolveReferencedFile, showError])\n\n function closeFilePreview() {\n setFilePreview(null)\n setFilePreviewError('')\n }\n async function uploadFiles(files: FileList | File[]) {\n const list = Array.from(files).filter((file) => file.size > 0)\n if (!list.length) return\n const pending = list.map((file): PendingAttachment => ({\n id: `${Date.now()}-${file.name}-${Math.random().toString(16).slice(2)}`,\n fileName: file.name,\n size: file.size,\n previewUrl: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined,\n uploading: true,\n }))\n setPendingAttachments((current) => [...current, ...pending])\n\n for (let i = 0; i < list.length; i += 1) {\n const file = list[i]!\n const item = pending[i]!\n try {\n const artifact = await apiUpload<Artifact>('/artifacts', file, {\n filename: file.name,\n sensitivity: 'normal',\n })\n setPendingAttachments((current) => current.map((entry) => entry.id === item.id ? { ...entry, artifact, uploading: false } : entry))\n } catch (e) {\n setPendingAttachments((current) => current.map((entry) => entry.id === item.id ? { ...entry, error: (e as Error).message, uploading: false } : entry))\n }\n }\n }\n\n function removePendingAttachment(id: string) {\n setPendingAttachments((current) => {\n const item = current.find((entry) => entry.id === id)\n if (item?.previewUrl) URL.revokeObjectURL(item.previewUrl)\n return current.filter((entry) => entry.id !== id)\n })\n }\n\n function clearPendingAttachments() {\n revokePendingAttachmentUrls(pendingAttachments)\n setPendingAttachments([])\n }\n\n function handleSend() {\n if ((!draft.trim() && readyAttachments.length === 0) || !selectedInboxThread || chatSending || hasPendingUploads || agentFinalizing) return\n const attachments = readyAttachments.map((item): AttachmentRef => ({\n artifactId: item.artifact!.id,\n kind: item.artifact!.kind,\n role: 'media',\n title: item.artifact!.filename || item.fileName,\n }))\n sendChatMessage(draft, { peer: selectedInboxThread, lastMessage: chatThread?.lastMessage || null }, attachments)\n clearPendingAttachments()\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLTextAreaElement>) {\n if (slashMatches.length) {\n if (e.key === 'ArrowDown') { e.preventDefault(); setSlashIndex((i) => Math.min(i + 1, slashMatches.length - 1)); return }\n if (e.key === 'ArrowUp') { e.preventDefault(); setSlashIndex((i) => Math.max(i - 1, 0)); return }\n if (e.key === 'Escape') { e.preventDefault(); setSlashClosed(true); return }\n if (e.key === 'Enter' || e.key === 'Tab') { e.preventDefault(); const cmd = slashMatches[slashActiveIndex]; if (cmd) acceptSlash(cmd); return }\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSend()\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLTextAreaElement>) {\n const files = Array.from(e.clipboardData.files).filter((file) => file.type.startsWith('image/'))\n if (!files.length) return\n e.preventDefault()\n void uploadFiles(files)\n }\n\n // Push-to-talk. Two behaviours (Settings → Voice input):\n // 'compose' — transcribe into the composer (review, then Enter). The default.\n // 'autosend' — transcribe and send to the agent immediately, hands-light loop.\n async function startPtt() {\n if (!micAvailable || micState !== 'idle' || !selectedInboxThread) return\n voiceTts.bargeIn() // stop any speech while the user talks\n const recorder = new PttRecorder()\n try {\n await recorder.start()\n pttRecorderRef.current = recorder\n setMicState('recording')\n } catch (e) {\n pttRecorderRef.current = null\n setMicState('idle')\n showError('Microphone unavailable', (e as Error)?.message || 'Could not access the microphone.')\n }\n }\n\n async function stopPtt() {\n const recorder = pttRecorderRef.current\n if (!recorder || micState !== 'recording') return\n pttRecorderRef.current = null\n setMicState('transcribing')\n try {\n const clip = await recorder.stop()\n if (!clip) return\n const text = await transcribeClip(clip)\n if (!text) return\n const combined = draft ? `${draft} ${text}` : text\n if (voiceInputMode === 'autosend' && !chatSending && !hasPendingUploads) {\n // Speak-and-send: skip the composer, fire it straight at the agent. The\n // reply auto-speaks (voiceTts.onResponse) and you hold to talk again.\n const attachments = readyAttachments.map((item): AttachmentRef => ({\n artifactId: item.artifact!.id,\n kind: item.artifact!.kind,\n role: 'media',\n title: item.artifact!.filename || item.fileName,\n }))\n sendChatMessage(combined, { peer: selectedInboxThread, lastMessage: chatThread?.lastMessage || null }, attachments)\n clearPendingAttachments()\n } else {\n setReplyDraft(selectedInboxThread, combined)\n }\n } catch (e) {\n showError('Transcription failed', (e as Error)?.message || 'Could not transcribe audio.')\n } finally {\n setMicState('idle')\n }\n }\n\n if (!selectedInboxThread) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full text-center px-4\">\n <MessageSquare className=\"w-12 h-12 text-zinc-600 mb-3\" />\n <p className=\"text-muted-foreground text-sm\">Select an agent to start chatting</p>\n </div>\n )\n }\n\n return (\n <>\n <div className=\"flex h-full min-w-0\">\n <div className=\"@container/chat flex h-full min-w-0 flex-1 flex-col\">\n <ChatHeader\n selectedInboxThread={selectedInboxThread}\n agent={agent}\n now={now}\n blockedState={blockedState}\n thread={chatThread}\n exportableThread={exportableThread}\n importedHistory={importedHistory}\n showBackButton={showBackButton}\n onBack={onBack}\n openAgentDetail={openAgentDetail}\n openWorkspaceFocus={openWorkspaceFocus}\n voiceTtsEnabled={voiceTtsEnabled}\n setVoiceTtsEnabled={setVoiceTtsEnabled}\n canOpenTerminal={canOpenTerminal}\n terminalOpening={terminalOpening}\n handleOpenTerminal={handleOpenTerminal}\n canInterrupt={canInterrupt}\n interruptAgent={interruptAgent}\n canCompact={canCompact}\n canClearContext={canClearContext}\n canShutdown={canShutdown}\n openConfirm={openConfirm}\n workspaceAction={workspaceAction}\n doAgentAction={doAgentAction}\n openFilesForAgent={openFilesForAgent}\n forkFromAgent={forkFromAgent}\n markInboxThreadUnread={markInboxThreadUnread}\n markInboxThreadRead={markInboxThreadRead}\n exportThread={exportThread}\n onOpenSearch={search.openSearch}\n />\n\n {/* Timeline */}\n <PlanGraphPanel\n threadId={planContext && 'threadId' in planContext ? planContext.threadId : null}\n teamId={planContext && 'teamId' in planContext ? planContext.teamId : undefined}\n channel={planContext?.channel}\n />\n {search.open && (\n <ChatSearchBar\n query={search.query}\n position={search.position}\n total={search.total}\n onQueryChange={search.setQuery}\n onNext={search.next}\n onPrev={search.prev}\n onClose={search.close}\n />\n )}\n {/* Pinned \"Last prompt\" reminder — same shrink-0 sibling mechanism as the search bar,\n so it stays above the conversation instead of scrolling away (#545). */}\n <StickyPromptBanner scrollEl={chatScroller} timeline={timeline} />\n <VirtualTimeline\n agentId={selectedInboxThread}\n agentStatus={agent?.status}\n timeline={timeline}\n hasMore={agentChatWindow?.hasMore ?? false}\n loading={agentChatWindow?.loading ?? false}\n loadedInitial={agentChatWindow?.loadedInitial ?? false}\n showReasoning={showReasoning}\n pendingApproval={pendingApproval}\n blockedLabel={blockedState?.label}\n canInterrupt={canInterrupt}\n searchActive={search.open}\n searchCurrentKey={search.currentKey}\n searchMatchKeys={search.matchKeySet}\n onScrollerRef={setChatScroller}\n onLoadOlder={loadOlderForSelectedAgent}\n onInterrupt={interruptAgent}\n onOpenReferencedPath={openReferencedFile}\n onPreviewReferencedPath={previewReferencedFile}\n onPreviewReferencedPathEnd={scheduleCloseReferencedFilePreview}\n />\n\n <Composer\n draft={draft}\n placeholder={`Message ${agent ? displayName(agent) : selectedInboxThread}…`}\n chatSending={chatSending}\n disabled={agentFinalizing}\n hasPendingUploads={hasPendingUploads}\n readyAttachmentCount={readyAttachments.length}\n pendingAttachments={pendingAttachments}\n micAvailable={micAvailable}\n micState={micState}\n slashMatches={slashMatches}\n slashActiveIndex={slashActiveIndex}\n onDraftChange={handleDraftChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onUploadFiles={(files) => { void uploadFiles(files) }}\n onRemovePendingAttachment={removePendingAttachment}\n onSend={handleSend}\n onAcceptSlash={acceptSlash}\n onSlashHover={setSlashIndex}\n onStartPtt={() => { void startPtt() }}\n onStopPtt={() => { void stopPtt() }}\n footerText={agentFinalizing\n ? `${agent ? displayName(agent) : 'Agent'} is wrapping up (${(agent?.meta?.lifecycleAction as string).slice('finalizing-'.length)}) — messaging paused`\n : 'Enter to send · Shift+Enter for newline'}\n />\n </div>\n {filePreview && (\n <aside\n className=\"hidden h-full w-[min(44vw,720px)] min-w-[360px] shrink-0 flex-col border-l border-border bg-background xl:flex\"\n >\n <div className=\"flex h-10 shrink-0 items-center gap-2 border-b border-border px-3\">\n <span className=\"min-w-0 flex-1 text-xs font-medium text-muted-foreground\">File preview</span>\n {filePreviewError && <span className=\"max-w-[18rem] truncate text-xs text-red-400\">{filePreviewError}</span>}\n <Button variant=\"ghost\" size=\"icon-sm\" title=\"Close preview\" onClick={closeFilePreview}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n <div className=\"min-h-0 flex-1\">\n {filePreview.type === 'directory' ? (\n <DirectoryContent\n orchestratorId={filePreview.orchestratorId}\n selectedPath={filePreview.path}\n onReadError={setFilePreviewError}\n />\n ) : (\n <FileContent\n orchestratorId={filePreview.orchestratorId}\n selectedPath={filePreview.path}\n line={filePreview.line}\n onReadError={setFilePreviewError}\n />\n )}\n </div>\n </aside>\n )}\n </div>\n {floatingPreview && (\n <FloatingFilePreview\n preview={floatingPreview}\n error={filePreviewError}\n onReadError={setFilePreviewError}\n onMouseEnter={clearFilePreviewCloseTimer}\n onMouseLeave={scheduleCloseReferencedFilePreview}\n />\n )}\n {terminalTarget && (\n <TerminalDialog open={terminalOpen} onOpenChange={handleCloseTerminal} orchestratorId={terminalTarget.orchestratorId} session={terminalTarget.session} interactive={terminalTarget.interactive || canWriteTerminal} />\n )}\n </>\n )\n}\n","\nimport { useEffect } from 'react'\nimport { useRelayStore } from '@/store'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\n\nexport function useDraftCleanup() {\n const inboxDrafts = useRelayStore((s) => s.inboxDrafts)\n const agentsById = useRelayStore((s) => s.agentsById)\n const set = useRelayStore((s) => s.set)\n\n useEffect(() => {\n const draftPeers = Object.keys(inboxDrafts)\n if (draftPeers.length === 0) return\n\n const stale = draftPeers.filter((peer) => !agentsById[peer] && peer !== HUMAN_AGENT_ID)\n if (stale.length === 0) return\n\n // Only clean up if the agent has been gone for a reasonable time (check on mount only)\n const timer = setTimeout(() => {\n const currentAgents = useRelayStore.getState().agentsById\n const next = { ...useRelayStore.getState().inboxDrafts }\n let changed = false\n for (const peer of stale) {\n if (!currentAgents[peer]) {\n delete next[peer]\n changed = true\n }\n }\n if (changed) set({ inboxDrafts: next })\n }, 30_000) // 30s grace period before purging\n\n return () => clearTimeout(timer)\n }, [])\n}\n","\nimport { useEffect } from 'react'\n\n// While a chat is open on mobile (single-pane: list OR conversation), push a\n// browser-history entry so the Android system back button / swipe-back gesture\n// returns to the conversation list instead of leaving the dashboard. Drafts are\n// stored per-thread (server + store), so closing back to the list never loses\n// unsent input — there is nothing to guard against here.\n//\n// Desktop (list + conversation side by side) is excluded: there is no\n// list/conversation toggle to back out of, and pushing an entry would change\n// the meaning of browser-back. The existing draft guard (useBackNavProtection)\n// owns desktop back behavior.\nexport function useMobileChatHistory(open: boolean, onBack: () => void) {\n useEffect(() => {\n if (typeof window === 'undefined' || !open) return\n if (!window.matchMedia('(max-width: 767px)').matches) return\n\n window.history.pushState({ chatOpen: true }, '')\n\n function handlePopState() {\n onBack()\n }\n window.addEventListener('popstate', handlePopState)\n\n return () => {\n window.removeEventListener('popstate', handlePopState)\n // Closed via the in-app back arrow rather than the system back button:\n // our pushed entry is still on top, so consume it to keep the stack clean.\n if (window.history.state?.chatOpen) window.history.back()\n }\n }, [open, onBack])\n}\n","\nimport { useCallback, useEffect } from 'react'\nimport { useKeyboardViewportHeight } from '@/hooks/use-keyboard-viewport'\nimport { useAllInboxThreads } from '@/hooks/use-selectors'\nimport { useRelayStore } from '@/store'\nimport { AgentListPanel } from './AgentListPanel'\nimport { ChatPanel } from './ChatPanel'\nimport { useDraftCleanup } from './hooks/useDraftCleanup'\nimport { useMobileChatHistory } from './hooks/useMobileChatHistory'\n\nexport function ChatView() {\n const threads = useAllInboxThreads()\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const set = useRelayStore((s) => s.set)\n const loadAgentChat = useRelayStore((s) => s.loadAgentChat)\n const agentsById = useRelayStore((s) => s.agentsById)\n const mobileShowChat = Boolean(selectedInboxThread)\n\n useDraftCleanup()\n\n useEffect(() => {\n if (!selectedInboxThread) return\n void loadAgentChat(selectedInboxThread)\n }, [selectedInboxThread, loadAgentChat])\n\n useEffect(() => {\n if (!selectedInboxThread) return\n // Close the open chat only when the agent is truly gone (removed from the roster) —\n // not when it's merely filtered out or transiently offline during a clear/compact\n // self-resume. Otherwise mobile pops back to the list mid-compact (#521).\n if (!agentsById[selectedInboxThread]) {\n set({ selectedInboxThread: '' })\n }\n }, [selectedInboxThread, agentsById, set])\n\n const handleMobileBack = useCallback(() => {\n set({ selectedInboxThread: '' })\n }, [set])\n\n useMobileChatHistory(mobileShowChat, handleMobileBack)\n\n return (\n <div className=\"flex h-full min-h-0\">\n <div className=\"hidden md:flex w-full\">\n <div className=\"w-1/3 min-w-[240px] max-w-xs flex flex-col overflow-hidden\">\n <AgentListPanel threads={threads} />\n </div>\n\n <div className=\"flex-1 flex flex-col overflow-hidden\">\n <ChatPanel key={selectedInboxThread || 'empty'} threads={threads} />\n </div>\n </div>\n\n <div className=\"md:hidden flex w-full overflow-hidden\">\n {!mobileShowChat ? (\n <div className=\"w-full flex flex-col overflow-hidden\">\n <AgentListPanel threads={threads} />\n </div>\n ) : (\n <MobileChatContainer>\n <ChatPanel key={selectedInboxThread || 'empty'} threads={threads} onBack={handleMobileBack} showBackButton />\n </MobileChatContainer>\n )}\n </div>\n </div>\n )\n}\n\nfunction MobileChatContainer({ children }: { children: React.ReactNode }) {\n const height = useKeyboardViewportHeight()\n\n return (\n <div\n className=\"fixed inset-x-0 top-0 z-40 flex flex-col bg-background pt-[var(--sat)]\"\n style={{ height: height ? `${height}px` : '100dvh' }}\n >\n {children}\n </div>\n )\n}\n"],"x_google_ignoreList":[14],"mappings":"giDAUA,SAAgB,IAAgB,CAC9B,IAAM,EAAS,EAAe,GAAM,EAAE,OAAO,CACvC,EAAe,EAAe,GAAM,EAAE,aAAa,CACnD,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAA0B,EAAe,GAAM,EAAE,wBAAwB,CACzE,EAAwB,EAAe,GAAM,EAAE,sBAAsB,CACrE,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAmB,EAAe,GAAM,EAAE,iBAAiB,CAC3D,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CAE/D,OAAA,EAAA,EAAA,aAAqB,CACnB,IAAI,EAAO,GAAc,EAAQ,EAAc,EAAgB,CAG/D,GAFK,IAAa,EAAO,EAAK,OAAQ,GAAM,EAAE,SAAW,UAAU,EAE/D,EAAiB,CACnB,IAAM,EAAI,EAAgB,aAAa,CACvC,EAAO,EAAK,OAAQ,GAClB,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,GAC7B,EAAE,MAAQ,IAAI,aAAa,CAAC,SAAS,EAAE,GACvC,EAAE,OAAS,IAAI,aAAa,CAAC,SAAS,EAAE,GACxC,EAAE,MAAQ,EAAE,EAAE,KAAM,GAAM,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,GACtD,EAAE,cAAgB,EAAE,EAAE,KAAM,GAAM,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAChE,CAGC,IAAyB,EAAO,EAAK,OAAQ,GAAM,GAAU,EAAE,GAAK,EAAwB,EAC5F,IAAuB,EAAO,EAAK,OAAQ,GAAM,EAAE,SAAW,EAAsB,EACpF,IAAoB,EAAO,EAAK,OAAQ,IAAO,EAAE,MAAQ,EAAE,EAAE,SAAS,EAAmB,CAAC,EAC1F,IAAoB,EAAO,EAAK,OAAQ,IAAO,EAAE,cAAgB,EAAE,EAAE,SAAS,EAAmB,CAAC,EAClG,IAAqB,EAAO,EAAK,OAAQ,IAAO,EAAE,SAAW,MAAQ,EAAoB,EAE7F,IAAM,EAAM,IAAqB,OAAS,GAAK,EAC/C,MAAO,CAAC,GAAG,EAAK,CAAC,MAAM,EAAG,IACpB,IAAkB,OAAe,GAAY,EAAE,CAAC,cAAc,GAAY,EAAE,CAAC,CAAG,EAGhF,IAAkB,WAAmB,GAA4B,GAAY,EAAE,SAAS,CAAE,GAAY,EAAE,SAAS,CAAE,EAAI,EAAI,GAAY,EAAE,CAAC,cAAc,GAAY,EAAE,CAAC,GAC/J,GAAuB,EAAE,SAAW,IAAM,GAAuB,EAAE,SAAW,IAAM,GACpF,GAAY,EAAE,CAAC,cAAc,GAAY,EAAE,CAAC,CACxD,EACD,CAAC,EAAQ,EAAc,EAAa,EAAiB,EAAiB,EACvE,EAAuB,EAAoB,EAAoB,EAAqB,EAAe,EAAiB,CAAC,WChCnH,GAAmC,CACvC,CAAE,GAAI,YAAa,QAAS,GAAO,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,OAAD,CAAc,UAAU,wDAAgD,EAAS,CAAtE,EAAsE,CAAE,CACtI,CAAE,GAAI,kBAAmB,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,SAAD,CAAgB,UAAU,4CAAoC,EAAW,CAA5D,EAA4D,CAAE,CACnI,CAAE,GAAI,cAAe,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,SAAD,CAAgB,UAAU,4CAAoC,EAAW,CAA5D,EAA4D,CAAE,CAC/H,CAAE,GAAI,cAAe,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,IAAD,CAAA,SAAY,EAAM,CAAV,EAAU,CAAE,CACxE,CAAE,GAAI,cAAe,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,KAAD,CAAA,SAAa,EAAO,CAAX,EAAW,CAAE,CAC1E,CAAE,GAAI,YAAa,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,KAAD,CAAA,SAAa,EAAO,CAAX,EAAW,CAAE,CACxE,CAAE,GAAI,wBAAyB,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,OAAD,CAAc,UAAU,0DAAkD,EAAS,CAAxE,EAAwE,CAAE,CACpJ,CAED,SAAS,GAAqB,EAAc,EAAY,IAAkB,CACxE,IAAI,EAAwF,KAC5F,IAAK,IAAM,KAAW,GAAiB,CACrC,IAAM,EAAI,EAAQ,GAAG,KAAK,EAAK,CAC3B,GAAK,EAAE,KAAO,IAAS,MAAQ,EAAE,MAAQ,EAAK,SAChD,EAAO,CAAE,MAAO,EAAE,MAAO,OAAQ,EAAE,GAAG,OAAQ,MAAO,EAAE,GAAI,UAAS,EAGxE,GAAI,CAAC,EAAM,MAAO,CAAC,EAAK,CACxB,IAAM,EAAqB,EAAE,CACzB,EAAK,MAAQ,GAAG,EAAM,KAAK,EAAK,MAAM,EAAG,EAAK,MAAM,CAAC,CACzD,IAAM,EAAQ,EAAK,QAAQ,QAAU,GAAqB,EAAK,MAAO,GAAG,EAAU,GAAG,CAAG,EAAK,MAC9F,EAAM,KAAK,EAAK,QAAQ,KAAK,EAAO,GAAG,EAAU,GAAG,CAAC,CACrD,IAAM,EAAO,EAAK,MAAM,EAAK,MAAQ,EAAK,OAAO,CAEjD,OADI,GAAM,EAAM,KAAK,GAAG,GAAqB,EAAM,GAAG,EAAU,GAAG,CAAC,CAC7D,EAGT,SAAgB,GAAe,CAAE,UAAS,iBAAmF,CAC3H,IAAM,EAAM,EAAe,GAAM,EAAE,IAAI,CACjC,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAiB,EAAe,GAAM,EAAE,eAAe,CACvD,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAmB,EAAe,GAAM,EAAE,iBAAiB,CAC3D,EAA0B,EAAe,GAAM,EAAE,wBAAwB,CACzE,EAAwB,EAAe,GAAM,EAAE,sBAAsB,CACrE,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAmB,EAAe,GAAM,EAAE,iBAAiB,CAC3D,EAA4B,EAAe,GAAM,EAAE,0BAA0B,CAC7E,EAAa,EAAe,GAAM,EAAE,WAAW,CAC/C,EAAwB,EAAe,GAAM,EAAE,sBAAsB,CACrE,EAA0B,EAAe,GAAM,EAAE,4BAA4B,CAC7E,EAAM,IAAQ,CACd,EAAa,IAAe,CAC5B,IAAA,EAAA,EAAA,aAAkC,IAAI,IAAI,EAAsB,CAAE,CAAC,EAAsB,CAAC,CAE1F,GAAA,EAAA,EAAA,aAA6B,CACjC,IAAM,EAAI,IAAI,IACd,IAAK,IAAM,KAAK,EAAS,EAAE,IAAI,EAAE,KAAM,EAAE,CACzC,OAAO,GACN,CAAC,EAAQ,CAAC,CAEP,IAAA,EAAA,EAAA,aAA6B,CACjC,GAAI,IAAkB,cAAe,OAAO,EAC5C,IAAM,EAAM,IAAqB,OAAS,GAAK,EAC/C,MAAO,CAAC,GAAG,EAAW,CAAC,MAAM,EAAG,IAGvB,GAFI,GAAwB,EAAa,IAAI,EAAE,GAAG,CAEtB,CADxB,GAAwB,EAAa,IAAI,EAAE,GAAG,CAClB,CAAI,EAAI,EAAI,GAAY,EAAE,CAAC,cAAc,GAAY,EAAE,CAAC,CAC/F,EACD,CAAC,EAAY,EAAe,EAAkB,EAAa,CAAC,CAEzD,IAAA,EAAA,EAAA,aAA2B,CAAC,GAAG,IAAI,IAAI,EAAW,QAAS,GAAM,EAAE,MAAQ,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,EAAW,CAAC,CAC/F,IAAA,EAAA,EAAA,aAA2B,CAAC,GAAG,IAAI,IAAI,EAAW,QAAS,GAAM,GAAuB,EAAE,cAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,EAAW,CAAC,CAC/H,EAAc,IAAgB,CAI9B,IAAA,EAAA,EAAA,aAA8B,CAClC,GAAI,IAAqB,UAAW,OAAO,KAC3C,IAAM,EAAS,IAAI,IACnB,IAAK,IAAM,KAAK,GAAc,CAC5B,IAAM,EAAM,GAAiB,EAAE,EAAI,aAC7B,EAAS,EAAO,IAAI,EAAI,CAC1B,EAAQ,EAAO,KAAK,EAAE,CACrB,EAAO,IAAI,EAAK,CAAC,EAAE,CAAC,CAE3B,MAAO,CAAC,GAAG,EAAO,SAAS,CAAC,CAAC,MAAM,EAAG,IAAM,EAAE,GAAG,cAAc,EAAE,GAAG,CAAC,EACpE,CAAC,GAAc,EAAiB,CAAC,CAE9B,GAAoB,CAAC,EAAyB,EAAuB,EAAoB,EAAoB,EAAoB,CAAC,OAAO,QAAQ,CAAC,OAClJ,IAAA,EAAA,EAAA,aAA4B,GAAiB,GAAc,EAAY,EAAI,CAAE,CAAC,GAAc,EAAY,EAAI,CAAC,CAEnH,SAAS,GAAa,EAAY,CAChC,EAAgB,EAAI,EAAa,IAAI,EAAG,EAAE,SAAS,CACnD,IAAgB,EAAG,CAGrB,SAAS,GAAe,EAAsB,CAC5C,GAAM,CAAE,SAAU,EAElB,GAAI,EAAI,QAAU,GAAK,EAAI,QAAU,GAAkB,IAAI,EAAI,OAAO,GAAG,CAAE,OAAO,KAClF,IAAM,EAAS,EAAa,IAAI,EAAM,GAAG,CACnC,EAAS,GAAQ,UAAU,QAAU,EACrC,EAAqB,EAAwB,EAAM,CACnD,EAAU,GAAQ,eAGlB,EAAiB,GAA2B,EAAO,EAAI,GAAwB,EAAO,CACtF,EAAa,IAAwB,EAAM,GAC3C,EAAK,GAAmB,EAAM,CAC9B,EAAU,GAAiB,EAAM,CACjC,EAAS,EAAG,KACZ,EAAc,EAAI,OAAS,GAAY,EAAI,OAAO,CAAG,EAAM,UAC3D,EAAa,EAAI,SAAS,OAC1B,EAAuB,EAAI,QAAU,GAAK,EAAa,EACvD,EAAoB,GAAkB,IAAI,EAAM,GAAG,CAEzD,OACE,EAAA,EAAA,MAAC,KAAD,CAAmB,UAAW,EAAG,WAAY,EAAI,QAAU,GAAK,OAAO,UAAvE,CACG,EAAI,QAAU,IACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6DACb,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAU,cAAgB,CAAA,CACvC,CAAA,EAER,EAAA,EAAA,MAAC,SAAD,CACE,UAAW,EACT,sHACA,EAAI,QAAU,GAAK,cACnB,GAAc,cACf,CACD,YAAe,GAAa,EAAM,GAAG,UANvC,EAQE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,oCAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAsB,QAAS,CAAA,EAC/B,EAAA,EAAA,KAAC,GAAD,CAAkB,QAAY,MAAK,UAAU,0CAA4C,CAAA,CACrF,IAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0DAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,wCAAgC,GAAY,EAAM,CAAQ,CAAA,EAC1E,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4CAAf,CACG,EAAiB,IAChB,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oCAAoC,MAAO,GAAQ,EAAe,UAC/E,GAAQ,EAAK,EAAe,CACxB,CAAA,CAER,EAAS,IACR,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,8GACd,EACK,CAAA,CAET,CAAC,GAAU,IACV,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,uGAAuG,MAAM,2BAC5H,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,UAAY,CAAA,CAC7B,CAAA,CAEN,GACF,IAGN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,8EAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,MAAO,EAAG,MAAO,UAAU,iCAC/B,EAAA,EAAA,KAAC,EAAD,CAAQ,UAAW,EAAG,UAAW,EAAG,UAAU,CAAI,CAAA,CAC7C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,GAAW,EAAG,MAAa,CAAA,CACtD,GAAyB,EAAM,GAC9B,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,6BACd,EAAA,EAAA,KAAC,GAAD,CAAa,QAAS,EAAM,QAAS,SAAA,GAAS,KAAM,GAAM,CAAA,CACrD,CAAA,CAEL,GACL,EAAI,QAAU,GAAK,EAAM,WAAa,IACrC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mBACb,EAAA,EAAA,KAAC,GAAD,CAAO,QAAQ,UAAU,UAAU,mEACjC,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,oBAAhB,CAA2B,cAAY,EAAmB,GACpD,CAAA,CACJ,CAAA,CAGP,IACC,EAAA,EAAA,MAAC,IAAD,CAAG,UAAU,gEAAb,CACG,EAAQ,OAAA,OAA0B,QAAU,GAC5C,GAAqB,GAAe,EAAQ,CAAC,QAAQ,OAAQ,IAAI,CAAC,CACjE,GAEF,GACC,GAKR,IACC,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,QAAU,GAAM,CAAE,EAAE,iBAAiB,CAAE,EAAwB,EAAM,GAAG,EACxE,UAAU,oLACV,gBAAe,CAAC,EAChB,MAAO,EAAoB,QAAQ,EAAW,SAAS,IAAe,EAAI,QAAU,WAAa,yBALnG,CAOG,GAAoB,EAAA,EAAA,KAAC,GAAD,CAAc,UAAU,uBAAyB,CAAA,EAAG,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,uBAAyB,CAAA,EACzH,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,uBAAhB,CAA+B,EAAW,UAAQ,IAAe,EAAI,QAAU,SAAgB,GACxF,GAER,EArFI,EAAM,GAqFV,CAIT,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+DAAf,EAEE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gDAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,oBAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAQ,UAAU,mGAAqG,CAAA,EACvH,EAAA,EAAA,KAAC,GAAD,CACE,YAAY,mBACZ,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,gBAAiB,EAAE,OAAO,MAAO,CAAC,CACzD,UAAU,mBACV,CAAA,CACE,IAGN,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,YAAe,EAAI,CAAE,0BAA2B,CAAC,EAA2B,CAAC,CAC7E,UAAU,qJAHZ,EAKE,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,4CAAhB,EACE,EAAA,EAAA,KAAC,GAAD,CAAmB,UAAU,cAAgB,CAAA,kBAE5C,GAAoB,IACnB,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,oGAA4F,GAA0B,CAAA,CAEpI,GACN,GAA4B,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,cAAgB,CAAA,EAAG,EAAA,EAAA,KAAC,GAAD,CAAW,UAAU,cAAgB,CAAA,CACrG,IAET,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAG,YAAa,EAA4B,SAAW,QAAS,WAAW,UAA3F,EAEE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qCAAf,EACE,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,cAAe,EAAE,OAAO,MAAO,CAAC,CACvD,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,kBAAS,YAAkB,CAAA,EACzC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,gBAAO,UAAgB,CAAA,EACrC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,oBAAW,eAAqB,CAAA,EAC9C,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,uBAAc,mBAAyB,CAAA,CAC9C,IACT,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,QACR,KAAK,UACL,YAAe,EAAI,CAAE,iBAAkB,IAAqB,MAAQ,OAAS,MAAO,CAAC,UAEpF,IAAqB,OAAQ,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,cAAgB,CAAA,EAAG,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,cAAgB,CAAA,CACjG,CAAA,CACL,IAGN,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,iBAAkB,EAAE,OAAO,MAAO,CAAC,CAC1D,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,cAAoB,CAAA,EACrC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,mBAAU,mBAAyB,CAAA,CAC1C,IAGT,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,sBAAf,EACE,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,wBAAyB,EAAE,OAAO,MAAO,CAAC,CACjE,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,YAAkB,CAAA,EACnC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,kBAAS,SAAe,CAAA,EACtC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,iBAAQ,QAAc,CAAA,EACpC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,iBAAQ,QAAc,CAAA,EACpC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,gBAAO,OAAa,CAAA,CAC3B,IACT,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,sBAAuB,EAAE,OAAO,MAAO,CAAC,CAC/D,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,aAAmB,CAAA,EACpC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,kBAAS,SAAe,CAAA,EACtC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,gBAAO,OAAa,CAAA,EAClC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,gBAAO,OAAa,CAAA,EAClC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,mBAAU,UAAgB,CAAA,CACjC,GACR,EAAY,OAAS,IACpB,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,oBAAqB,EAAE,OAAO,MAAO,CAAC,CAC7D,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,YAAkB,CAAA,CAClC,EAAY,IAAK,IAAM,EAAA,EAAA,KAAC,SAAD,CAAgB,MAAO,WAAI,EAAW,CAAzB,EAAyB,CAAC,CACxD,GAEP,IAEJ,GAAW,OAAS,GAAK,GAAW,OAAS,KAC7C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,sBAAf,CACG,GAAW,OAAS,IACnB,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,mBAAoB,EAAE,OAAO,MAAO,CAAC,CAC5D,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,WAAiB,CAAA,CACjC,GAAW,IAAK,IAAM,EAAA,EAAA,MAAC,SAAD,CAAgB,MAAO,WAAvB,CAA0B,IAAE,EAAW,EAA1B,EAA0B,CAAC,CACxD,GAEV,GAAW,OAAS,IACnB,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,mBAAoB,EAAE,OAAO,MAAO,CAAC,CAC5D,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,WAAiB,CAAA,CACjC,GAAW,IAAK,IAAM,EAAA,EAAA,KAAC,SAAD,CAAgB,MAAO,WAAI,EAAW,CAAzB,EAAyB,CAAC,CACvD,GAEP,GAEJ,GACF,IAGN,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,UAAU,2HACV,QAAS,WAHX,EAKE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6IACb,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,cAAgB,CAAA,CAC5B,CAAA,EACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+BAAsB,YAAe,CAAA,EACpD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA6C,2BAA8B,CAAA,CACtF,GACC,IAGT,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kCACZ,GAAa,SAAW,GACvB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4EAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAK,UAAU,6BAA+B,CAAA,EAC9C,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,yCAAgC,0BAA2B,CAAA,CACpE,GACJ,GACF,GAAc,KAAK,CAAC,EAAS,MAC3B,EAAA,EAAA,MAAC,MAAD,CAAA,SAAA,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gMAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAe,CAAA,EAC3C,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oCAA4B,EAAO,OAAc,CAAA,CAC7D,IACN,EAAA,EAAA,KAAC,KAAD,CAAA,SAAK,GAAiB,EAAQ,EAAY,EAAI,CAAC,IAAI,GAAe,CAAM,CAAA,CACpE,CAAA,CANI,EAMJ,CACN,EAEF,EAAA,EAAA,KAAC,KAAD,CAAA,SAAK,GAAY,IAAI,GAAe,CAAM,CAAA,CAExC,CAAA,CACF,GCnXV,IAAM,GAAuC,CAC3C,CAAE,KAAM,SAAU,OAAQ,QAAS,YAAa,iCAAkC,aAAc,qBAAsB,CACtH,CAAE,KAAM,WAAY,OAAQ,QAAS,YAAa,6DAA8D,aAAc,kBAAmB,CACjJ,CAAE,KAAM,QAAS,OAAQ,QAAS,YAAa,2CAA4C,CAC3F,CAAE,KAAM,SAAU,OAAQ,QAAS,YAAa,oCAAqC,aAAc,sBAAuB,CAC1H,CAAE,KAAM,gBAAiB,OAAQ,QAAS,YAAa,mCAAoC,aAAc,cAAe,CACxH,CAAE,KAAM,kBAAmB,OAAQ,QAAS,YAAa,uDAAwD,CACjH,CAAE,KAAM,UAAW,OAAQ,QAAS,YAAa,iCAAkC,CACnF,CAAE,KAAM,QAAS,OAAQ,QAAS,YAAa,yCAA0C,CACzF,CAAE,KAAM,SAAU,OAAQ,QAAS,YAAa,+CAAgD,CAChG,CAAE,KAAM,cAAe,OAAQ,QAAS,YAAa,qCAAsC,CAC5F,CAKK,GAAgD,CACpD,CAAE,KAAM,SAAU,OAAQ,UAAW,YAAa,iDAAkD,CACpG,CAAE,KAAM,WAAY,OAAQ,UAAW,YAAa,8CAA+C,aAAc,iBAAkB,CACnI,CAAE,KAAM,SAAU,OAAQ,UAAW,YAAa,0BAA2B,aAAc,UAAW,CACtG,CAAE,KAAM,QAAS,OAAQ,UAAW,YAAa,YAAa,CAC/D,CAEK,GAA+C,CACnD,CAAE,KAAM,WAAY,OAAQ,UAAW,YAAa,8CAA+C,CACnG,CAAE,KAAM,OAAQ,OAAQ,UAAW,YAAa,qBAAsB,CACvE,CAGD,SAAgB,GAAsB,EAA8C,CAIlF,MAAO,CAAC,GAHS,IAAa,SAAW,GACrC,IAAa,QAAU,GACvB,EAAE,CACe,GAAG,GAAqB,CCtC/C,SAAgB,GAAe,CAAE,UAAS,aAAsD,CAC9F,IAAM,EAAU,EAAe,GAAM,EAAE,gBAAgB,GAAS,CAC1D,EAAY,EAAe,GAAM,EAAE,UAAU,CAC7C,EAAe,IAAmB,CAElC,GAAU,GAAW,EAAE,EAAE,OAAQ,GAAM,EAAE,WAAa,EAAa,CACzE,GAAI,EAAO,SAAW,EAAG,OAAO,KAGhC,IAAM,EAAQ,MAAM,KAAK,IAAI,IAAI,EAAO,IAAK,GAAM,GAAiB,EAAE,OAAQ,EAAU,CAAC,CAAC,CAAC,CACrF,EAAS,EAAO,KAAM,GAAM,EAAE,OAAO,CACrC,EAAQ,EAAM,SAAW,EAAI,EAAM,GAAK,GAAG,EAAM,OAAO,UACxD,EAAO,EAAS,EAAS,EAE/B,OACE,EAAA,EAAA,MAAC,OAAD,CACE,MAAO,GAAG,EAAM,KAAK,KAAK,GAAG,EAAS,YAAc,eACpD,UAAW,EAAG,wGAAyG,EAAU,UAFnI,EAIE,EAAA,EAAA,KAAC,EAAD,CAAM,UAAW,EAAG,mBAAoB,GAAU,mBAAmB,CAAI,CAAA,EACzE,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,iCAAhB,CAAyC,EAAO,GAAU,EAAM,SAAW,EAAI,cAAgB,GAAU,GACpG,GCEX,SAAgB,GAAW,CACzB,sBACA,QACA,MACA,eACA,SACA,mBACA,kBACA,iBACA,SACA,kBACA,qBACA,kBACA,qBACA,kBACA,kBACA,qBACA,eACA,kBACA,cACA,mBACA,cACA,cACA,mBACA,iBACA,qBACA,iBACA,yBACA,uBACA,gBACA,iBAgCC,CACD,OACQ,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,yGAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,sDAAf,CACG,IACC,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,QAAS,EAAQ,UAAU,2BAChE,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,UAAY,CAAA,CAC1B,CAAA,EAEX,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,UAAU,iFACV,YAAe,GAAS,EAAgB,EAAM,CAC9C,SAAU,CAAC,WAJb,EAME,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6BAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAsB,QAAS,CAAA,EAC/B,EAAA,EAAA,KAAC,GAAD,CAAkB,QAAY,MAAK,UAAU,0CAA4C,CAAA,CACrF,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6BAAf,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,wCAAgC,EAAQ,GAAY,EAAM,CAAG,EAAwB,CAAA,CACjG,IACC,EAAA,EAAA,MAAC,IAAD,CAAG,UAAU,kDAAb,CACG,EAAe,YAAY,EAAa,QAAU,EAAM,OACxD,EAAM,SAAW,MAAM,EAAM,UAC7B,OAAO,EAAM,MAAM,KAAQ,UAAY,EAAM,KAAK,KAAO,MAAM,GAAU,EAAM,KAAK,IAAe,EAAE,GACpG,GAEF,GACC,GACR,IAAS,EAAA,EAAA,KAAC,GAAD,CAA0B,QAAO,QAAA,GAAQ,UAAU,iCAAmC,CAAA,CAC/F,GAAS,GAAyB,EAAM,GAAI,EAAA,EAAA,KAAC,GAAD,CAAa,QAAS,EAAM,QAAS,SAAA,GAAW,CAAA,CAC5F,GAAO,aAAe,EAAM,oBAC3B,EAAA,EAAA,KAAC,GAAD,CAAkB,MAAO,EAAM,YAAa,UAAU,WAAW,YAAe,KAAK,EAAmB,EAAM,kBAAmB,CAAI,CAAA,CAEtI,GAAQ,UAAU,QACjB,EAAA,EAAA,MAAC,GAAD,CAAO,UAAU,6EAAjB,CAAsF,EAAO,UAAU,OAAO,UAAe,GAC3H,KACH,IAAS,EAAA,EAAA,KAAC,GAAD,CAAgB,QAAS,EAAM,GAAI,UAAU,wCAA0C,CAAA,CAC7F,IAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,uDACZ,IACC,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,GAAD,CAAY,MAAO,EAAM,GAAI,MAAM,gBAAgB,KAAK,UAAY,CAAA,CACnE,KAAgB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,MAAM,mBAAmB,QAAS,aAAc,EAAA,EAAA,KAAC,EAAD,CAAQ,UAAU,cAAgB,CAAA,CAAS,CAAA,CAClJ,GAAS,YAAa,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,MAAO,EAAkB,8EAAgF,yEAA0E,UAAW,EAAkB,eAAiB,GAAI,YAAe,EAAmB,CAAC,EAAgB,UAAG,GAAkB,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,cAAgB,CAAA,EAAG,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,cAAgB,CAAA,CAAU,CAAA,CAC7b,IAAmB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,SAAU,EAAiB,MAAM,WAAW,YAAe,KAAK,GAAoB,WAAE,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,cAAgB,CAAA,CAAS,CAAA,CACtO,IAAgB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,kCAAkC,MAAM,YAAY,QAAS,aAAgB,EAAA,EAAA,KAAC,GAAD,CAAY,UAAU,cAAgB,CAAA,CAAS,CAAA,EAC5L,EAAM,cAAgB,WAAa,EAAM,cAAgB,SAAW,EAAM,oBAAqB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,mEAAmE,MAAM,oDAAoD,YAAe,EAAY,uBAAwB,QAAQ,GAAY,EAAM,CAAC,4EAA+E,GAAgB,EAAM,kBAAoB,QAAQ,CAAC,WAAE,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,cAAgB,CAAA,CAAS,CAAA,CACzgB,KAAc,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,UAAU,YAAe,EAAY,gBAAiB,uBAAuB,GAAY,EAAM,CAAC,OAAU,GAAc,EAAO,UAAU,CAAC,WAAE,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,cAAgB,CAAA,CAAS,CAAA,CAC9R,KAAmB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,gBAAgB,YAAe,EAAY,gBAAiB,qBAAqB,GAAY,EAAM,CAAC,OAAU,GAAc,EAAO,eAAe,CAAC,WAAE,EAAA,EAAA,KAAC,EAAD,CAAQ,UAAU,cAAgB,CAAA,CAAS,CAAA,CACzS,IAAe,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,WAAW,YAAe,EAAY,iBAAkB,YAAY,GAAY,EAAM,CAAC,OAAU,GAAc,EAAO,WAAW,CAAC,WAAE,EAAA,EAAA,KAAC,EAAD,CAAO,UAAU,cAAgB,CAAA,CAAS,CAAA,CACnR,GAAS,OAAO,EAAM,MAAM,KAAQ,UAAY,EAAM,KAAK,MAAO,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAO,QAAQ,EAAM,KAAK,IAAc,WAAY,YAAe,KAAK,GAAkB,EAAM,WAAE,EAAA,EAAA,KAAC,GAAD,CAAY,UAAU,cAAgB,CAAA,CAAS,CAAA,CACnS,GAAS,GAAU,EAAO,SAAS,OAAS,IAAK,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,gDAAgD,YAAe,GAAc,EAAM,GAAI,EAAO,SAAS,WAAE,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,cAAgB,CAAA,CAAS,CAAA,CAC5R,IAAU,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,cAAc,YAAe,GAAsB,EAAoB,WAAE,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,cAAgB,CAAA,CAAS,CAAA,CACnN,IAAU,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,YAAY,YAAe,GAAoB,EAAO,KAAM,EAAO,SAAS,WAAE,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,cAAgB,CAAA,CAAS,CAAA,CAC3N,IAAoB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,gBAAgB,YAAe,GAAa,CAAE,GAAG,EAAkB,kBAAiB,CAAE,OAAO,WAAE,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,cAAgB,CAAA,CAAS,CAAA,EACvP,EAAA,EAAA,MAAC,GAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,GAAD,CAAqB,QAAA,aACnB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,6BAAmB,EAAA,EAAA,KAAC,EAAD,CAAgB,UAAU,cAAgB,CAAA,CAAS,CAAA,CACnG,CAAA,EACtB,EAAA,EAAA,MAAC,GAAD,CAAqB,MAAM,eAA3B,CACG,IAAmB,EAAA,EAAA,MAAC,GAAD,CAAkB,SAAU,EAAiB,YAAe,KAAK,GAAoB,UAArF,EAAuF,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,cAAgB,CAAA,CAAA,WAA2B,GACzK,IAAgB,EAAA,EAAA,MAAC,GAAD,CAAkB,QAAS,YAA3B,EAA2C,EAAA,EAAA,KAAC,GAAD,CAAY,UAAU,cAAgB,CAAA,CAAA,YAA4B,IAC5H,EAAM,cAAgB,WAAa,EAAM,cAAgB,SAAW,EAAM,oBAAqB,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,EAAY,uBAAwB,QAAQ,GAAY,EAAM,CAAC,4EAA+E,GAAgB,EAAM,kBAAoB,QAAQ,CAAC,UAAlO,EAAoO,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,cAAgB,CAAA,CAAA,aAA6B,GACjY,KAAc,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,EAAY,gBAAiB,uBAAuB,GAAY,EAAM,CAAC,OAAU,GAAc,EAAO,UAAU,CAAC,UAAlJ,EAAoJ,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,cAAgB,CAAA,CAAA,UAA0B,GACjO,KAAmB,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,EAAY,gBAAiB,qBAAqB,GAAY,EAAM,CAAC,OAAU,GAAc,EAAO,eAAe,CAAC,UAArJ,EAAuJ,EAAA,EAAA,KAAC,EAAD,CAAQ,UAAU,cAAgB,CAAA,CAAA,gBAAgC,GAC5O,IAAe,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,EAAY,iBAAkB,YAAY,GAAY,EAAM,CAAC,OAAU,GAAc,EAAO,WAAW,CAAC,UAAzI,EAA2I,EAAA,EAAA,KAAC,EAAD,CAAO,UAAU,cAAgB,CAAA,CAAA,WAA2B,GACtN,GAAS,OAAO,EAAM,MAAM,KAAQ,UAAY,EAAM,KAAK,MAAO,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,KAAK,GAAkB,EAAM,UAA9D,EAAgE,EAAA,EAAA,KAAC,GAAD,CAAY,UAAU,cAAgB,CAAA,CAAA,aAA6B,GACrM,GAAS,GAAU,EAAO,SAAS,OAAS,IAAK,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,GAAc,EAAM,GAAI,EAAO,SAAS,UAAzE,EAA2E,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,cAAgB,CAAA,CAAA,OAAuB,IACrL,GAAmB,IAAc,IAAmB,KAAgB,EAAA,EAAA,KAAC,GAAD,EAAyB,CAAA,CAC9F,IAAU,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,GAAsB,EAAoB,UAA3E,EAA6E,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,cAAgB,CAAA,CAAA,cAA8B,GACtJ,IAAU,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,GAAoB,EAAO,KAAM,EAAO,SAAS,UAAlF,EAAoF,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,cAAgB,CAAA,CAAA,YAA4B,GAC9J,IAAoB,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,GAAa,CAAE,GAAG,EAAkB,kBAAiB,CAAE,OAAO,UAA/F,EAAiG,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,cAAgB,CAAA,CAAA,WAA2B,GACjK,GACT,CAAA,CAAA,CACd,CAAA,CAAA,CAED,CAAA,CACF,GCvKhB,SAAgB,GAAc,CAC5B,QACA,WACA,QACA,gBACA,SACA,SACA,WASC,CACD,IAAM,GAAA,EAAA,EAAA,QAAoC,KAAK,CACzC,EAAW,EAAM,MAAM,CAAC,OAAS,EACjC,EAAY,GAAY,IAAU,EAExC,SAAS,EAAc,EAA0C,CAC/D,GAAI,EAAE,MAAQ,SAAU,CACtB,EAAE,gBAAgB,CAClB,GAAS,CACT,OAEE,EAAE,MAAQ,UACZ,EAAE,gBAAgB,CACd,EAAE,SAAU,GAAQ,CACnB,GAAQ,EAIjB,OACE,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,wFAAnB,EACE,EAAA,EAAA,KAAC,EAAD,CAAQ,UAAU,6CAA+C,CAAA,EACjE,EAAA,EAAA,KAAC,GAAD,CACE,IAAK,EACL,UAAA,GACA,MAAO,EACP,SAAW,GAAM,EAAc,EAAE,OAAO,MAAM,CAC9C,UAAW,EACX,YAAY,oBACZ,aAAW,mBACX,UAAU,qBACV,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CACE,UACE,kCAAoC,EAAY,eAAiB,kCAGlE,EAAY,EAAY,aAAe,GAAG,EAAS,GAAG,IAAW,GAC7D,CAAA,EACP,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,8CAAf,EACE,EAAA,EAAA,KAAC,EAAD,CACE,KAAK,SACL,QAAQ,QACR,KAAK,UACL,MAAM,+BACN,SAAU,IAAU,EACpB,QAAS,YAET,EAAA,EAAA,KAAC,GAAD,CAAW,UAAU,cAAgB,CAAA,CAC9B,CAAA,EACT,EAAA,EAAA,KAAC,EAAD,CACE,KAAK,SACL,QAAQ,QACR,KAAK,UACL,MAAM,qBACN,SAAU,IAAU,EACpB,QAAS,YAET,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,cAAgB,CAAA,CAChC,CAAA,EACT,EAAA,EAAA,KAAC,EAAD,CAAQ,KAAK,SAAS,QAAQ,QAAQ,KAAK,UAAU,MAAM,qBAAqB,QAAS,YACvF,EAAA,EAAA,KAAC,EAAD,CAAG,UAAU,cAAgB,CAAA,CACtB,CAAA,CACL,GACE,GCnFd,SAAgB,GAAa,CAC3B,UACA,cACA,WACA,WAMC,CAED,OADI,EAAQ,SAAW,EAAU,MAE/B,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0JACZ,EAAQ,KAAK,EAAK,KACjB,EAAA,EAAA,MAAC,SAAD,CAEE,YAAc,GAAM,CAAE,EAAE,gBAAgB,CAAE,EAAS,EAAI,EACvD,iBAAoB,EAAQ,EAAE,CAC9B,UAAW,EAAG,iEAAkE,IAAM,EAAc,YAAc,qBAAqB,UAJzI,EAME,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gCAAwB,EAAI,KAAY,CAAA,CACvD,EAAI,eAAgB,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,kDAA0C,EAAI,aAAoB,CAAA,CACtG,EAAI,cAAe,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,6DAAqD,EAAI,YAAmB,CAAA,CACzG,EARF,EAAI,KAQF,CACT,CACE,CAAA,CCnBV,SAAS,GAAiB,CACxB,QAAO,WAAU,YAAW,UAAS,cAAa,aAQjD,CACD,IAAM,GAAA,EAAA,EAAA,QAA0C,KAAK,CA2BrD,OAzBA,EAAA,EAAA,eAAgB,CACd,IAAM,EAAK,EAAY,QAClB,IACL,EAAG,MAAM,OAAS,OAClB,EAAG,MAAM,OAAS,KAAK,IAAI,EAAG,aAAc,IAAI,CAAG,OAClD,CAAC,EAAM,CAAC,EAGX,EAAA,EAAA,eAAgB,CACd,IAAM,EAAK,OAAO,eAClB,GAAI,CAAC,EAAI,OAET,SAAS,GAAe,CACtB,IAAM,EAAK,EAAY,QACnB,CAAC,GAAM,SAAS,gBAAkB,GAEtC,0BAA4B,CAC1B,EAAG,eAAe,CAAE,MAAO,UAAW,SAAU,SAAU,CAAC,EAC3D,CAIJ,OADA,EAAG,iBAAiB,SAAU,EAAa,KAC9B,EAAG,oBAAoB,SAAU,EAAa,EAC1D,EAAE,CAAC,EAGJ,EAAA,EAAA,KAAC,WAAD,CACE,IAAK,EACE,QACG,WACC,YACF,UACI,cACb,KAAM,EACN,UAAW,EACT,yFACA,4GACA,6CACA,EACD,CACD,CAAA,CAIN,SAAS,GAAyB,CAAE,OAAM,YAA+D,CACvG,GAAM,CAAC,EAAM,IAAA,EAAA,EAAA,UAAoB,GAAM,CACjC,EAAa,GAAQ,EAAK,YAAc,CAAC,EAAK,OAEpD,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,uGAAf,EACE,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,SAAU,CAAC,EACX,YAAe,EAAQ,GAAK,CAC5B,UAAU,oIACV,MAAO,EAAa,gBAAkB,EAAK,kBAE1C,EAAK,YACJ,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,IAAK,EAAK,WAAY,IAAK,EAAK,SAAU,UAAU,6BAA+B,CAAA,EACxF,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,2HACd,EAAA,EAAA,KAAC,GAAD,CAAQ,UAAU,qGAAuG,CAAA,CACpH,CAAA,CACN,CAAA,CAAA,CAEH,EAAK,OAAQ,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,uBAAyB,CAAA,CAAG,EAAK,WAAY,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,6CAA+C,CAAA,EAAG,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,gCAAkC,CAAA,CAEvM,CAAA,EACT,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,gCAAwB,EAAK,SAAa,CAAA,EACvD,EAAA,EAAA,KAAC,IAAD,CAAG,UAAW,EAAG,iCAAkC,EAAK,OAAS,eAAe,UAAG,EAAK,QAAU,EAAK,UAAY,YAAc,GAAY,EAAK,KAAK,EAAM,CAAA,CACzJ,IACN,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,MAAM,oBAAoB,QAAS,YACxE,EAAA,EAAA,KAAC,EAAD,CAAG,UAAU,cAAgB,CAAA,CACtB,CAAA,CACL,GACL,EAAK,aACJ,EAAA,EAAA,KAAC,GAAD,CAAc,OAAM,aAAc,YAChC,EAAA,EAAA,MAAC,GAAD,CAAe,UAAU,yFAAyF,gBAAiB,YAAnI,EACE,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,mBAAW,EAAK,SAAuB,CAAA,EAC9D,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mEAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,IAAK,EAAK,WAAY,IAAK,EAAK,SAAU,UAAU,2CAA6C,CAAA,EACtG,EAAA,EAAA,KAAC,SAAD,CAAQ,KAAK,SAAS,YAAe,EAAQ,GAAM,CAAE,UAAU,mGAAmG,MAAM,kBACtK,EAAA,EAAA,KAAC,EAAD,CAAG,UAAU,UAAY,CAAA,CAClB,CAAA,CACL,GACQ,GACT,CAAA,CAEV,CAAA,CAAA,CAIP,SAAgB,GAAS,CACvB,QACA,cACA,cACA,WACA,oBACA,uBACA,qBACA,eACA,WACA,eACA,mBACA,gBACA,YACA,UACA,gBACA,4BACA,SACA,gBACA,eACA,aACA,YACA,cAwBC,CACD,IAAM,GAAA,EAAA,EAAA,QAAwC,KAAK,CAC7C,CAAC,GAAY,KAAA,EAAA,EAAA,UAA0B,GAAM,CAC7C,EAAgB,CAAC,EAAM,MAAM,EAAI,IAAyB,GAAM,GAAqB,GAAe,EAE1G,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EACT,wFACA,IAAc,sCACf,CACD,WAAa,GAAM,CAAE,EAAE,gBAAgB,CAAE,GAAc,GAAK,EAC5D,gBAAmB,GAAc,GAAM,CACvC,OAAS,GAAM,CACb,EAAE,gBAAgB,CAClB,GAAc,GAAM,CACpB,EAAc,EAAE,aAAa,MAAM,WAVvC,CAaG,EAAmB,OAAS,IAC3B,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0CACZ,EAAmB,IAAK,IACvB,EAAA,EAAA,KAAC,GAAD,CAA8C,OAAM,aAAgB,EAA0B,EAAK,GAAG,CAAI,CAA3E,EAAK,GAAsE,CAC1G,CACE,CAAA,EAER,EAAA,EAAA,KAAC,QAAD,CACE,IAAK,EACL,KAAK,OACL,SAAA,GACA,UAAU,SACV,SAAW,GAAM,CACX,EAAE,OAAO,OAAO,EAAc,EAAE,OAAO,MAAM,CACjD,EAAE,cAAc,MAAQ,IAE1B,CAAA,EACF,EAAA,EAAA,KAAC,GAAD,CAAc,QAAS,EAAc,YAAa,EAAkB,SAAU,EAAe,QAAS,EAAgB,CAAA,EACtH,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0CAAf,EACE,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,QACR,KAAK,OACL,MAAM,eACN,SAAU,EACV,YAAe,EAAa,SAAS,OAAO,CAC5C,UAAU,yDAEV,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,UAAY,CAAA,CAC1B,CAAA,EACT,EAAA,EAAA,KAAC,GAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAc,EAAE,OAAO,MAAM,CACnC,YACF,UACI,cACb,UAAU,SACV,CAAA,CACD,IACC,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,QACR,KAAK,OACL,MAAO,IAAa,YAAc,wBAA0B,eAC5D,SAAU,GAAe,IAAa,eACtC,cAAgB,GAAM,CAAE,EAAE,gBAAgB,CAAE,EAAE,cAAc,kBAAkB,EAAE,UAAU,CAAE,GAAY,EACxG,YAAc,GAAM,CAAE,EAAE,gBAAgB,CAAE,GAAI,CAAE,EAAE,cAAc,sBAAsB,EAAE,UAAU,MAAS,EAAiB,GAAW,EACvI,UAAW,gDAAgD,IAAa,YAAc,6BAA+B,cAEpH,IAAa,gBAAiB,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,uBAAyB,CAAA,EAAG,EAAA,EAAA,KAAC,EAAD,CAAK,UAAU,UAAY,CAAA,CAClG,CAAA,EAEX,EAAA,EAAA,KAAC,EAAD,CACE,KAAK,OACL,SAAU,EACV,QAAS,EACT,UAAU,yDAEV,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,UAAY,CAAA,CACrB,CAAA,CACL,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,EACE,EAAA,EAAA,KAAC,GAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAc,EAAE,OAAO,MAAM,CACnC,YACF,UACI,cACb,UAAU,SACV,CAAA,EACF,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6CAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mCAAf,EACE,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,QACR,KAAK,OACL,MAAM,eACN,SAAU,EACV,YAAe,EAAa,SAAS,OAAO,CAC5C,UAAU,+BAEV,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,UAAY,CAAA,CAC1B,CAAA,CACR,IACC,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,QACR,KAAK,OACL,MAAO,IAAa,YAAc,wBAA0B,eAC5D,SAAU,GAAe,IAAa,eACtC,cAAgB,GAAM,CAAE,EAAE,gBAAgB,CAAE,EAAE,cAAc,kBAAkB,EAAE,UAAU,CAAE,GAAY,EACxG,YAAc,GAAM,CAAE,EAAE,gBAAgB,CAAE,GAAI,CAAE,EAAE,cAAc,sBAAsB,EAAE,UAAU,MAAS,EAAiB,GAAW,EACvI,UAAW,sBAAsB,IAAa,YAAc,6BAA+B,cAE1F,IAAa,gBAAiB,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,uBAAyB,CAAA,EAAG,EAAA,EAAA,KAAC,EAAD,CAAK,UAAU,UAAY,CAAA,CAClG,CAAA,CAEP,IACN,EAAA,EAAA,KAAC,EAAD,CACE,KAAK,OACL,SAAU,EACV,QAAS,EACT,UAAU,+BAEV,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,UAAY,CAAA,CACrB,CAAA,CACL,GACF,GACL,IACC,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,gEACV,EACC,CAAA,CAEF,oBC9RV,SAAgB,GAAoB,CAClC,UACA,QACA,cACA,eACA,gBAOC,CACD,GAAM,CAAE,UAAW,EAEb,EAAQ,KAAK,IAAI,IAAK,OAAO,WAAa,GAAG,CAC7C,EAAS,KAAK,IAAI,IAAK,OAAO,YAAc,GAAG,CAC/C,EAAO,KAAK,IAAI,GAAI,KAAK,IAAI,EAAO,KAAM,OAAO,WAAa,EAAQ,GAAG,CAAC,CAQhF,OAAA,EAAA,GAAA,eACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,mGACV,MAAO,CAAE,IAVM,OAAO,YAAc,EAAO,QACrB,EAAS,EAC/B,EAAO,OAAS,EAChB,EAAO,IAAM,EAAM,GAAU,GAC3B,EAAO,IAAM,EAAM,EACnB,KAAK,IAAI,GAAI,OAAO,YAAc,EAAS,GAAG,CAKlC,OAAM,QAAO,SAAQ,CACrB,eACA,wBAJhB,EAME,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,8EAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iFAAyE,EAAQ,KAAY,CAAA,CAC5G,IAAS,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,2DAAmD,EAAa,CAAA,EAC1F,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,yDAAgD,eAAmB,CAAA,CAC/E,IACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0BACZ,EAAQ,OAAS,aAChB,EAAA,EAAA,KAAC,GAAD,CAAkB,eAAgB,EAAQ,eAAgB,aAAc,EAAQ,KAAmB,cAAe,CAAA,EAElH,EAAA,EAAA,KAAC,GAAD,CAAa,eAAgB,EAAQ,eAAgB,aAAc,EAAQ,KAAM,KAAM,EAAQ,KAAmB,cAAe,CAAA,CAE/H,CAAA,CACF,GACN,SAAS,KACV,CChDH,IAAM,GAAkC,EAAE,CAE1C,SAAgB,GAAqB,EAAgC,CACnE,OAAO,EAAe,GAAM,EAAE,iBAAiB,IAAY,GAAiB,CCH9E,SAAgB,GAAqB,EAAmB,EAAoB,CAC1E,IAAM,GAAA,EAAA,EAAA,QAA0B,GAAM,EAEtC,EAAA,EAAA,eAAgB,CACd,GAAI,CAAC,EAAU,OAEf,AAEE,EAAiB,WADjB,OAAO,QAAQ,UAAU,CAAE,UAAW,GAAM,CAAE,GAAG,CACtB,IAG7B,SAAS,EAAe,EAAkB,EACpC,EAAE,OAAO,YAAc,IAAA,IAAa,CAAC,EAAiB,WAExD,OAAO,QAAQ,UAAU,CAAE,UAAW,GAAM,CAAE,GAAG,CACjD,GAAQ,EAIZ,SAAS,EAAmB,EAAsB,CAChD,EAAE,gBAAgB,CAKpB,OAFA,OAAO,iBAAiB,WAAY,EAAe,CACnD,OAAO,iBAAiB,eAAgB,EAAmB,KAC9C,CACX,OAAO,oBAAoB,WAAY,EAAe,CACtD,OAAO,oBAAoB,eAAgB,EAAmB,GAE/D,CAAC,EAAU,EAAO,CAAC,EAEtB,EAAA,EAAA,eAAgB,CACV,CAAC,GAAY,EAAiB,UAChC,EAAiB,QAAU,KAE5B,CAAC,EAAS,CAAC,CC7BhB,SAAgB,GAAa,EAAc,EAAwB,CACjE,IAAM,EAAW,EAAK,aAAa,CAC7B,EAAS,EAAM,MAAM,CAAC,aAAa,CASzC,OARK,EACD,EAAS,SAAS,EAAO,CAAS,GAGlC,KAAK,KAAK,EAAO,EAGjB,EAAO,OAAS,EAAU,GACvB,GAAc,EAAU,EAAO,CARlB,GAatB,SAAS,GAAc,EAAkB,EAAgB,EAAS,EAAY,CAC5E,IAAI,EAAI,EACJ,EAAY,GAChB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,QAAU,EAAI,EAAO,OAAQ,GAAK,EAC7D,GAAI,EAAS,KAAO,EAAO,GAAI,CAC7B,GAAI,IAAc,IAAM,EAAI,EAAY,EAAI,EAAQ,MAAO,GAC3D,EAAY,EACZ,GAAK,EAGT,OAAO,IAAM,EAAO,OAKtB,SAAgB,GAAe,EAA2B,EAAyB,CACjF,IAAM,EAAS,EAAM,MAAM,CAC3B,GAAI,CAAC,EAAQ,MAAO,EAAE,CACtB,IAAM,EAAiB,EAAE,CACzB,IAAK,IAAM,KAAS,EAAU,CAC5B,IAAM,EAAO,GAAkB,EAAM,CACjC,GAAQ,GAAa,EAAM,EAAO,EAAE,EAAK,KAAK,GAAiB,EAAM,CAAC,CAE5E,OAAO,ECpBT,SAAgB,GAAc,EAAuC,CACnE,GAAM,CAAC,EAAM,IAAA,EAAA,EAAA,UAAoB,GAAM,CACjC,CAAC,EAAO,IAAA,EAAA,EAAA,UAA0B,GAAG,CACrC,CAAC,EAAO,IAAA,EAAA,EAAA,UAAqB,EAAE,CAE/B,GAAA,EAAA,EAAA,aAA2B,EAAO,GAAe,EAAU,EAAM,CAAG,EAAE,CAAG,CAAC,EAAM,EAAO,EAAS,CAAC,CACjG,GAAA,EAAA,EAAA,aAA4B,IAAI,IAAI,EAAU,CAAE,CAAC,EAAU,CAAC,CAC5D,EAAQ,EAAU,OAClB,EAAY,EAAQ,KAAK,IAAI,EAAO,EAAQ,EAAE,CAAG,EACjD,EAAa,EAAQ,EAAU,IAAc,KAAO,KAEpD,GAAA,EAAA,EAAA,iBAA+B,EAAQ,GAAK,CAAE,EAAE,CAAC,CACjD,GAAA,EAAA,EAAA,iBAA0B,CAC9B,EAAQ,GAAM,CACd,EAAc,GAAG,CACjB,EAAS,EAAE,EACV,EAAE,CAAC,CAEA,GAAA,EAAA,EAAA,aAAwB,GAAkB,CAC9C,EAAc,EAAM,CACpB,EAAS,EAAE,EACV,EAAE,CAAC,CACA,GAAA,EAAA,EAAA,iBAAyB,CAC7B,EAAU,GAAO,GAAS,EAAI,GAAK,EAAQ,EAAG,EAC7C,CAAC,EAAM,CAAC,CACL,GAAA,EAAA,EAAA,iBAAyB,CAC7B,EAAU,GAAO,GAAS,EAAI,EAAI,GAAS,EAAQ,EAAG,EACrD,CAAC,EAAM,CAAC,CAEX,MAAO,CACL,OACA,QACA,YACA,cACA,QACA,SAAU,EAAQ,EAAY,EAAI,EAClC,aACA,aACA,QACA,WACA,OACA,OACD,CCnEH,IAAM,GAAe,IAQrB,SAAgB,GAAqB,EAAiB,EAAuB,CAC3E,IAAM,EAAmB,EAAe,GAAM,EAAE,iBAAiB,CAC3D,GAAA,EAAA,EAAA,QAAmB,EAAO,CAChC,EAAU,QAAU,GAIpB,EAAA,EAAA,eAAgB,CACd,GAAI,CAAC,EAAS,OACd,EAAsB,EAAS,EAAU,QAAQ,CACjD,IAAM,EAAQ,gBAAkB,CAAE,EAAsB,EAAS,EAAU,QAAQ,EAAI,GAAa,CACpG,UAAa,CACX,cAAc,EAAM,CACpB,EAAsB,EAAS,GAAO,GAAK,GAE5C,CAAC,EAAS,EAAiB,CAAC,EAG/B,EAAA,EAAA,eAAgB,CACT,GACL,EAAsB,EAAS,EAAO,EACrC,CAAC,EAAS,EAAQ,EAAiB,CAAC,CC7BzC,IAAM,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EACnC,SAAS,GAAG,EAAG,CACb,UAAa,EAEf,SAAS,GAAG,EAAG,CACb,GAAG,CAEL,SAAS,GAAG,EAAG,EAAG,CAChB,MAAQ,IAAM,EAAE,EAAE,EAAE,CAAC,CAEvB,SAAS,GAAG,EAAG,EAAG,CAChB,UAAa,EAAE,EAAE,CAEnB,SAAS,GAAG,EAAG,EAAG,CAChB,MAAQ,IAAM,EAAE,EAAG,EAAE,CAEvB,SAAS,GAAG,EAAG,CACb,OAAO,IAAM,IAAK,GAEpB,SAAS,GAAG,GAAG,EAAG,CAChB,UAAa,CACX,EAAE,IAAI,GAAG,EAGb,SAAS,IAAK,EAEd,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,EAAE,EAAE,CAAE,EAEf,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,EAAE,EAAE,CAEb,SAAS,EAAG,GAAG,EAAG,CAChB,OAAO,EAET,SAAS,EAAE,EAAG,EAAG,CACf,OAAO,EAAE,GAAI,EAAE,CAEjB,SAAS,EAAE,EAAG,EAAG,CACf,EAAE,GAAI,EAAE,CAEV,SAAS,GAAG,EAAG,CACb,EAAE,GAAG,CAEP,SAAS,EAAG,EAAG,CACb,OAAO,EAAE,GAAG,CAEd,SAAS,EAAE,EAAG,EAAG,CACf,OAAO,EAAE,EAAG,GAAG,EAAG,GAAG,CAAC,CAExB,SAAS,GAAG,EAAG,EAAG,CAChB,IAAM,EAAI,EAAE,GAAK,GAAM,CACrB,GAAG,CAAE,EAAE,EAAE,EACT,CACF,OAAO,EAET,SAAS,GAAG,EAAG,CACb,IAAI,EAAG,EACP,MAAQ,IAAO,GAAM,CACnB,EAAI,EAAG,GAAK,aAAa,EAAE,CAAE,EAAI,eAAiB,CAChD,EAAE,EAAE,EACH,EAAE,EAGT,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,IAAM,EAEf,SAAS,EAAG,EAAI,GAAI,CAClB,IAAI,EACJ,MAAQ,IAAO,GAAM,CACnB,EAAE,EAAG,EAAE,GAAK,EAAI,EAAG,EAAE,EAAE,GAG3B,SAAS,EAAE,EAAG,CACZ,MAAQ,IAAO,GAAM,CACnB,EAAE,EAAE,EAAI,EAAE,EAAE,EAGhB,SAAS,EAAE,EAAG,CACZ,MAAQ,IAAM,GAAG,EAAG,EAAE,CAExB,SAAS,GAAG,EAAG,CACb,MAAQ,QAAY,CAClB,EAAE,EAAE,EAGR,SAAS,EAAE,EAAG,GAAG,EAAG,CAClB,IAAM,EAAI,GAAG,GAAG,EAAE,CAClB,QAAS,EAAG,IAAM,CAChB,OAAQ,EAAR,CACE,KAAK,GACH,GAAG,EAAE,CACL,OACF,KAAK,GACH,OAAO,EAAE,EAAG,EAAE,EAAE,CAAC,IAIzB,SAAS,GAAG,EAAG,EAAG,CAChB,MAAQ,IAAO,GAAM,CACnB,EAAE,EAAI,EAAE,EAAG,EAAE,CAAC,EAGlB,SAAS,GAAG,EAAG,CACb,MAAQ,IAAO,GAAM,CACnB,EAAI,EAAI,IAAM,EAAE,EAAE,EAGtB,SAAS,GAAG,EAAG,CACb,IAAI,EAAI,KAAM,EACd,MAAQ,IAAO,GAAM,CACnB,EAAI,EAAG,CAAC,IAAM,EAAI,eAAiB,CACjC,EAAI,IAAK,GAAG,EAAE,EAAE,EACf,EAAE,GAGT,SAAS,EAAE,GAAG,EAAG,CACf,IAAM,EAAQ,MAAM,EAAE,OAAO,CACzB,EAAI,EAAG,EAAI,KACT,EAAI,GAAK,EAAE,OAAS,EAC1B,OAAO,EAAE,SAAS,EAAG,IAAM,CACzB,IAAM,EAAI,GAAK,EACf,EAAE,EAAI,GAAM,CACV,IAAM,EAAI,EACV,GAAK,EAAG,EAAE,GAAK,EAAG,IAAM,GAAK,IAAM,GAAK,IAAM,GAAG,CAAE,EAAI,OACvD,EACF,CAAG,GAAO,GAAM,CAChB,IAAM,MAAU,CACd,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,EAElB,IAAM,EAAI,GAAG,CAAG,EAAI,GAGxB,SAAS,GAAG,GAAG,EAAG,CAChB,MAAQ,IAAM,EAAE,YAAY,GAAI,EAAE,CAEpC,SAAS,GAAG,EAAG,CACb,IAAI,EAAG,EACD,MAAU,KAAK,CACrB,OAAO,SAAS,EAAG,EAAG,CACpB,OAAQ,EAAR,CACE,KAAK,GACH,OAAO,EAAI,IAAM,EAAI,IAAK,IAAK,GAAG,CAAE,EAAI,EAAG,EAAI,EAAE,EAAG,EAAE,CAAE,IAAM,GAAG,CAAE,IACrE,KAAK,GACH,GAAG,CAAE,EAAI,KACT,SAIR,SAAS,EAAE,EAAG,CACZ,IAAI,EAAI,EACF,EAAI,GAAG,CACb,QAAS,EAAG,IAAM,CAChB,OAAQ,EAAR,CACE,KAAK,GACH,EAAI,EACJ,MACF,KAAK,GACH,EAAE,EAAE,CACJ,MAEF,KAAK,GACH,OAAO,EAEX,OAAO,EAAE,EAAG,EAAE,GAGlB,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,GAAG,EAAE,EAAE,CAAG,GAAM,EAAE,EAAG,EAAE,CAAC,CAEjC,SAAS,GAAI,CACX,IAAM,EAAI,EAAE,CACZ,QAAS,EAAG,IAAM,CAChB,OAAQ,EAAR,CACE,KAAK,GACH,EAAE,OAAO,CAAC,QAAS,GAAM,CACvB,EAAE,EAAE,EACJ,CACF,OACF,KAAK,GACH,EAAE,OAAO,EAAG,EAAE,OAAO,CACrB,OACF,KAAK,GACH,OAAO,EAAE,KAAK,EAAE,KAAQ,CACtB,IAAM,EAAI,EAAE,QAAQ,EAAE,CACtB,EAAI,IAAM,EAAE,OAAO,EAAG,EAAE,KAKlC,SAAS,GAAG,EAAG,CACb,OAAO,GAAG,GAAG,CAAG,GAAM,EAAE,EAAG,EAAE,CAAC,CAEhC,SAAS,EAAE,EAAG,EAAI,EAAE,CAAE,CAAE,UAAW,GAAM,CAAE,UAAW,CAAC,EAAG,CAAE,CAC1D,MAAO,CACL,YAAa,EACb,aAAc,EACd,GAAI,IAAI,CACR,UAAW,EACZ,CAEH,IAAM,OAAW,QAAQ,CACzB,SAAS,GAAG,EAAG,CACb,IAAM,EAAoB,IAAI,IAAO,GAAK,CAAE,YAAa,EAAG,aAAc,EAAG,GAAI,EAAG,UAAW,KAAQ,CACrG,GAAI,GAAK,EAAE,IAAI,EAAE,CACf,OAAO,EAAE,IAAI,EAAE,CACjB,IAAM,EAAI,EAAE,EAAE,IAAK,GAAM,EAAE,EAAE,CAAC,CAAC,CAC/B,OAAO,GAAK,EAAE,IAAI,EAAG,EAAE,CAAE,GAE3B,OAAO,EAAE,EAAE,CAEb,SAAS,GAAG,GAAG,EAAG,CAChB,IAAM,EAAI,GAAG,CAAE,EAAQ,MAAM,EAAE,OAAO,CAClC,EAAI,EACF,EAAI,GAAK,EAAE,OAAS,EAC1B,OAAO,EAAE,SAAS,EAAG,IAAM,CACzB,IAAM,EAAI,GAAK,EACf,EAAE,EAAI,GAAM,CACV,EAAE,GAAK,EAAG,GAAK,EAAG,IAAM,GAAK,EAAE,EAAG,EAAE,EACpC,EACF,CAAE,SAAS,EAAG,EAAG,CACjB,OAAQ,EAAR,CACE,KAAK,GACH,GAAG,EAAE,CACL,OAEF,KAAK,GACH,OAAO,IAAM,GAAK,EAAE,EAAE,CAAE,EAAE,EAAG,EAAE,GAIvC,SAAS,EAAE,EAAG,EAAI,GAAI,CACpB,OAAO,EAAE,EAAG,EAAG,EAAE,CAAC,CAEpB,SAAS,GAAG,GAAG,EAAG,CAChB,OAAO,SAAS,EAAG,EAAG,CACpB,OAAQ,EAAR,CACE,KAAK,GACH,OACF,KAAK,GACH,OAAO,GAAG,GAAG,EAAE,IAAK,GAAM,EAAE,EAAG,EAAE,CAAC,CAAC,GAI3C,IAAM,GAAK,CAET,MAAO,EAEP,KAAM,EAEN,KAAM,EAEN,MAAO,EACR,CAAE,GAAK,EACL,GAAG,OAAQ,SACX,GAAG,OAAQ,SACX,GAAG,MAAO,OACV,GAAG,MAAO,OACZ,CAAE,OAAW,OAAO,WAAa,IAAM,OAAS,WAAY,GAAK,MAC1D,CACJ,IAAM,EAAI,EAAE,GAAG,MAAM,CACrB,MAAO,CACL,IAAK,GAAG,EAAG,EAAG,EAAI,GAAG,OAAS,CAE5B,IADU,IAAI,CAAC,oBAAsB,EAAG,EAAE,GAChC,QAAQ,GAAG,IACnB,4BACA,oCACA,iBACA,EACA,EACD,EACD,CACF,SAAU,EACX,EAEH,EAAE,CACF,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAqB,IAAI,QAC5B,SAAS,GAAG,EAAG,CACb,MAAO,SAAU,EAAI,EAAE,SAAS,gBAAkB,EAEpD,SAAS,GAAG,EAAG,CACb,IAAM,EAAI,GAAG,EAAE,CAAE,EAAI,GAAG,IAAI,EAAE,CAC9B,GAAI,IAAM,IAAK,GACb,OAAO,EACT,IAAM,EAAI,EAAE,cAAc,YAAY,iBAAiB,EAAE,CAAC,YAAc,MACxE,OAAO,GAAG,IAAI,EAAG,EAAE,CAAE,EAEvB,SAAS,GAAG,EAAG,CACb,GAAG,OAAO,GAAG,EAAE,CAAC,CAElB,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,GAAG,EAAE,CAAG,CAAC,EAAI,EAEtB,IAAM,GAAK,GACX,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,GAAG,EAAG,EAAE,CAEjB,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,GAAG,EAAG,EAAG,EAAE,CAAC,YAErB,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,IAAM,EAAA,EAAM,OAAO,KAAK,CACpB,EAAK,GAAM,GAET,EAAA,EAAM,YAAc,OAAO,eAAiB,IAAM,IAAI,eAAgB,GAAM,CAChF,IAAM,MAAU,CACd,IAAM,EAAI,EAAE,GAAG,OACf,EAAE,eAAiB,MAAQ,EAAE,EAAE,EAEjC,EAAI,GAAG,CAAG,sBAAsB,EAAE,EAClC,CAAG,KAAM,CAAC,EAAG,EAAE,CAAC,CAClB,MAAO,GAAK,GAAM,CAChB,GAAK,GAAK,GAAG,QAAQ,EAAE,CAAE,EAAE,QAAU,IAAM,EAAE,SAAW,GAAG,UAAU,EAAE,QAAQ,CAAE,EAAE,QAAU,OAC5F,CAAE,YAAa,EAAG,IAAK,EAAG,CAE/B,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAqBrC,OAAO,GAAA,EApBK,YACT,GAAM,CACL,IAAM,EAAI,GAAG,EAAE,SAAU,EAAG,EAAI,cAAgB,eAAgB,EAAE,CAC9D,EAAI,EAAE,cACV,KAAO,EAAE,QAAQ,mBAAqB,IAAK,IACzC,EAAI,EAAE,cACR,IAAM,EAAI,EAAE,iBAAiB,QAAQ,eAAiB,SAClD,EACJ,IAAM,EAAI,EAAE,cAAc,aAC1B,IAAM,EAAI,EAAI,EAAI,EAAE,YAAc,EAAE,aAAe,EAAI,EAAI,EAAE,SAAS,gBAAgB,YAAc,EAAE,SAAS,gBAAgB,aAAe,EAAI,EAAE,YAAc,EAAE,aAAc,EAAI,EAAI,EAAI,EAAE,YAAc,EAAE,aAAe,EAAI,EAAI,EAAE,WAAa,EAAE,YAAc,EAAI,EAAE,YAAc,EAAE,aAAc,EAAI,EAAI,EAAI,GAAG,EAAG,EAAE,WAAW,CAAG,EAAE,UAAY,EAAI,EAAI,GAAG,EAAG,EAAE,SAAW,EAAE,SAAS,gBAAgB,WAAW,CAAG,EAAE,SAAW,EAAE,SAAS,gBAAgB,UAAY,EAAI,GAAG,EAAG,EAAE,WAAW,CAAG,EAAE,UAC9e,EAAE,CACA,aAAc,EACd,UAAW,KAAK,IAAI,EAAG,EAAE,CACzB,eAAgB,EACjB,CAAC,CAAE,IACF,EAAI,GAAG,aAAc,iBAAiB,EAAE,CAAC,UAAW,EAAE,CAAG,GAAG,UAAW,iBAAiB,EAAE,CAAC,OAAQ,EAAE,CACtG,CAAE,IAAM,MAAQ,EAAE,EAAE,EAEvB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CAEZ,CAAE,EAAG,EAAE,CAEpB,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,CACtB,IAAM,EAAI,EAAE,OACZ,GAAI,IAAM,EACR,OAAO,KACT,IAAM,EAAI,EAAE,CACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,IAAM,EAAI,EAAE,KAAK,EAAE,CACnB,GAAI,EAAE,QAAQ,QAAU,IAAK,GAC3B,SACF,IAAM,EAAI,SAAS,EAAE,QAAQ,MAAM,CAAE,EAAI,WAAW,EAAE,QAAQ,UAAU,CAAE,EAAI,EAAE,EAAG,EAAE,CACrF,GAAI,IAAM,GAAK,EAAE,6CAA8C,CAAE,MAAO,EAAG,CAAE,GAAG,MAAM,CAAE,IAAM,EAC5F,SACF,IAAM,EAAI,EAAE,EAAE,OAAS,GACvB,EAAE,SAAW,GAAK,EAAE,OAAS,GAAK,EAAE,WAAa,EAAI,EAAI,EAAE,KAAK,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,EAAG,CAAC,CAAG,EAAE,EAAE,OAAS,GAAG,WAE7H,OAAO,EAET,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,IAAM,UAAY,GAAG,SAAS,KAAK,GAAK,CAAC,GAAK,EAAE,GAAG,EAAE,4CAA6C,EAAG,GAAG,KAAK,CAAE,IAAM,SAAW,EAAI,SAAS,GAAK,IAAK,GAAG,CAEnK,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,IAAM,EAAA,EAAM,OAAO,KAAK,CAAE,EAAA,EAAM,YAC7B,GAAM,CACL,GAAI,CAAC,GAAG,aACN,OACF,IAAM,EAAI,EAAE,uBAAuB,CAAE,EAAI,EAAE,MACvC,EAAG,EACP,GAAI,EAAG,CACL,IAAM,EAAI,EAAE,uBAAuB,CAAE,EAAI,EAAE,IAAM,EAAE,IACnD,EAAI,EAAE,OAAS,KAAK,IAAI,EAAG,EAAE,CAAE,EAAI,EAAI,EAAE,cACpC,CACL,IAAM,EAAI,EAAE,QAAQ,cAAc,YAClC,EAAI,EAAE,YAAc,KAAK,IAAI,EAAG,EAAE,IAAI,CAAE,EAAI,EAAE,IAAM,EAAE,QAExD,EAAE,QAAU,CACV,WAAY,EAAE,OACd,UAAW,EACX,cAAe,EACf,aAAc,EACf,CAAE,EAAE,EAAE,QAAQ,EAGjB,CAAC,EAAG,EAAE,CACP,CAAE,CAAE,YAAa,EAAG,IAAK,GAAM,GAAG,EAAG,CAAC,EAAG,EAAE,CAAE,EAAA,EAAM,gBAAkB,CACpE,EAAE,EAAE,QAAQ,EACX,CAAC,EAAG,EAAE,CAAC,CACV,OAAA,EAAS,cAAgB,CACvB,GAAI,EAAG,CACL,EAAE,iBAAiB,SAAU,EAAE,CAC/B,IAAM,EAAI,IAAI,mBAAqB,CACjC,sBAAsB,EAAE,EACxB,CACF,OAAO,EAAE,QAAQ,EAAE,KAAQ,CACzB,EAAE,oBAAoB,SAAU,EAAE,CAAE,EAAE,UAAU,EAAE,EAGtD,IAAM,EAAI,EAAE,SAAS,cAAc,YACnC,OAAO,GAAG,iBAAiB,SAAU,EAAE,CAAE,GAAG,iBAAiB,SAAU,EAAE,KAAQ,CAC/E,GAAG,oBAAoB,SAAU,EAAE,CAAE,GAAG,oBAAoB,SAAU,EAAE,GAEzE,CAAC,EAAG,EAAG,EAAE,CAAC,CAAE,EAEjB,IAAM,GAAK,MACH,CACJ,IAAM,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,CAAC,EAAE,CAChK,OAAO,EACL,EACE,EACA,GAAG,CAAE,UAAW,KAAQ,EAAE,CAC3B,CACD,EACD,CAAE,EACD,EACE,EACA,GAAG,CAAE,aAAc,KAAQ,EAAE,CAC9B,CACD,EACD,CAAE,EAAE,EAAG,EAAE,CAAE,CACV,UAAW,EACX,kBAAmB,EACnB,kBAAmB,EACnB,aAAc,EACd,aAAc,EACd,oBAAqB,EACrB,SAAU,EAEV,qBAAsB,EACtB,aAAc,EACd,oBAAqB,EAErB,SAAU,EACV,UAAW,EACX,mCAAoC,EACpC,0BAA2B,EAE3B,kBAAmB,EACnB,eAAgB,EACjB,EAEH,EAAE,CACF,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,CAAE,IAAK,EAAG,CAClB,SAAS,GAAG,EAAG,EAAG,CAChB,IAAM,EAAI,EAAE,OACZ,GAAI,IAAM,EACR,MAAO,EAAE,CACX,GAAI,CAAE,MAAO,EAAG,MAAO,GAAM,EAAE,EAAE,GAAG,CAC9B,EAAI,EAAE,CACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,GAAM,CAAE,MAAO,EAAG,MAAO,GAAM,EAAE,EAAE,GAAG,CACtC,EAAE,KAAK,CAAE,IAAK,EAAI,EAAG,MAAO,EAAG,MAAO,EAAG,CAAC,CAAE,EAAI,EAAG,EAAI,EAEzD,OAAO,EAAE,KAAK,CAAE,IAAK,IAAO,MAAO,EAAG,MAAO,EAAG,CAAC,CAAE,EAErD,SAAS,EAAE,EAAG,CACZ,OAAO,IAAM,GAEf,SAAS,GAAG,EAAG,EAAG,CAChB,GAAI,CAAC,EAAE,EAAE,CACP,OAAO,IAAM,EAAE,EAAI,EAAE,EAAI,EAAI,EAAE,EAAI,GAAG,EAAE,EAAG,EAAE,CAAG,GAAG,EAAE,EAAG,EAAE,CAE9D,SAAS,GAAG,EAAG,EAAG,EAAI,IAAK,CACzB,GAAI,EAAE,EAAE,CACN,MAAO,CAAC,KAAQ,IAAK,GAAE,CACzB,GAAI,OAAO,EAAE,GAAG,GAAK,EACnB,MAAO,CAAC,EAAE,EAAG,EAAE,EAAE,CACnB,GAAI,OAAO,EAAE,GAAG,CAAG,EAAG,CACpB,IAAM,EAAI,GAAG,EAAE,EAAG,EAAG,EAAE,CACvB,OAAO,EAAE,KAAO,KAAS,CAAC,EAAE,EAAG,EAAE,EAAE,CAAG,EAExC,OAAO,GAAG,EAAE,EAAG,EAAG,EAAE,CAEtB,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,EAAE,EAAE,CAAG,GAAG,EAAG,EAAG,EAAE,CAAG,IAAM,EAAE,EAAI,GAAG,EAAG,CAAE,EAAG,EAAG,EAAG,EAAG,CAAC,CAAG,EAAI,EAAE,EAAI,GAAG,GAAG,EAAG,CAAE,EAAG,GAAG,EAAE,EAAG,EAAG,EAAE,CAAE,CAAC,CAAC,CAAG,GAAG,GAAG,EAAG,CAAE,EAAG,GAAG,EAAE,EAAG,EAAG,EAAE,CAAE,CAAC,CAAC,CAE7I,SAAS,IAAK,CACZ,OAAO,GAET,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,EAAE,EAAE,CACN,MAAO,EAAE,CACX,IAAM,EAAI,GAAG,EAAG,EAAE,CAAC,GACnB,OAAO,GAAG,GAAG,EAAG,EAAG,EAAE,CAAC,CAExB,SAAS,GAAG,EAAG,EAAG,CAChB,GAAI,EAAE,EAAE,CACN,OAAO,GACT,GAAM,CAAE,EAAG,EAAG,EAAG,EAAG,KAAM,EAC1B,GAAI,IAAM,EAAG,CACX,GAAI,EAAE,EAAE,CACN,OAAO,EACT,GAAI,EAAE,EAAE,CACN,OAAO,EACT,GAAM,CAAC,EAAG,GAAK,GAAG,EAAE,CACpB,OAAO,GAAG,GAAG,EAAG,CAAE,EAAG,EAAG,EAAG,GAAG,EAAE,CAAE,EAAG,EAAG,CAAC,CAAC,CAE5C,OAAe,GAAR,EAAI,EAAO,GAAG,EAAG,CAAE,EAAG,GAAG,EAAG,EAAE,CAAE,CAAC,CAAO,GAAG,EAAG,CAAE,EAAG,GAAG,EAAG,EAAE,CAAE,CAAC,CAAC,CAExE,SAAS,GAAG,EAAG,CACb,OAAO,EAAE,EAAE,CAAG,EAAE,CAAG,CAAC,GAAG,GAAG,EAAE,EAAE,CAAE,CAAE,EAAG,EAAE,EAAG,EAAG,EAAE,EAAG,CAAE,GAAG,GAAG,EAAE,EAAE,CAAC,CAEjE,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,EAAE,EAAE,CACN,MAAO,EAAE,CACX,GAAM,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAM,EAC/B,EAAI,EAAE,CACV,OAAO,EAAI,IAAM,EAAI,EAAE,OAAO,GAAG,EAAG,EAAG,EAAE,CAAC,EAAG,GAAK,GAAK,GAAK,GAAK,EAAE,KAAK,CAAE,EAAG,EAAG,EAAG,EAAG,CAAC,CAAE,GAAK,IAAM,EAAI,EAAE,OAAO,GAAG,EAAG,EAAG,EAAE,CAAC,EAAG,EAElI,SAAS,GAAG,EAAG,CACb,GAAM,CAAE,EAAG,EAAG,IAAK,EAAM,GAAM,EAC/B,GAAI,EAAE,KAAO,EAAI,GAAK,EAAE,KAAO,EAAI,EACjC,OAAO,EACT,GAAI,EAAI,EAAE,IAAM,EAAG,CACjB,GAAI,GAAG,EAAE,CACP,OAAO,GAAG,GAAG,EAAG,CAAE,IAAK,EAAI,EAAG,CAAC,CAAC,CAClC,GAAI,CAAC,EAAE,EAAE,EAAI,CAAC,EAAE,EAAE,EAAE,CAClB,OAAO,GAAG,EAAE,EAAG,CACb,EAAG,GAAG,EAAG,CAAE,EAAG,EAAE,EAAE,EAAG,CAAC,CACtB,IAAK,EACL,EAAG,GAAG,EAAG,CACP,EAAG,EAAE,EAAE,EACP,IAAK,EAAI,EACV,CAAC,CACH,CAAC,CACJ,MAAU,MAAM,yBAAyB,CAE3C,GAAI,GAAG,EAAE,CACP,OAAO,GAAG,GAAG,EAAG,CAAE,IAAK,EAAI,EAAG,CAAC,CAAC,CAClC,GAAI,CAAC,EAAE,EAAE,EAAI,CAAC,EAAE,EAAE,EAAE,CAAE,CACpB,IAAM,EAAI,EAAE,EAAG,EAAI,GAAG,EAAE,CAAG,EAAE,IAAM,EAAI,EAAE,IACzC,OAAO,GAAG,EAAG,CACX,EAAG,GAAG,EAAG,CACP,IAAK,EAAI,EACT,EAAG,EAAE,EACN,CAAC,CACF,IAAK,EAAE,IAAM,EACb,EAAG,GAAG,GAAG,EAAG,CAAE,EAAG,EAAE,EAAG,IAAK,EAAG,CAAC,CAAC,CACjC,CAAC,CAEJ,MAAU,MAAM,yBAAyB,CAE3C,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,GACL,EAAE,IAAM,IAAK,GAAU,EAAE,EAAR,EAAE,EACnB,EAAE,IAAM,IAAK,GAAU,EAAE,EAAR,EAAE,EACnB,EAAE,MAAQ,IAAK,GAAY,EAAE,IAAV,EAAE,IACrB,EAAE,IAAM,IAAK,GAAU,EAAE,EAAR,EAAE,EACnB,EAAE,IAAM,IAAK,GAAU,EAAE,EAAR,EAAE,EACpB,CAEH,SAAS,GAAG,EAAG,CACb,OAAO,EAAE,EAAE,EAAE,CAAG,EAAE,EAAI,GAAG,GAAG,EAAG,CAAE,EAAG,GAAG,EAAE,EAAE,CAAE,CAAC,CAAC,CAEjD,SAAS,GAAG,EAAG,CACb,OAAO,EAAE,EAAE,EAAI,EAAE,IAAM,EAAE,EAAE,IAE7B,SAAS,GAAG,EAAG,CACb,OAAO,EAAE,EAAE,EAAE,CAAG,CAAC,EAAE,EAAG,EAAE,EAAE,CAAG,GAAG,EAAE,EAAE,CAEtC,SAAS,GAAG,EAAG,EAAG,EAAG,EAAI,GAAI,EAAI,GAAI,CACnC,MAAO,CAAE,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,IAAG,EAAG,EAAG,CAExC,SAAS,GAAG,EAAG,CACb,OAAO,GAAG,GAAG,EAAE,CAAC,CAElB,SAAS,GAAG,EAAG,CACb,GAAM,CAAE,EAAG,GAAM,EACjB,MAAO,CAAC,EAAE,EAAE,EAAI,EAAE,MAAQ,EAAE,IAAM,GAAG,EAAG,CAAE,EAAG,GAAG,EAAG,CAAE,EAAG,EAAE,EAAG,CAAC,CAAE,CAAC,CAAG,EAEtE,SAAS,GAAG,EAAG,CACb,GAAM,CAAE,IAAK,EAAG,EAAG,GAAM,EACzB,MAAO,CAAC,EAAE,EAAE,EAAI,CAAC,EAAE,EAAE,EAAE,EAAI,EAAE,MAAQ,GAAK,EAAE,EAAE,MAAQ,EAAI,GAAG,EAAG,CAAE,EAAG,GAAG,EAAG,CAAE,EAAG,EAAE,EAAG,CAAC,CAAE,IAAK,EAAI,EAAG,CAAC,CAAG,EAE1G,SAAS,GAAG,EAAG,CACb,OAAO,GAAG,GAAI,CAAE,EAAG,EAAG,EAAG,MAAS,CAAE,MAAO,EAAG,MAAO,EAAG,EAAE,CAE5D,SAAS,GAAG,EAAG,EAAG,CAChB,MAAO,CAAC,EAAE,GAAK,EAAE,aAAe,EAAE,YAAc,EAAE,WAAa,EAAE,UAEnE,SAAS,GAAG,EAAG,EAAG,CAChB,MAAO,CAAC,EAAE,GAAK,EAAE,KAAO,EAAE,IAAM,EAAE,KAAO,EAAE,IAE7C,IAAM,GAAK,OACF,CAAE,iBAAkB,EAAE,CAAC,EAAE,CAAE,EAClC,EAAE,CACF,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,EAAE,GAAG,EAAG,EAAG,EAAE,EAEtB,SAAS,GAAG,EAAG,EAAG,EAAG,EAAI,EAAG,CAC1B,IAAI,EAAI,EAAE,OAAS,EACnB,KAAO,GAAK,GAAK,CACf,IAAM,EAAI,KAAK,OAAO,EAAI,GAAK,EAAE,CAAE,EAAI,EAAE,GAAI,EAAI,EAAE,EAAG,EAAE,CACxD,GAAI,IAAM,EACR,OAAO,EACT,GAAI,IAAM,GAAI,CACZ,GAAI,EAAI,EAAI,EACV,OAAO,EAAI,EACb,EAAI,EAAI,MACH,CACL,GAAI,IAAM,EACR,OAAO,EACT,EAAI,EAAI,GAGZ,MAAU,MAAM,2CAA2C,EAAE,KAAK,IAAI,CAAC,iBAAiB,IAAI,CAE9F,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,CACtB,IAAM,EAAI,GAAG,EAAG,EAAG,EAAE,CAAE,EAAI,GAAG,EAAG,EAAG,EAAG,EAAE,CACzC,OAAO,EAAE,MAAM,EAAG,EAAI,EAAE,CAE1B,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,KAAK,MAAM,EAAE,uBAAuB,CAAC,GAAG,CAEjD,SAAS,GAAG,EAAG,CACb,MAAO,CAAC,EAAE,EAAE,gBAAgB,CAE9B,SAAS,GAAG,CAAE,MAAO,GAAK,EAAG,CAC3B,OAAO,IAAM,EAAI,EAAI,EAAI,EAAI,GAAK,EAEpC,SAAS,IAAK,CACZ,MAAO,CACL,aAAc,EAAE,CAChB,gBAAiB,IAAI,CACrB,UAAW,EACX,WAAY,EACZ,SAAU,EACV,WAAY,EAAE,CACd,SAAU,IAAI,CACf,CAEH,SAAS,GAAG,EAAG,EAAG,CAChB,IAAI,EAAI,EAAE,EAAE,CAAG,EAAI,IACnB,IAAK,IAAM,KAAK,EAAG,CACjB,GAAM,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,GAAM,EAChD,GAAI,EAAI,KAAK,IAAI,EAAG,EAAE,CAAE,EAAE,EAAE,CAAE,CAC5B,EAAI,GAAG,EAAG,EAAG,EAAE,CACf,SAEF,IAAM,EAAI,GAAG,EAAG,EAAI,EAAG,EAAI,EAAE,CAC7B,GAAI,EAAE,KAAK,GAAG,EAAE,CAAC,CACf,SACF,IAAI,EAAI,CAAC,EAAG,EAAI,CAAC,EACjB,IAAK,GAAM,CAAE,IAAK,EAAG,MAAO,EAAG,MAAO,KAAO,EAC3C,GAAK,GAAK,GAAK,IAAM,KAAO,EAAI,GAAG,EAAG,EAAE,GAAK,EAAI,IAAM,EAAG,EAAI,CAAC,GAAI,EAAI,GAAK,GAAK,GAAK,IAAM,IAAM,EAAI,GAAG,EAAG,EAAI,EAAG,EAAE,EACvH,IAAM,EAAI,GAAG,EAAG,EAAG,EAAE,EAEvB,MAAO,CAAC,EAAG,EAAE,CAEf,SAAS,GAAG,EAAG,CACb,OAAO,OAAO,EAAE,WAAa,IAE/B,SAAS,GAAG,CAAE,OAAQ,GAAK,EAAG,CAC5B,OAAO,IAAM,EAAI,EAAI,EAAI,EAAI,GAAK,EAEpC,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,EAAE,SAAW,EACf,MAAO,GACT,GAAM,CAAE,MAAO,EAAG,OAAQ,EAAG,KAAM,GAAM,GAAG,EAAG,EAAG,GAAG,CAAE,EAAI,EAAI,EAAG,EAAI,EAAI,GAAK,EAAI,GAAK,EAAI,EAC5F,OAAO,EAAI,EAAI,EAAI,EAAI,EAEzB,SAAS,GAAG,EAAG,EAAG,CAChB,GAAI,CAAC,GAAG,EAAE,CACR,OAAO,EACT,IAAI,EAAI,EACR,KAAO,EAAE,aAAa,IAAM,EAAI,GAC9B,IACF,OAAO,EAAI,EAEb,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,GAAG,EAAE,CACP,OAAO,EAAE,aAAa,EAAE,YAAc,EAExC,IAAI,EAAI,GADE,EAAE,QAAU,OAAS,EAAI,EAAE,MACvB,EAAE,CAChB,MAAO,GAAI,KAAK,IAAI,EAAG,EAAG,KAAK,IAAI,EAAG,EAAE,CAAC,CAAE,EAE7C,SAAS,GAAG,EAAG,EAAG,EAAG,EAAI,EAAG,CAC1B,OAAO,EAAI,IAAM,EAAI,KAAK,IAAI,EAAG,GAAG,EAAG,EAAG,GAAG,CAAC,OAAO,EAAG,GAAG,GAAG,EAAG,EAAG,EAAG,GAAG,CAAE,GAAG,CAEjF,SAAS,GAAG,EAAG,CAAC,EAAG,EAAG,EAAG,GAAI,CAC3B,EAAE,OAAS,GAAK,EAAE,sBAAuB,EAAG,GAAG,MAAM,CACrD,IAAM,EAAI,EAAE,SACR,EAAI,EAAG,EAAI,EACf,GAAI,EAAE,OAAS,GAAK,EAAE,EAAE,EAAI,EAAE,SAAW,EAAG,CAC1C,IAAM,EAAI,EAAE,GAAG,KAAM,EAAI,EAAE,GAAG,KAC9B,EAAI,EAAE,QAAQ,EAAG,IAAM,GAAG,GAAG,EAAG,EAAG,EAAE,CAAE,EAAI,EAAG,EAAE,CAAE,EAAE,MAEpD,CAAC,EAAG,GAAK,GAAG,EAAG,EAAE,CACnB,GAAI,IAAM,EACR,OAAO,EACT,GAAM,CAAE,UAAW,EAAG,WAAY,EAAG,SAAU,EAAG,WAAY,GAAM,GAAG,EAAE,WAAY,EAAG,EAAG,EAAE,CAC7F,MAAO,CACL,aAAc,EACd,gBAAiB,EAAE,QAAQ,EAAG,IAAM,GAAG,EAAG,EAAG,GAAG,EAAG,EAAG,EAAE,CAAC,CAAE,IAAI,CAAC,CAChE,UAAW,EACX,WAAY,EACZ,SAAU,EACV,WAAY,EACZ,SAAU,EACX,CAEH,SAAS,GAAG,EAAG,CACb,OAAO,GAAG,EAAE,CAAC,KAAK,CAAE,EAAG,EAAG,EAAG,GAAK,EAAG,IAAM,CACzC,IAAM,EAAI,EAAE,EAAI,GAChB,MAAO,CAAE,SAAU,IAAM,IAAK,GAAc,IAAV,EAAE,EAAI,EAAW,KAAM,EAAG,WAAY,EAAG,EAC3E,CAEJ,SAAS,GAAG,EAAG,EAAG,CAChB,IAAI,EAAI,EAAG,EAAI,EACf,KAAO,EAAI,GACT,GAAK,EAAE,EAAI,GAAK,EAAE,GAAK,EAAG,IAC5B,OAAO,GAAK,IAAM,EAAI,EAAI,GAE5B,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,CACtB,IAAI,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EACpC,GAAI,IAAM,EAAG,CACX,EAAI,GAAG,EAAG,EAAI,EAAG,GAAG,CAAE,EAAI,EAAE,GAAG,OAC/B,IAAM,EAAI,GAAG,EAAG,EAAI,EAAE,CACtB,EAAI,EAAE,GAAI,EAAI,EAAE,GAAI,EAAE,QAAU,EAAE,GAAG,OAAS,GAAG,EAAG,EAAE,CAAC,IAAO,IAAS,EAAI,EAAE,MAAM,EAAG,EAAI,EAAE,MAE5F,EAAI,EAAE,CACR,IAAK,GAAM,CAAE,MAAO,EAAG,MAAO,KAAO,GAAG,EAAG,EAAG,IAAM,CAAE,CACpD,IAAM,EAAI,EAAI,EAAG,EAAI,EAAI,EAAI,EAAI,EAAI,EACrC,EAAE,KAAK,CACL,MAAO,EACP,OAAQ,EACR,KAAM,EACP,CAAC,CAAE,EAAI,EAAG,EAAI,EAAG,EAAI,EAExB,MAAO,CACL,UAAW,EACX,WAAY,EACZ,SAAU,EACV,WAAY,EACb,CAEH,SAAS,GAAG,EAAG,CACb,MAAO,CAAE,MAAO,EAAE,MAAO,MAAO,EAAG,CAErC,SAAS,GAAG,EAAG,CACb,GAAM,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,GAAM,EAChD,MAAQ,IAAM,EAAE,QAAU,IAAM,EAAE,MAAQ,GAAK,EAAE,MAAQ,MAAU,EAAE,QAAU,EAEjF,IAAM,GAAK,CACT,aAAc,SACd,YAAa,QACd,CAAE,GAAK,GACL,CAAC,CAAE,IAAK,GAAK,CAAE,iBAAkB,MAAS,CACzC,IAAM,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,EAAG,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAC,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,GAAG,EAAG,IAAM,GAAG,EAAG,GAAG,GAAG,CAAC,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,IAAI,CAAE,EAAI,GAC7M,EAAE,EAAG,EAAE,EAAG,EAAG,EAAE,CAAE,GAAG,GAAI,EAAE,CAAE,GAAI,CAAC,CACjC,EACD,CAAE,EAAI,GACL,EACE,EACA,GAAI,CACJ,IAAI,EAAG,KAAO,CAAE,QAAS,EAAG,KAAM,EAAE,QAAS,EAAG,CAC9C,QAAS,EAAE,CACX,KAAM,EAAE,CACT,CAAC,CACF,GAAG,CAAE,KAAM,KAAQ,EAAE,CACtB,CACD,EAAE,CACH,CACD,EACE,EACE,EACA,EAAG,GAAM,EAAE,OAAS,EAAE,CACtB,EAAE,EAAG,EAAE,CACP,GAAG,CAAC,EAAG,EAAG,KAAO,CACf,IAAM,EAAI,EAAE,QAAQ,EAAG,EAAG,IAAM,GAAG,EAAG,EAAG,GAAG,EAAG,EAAE,WAAY,EAAE,EAAI,EAAE,CAAE,IAAI,CAAC,CAC5E,MAAO,CACL,GAAG,EACH,aAAc,EACd,gBAAiB,EAClB,EACD,CACH,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,CAAE,UAAW,MAAS,EAAI,EAAE,CACnC,GAAG,CAAC,EAAG,CAAE,UAAW,EAAG,SAAU,MAAS,CACxC,CACE,SAAU,EACV,KAAM,EACN,WAAY,EACb,CACF,CAAC,CACH,CACD,EACD,CAAE,EAAE,EAAG,EAAE,CACV,IAAM,EAAI,GACR,EACE,EACA,EAAG,GAAM,IAAM,IAAK,GAAE,CACvB,CACD,CAAC,EACF,CACD,EACE,EACE,EACA,EAAG,GAAM,IAAM,IAAK,IAAK,EAAE,EAAG,EAAE,CAAC,SAAS,CAAC,CAC3C,EAAG,GAAM,CACP,IAAM,EAAI,EAAG,EAAE,CAAE,EAAI,EAAG,EAAE,CAAC,OAAS,EACpC,OAAO,IAAM,IAAK,IAAK,IAAM,EAAI,EAAI,CACnC,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,EAAG,CACvC,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,EAAG,CACxC,CAAG,EAAE,CAAG,CAAC,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,EAAG,CAAC,EAClD,CACH,CACD,EACD,CAAE,EACD,EACE,EACA,EAAG,GAAM,IAAM,IAAK,IAAK,EAAE,OAAS,GAAK,EAAE,EAAG,EAAE,CAAC,SAAS,CAAC,CAC3D,EAAG,GAAM,CACP,IAAM,EAAI,EAAE,CACR,EAAI,EAAE,GAAI,EAAI,EAClB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAE,OAAQ,IAAK,CACjC,IAAM,EAAI,EAAE,GACZ,IAAM,IAAM,EAAE,KAAK,CACjB,SAAU,EAAI,EACd,KAAM,EACN,WAAY,EACb,CAAC,CAAE,EAAI,EAAG,EAAI,GAEjB,OAAO,EAAE,KAAK,CACZ,SAAU,EAAE,OAAS,EACrB,KAAM,EACN,WAAY,EACb,CAAC,CAAE,GACJ,CACH,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,EAAG,EAAE,CACP,GAAG,EAAG,EAAG,KAAO,IAAM,IAAK,IAAK,IAAM,IAAK,GAAE,CAC7C,GAAG,CAAC,EAAG,EAAG,KAAO,CACf,IAAM,EAAI,EAAE,CACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAE,OAAQ,IAAK,CACjC,IAAM,EAAI,EAAE,GAAI,EAAI,EAAE,EAAI,GAC1B,EAAE,KAAK,CACL,WAAY,EACZ,SAAU,EACV,KAAM,EACP,CAAC,CAAE,IAAM,IAAK,IAAK,EAAE,KAAK,CACzB,WAAY,EAAI,EAChB,SAAU,EAAI,EACd,KAAM,EACP,CAAC,CAEJ,OAAO,GACP,CACH,CACD,EACD,CACD,IAAM,EAAI,GACR,EACE,EACA,EAAE,EAAE,CACJ,IACG,CAAE,MAAO,GAAK,CAAC,EAAG,MAAQ,CACzB,QAAS,IAAM,EACf,MAAO,EACR,EACD,CAAE,QAAS,CAAC,EAAG,MAAO,EAAG,CAC1B,CACD,EAAG,GAAM,EAAE,QAAQ,CACpB,CACF,CACD,EACE,EACE,EACA,IACG,EAAG,KAAO,CAAE,KAAM,EAAE,KAAO,EAAG,KAAM,EAAG,EACxC,CAAE,KAAM,EAAG,KAAM,EAAG,CACrB,CACD,EAAG,GAAM,EAAE,KAAK,CACjB,CACA,GAAM,CACL,GAAM,CAAE,aAAc,GAAM,EAAG,EAAE,CACjC,GAAI,EAAI,EACN,EAAE,EAAG,CAAC,EAAE,CAAE,EAAE,EAAG,EAAI,GAAG,EAAG,EAAE,CAAC,MACzB,GAAI,EAAI,EAAG,CACd,IAAM,EAAI,EAAG,EAAE,CACf,EAAE,OAAS,IAAM,GAAK,GAAG,CAAC,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,GAG9C,CAAE,EAAE,EAAE,EAAG,EAAE,EAAE,CAAC,EAAG,CAAC,EAAG,KAAO,CAC3B,EAAI,GAAK,EACP,2HACA,CAAE,eAAgB,EAAG,CACrB,GAAG,MACJ,EACD,CACF,IAAM,EAAI,GAAG,EAAE,CACf,EACE,EACE,EACA,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,KAAO,CACZ,IAAM,EAAI,EAAE,aAAa,OAAS,EAAG,EAAI,EAAE,CAAE,EAAI,EAAE,SACnD,GAAI,EAAG,CACL,IAAM,EAAI,GAAG,EAAE,SAAU,EAAE,CACvB,EAAI,EAAG,EAAI,EACf,KAAO,EAAI,GAAK,CACd,IAAM,EAAI,EAAE,aAAa,GAAI,EAAI,EAAE,aAAa,SAAW,EAAI,EAAI,IAAQ,EAAE,aAAa,EAAI,GAAK,EAAI,EACvG,EAAE,KAAK,CACL,SAAU,EACV,KAAM,EACN,WAAY,EACb,CAAC,CAAE,EAAE,KAAK,CACT,SAAU,EAAI,EAAI,EAAI,EACtB,KAAM,EACN,WAAY,EAAI,EACjB,CAAC,CAAE,IAAK,GAAK,EAAI,EAEpB,IAAM,EAAI,GAAG,EAAE,SAAS,CACxB,OAAO,IAAM,GAAK,EAAE,OAAO,CAAE,EAAE,QAC5B,EAAG,CAAE,EAAG,EAAG,EAAG,KAAS,CACtB,IAAI,EAAK,EAAE,OACX,OAAO,EAAE,WAAa,IAAM,EAAK,CAC/B,GAAG,EAAE,OACL,CACE,SAAU,EAAI,EAAI,EAClB,KAAM,EAAE,SACR,WAAY,EAAE,UACf,CACF,EAAG,CACF,UAAW,EAAI,EACf,SAAU,EACV,OAAQ,EACT,EAEH,CACE,UAAW,EACX,SAAU,EACV,OAAQ,EACT,CACF,CAAC,OAEJ,OAAO,GAAG,EAAE,SAAS,CAAC,QACnB,EAAG,CAAE,EAAG,EAAG,EAAG,MAAS,CACtB,UAAW,EAAI,EACf,SAAU,EACV,OAAQ,CAAC,GAAG,EAAE,OAAQ,CAAE,SAAU,EAAI,EAAI,EAAG,KAAM,EAAE,SAAU,WAAY,EAAE,UAAW,CAAC,CAC1F,EACD,CACE,UAAW,EACX,SAAU,EACV,OAAQ,EAAE,CACX,CACF,CAAC,QACF,CACH,CACD,EACD,CACD,IAAM,EAAI,GACR,EACE,EACA,EAAE,EAAG,EAAE,CACP,GAAG,CAAC,EAAG,CAAE,WAAY,GAAK,KAEjB,GAAG,CADC,EACE,EAAG,EAAE,CAClB,CACH,CACF,CACD,OAAO,EACL,EACE,EACA,EAAE,EAAG,EAAE,CACP,GAAG,CAAC,EAAG,EAAG,KAAO,CACf,GAAI,EAAE,aAAa,OAAS,EAAG,CAC7B,GAAI,EAAE,EAAE,SAAS,CACf,OAAO,EACT,IAAI,EAAI,IAAI,CACN,EAAI,EAAG,EAAE,CACX,EAAI,EAAG,EAAI,EAAG,EAAK,EACvB,KAAO,EAAI,CAAC,GAAK,CACf,EAAK,EAAE,GACP,IAAM,EAAI,EAAE,EAAI,GAAK,EAAK,EAC1B,IAAK,GAAK,EAAI,EAEhB,GAAI,EAAI,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAG,CAAE,EAAG,EAAI,EAAG,KAAS,GAAG,EAAG,KAAK,IAAI,EAAG,EAAK,EAAE,CAAE,EAAG,CAAE,EAAE,CAAE,IAAM,CAAC,EAAG,CACnG,IAAM,EAAI,GAAG,EAAE,SAAU,EAAG,CAC5B,EAAI,GAAG,EAAG,EAAG,EAAE,CACf,IAAM,EAAK,GAAG,EAAE,SAAU,CAAC,EAAI,EAAE,CAAC,GAClC,EAAI,GAAG,EAAG,EAAG,EAAG,CAElB,MAAO,CACL,GAAG,EACH,SAAU,EACV,GAAG,GAAG,EAAE,WAAY,EAAG,EAAG,EAAE,CAC7B,CAEH,IAAM,EAAI,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAG,CAAE,EAAG,EAAG,EAAG,KAAQ,GAAG,EAAG,KAAK,IAAI,EAAG,EAAI,EAAE,CAAE,EAAE,CAAE,IAAI,CAAC,CAC1F,MAAO,CACL,GAAG,EACH,SAAU,EACV,GAAG,GAAG,EAAE,WAAY,EAAG,EAAG,EAAE,CAC7B,EACD,CACH,CACD,EACD,CAAE,CACD,kBAAmB,EAEnB,KAAM,EACN,gBAAiB,EACjB,eAAgB,EAChB,cAAe,EACf,eAAgB,EAChB,IAAK,EACL,aAAc,EACd,gBAAiB,EACjB,SAAU,EACV,YAAa,EACb,UAAW,EACX,gBAAiB,EACjB,WAAY,EAEZ,MAAO,EACP,mBAAoB,EACpB,WAAY,EACZ,eAAgB,EAChB,YAAa,EACd,EAEH,EAAG,GAAI,GAAG,CACV,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,CACb,OAAO,EAAE,QACN,EAAG,KAAO,EAAE,aAAa,KAAK,EAAE,WAAW,CAAE,EAAE,YAAc,EAAI,EAAG,GACrE,CACE,aAAc,EAAE,CAChB,WAAY,EACb,CACF,CAEH,IAAM,GAAK,GACR,CAAC,CAAE,aAAc,EAAG,MAAO,EAAG,WAAY,GAAK,CAAE,aAAc,EAAG,UAAW,MAAS,CACrF,IAAM,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,EAAE,EAAG,EAAE,GAAG,CAAC,CAAC,CAC3C,OAAO,EACL,EACE,EACA,EAAG,GAAM,EAAE,WAAW,CACvB,CACD,EACD,CAAE,EACD,EACE,EACA,EAAG,GAAM,EAAE,aAAa,CACzB,CACD,EACD,CAAE,EACD,EACE,GAAG,EAAG,EAAG,EAAE,CACX,GAAG,CAAC,EAAG,KAAO,GAAG,EAAE,CAAC,CACpB,GAAG,CAAC,EAAG,EAAG,KAAO,GAAG,EAAE,gBAAiB,KAAK,IAAI,EAAI,EAAG,EAAE,CAAE,IAAI,CAAC,GAAG,CACnE,GAAI,CACJ,EAAG,GAAM,CAAC,EAAE,CAAC,CACd,CACD,EACD,CAAE,CAAE,YAAa,EAAG,gBAAiB,EAAG,EAE3C,EAAG,GAAI,GAAG,CACX,CAAE,GAAK,GACL,CAAC,CAAE,IAAK,MAAS,CAChB,IAAM,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,GACnB,EACE,EACA,EAAG,GAAM,EAAE,CACX,GAAI,CACL,CACF,CACD,OAAO,EAAE,EAAI,GAAM,CACjB,GAAK,EAAG,EAAE,CAAC,gBAAiB,EAAE,CAAE,GAAG,MAAM,EACzC,CAAE,CAAE,SAAU,EAAG,WAAY,EAAG,EAEpC,EAAG,GAAG,CACN,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,OAAO,SAAW,KAAO,mBAAoB,SAAS,gBAAgB,MAC9E,SAAS,GAAG,EAAG,CACb,IAAM,EAAI,OAAO,GAAK,SAAW,CAAE,MAAO,EAAG,CAAG,EAChD,MAAO,CAAY,EAAE,QAAQ,SAAW,CAAC,EAAE,UAAY,CAAC,MAAQ,EAAE,SAAW,QAAS,EAAE,SAAW,IAAK,KAAM,EAAE,OAAS,GAAI,EAE/H,IAAM,GAAK,GACR,CACC,CAAE,IAAK,EAAG,YAAa,EAAG,MAAO,EAAG,WAAY,GAChD,CACE,kBAAmB,EACnB,kBAAmB,EACnB,aAAc,EACd,aAAc,EACd,oBAAqB,EACrB,SAAU,EACV,0BAA2B,EAC3B,eAAgB,GAElB,CAAE,IAAK,MACH,CACJ,IAAM,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAC5B,EAAI,KAAM,EAAI,KAAM,EAAI,KAC5B,SAAS,GAAI,CACX,IAAM,OAAS,GAAG,CAAE,EAAI,MAAO,IAAM,OAAS,GAAG,CAAE,EAAI,MAAO,AAAuB,KAAjB,aAAa,EAAE,CAAM,MAAO,EAAE,EAAG,CAAC,EAAE,CAE1G,OAAO,EACL,EACE,EACA,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACtB,EAAE,EAAG,EAAG,EAAE,CACV,GACG,CACC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACtB,EACA,EACA,KACI,CACJ,IAAM,EAAI,GAAG,EAAE,CAAE,CAAE,MAAO,EAAI,SAAU,EAAG,OAAQ,GAAM,EAAG,EAAK,EAAI,EAAG,EAAK,GAAG,EAAG,EAAG,EAAG,CACrF,EAAK,GAAG,EAAI,EAAE,WAAY,EAAE,CAAG,EACnC,IAAO,OAAS,GAAM,EAAI,GAAG,EAAE,SAAU,EAAG,CAAC,GAAK,EAAI,EAAG,IAAO,IAAO,GAAM,IAAM,IAAO,SAAW,IAAO,EAAI,GAAG,EAAE,SAAU,EAAG,CAAC,GAAK,EAAI,GAAK,EAAI,GAAM,EAAG,IAAM,IAAK,IAAK,IAAM,IAAM,GAAM,GAChM,IAAM,GAAM,GAAO,CACjB,GAAG,CAAE,GAAM,EAAE,wBAAyB,CAAE,SAAU,EAAG,CAAE,GAAG,MAAM,CAAE,EAAE,EAAG,EAAE,GAAK,EAAE,EAAG,CAAC,EAAE,CAAE,EAAE,yCAA0C,EAAE,CAAE,GAAG,MAAM,GAEnJ,GAAI,GAAG,CAAE,IAAM,SAAU,CACvB,IAAI,EAAK,CAAC,EACV,EAAI,EAAE,EAAI,GAAO,CACf,IAAW,GACX,CAAE,EAAI,GAAG,MAAS,CAClB,GAAG,EAAG,EACN,MAEF,EAAI,GAAG,EAAE,EAAG,GAAG,IAAI,CAAC,CAAE,GAAG,CAC3B,MAAO,GAAI,eAAiB,CAC1B,GAAG,EACF,KAAK,CAAE,EAAE,EAAG,CAAC,EAAE,CAAE,EAAE,0BAA2B,CAAE,SAAU,EAAG,MAAO,EAAI,IAAK,EAAI,CAAE,GAAG,MAAM,CAAE,CAAE,SAAU,EAAG,IAAK,EAAI,EAE5H,CACF,CACD,EACD,CAAE,CACD,oBAAqB,EACrB,cAAe,EACf,cAAe,EAChB,EAEH,EAAG,GAAI,GAAI,GAAG,CACd,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,CACb,MAAQ,IAAM,CACZ,IAAM,EAAI,eAAiB,CACzB,EAAE,CAAC,EAAE,EACJ,EAAE,CACL,MAAQ,IAAM,CACZ,IAAM,EAAE,CAAC,EAAE,CAAE,aAAa,EAAE,IAIlC,SAAS,GAAG,EAAG,EAAG,CAChB,IAAM,EAAI,GAAG,CAAG,0BAA4B,CAC1C,GAAG,EAAI,EAAG,EAAE,EACZ,CAEJ,SAAS,GAAG,EAAG,EAAG,CAChB,IAAM,EAAI,EAAI,EACd,OAAO,OAAO,GAAK,SAAW,EAAI,EAAE,QAAU,OAAS,EAAI,EAAE,MAE/D,IAAM,GAAK,GACR,CAAC,CAAE,gBAAiB,EAAG,YAAa,EAAG,MAAO,GAAK,CAAE,UAAW,GAAK,CAAE,oBAAqB,EAAG,cAAe,GAAK,CAAE,SAAU,MAAS,CACvI,IAAM,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,CAAC,EAAE,CACpC,OAAO,EACL,EACE,EACA,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,KAAO,IAAM,EAAE,CACtB,GAAG,CAAC,EAAE,CACP,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,KAAO,IAAM,EAAE,CACtB,GAAG,CAAC,EAAE,CACP,CACD,EACD,CAAE,EACD,EACE,GAAG,EAAG,EAAE,CACR,EAAE,EAAG,EAAG,EAAG,EAAE,CACb,GAAG,CAAC,EAAG,GAAI,EAAG,CAAE,SAAU,GAAK,EAAG,KAAO,IAAM,CAAC,EAAE,EAAE,EAAI,GAAG,EAAE,GAAK,CAAC,GAAK,CAAC,EAAE,CAC3E,EAAE,EAAE,CACL,EACA,EAAG,KAAO,CACT,GAAG,MAAS,CACV,EAAE,EAAG,CAAC,EAAE,EACR,CAAE,GAAG,MAAS,CACd,GAAG,MAAS,CACV,EAAE,EAAG,CAAC,EAAE,EACR,CAAE,EAAE,EAAG,EAAE,EACX,EAEL,CAAE,CACD,gCAAiC,EACjC,wBAAyB,EACzB,sBAAuB,EACxB,EAEH,EAAG,GAAI,GAAI,GAAI,GAAG,CAClB,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,KAAK,IAAI,EAAI,EAAE,CAAG,KAE3B,IAAM,GAAK,KAAM,GAAK,OAAQ,GAAK,OAAQ,GAAK,CAC9C,SAAU,CAAC,EACX,mBAAoB,wBACpB,MAAO,CACL,aAAc,EACd,aAAc,EACd,UAAW,EACX,eAAgB,EACjB,CACF,CAAE,GAAK,EAAG,GAAK,GAAG,CAAC,CAAE,aAAc,EAAG,aAAc,EAAG,SAAU,EAAG,qBAAsB,EAAG,UAAW,EAAG,eAAgB,MAAS,CACnI,IAAM,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,GAAG,CAAE,EAAI,GACrE,EACE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,CAAC,EAAE,CAAC,CAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,CAAC,EAAE,CAAE,GAAG,IAAI,CAAC,CAAC,CAC3D,GAAI,CACL,CACD,CAAC,EACF,CAAE,EAAI,GACL,EAAE,GAAG,EAAE,EAAG,GAAG,CAAC,EAAE,CAAC,CAAE,EAAE,EAAG,GAAG,CAAC,EAAE,CAAE,GAAG,IAAI,CAAC,CAAC,CAAE,GAAI,CAAC,CAChD,CAAC,EACF,CACD,EACE,EACE,GAAG,EAAE,EAAE,CAAE,EAAE,EAAE,CAAC,CACd,GAAG,CAAC,EAAG,KAAO,GAAK,EAAE,CACrB,GAAI,CACL,CACD,EACD,CAAE,EAAE,EAAE,EAAG,GAAG,GAAG,CAAC,CAAE,EAAE,CACrB,IAAM,EAAI,GACR,EACE,GAAG,EAAG,EAAE,EAAE,CAAE,EAAE,EAAE,CAAE,EAAE,EAAE,CAAE,EAAE,EAAE,CAAC,CAC7B,IAAI,EAAG,CAAC,CAAE,aAAc,EAAG,UAAW,GAAK,EAAG,EAAG,EAAG,KAAO,CACzD,IAAM,EAAI,EAAI,EAAI,EAAI,CAAC,EAAG,EAAI,CAC5B,aAAc,EACd,UAAW,EACX,eAAgB,EACjB,CACD,GAAI,EAAG,CACL,IAAI,EAAG,EACP,OAAO,EAAI,EAAE,MAAM,WAAa,EAAI,gBAAiB,EAAI,EAAE,MAAM,UAAY,IAAM,EAAI,iBAAkB,EAAI,EAAE,MAAM,UAAY,GAAK,EAAE,gBAAiB,CACvJ,SAAU,CAAC,EACX,gBAAiB,EACjB,eAAgB,EAChB,MAAO,EACR,CAEH,IAAI,EACJ,MAAO,CAAiL,EAAjL,EAAE,aAAe,EAAE,MAAM,aAAmB,iBAAmB,EAAI,EAAE,MAAM,eAAqB,6BAA+B,EAAI,EAAE,MAAM,UAAgB,oBAA0B,yCAA0C,CACpO,SAAU,CAAC,EACX,mBAAoB,EACpB,MAAO,EACR,EACA,GAAG,CACN,GAAI,EAAG,IAAM,IAAM,IAAK,IAAK,EAAE,WAAa,EAAE,SAAS,CACxD,CACF,CAAE,EAAI,GACL,EACE,EACA,IACG,EAAG,CAAE,aAAc,EAAG,UAAW,EAAG,eAAgB,KAAQ,CAC3D,GAAI,CAAC,GAAG,EAAE,aAAc,EAAE,CAAE,CAC1B,IAAM,EAAI,GAAK,EAAI,GAAK,EACxB,OAAO,EAAE,YAAc,GAAK,EAAI,CAC9B,QAAS,CAAC,EACV,KAAM,EAAE,UAAY,EACpB,aAAc,EACd,UAAW,EACZ,CAAG,CACF,QAAS,CAAC,EACV,KAAM,EACN,aAAc,EACd,UAAW,EACZ,CAEH,MAAO,CACL,QAAS,CAAC,EACV,KAAM,EACN,aAAc,EACd,UAAW,EACZ,EAEH,CAAE,QAAS,CAAC,EAAG,KAAM,EAAG,aAAc,EAAG,UAAW,EAAG,CACxD,CACD,EAAG,GAAM,EAAE,QAAQ,CACnB,EAAG,GAAM,EAAE,KAAK,CACjB,CACD,EACD,CACD,EACE,EACE,EACA,EAAG,GAAM,EAAE,SAAS,CACrB,CACD,EACD,CAAE,EAAE,EAAE,EAAG,GAAG,GAAG,CAAC,CAAE,EAAE,CACrB,IAAM,EAAI,EAAE,GAAG,CACf,EACE,EACE,EACA,GAAG,CAAE,UAAW,KAAQ,EAAE,CAC1B,GAAI,CACJ,IACG,EAAG,IAAM,EAAG,EAAE,CAAG,CAAE,UAAW,EAAE,UAAW,cAAe,EAAG,CAAG,CAAE,UAAW,EAAI,EAAE,cAAgB,GAAK,GAAI,cAAe,EAAG,CAC/H,CAAE,UAAW,GAAI,cAAe,EAAG,CACpC,CACD,EAAG,GAAM,EAAE,UAAU,CACtB,CACD,EACD,CAAE,EAAE,EAAE,EAAG,GAAG,GAAG,CAAE,GAAG,GAAG,CAAC,CAAE,EAAE,CAC7B,IAAM,EAAI,EAAE,EAAE,CACd,OAAO,EACL,EACE,EACA,EAAG,GAAM,CAAC,EAAE,CACZ,GAAG,EAAE,CACN,CACD,EACD,CAAE,EACD,EACE,EACA,GAAG,IAAI,CACP,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,KAAO,EAAE,CAChB,IAAI,CAAC,EAAG,GAAI,CAAC,KAAO,CAAC,EAAG,EAAE,CAAE,CAAC,EAAG,EAAE,CAAC,CACnC,GAAG,CAAC,EAAG,KAAO,EAAI,EAAE,CACrB,CACD,EACD,CAAE,CACD,cAAe,EACf,oBAAqB,EACrB,kBAAmB,EACnB,iBAAkB,EAClB,eAAgB,EAChB,WAAY,EACZ,QAAS,EACT,YAAa,EACb,wBAAyB,EACzB,gBAAiB,EACjB,eAAgB,EACjB,EACA,EAAG,GAAG,CAAC,CAAE,GAAK,MAAO,GAAK,SAAU,GAAK,OAC5C,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,OAAO,GAAK,SAAW,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAK,EAAI,EAAI,IAAM,GAAK,IAAM,GAAK,EAAE,KAAO,EAAE,QAAU,IAAM,GAAK,EAAE,KAAO,EAAE,QAExJ,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,OAAO,GAAK,SAAW,EAAI,EAAE,IAAM,EAE5C,IAAM,GAAK,GACR,CAAC,CAAE,UAAW,EAAG,kBAAmB,EAAG,aAAc,EAAG,UAAW,EAAG,eAAgB,MAAS,CAC9F,IAAM,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAuC3C,MAAO,CACL,mBAAoB,EAEpB,aAAc,EACd,SAAU,EACV,cAAe,EAEf,aA9C+C,GAC/C,EACE,GACE,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAG,GAAG,CACR,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACL,CACD,GACG,CACC,EACA,EACA,EACA,CAAC,EAAG,GACJ,EACA,EACA,EACA,EACA,KACI,CACJ,IAAM,EAAI,EAAI,EAAG,EAAI,EAAI,EAAG,EAAI,KAAK,IAAI,EAAI,EAAG,EAAE,CAC9C,EAAI,GACF,EAAI,GAAG,EAAG,GAAG,CAAE,EAAI,GAAG,EAAG,GAAG,CAClC,MAAO,IAAK,EAAG,GAAK,EAAI,EAAG,GAAK,EAAI,EAAG,GAAK,EAAG,EAAI,EAAI,EAAI,IAAM,EAAI,IAAK,EAAI,EAAI,EAAI,EAAI,IAAM,EAAI,IAAK,IAAM,GAG3G,KAHgH,CAClH,KAAK,IAAI,EAAI,EAAI,GAAG,EAAG,GAAI,EAAE,CAAG,EAAG,EAAE,CACrC,EAAI,EAAI,EAAI,EAAI,GAAG,EAAG,GAAI,EAAE,CAAG,EAChC,EAEJ,CACD,EAAG,GAAM,IAAM,KAAK,CACpB,EAAG,GAAG,CACP,CACD,CAAC,EAAG,EAAE,CASS,CAChB,EAEH,EAAG,GAAG,CACN,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,GAAG,EAAE,CAAE,CACT,IAAM,EAAI,GAAG,EAAG,EAAE,CAClB,MAAO,CACL,CAAE,MAAO,GAAG,EAAE,gBAAiB,EAAE,CAAC,GAAI,OAAQ,EAAG,KAAM,EAAG,CAC1D,CAAE,KAAM,IAAI,GAAI,MAAO,EAAG,OAAQ,EAAG,KAAM,EAAG,CAC/C,CAEH,MAAO,CAAC,CAAE,KAAM,IAAI,GAAI,MAAO,EAAG,OAAQ,EAAG,KAAM,EAAG,CAAC,CAEzD,IAAM,GAAK,CACT,OAAQ,EACR,eAAgB,EAChB,MAAO,EAAE,CACT,aAAc,EACd,UAAW,EACX,IAAK,EACL,SAAU,EAAE,CACZ,cAAe,EACf,WAAY,EACb,CACD,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC5B,GAAM,CAAE,UAAW,EAAG,WAAY,EAAG,SAAU,GAAM,EACjD,EAAI,EAAG,EAAI,EACf,GAAI,EAAE,OAAS,EAAG,CAChB,EAAI,EAAE,GAAG,OACT,IAAM,EAAI,EAAE,EAAE,OAAS,GACvB,EAAI,EAAE,OAAS,EAAE,KAEnB,IAAM,EAAI,EAAI,EAAG,EAAI,EAAI,EAAI,GAAK,EAAI,GAAK,EAAG,EAAI,EAAG,EAAI,EAAI,EAC7D,MAAO,CACL,OAAQ,EACR,eAAgB,EAChB,MAAO,GAAG,EAAG,EAAG,EAAE,CAClB,aAAc,EACd,UAAW,EACX,IAAK,EACL,SAAU,GAAG,EAAG,EAAG,EAAE,CACrB,cAAe,EAAE,QAAQ,EAAG,IAAM,EAAE,KAAO,EAAG,EAAE,CAChD,WAAY,EACb,CAEH,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC5B,IAAI,EAAI,EACR,GAAI,EAAE,aAAa,OAAS,EAC1B,IAAK,IAAM,KAAK,EAAE,aAAc,CAC9B,GAAI,EAAI,GAAK,EACX,MACF,IAEJ,IAAM,EAAI,EAAI,EAAG,EAAI,GAAG,EAAG,EAAE,CAM7B,OAAO,GAN4B,MAAM,KAAK,CAAE,OAAQ,EAAG,CAAC,CAAC,KAAK,EAAG,KAAO,CAC1E,KAAM,EAAE,EAAI,GACZ,MAAO,EAAI,EACX,OAAQ,EACR,KAAM,EACP,EACU,CAAE,EAAE,CAAE,EAAG,EAAG,EAAG,EAAE,CAE9B,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,EAAE,SAAW,EACf,MAAO,EAAE,CACX,GAAI,CAAC,GAAG,EAAE,CACR,OAAO,EAAE,IAAK,IAAO,CAAE,GAAG,EAAG,MAAO,EAAE,MAAQ,EAAG,cAAe,EAAE,MAAO,EAAE,CAC7E,IAAM,EAAI,EAAE,GAAG,MAAO,EAAI,EAAE,EAAE,OAAS,GAAG,MAAO,EAAI,EAAE,CAAE,EAAI,GAAG,EAAE,gBAAiB,EAAG,EAAE,CACpF,EAAG,EAAI,EACX,IAAK,IAAM,KAAK,EAAG,EAChB,CAAC,GAAK,EAAE,IAAM,EAAE,SAAW,EAAI,EAAE,OAAO,CAAE,EAAI,EAAE,aAAa,QAAQ,EAAE,MAAM,EAC9E,IAAI,EACJ,AAGI,EAHJ,EAAE,QAAU,EAAE,MAAY,CACxB,MAAO,EACP,KAAM,QACP,CAAO,CACN,WAAY,EACZ,MAAO,EAAE,OAAS,EAAI,GAAK,EAC5B,CAAE,EAAE,KAAK,CACR,GAAG,EACH,KAAM,EAAE,KACR,OAAQ,EAAE,OACV,cAAe,EAAE,MACjB,KAAM,EAAE,KACT,CAAC,CAEJ,OAAO,EAET,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,IAAM,IAAK,GAAI,EAAI,OAAO,GAAK,SAAW,EAAI,EAAE,IAAM,EAE/D,IAAM,GAAK,GACR,CACC,CAAE,KAAM,EAAG,eAAgB,EAAG,IAAK,EAAG,MAAO,EAAG,WAAY,GAC5D,EACA,CAAE,aAAc,EAAG,cAAe,EAAG,aAAc,GACnD,CAAE,wBAAyB,EAAG,sBAAuB,GACrD,CAAE,cAAe,GACjB,EACA,CAAE,SAAU,GACZ,CAAE,iBAAkB,MAChB,CACJ,IAAM,EAAI,EAAE,EAAE,CAAC,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAC5C,EAAE,EAAE,gBAAiB,EAAE,CACvB,IAAM,EAAI,GACR,EACE,GACE,EACA,EACA,EAAE,EAAG,GAAG,CACR,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EACA,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EACD,CACD,GAAG,CAAC,EAAG,GAAK,SAAiB,KAAO,CAClC,IAAM,EAAI,IAAM,IAAK,IAAK,EAAE,SAAW,EACvC,OAAO,GAAK,CAAC,GAAK,CAAC,GACnB,CACF,GACG,GAGC,CAAC,EAAG,GACJ,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KACI,CACJ,IAAM,EAAI,EAAG,CAAE,WAAY,EAAI,SAAU,GAAO,EAAG,EAAK,EAAG,EAAE,CAC7D,GAAI,IAAM,EACR,MAAO,CAAE,GAAG,GAAI,WAAY,EAAG,CACjC,GAAI,IAAM,GAAK,IAAM,EACnB,OAAO,IAAO,EAAI,CAAE,GAAG,GAAI,WAAY,EAAG,CAAG,GAAG,EAAI,EAAG,EAAG,EAAG,EAAG,GAAK,EAAE,CAAC,CAC1E,GAAI,EAAE,EAAG,CACP,OAAO,EAAK,EAAI,KAAO,GACrB,GAAG,GAAG,EAAG,EAAE,CAAE,EAAG,EAAE,CAClB,EAAE,CACF,EACA,EACA,EACA,EACD,CACH,IAAM,EAAK,EAAE,CACb,GAAI,EAAE,OAAS,EAAG,CAChB,IAAM,EAAI,EAAE,GAAI,EAAI,EAAE,EAAE,OAAS,GAC7B,EAAK,EACT,IAAK,IAAM,KAAM,GAAG,EAAI,EAAG,EAAE,CAAE,CAC7B,IAAM,EAAI,EAAG,MAAO,EAAK,KAAK,IAAI,EAAG,MAAO,EAAE,CAAE,EAAK,KAAK,IAAI,EAAG,IAAK,EAAE,CACxE,IAAK,IAAI,EAAK,EAAI,GAAM,EAAI,IAC1B,EAAG,KAAK,CAAE,KAAM,IAAI,GAAK,MAAO,EAAI,OAAQ,EAAI,KAAM,EAAG,CAAC,CAAE,GAAM,GAGxE,GAAI,CAAC,EACH,OAAO,GAAG,EAAE,CAAE,EAAI,EAAG,EAAG,EAAG,EAAE,CAC/B,IAAM,EAAK,EAAE,OAAS,EAAI,EAAE,EAAE,OAAS,GAAK,EAAI,EAAG,EAAK,GAAG,EAAI,EAAG,EAAG,EAAG,CACxE,GAAI,EAAG,SAAW,EAChB,OAAO,KACT,IAAM,EAAK,EAAI,EAAG,EAAK,GAAG,EAAE,CAAG,GAAM,CACnC,IAAK,IAAM,KAAK,EAAI,CAClB,IAAM,EAAK,EAAE,MACT,EAAK,EAAG,OAAQ,EAAI,EAAE,MACpB,EAAK,EAAG,KACd,GAAI,EAAG,OAAS,EAAG,CACjB,GAAK,KAAK,OAAO,EAAI,EAAG,OAAS,IAAM,EAAK,GAAG,CAC/C,IAAM,EAAK,EAAI,EAAE,MACjB,GAAM,EAAK,EAAK,EAAK,EAEvB,EAAI,IAAO,IAAO,EAAK,GAAK,EAAI,EAAI,GACpC,IAAM,EAAK,KAAK,IAAI,EAAE,IAAK,EAAG,CAC9B,IAAK,IAAI,EAAK,EAAG,GAAM,GAAM,EAAE,GAAM,GAAI,IACvC,EAAE,KAAK,CAAE,KAAM,IAAI,GAAK,MAAO,EAAI,OAAQ,EAAI,KAAM,EAAI,CAAC,CAAE,GAAM,EAAK,IAE3E,CAAE,EAAK,GAAG,EAAI,GAAG,CAAE,EAAI,GAAG,EAAI,GAAG,CACnC,GAAI,EAAG,OAAS,IAAM,EAAK,GAAK,EAAI,GAAI,CACtC,IAAM,EAAI,EAAG,GAAI,EAAI,EAAG,EAAG,OAAS,GACpC,GAAI,EAAK,GAAK,EAAE,MAAQ,EAAI,CAC1B,IAAM,EAAK,KAAK,IAAI,EAAI,EAAE,MAAQ,EAAG,CAAE,EAAK,EAAE,CAC1C,EAAI,EAAE,OACV,IAAK,IAAI,EAAK,EAAE,MAAQ,EAAG,GAAM,EAAE,MAAQ,EAAI,IAAM,CACnD,IAAM,EAAK,GAAG,EAAI,EAAI,EAAG,CAAC,IAAI,OAAS,EAAE,KACzC,GAAK,EAAK,EAAG,EAAG,QAAQ,CAAE,KAAM,IAAI,GAAK,MAAO,EAAI,OAAQ,EAAG,KAAM,EAAI,CAAC,CAE5E,EAAG,QAAQ,GAAG,EAAG,CAEnB,GAAI,EAAI,GAAK,EAAE,MAAQ,EAAI,CACzB,IAAM,EAAK,KAAK,IAAI,EAAG,EAAK,EAAE,MAAM,CAChC,EAAK,EAAE,OAAS,EAAE,KAAO,EAC7B,IAAK,IAAI,EAAI,EAAE,MAAQ,EAAG,GAAK,EAAE,MAAQ,EAAI,IAAK,CAChD,IAAM,EAAK,GAAG,EAAI,EAAG,EAAE,CAAC,IAAI,OAAS,EAAE,KACvC,EAAG,KAAK,CAAE,KAAM,IAAI,GAAI,MAAO,EAAG,OAAQ,EAAI,KAAM,EAAI,CAAC,CAAE,GAAM,EAAK,IAI5E,OAAO,GAAG,EAAI,EAAI,EAAG,EAAG,EAAG,EAAE,EAEhC,CAED,EAAG,GAAM,IAAM,KAAK,CACpB,GAAI,CACL,CACD,GACD,CACD,EACE,EACE,EACA,EAAE,GAAG,CACL,EAAG,GAAM,GAAG,OAAO,CACpB,CACD,EACD,CAAE,EACD,EACE,EACA,EAAG,GAAM,EAAE,cAAc,CAC1B,CACD,EACD,CAAE,EAAE,EAAG,EAAE,CAAE,EACV,EACE,EACA,EAAG,GAAM,CAAC,EAAE,IAAK,EAAE,OAAO,CAAC,CAC5B,CACD,EACD,CAAE,EACD,EACE,EACA,EAAG,GAAM,EAAE,MAAM,CAClB,CACD,EACD,CACD,IAAM,EAAI,GACR,EACE,EACA,GAAG,CAAE,MAAO,KAAQ,EAAE,OAAS,EAAE,CACjC,EAAE,EAAG,EAAE,CACP,GAAG,CAAC,CAAE,MAAO,GAAK,KAAO,EAAE,EAAE,OAAS,GAAG,gBAAkB,EAAI,EAAE,CACjE,GAAG,EAAG,EAAG,KAAO,CAAC,EAAI,EAAG,EAAE,CAAC,CAC3B,EAAG,GAAG,CACN,GAAG,CAAC,KAAO,EAAE,CACd,CACF,CAAE,EAAI,GACL,EACE,EACA,GAAG,IAAI,CACP,GAAG,CAAE,MAAO,EAAG,SAAU,KAAQ,EAAE,OAAS,GAAK,EAAE,GAAG,gBAAkB,EAAE,OAAO,CACjF,GAAG,CAAE,MAAO,KAAQ,EAAE,GAAG,MAAM,CAC/B,GAAI,CACL,CACF,CAkBD,MAAO,CACL,WAAY,EACZ,iBAAkB,EAClB,cAAe,EACf,UAAW,EACX,qBAAsB,EACtB,aAxBK,GACL,EACE,EACA,GAAG,CAAE,MAAO,KAAQ,EAAE,OAAS,EAAE,CACjC,GAAG,CAAE,MAAO,KAAQ,CAClB,IAAI,EAAI,EAAG,EAAI,EAAE,OAAS,EAC1B,KAAO,EAAE,GAAG,OAAS,SAAW,EAAI,GAClC,IACF,KAAO,EAAE,GAAG,OAAS,SAAW,EAAI,GAClC,IACF,MAAO,CACL,SAAU,EAAE,GAAG,MACf,WAAY,EAAE,GAAG,MAClB,EACD,CACF,EAAG,GAAG,CACP,CAQc,CACf,aAAc,EACd,gBAAiB,EACjB,GAAG,EACJ,EAEH,EACE,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACD,CACD,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,GACL,CAAC,CAAE,kBAAmB,EAAG,kBAAmB,EAAG,aAAc,EAAG,aAAc,GAAK,CAAE,UAAW,MAAS,CACxG,IAAM,EAAI,GAAG,CAAE,EAAI,GACjB,EACE,GAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjB,GAAG,CAAC,EAAG,EAAG,EAAG,EAAG,KAAO,EAAI,EAAI,EAAI,EAAI,EAAE,aAAe,EAAE,OAAO,CAClE,CACD,EACD,CACD,OAAO,EAAE,EAAE,EAAE,CAAE,EAAE,CAAE,CAAE,gBAAiB,EAAG,uBAAwB,EAAG,EAEtE,EAAG,GAAI,GAAG,CACV,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,GACL,CAAC,CAAE,eAAgB,GAAK,CAAE,gBAAiB,MAAS,CACnD,IAAM,EAAI,EAAE,CAAC,EAAE,CAUf,MAAO,CAAE,cAAe,EAAG,mBAVN,GACnB,EACE,GAAG,EAAG,EAAG,EAAE,CACX,GAAG,CAAC,KAAO,EAAE,CACb,GAAG,EAAG,EAAG,KAAO,KAAK,IAAI,EAAG,EAAI,EAAE,CAAC,CACnC,GAAG,EAAE,CACL,GAAI,CACL,CACD,EAE8C,CAAE,EAEpD,EAAG,GAAI,GAAG,CACV,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,OAAS,CACf,QAAS,EAAE,KAAK,CACjB,EAAE,CAAE,IAAM,CACT,WAAY,EACZ,QAAS,EACT,eAAgB,CAAE,MAAO,EAAG,SAAU,EAAG,GAAG,GAC5C,eAAgB,EAChB,YAAa,KACT,EAAI,EAAI,CAAE,GAAG,EAAG,MAAO,GAAK,QAAS,GAAG,IAAM,IAAK,GAAsB,EAAE,CAApB,CAAE,SAAU,EAAG,CAAO,CAAG,EAAI,EAAI,CAAE,GAAG,EAAG,MAAO,GAAK,MAAO,GAAG,IAAM,IAAK,GAAsB,EAAE,CAApB,CAAE,SAAU,EAAG,CAAO,CAAG,KAAM,GAAK,GAC5K,CACC,CAAE,IAAK,EAAG,MAAO,EAAG,WAAY,GAChC,CAAE,kBAAmB,EAAG,kBAAmB,EAAG,aAAc,EAAG,oBAAqB,EAAG,UAAW,EAAG,eAAgB,GACrH,CAAE,cAAe,MACb,CACJ,IAAM,EAAI,GAAG,CACb,OAAO,EACL,EACE,EACA,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACtB,EAAE,EAAE,CACJ,GAAG,CAAC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,KAAO,CACnC,GAAM,CAAE,sBAAuB,EAAI,GAAI,KAAM,EAAG,GAAG,GAAM,EAAG,EAAI,GAAG,EAAG,EAAG,EAAI,EAAE,CAAE,EAAI,GAAG,EAAG,EAAE,WAAY,EAAE,CAAG,EAAI,EAAG,EAAI,EAAI,GAAG,EAAE,SAAU,EAAE,CAAC,GAAI,EAAI,EAAI,EAAkB,EAAI,EAAE,CACjL,WAAY,EACZ,QAAS,EACT,eAAgB,EAChB,eAJgK,EAAI,EAAI,EAKxK,YAAa,EACd,CAAC,CACF,OAAO,IAAM,KAST,KAAK,CATW,GAAK,GACvB,EACE,EACA,EAAG,GAAM,CAAC,EAAE,CAGZ,GAAG,EAAG,EAAE,CAAG,EAAI,EAAE,CAClB,CACD,EACD,CAAU,GACX,CACF,EAAG,GAAM,IAAM,KAAK,CACrB,CACD,EACD,CAAE,CACD,eAAgB,EACjB,EAEH,EAAG,GAAI,GAAI,GAAI,GAAI,GAAG,CACtB,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,CACb,OAAO,IAAM,CAAC,EAAI,CAAC,EAAI,IAAM,SAAW,SAAW,OAErD,IAAM,IAAM,EAAG,IAAM,OAAO,GAAK,WAAa,GAAG,EAAE,EAAE,CAAC,CAAG,GAAK,GAAG,EAAE,CAAE,GAAK,GACvE,CACC,CAAE,YAAa,EAAG,WAAY,EAAG,cAAe,EAAG,KAAM,GACzD,CAAE,cAAe,EAAG,WAAY,GAChC,CAAE,cAAe,GACjB,CAAE,sBAAuB,GACzB,CAAE,SAAU,EAAG,WAAY,GAC3B,CAAE,IAAK,GACP,CAAE,oBAAqB,GACvB,CAAE,QAAS,GACX,CAAE,eAAgB,MACd,CACJ,IAAM,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,GAAG,CACpB,EAAI,KACR,SAAS,EAAE,EAAG,CACZ,EAAE,EAAG,CACH,MAAO,MACP,SAAU,EACV,MAAO,OACR,CAAC,CAEJ,EACE,EACE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAC,CAAE,EAAE,CACrB,EAAE,EAAE,EAAE,CAAE,EAAG,EAAG,EAAE,CAChB,GAAG,CAAC,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,KAAO,CAC1B,IAAI,EAAI,GAAK,EAAG,EAAI,OACpB,OAAO,IAAM,EAAI,GAAG,EAAG,GAAK,EAAE,CAAE,IAAS,IAAM,CAAC,GAAI,CAAE,qBAAsB,EAAG,aAAc,EAAG,WAAY,EAAG,EAC/G,CACF,GAAG,CAAE,aAAc,KAAQ,EAAE,CAC9B,EACA,CAAE,qBAAsB,EAAG,WAAY,KAAQ,CAC9C,IAAM,OAAS,GAAG,CAAE,EAAI,MAAO,EAAG,EAAE,GAAK,IAAK,GAEzC,EAAI,GAAG,MAAS,CACnB,EAAG,EAAE,CAAC,uBAAwB,CAAE,WAAY,EAAG,CAAE,GAAG,MAAM,CAAE,EAAE,EAAE,CAAE,EAAI,MACtE,CAJgD,0BAA4B,CAC5E,EAAG,EAAE,CAAC,uBAAwB,CAAE,WAAY,EAAG,CAAE,GAAG,MAAM,CAAE,EAAE,EAAE,EAChE,EAIL,CACD,SAAS,EAAE,EAAG,CACZ,IAAM,EAAI,GAAG,EAAI,GAAM,CACrB,GAAK,CAAC,EAAE,UAAY,EAAE,qBAAuB,kBAAoB,IAAM,OAAS,EAAG,EAAE,CAAC,4CAA6C,EAAE,CAAE,GAAG,MAAM,CAAE,EAAE,OAAO,GAC3J,CACF,WAAW,EAAG,IAAI,CAEpB,EACE,EACE,GAAG,EAAE,EAAE,CAAE,EAAG,EAAE,CACd,GAAG,CAAC,GAAK,KAAO,IAAM,CAAC,GAAK,EAAE,CAC9B,IACG,CAAE,MAAO,GAAK,EAAG,MAAQ,CAAE,UAAW,IAAM,EAAG,MAAO,EAAG,EAC1D,CAAE,UAAW,CAAC,EAAG,MAAO,EAAG,CAC5B,CACD,GAAG,CAAE,UAAW,KAAQ,EAAE,CAC1B,EAAE,EAAG,EAAE,CACR,EACA,EAAG,KAAO,CACT,EAAG,EAAE,EAAI,EAAE,IAAM,CAAC,EAAE,EAEvB,CAAE,EAAE,MAAS,CACZ,EAAE,EAAG,EAAE,GAAK,CAAC,EAAE,EACf,CAAE,EAAE,GAAG,EAAE,EAAE,CAAE,EAAE,EAAG,CAAC,EAAG,KAAO,CAC7B,IAAM,CAAC,GAAK,CAAC,EAAE,UAAY,EAAE,qBAAuB,8BAAgC,EAAE,OAAO,EAC7F,CACF,IAAM,EAAI,EAAE,KAAK,CAAE,EAAI,GAAG,CAC1B,OAAO,EACL,GACE,EACE,EAAE,EAAE,CACJ,EAAG,GAAM,GAAG,QAAU,EAAE,CACzB,CACD,EAAE,EAAE,EAAE,CAAC,CACR,CACD,EACD,CAAE,EACD,EACE,GAAG,EAAE,EAAG,GAAG,EAAE,CAAC,CAAE,EAAE,CAClB,EAAE,EAAE,EAAE,CAAE,EAAG,EAAG,EAAE,CAChB,GAAG,CAAC,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,KAAO,GAAK,GAAK,IAAI,CAAE,QAAS,EAAG,WAAY,EAAG,oBAAqB,EAAG,CAAC,CAAC,CACjG,EAAG,GAAM,CAAC,CAAC,EAAE,CACb,GAAG,EAAE,CACN,CACA,GAAM,CACL,IAAM,OAAS,GAAG,CAAE,EAAI,MAAO,EAAG,EAAE,GAAK,IAAK,GAEzC,EAAI,GAAG,MAAS,CACnB,EAAG,EAAE,CAAC,sBAAuB,EAAE,CAAC,CAAE,EAAE,EAAG,EAAE,CAAE,EAAI,MAC/C,CAJgD,0BAA4B,CAC5E,EAAG,EAAE,CAAC,sBAAuB,EAAE,CAAC,CAAE,EAAE,EAAG,EAAE,EACzC,EAIL,CAAE,CAAE,mBAAoB,EAAG,aAAc,EAAG,uBAAwB,EAAG,EAE1E,EACE,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACD,CACF,CAAE,GAAK,GACL,CAAC,CAAE,KAAM,EAAG,eAAgB,EAAG,IAAK,EAAG,MAAO,GAAK,CAAE,wBAAyB,GAAK,CAAE,iBAAkB,EAAG,UAAW,GAAK,CAAE,SAAU,OAAU,EAC/I,EACE,EACA,EAAE,EAAE,CACJ,GAAG,EAAG,KAAO,IAAM,EAAE,CACrB,EAAE,EAAG,EAAG,EAAG,EAAG,EAAE,CAChB,GAAG,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAI,EAAE,IAAM,GAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CAAC,CACzD,CACD,EACD,CAAE,EAAE,EACL,EAAG,GAAI,GAAI,GAAI,GAAG,CAClB,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,GACL,CAAC,CAAE,SAAU,GAAK,CAAE,SAAU,GAAK,CAAE,UAAW,MAAS,CACxD,IAAM,EAAI,EAAE,EAAE,CACd,OAAO,EACL,EACE,EACA,EAAE,EAAE,CACJ,GAAG,EAAG,KAAO,IAAM,EAAE,CACrB,GAAG,EAAG,MAAQ,CAAE,IAAK,EAAG,EAAE,CAC3B,CACA,GAAM,CACL,GACE,EACE,EACA,GAAG,EAAE,CACL,EAAG,GAAM,EAAE,MAAM,OAAS,EAAE,CAC7B,KACK,CACJ,0BAA4B,CAC1B,EAAE,EAAG,EAAE,EACP,EAEL,EAEJ,CAAE,CACD,iBAAkB,EACnB,EAEH,EAAG,GAAI,GAAI,GAAG,CACd,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,GACL,CAAC,CAAE,eAAgB,MAAS,CAC3B,IAAM,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,CAAC,EAAE,CACnC,OAAO,EACL,EACE,EACA,EAAE,EAAG,EAAG,EAAE,CACV,GAAG,CAAC,EAAG,KAAO,IAAM,CAAC,GAAK,IAAM,IAAK,GAAE,CACvC,GAAG,CAAC,EAAG,EAAG,EAAG,KAAO,CAClB,GAAM,CAAE,MAAO,EAAG,KAAM,GAAM,EAC9B,GAAI,MACE,EAAE,EAAG,EAAE,CACT,MAAO,CAAC,OACL,GAAI,EAAE,EAAG,EAAE,CAChB,MAAO,CAAC,EACV,OAAO,GACP,CACF,GAAI,CACL,CACD,EACD,CAAE,EACD,EAAE,GAAG,EAAG,EAAG,EAAE,CAAE,EAAE,EAAE,CAAC,EACnB,CAAC,CAAC,EAAG,EAAG,GAAI,KAAO,CAClB,GAAK,IAAM,CAAC,GAAK,IAAM,IAAK,IAAK,EAAE,QAAU,EAAE,OAAO,EAAG,EAAE,EAE9D,CAAE,CAAE,UAAW,EAAG,wBAAyB,EAAG,uBAAwB,EAAG,eAAgB,EAAG,EAE/F,EAAG,GAAG,CACN,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,GAAG,CAAC,CAAE,qBAAsB,EAAG,SAAU,MAAS,CACxD,IAAM,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,IAAK,GAAE,CACzD,OAAO,EACL,EACE,GAAG,EAAG,EAAE,CACR,GAAG,CAAC,CAAE,UAAW,EAAG,eAAgB,GAAK,CAAE,UAAW,EAAG,WAAY,OAAU,CAC7E,aAAc,EACd,UAAW,KAAK,IAAI,EAAG,EAAI,EAAE,CAC7B,eAAgB,EACjB,EAAE,CACJ,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,CAAE,UAAW,OAAU,CAC5B,GAAG,EACH,IAAK,EAAE,IAAM,EACd,EAAE,CACJ,CACD,EACD,CAAE,CACD,mBAAoB,EAEpB,gBAAiB,EAEjB,2BAA4B,EAE5B,eAAgB,EAChB,mBAAoB,EACrB,EACA,EAAG,GAAG,CAAC,CAAE,GAAK,GACd,CACC,CAAE,WAAY,EAAG,MAAO,GACxB,CAAE,aAAc,EAAG,UAAW,GAC9B,CAAE,wBAAyB,GAC3B,CAAE,SAAU,GACZ,CAAE,gBAAiB,EAAG,2BAA4B,EAAG,mBAAoB,MACrE,CACJ,IAAM,EAAI,GAAG,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,EAAE,KAAK,CAAE,EAAI,EAAE,KAAK,CACtD,OAAO,EAAE,EAAG,EAAE,CAAE,EAAE,EAAG,EAAE,CAAE,EACvB,EACE,EACA,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACpB,EACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,KAAO,CACzB,IAAM,EAAI,GAAG,EAAE,SAAS,CACxB,GAAK,IAAM,MAAQ,IAAM,OAAS,EAAI,EAAE,UAAY,EAAE,WAAY,GAAK,EAAG,EAAE,CAAE,OAAQ,EAAG,UAAW,EAAG,CAAC,EAE3G,CAAE,EAAE,EAAE,EAAG,EAAE,GAAG,CAAE,EAAE,GAAG,CAAC,CAAE,EAAE,CAAE,EAC3B,EACE,EACA,EAAE,EAAE,CACJ,GAAG,EAAG,KAAO,IAAM,IAAK,GAAE,CAC1B,GAAI,CACJ,GAAG,EAAG,KAAO,EAAE,OAAO,CACvB,CACD,EACD,CAAE,CACD,SAAU,EACV,iBAAkB,EACnB,EAEH,EAAG,GAAI,GAAI,GAAI,GAAI,GAAG,CACvB,CACD,SAAS,GAAG,EAAG,CACb,MAAO,CAAE,MAAO,QAAS,MAAO,EAAG,OAAQ,EAAE,UAAW,CAE1D,IAAM,GAAK,GAAG,CAAC,CAAE,gBAAiB,MAAS,CACzC,IAAM,EAAI,EAAE,EAAE,CACd,OAAO,EACL,EACE,EACA,EAAG,GAAM,GAAK,EAAE,CAChB,EAAG,GAAM,MAAM,KAAK,CAAE,OAAQ,EAAG,CAAC,CAAC,KAAK,EAAG,IAAM,EAAE,CAAC,CACrD,CACD,EACD,CAAE,CAAE,aAAc,EAAG,EACrB,EAAG,GAAG,CAAC,CACV,SAAS,GAAG,EAAG,CACb,IAAI,EAAI,CAAC,EAAG,EACZ,YAAe,IAAM,EAAI,CAAC,EAAG,EAAI,GAAG,EAAG,IAEzC,IAAM,GAAK,OAAS,kBAAkB,KAAK,UAAU,UAAU,EAAI,UAAU,KAAK,UAAU,UAAU,CAAC,CAoHpG,GAAK,GACL,CACC,CACE,KAAM,EACN,gBAAiB,EACjB,eAAgB,EAChB,cAAe,EACf,eAAgB,EAChB,IAAK,EACL,aAAc,EACd,gBAAiB,EACjB,SAAU,EACV,WAAY,EACZ,MAAO,EACP,mBAAoB,EACpB,WAAY,EACZ,eAAgB,GAElB,CAAE,gCAAiC,EAAG,wBAAyB,EAAG,sBAAuB,GACzF,EACA,EACA,EACA,EACA,CAAE,cAAe,GACjB,EACA,CAAE,aAAc,GAChB,CAAE,YAAa,GACf,KACI,CACJ,GAAM,CAAE,UAAW,EAAG,qBAAsB,GAAG,gBAAiB,GAAG,aAAc,EAAG,GAAG,IAAM,EAC7F,OAAO,EAAE,EAAG,EAAE,uBAAuB,CAAE,EACrC,EACE,EAAE,mBACF,EAAG,GAAM,EAAE,cAAc,CAC1B,CACD,EAAE,eACH,CAAE,CACD,KAAM,EACN,kBAAmB,EACnB,eAAgB,EAChB,gBAAiB,EACjB,iBAAkB,EAClB,IAAK,EACL,YAAa,EACb,gBAAiB,EACjB,gCAAiC,EACjC,wBAAyB,EACzB,sBAAuB,EACvB,WAAY,EACZ,aAAc,EACd,gBAAiB,GAEjB,WAAY,EACZ,GAAG,EACH,aAAc,EACd,SAAU,EACV,UAAW,EACX,qBAAsB,GACtB,cAAe,EAEf,mBAAoB,EACpB,eAAgB,EAEhB,aAAc,EACd,GAAG,GAEH,GAAG,EACH,GAAG,EACH,MAAO,EACP,GAAG,EACJ,EAEH,EACE,GACA,GACA,GACA,GACA,GACA,GACA,GAnM0G,GAC3G,CACC,CAAE,UAAW,EAAG,SAAU,EAAG,oBAAqB,EAAG,UAAW,GAChE,CAAE,WAAY,EAAG,YAAa,EAAG,wBAAyB,EAAG,gBAAiB,GAC9E,CAAE,UAAW,GACb,CAAE,kBAAmB,EAAG,IAAK,EAAG,gBAAiB,EAAG,MAAO,GAC3D,CAAE,IAAK,GACP,CAAE,iBAAkB,MAChB,CACJ,IAAM,EAAI,GACR,EACE,EACA,EAAE,EAAE,CACJ,IACG,EAAG,EAAG,EAAG,GAAI,CAAC,CAAE,OAAQ,EAAG,MAAO,EAAG,aAAc,EAAG,WAAY,GAAK,KAAO,CAC7E,IAAM,EAAI,EAAI,EACV,EAAI,EACR,OAAO,IAAM,GAAK,EAAE,OAAS,GAAK,EAAE,OAAS,IAAM,EAAE,GAAG,gBAAkB,GAAK,EAAE,GAAG,gBAAkB,IAAM,EAAI,EAAI,EAAG,IAAM,IAAM,GAAK,KAAM,CAAC,EAAG,EAAG,EAAG,EAAE,EAE5J,CAAC,EAAG,EAAE,CAAE,EAAG,EAAE,CACd,CACD,GAAG,CAAC,KAAO,IAAM,EAAE,CACnB,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACnB,GAAG,EAAG,EAAG,EAAG,IAAO,KAAO,CAAC,GAAK,CAAC,GAAK,IAAM,GAAK,IAAM,GAAG,CAC1D,GAAG,CAAC,CAAC,OAAY,MAAQ,EAAE,gCAAiC,CAAE,OAAQ,EAAG,CAAE,GAAG,MAAM,CAAE,GAAG,CAC1F,CACF,CACD,SAAS,EAAE,EAAG,CACZ,EAAI,GAAK,EAAE,EAAG,CAAE,SAAU,OAAQ,IAAK,CAAC,EAAG,CAAC,CAAE,EAAE,EAAG,EAAE,GAAK,EAAE,EAAG,EAAE,CAAE,EAAE,EAAG,CAAE,SAAU,OAAQ,IAAK,CAAC,EAAG,CAAC,EAExG,OAAO,EAAE,EAAE,EAAG,EAAE,EAAG,EAAE,CAAC,EAAG,CAAC,EAAG,EAAG,KAAO,CACrC,GAAK,IAAI,CAAG,EAAE,EAAG,EAAI,EAAE,CAAG,EAAE,CAAC,EAAE,EAC/B,CAAE,EACF,EACE,GAAG,GAAG,EAAG,CAAC,EAAE,CAAE,EAAG,EAAE,CACnB,GAAG,CAAC,EAAG,EAAG,KAAO,CAAC,GAAK,CAAC,GAAK,IAAM,EAAE,CACrC,GAAG,CAAC,EAAG,KAAO,EAAE,CAChB,GAAG,EAAE,CACN,CACD,EACD,CAAE,EACD,EACE,EACA,EAAG,IAAO,CAAE,IAAK,CAAC,EAAG,EAAE,CACxB,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,EAAG,EAAE,CACP,GAAG,CAAC,EAAG,CAAE,aAAc,EAAG,SAAU,EAAG,SAAU,GAAK,KAAO,CAC3D,SAAS,EAAE,EAAG,CACZ,OAAO,GAAK,EAAI,GAElB,GAAI,EAAE,SAAW,EACf,OAAO,EAAE,EAAE,CACb,IAAI,EAAI,EACF,EAAI,GAAG,EAAG,EAAE,CACd,EAAI,EAAG,EAAI,EACf,KAAO,EAAI,GAAK,CACd,IAAK,GAAK,EACV,IAAI,EAAI,EAAE,SAAW,EAAI,EAAI,IAAQ,EAAE,EAAI,GAAK,EAAE,GAAK,EACvD,EAAI,EAAI,IAAM,GAAK,EAAG,EAAI,EAAI,EAAI,GAAI,GAAK,EAAG,GAAK,EAAE,EAAE,CAAE,IAE3D,OAAO,GACP,CACH,CACA,GAAM,CACL,EAAE,EAAG,EAAE,CAAE,0BAA4B,CACnC,EAAE,EAAG,CAAE,IAAK,EAAG,CAAC,CAAE,0BAA4B,CAC5C,EAAE,EAAG,EAAE,CAAE,EAAE,EAAG,CAAC,EAAE,EACjB,EACF,EAEL,CAAE,CAAE,UAAW,EAAG,EAErB,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAG,CAwHtB,CACF,GACA,GAzHI,GACL,CACC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,MACK,CACL,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACJ,EACD,EACE,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACD,CAoFG,CACH,CACF,CACD,SAAS,GAAG,EAAG,EAAG,CAChB,IAAM,EAAI,EAAE,CAAE,EAAI,EAAE,CAChB,EAAI,EACF,EAAI,EAAE,OACZ,KAAO,EAAI,GACT,EAAE,EAAE,IAAM,EAAG,GAAK,EACpB,IAAK,IAAM,KAAK,EACd,OAAO,OAAO,EAAG,EAAE,GAAK,EAAE,GAAK,EAAE,IACnC,OAAO,EAET,IAAM,GAAK,OAAO,SAAW,IAAA,EAAQ,gBAAA,EAAoB,UACzD,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,IAAM,EAAI,OAAO,KAAK,EAAE,UAAY,EAAE,CAAC,CAAE,EAAI,OAAO,KAAK,EAAE,UAAY,EAAE,CAAC,CAAE,EAAI,OAAO,KAAK,EAAE,SAAW,EAAE,CAAC,CAAE,EAAI,OAAO,KAAK,EAAE,QAAU,EAAE,CAAC,CAAE,EAAA,EAAM,cAAc,EAAE,CAAC,CACtK,SAAS,EAAE,EAAG,EAAG,CACf,EAAE,aAAe,IAAK,IAAK,EAAE,EAAE,WAAY,CAAC,EAAE,CAC9C,IAAK,IAAM,KAAK,EAAG,CACjB,IAAM,EAAI,EAAE,EAAE,SAAS,IACvB,EAAE,EAAG,EAAE,GAAG,CAEZ,IAAK,IAAM,KAAK,EACd,GAAI,KAAK,EAAG,CACV,IAAM,EAAI,EAAE,EAAE,SAAS,IACvB,EAAE,EAAG,EAAE,GAAG,CAEd,EAAE,aAAe,IAAK,IAAK,EAAE,EAAE,WAAY,CAAC,EAAE,CAEhD,SAAS,EAAE,EAAG,CACZ,OAAO,EAAE,QAAQ,EAAG,KAAO,EAAE,GAAM,GAAM,CACvC,IAAM,EAAI,EAAE,EAAE,QAAQ,IACtB,EAAE,EAAG,EAAE,EACN,GAAI,EAAE,CAAC,CAEZ,SAAS,EAAE,EAAG,CACZ,OAAO,EAAE,QAAQ,EAAG,KAAO,EAAE,GAAK,GAAG,EAAE,EAAE,OAAO,IAAI,CAAE,GAAI,EAAE,CAAC,CA4C/D,MAAO,CACL,UA3CI,EAAM,WAAW,SAAS,EAAG,EAAG,CACpC,GAAM,CAAE,SAAU,EAAG,GAAG,GAAM,EAAG,CAAC,GAAA,EAAO,aAAe,GAAG,GAAG,EAAE,CAAG,GAAM,CACvE,EAAE,EAAG,EAAE,EACP,CAAC,CAAE,CAAC,GAAA,EAAO,SAAS,GAAG,EAAG,EAAE,CAAC,CAC/B,OAAS,CACP,IAAK,IAAM,KAAK,EACd,KAAK,GAAK,EAAE,EAAE,GAAI,EAAE,GAAG,CACzB,UAAa,CACX,OAAO,OAAO,EAAE,CAAC,IAAI,GAAG,GAEzB,CAAC,EAAG,EAAG,EAAE,CAAC,CAAE,OAAS,CACtB,EAAE,EAAG,EAAE,EACP,CAAA,EAAI,oBAAoB,EAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CACtC,IAAM,EAAI,EACV,OAAuB,EAAA,EAAA,KAAE,EAAE,SAAU,CAAE,MAAO,EAAG,SAAU,IAAM,IAAK,GAA0E,GAAtD,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,GAAG,CAAC,GAAG,EAAG,GAAG,EAAG,GAAG,EAAE,CAAE,EAAE,CAAE,SAAU,EAAG,CAAC,CAAM,CAAC,EA6BzI,CACX,YAAa,EAAG,IAAM,CACpB,IAAM,EAAA,EAAM,WAAW,EAAE,CAAC,GAC1B,OAAS,EAAE,EAAG,EAAE,CAAE,CAAC,EAAG,EAAE,CAAC,EAE3B,gBAzBM,GAAM,CACZ,IAAM,EAAA,EAAM,WAAW,EAAE,CAAC,GAAI,EAAA,EAAM,YACjC,GAAM,EAAE,EAAG,EAAE,CACd,CAAC,EAAE,CACJ,CACD,OAAA,EAAS,qBACP,MACM,EAAG,EAAE,KACL,EAAG,EAAE,CACZ,EAiBD,aAlCO,GAAM,CACb,IAAM,EAAA,EAAM,WAAW,EAAE,CACzB,OAAA,EAAS,YACN,GAAM,CACL,EAAE,EAAE,GAAI,EAAE,EAEZ,CAAC,EAAG,EAAE,CACP,EA4BF,CAEH,IAAM,GAAA,EAAO,cAAc,IAAK,GAAE,CAAE,GAAA,EAAO,cAAc,IAAK,GAAE,CAAE,GAAK,iBAAkB,GAAK,SAAU,GAAK,OAAS,CACpH,GAAI,OAAO,SAAW,IACpB,OAAO,GACT,IAAM,EAAI,SAAS,cAAc,MAAM,CACvC,MAAO,GAAE,MAAM,SAAW,GAAI,EAAE,MAAM,WAAa,GAAK,GAAK,IAC7D,CAAE,GAAK,OAAO,SAAW,IAAA,EAAQ,gBAAA,EAAoB,UACvD,SAAS,GAAG,EAAG,CACb,MAAO,SAAU,EAEnB,SAAS,GAAG,EAAG,CACb,MAAO,SAAU,EAEnB,SAAS,GAAG,EAAG,EAAG,EAAG,EAAI,GAAI,EAAG,EAAG,CACjC,IAAM,EAAA,EAAM,OAAO,KAAK,CAAE,EAAA,EAAM,OAAO,KAAK,CAAE,EAAA,EAAM,OAAO,KAAK,CAAE,EAAA,EAAM,YACrE,GAAM,CACL,IAAI,EAAG,EAAG,EACJ,EAAI,EAAE,OACZ,GAAI,GAAG,EAAE,EAAI,GAAG,EAAE,CAAE,CAClB,IAAM,EAAI,GAAG,EAAE,CAAG,EAAI,EAAE,YACxB,EAAI,IAAM,CAAC,EAAI,GAAG,EAAG,EAAE,QAAQ,CAAG,EAAE,QAAS,EAAI,IAAM,CAAC,EAAI,EAAE,SAAS,gBAAgB,YAAc,EAAE,SAAS,gBAAgB,aAAc,EAAI,IAAM,CAAC,EAAI,EAAE,WAAa,EAAE,iBAE9K,EAAI,IAAM,CAAC,EAAI,GAAG,EAAG,EAAE,WAAW,CAAG,EAAE,UAAW,EAAI,IAAM,CAAC,EAAI,EAAE,YAAc,EAAE,aAAc,EAAI,IAAM,CAAC,EAAI,EAAE,YAAc,EAAE,aACpI,IAAM,MAAU,CACd,EAAE,CACA,aAAc,EACd,UAAW,KAAK,IAAI,EAAG,EAAE,CACzB,eAAgB,EACjB,CAAC,EAEJ,EAAE,oBAAsB,CAAC,EAAI,GAAG,CAAA,GAAM,UAAU,EAAE,CAAE,EAAE,UAAY,OAAS,IAAM,EAAE,SAAW,GAAK,GAAK,IAAM,EAAI,KAAO,EAAE,QAAU,KAAM,EAAE,CAAC,EAAE,CAAE,AAAuC,EAAE,WAA3B,aAAa,EAAE,QAAQ,CAAc,QAEvM,CAAC,EAAG,EAAG,EAAE,CACV,CACD,EAAE,cAAgB,CAChB,IAAM,EAAI,GAAK,EAAE,QACjB,OAAO,GAAG,EAAE,CAAE,EAAE,GAAK,EAAE,QAAQ,CAAE,EAAE,CAAE,kBAAmB,CAAC,EAAG,OAAQ,EAAG,CAAC,CAAE,EAAE,iBAAiB,SAAU,EAAG,CAAE,QAAS,CAAC,EAAG,CAAC,KAAQ,CAChI,GAAG,EAAE,CAAE,EAAE,KAAK,CAAE,EAAE,oBAAoB,SAAU,EAAE,GAEnD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAE,CAAC,CACnB,SAAS,EAAE,EAAG,CACZ,IAAM,EAAI,EAAE,QACZ,GAAI,CAAC,IAAM,IAAM,CAAC,EAAI,gBAAiB,GAAK,EAAE,cAAgB,EAAI,iBAAkB,GAAK,EAAE,eAAiB,GAC1G,OACF,IAAM,EAAI,EAAE,WAAa,SACrB,EAAG,EAAG,EACV,GAAG,EAAE,EAAI,EAAI,KAAK,IAChB,GAAG,EAAE,SAAS,gBAAiB,IAAM,CAAC,EAAI,QAAU,SAAS,CAC7D,IAAM,CAAC,EAAI,EAAE,SAAS,gBAAgB,YAAc,EAAE,SAAS,gBAAgB,aAChF,CAAE,EAAI,IAAM,CAAC,EAAI,EAAE,WAAa,EAAE,YAAa,EAAI,IAAM,CAAC,EAAI,GAAG,EAAG,EAAE,QAAQ,CAAG,EAAE,UAAY,EAAI,EAAE,IAAM,CAAC,EAAI,cAAgB,gBAAiB,EAAI,GAAG,EAAG,IAAM,CAAC,EAAI,QAAU,SAAS,CAAE,EAAI,IAAM,CAAC,EAAI,GAAG,EAAG,EAAE,WAAW,CAAG,EAAE,WACnO,IAAM,EAAI,EAAI,EACd,GAAI,EAAE,MAAQ,IAAK,GAAG,CACpB,EAAE,SAAS,EAAE,CACb,OAEF,IAAM,EAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,EAAG,EAAE,IAAI,CAAE,EAAE,CAAC,CACpD,GAAI,EAAE,IAAM,EAAG,GAAG,EAAG,EAAE,EAAI,IAAM,EAAG,CAClC,EAAE,CAAE,aAAc,EAAG,UAAW,EAAG,eAAgB,EAAG,CAAC,CAAE,GAAK,EAAE,CAAC,EAAE,CACnE,OAEF,GAAK,EAAE,QAAU,EAAG,EAAE,SAAW,aAAa,EAAE,QAAQ,CAAE,EAAE,QAAU,eAAiB,CACrF,EAAE,QAAU,KAAM,EAAE,QAAU,KAAM,EAAE,CAAC,EAAE,EACxC,IAAI,EAAI,EAAE,QAAU,KAAM,IAAM,CAAC,IAAM,EAAI,CAC5C,GAAG,EAAE,WAAa,IAAK,GAA+B,EAAE,CAA7B,CAAE,SAAU,EAAE,SAAU,CACnD,KAAM,GAAG,EAAG,EAAE,CACf,EAAG,EAAE,SAAS,EAAE,CAEnB,SAAS,EAAE,EAAG,CACZ,IAAM,CAAC,IAAM,EAAI,CACf,GAAG,EAAE,WAAa,IAAK,GAA+B,EAAE,CAA7B,CAAE,SAAU,EAAE,SAAU,CACnD,GAAG,EAAE,MAAQ,IAAK,GAAqC,EAAE,CAAnC,CAAE,KAAM,GAAG,EAAE,QAAS,EAAE,IAAI,CAAE,CACrD,EAAG,EAAE,QAAQ,SAAS,EAAE,CAE3B,MAAO,CAAE,iBAAkB,EAAG,YAAa,EAAG,iBAAkB,EAAG,CAErE,SAAS,GAAG,EAAG,CACb,OAAO,EAET,IA0BI,GAAqB,GACtB,CAAC,EAAG,MAAQ,CAAE,GAAG,EAAG,GAAG,EAAG,EAC3B,EAAG,GA5BsB,MAAQ,CACjC,IAAM,EAAI,EAAG,GAAM,QAAQ,IAAI,CAAE,EAAI,EAAG,GAAM,SAAS,IAAI,CAAE,EAAI,EAAE,EAAE,CAAC,CAAE,EAAI,EAAE,GAAG,CAAE,EAAI,EAAE,MAAM,CAAE,EAAI,EAAE,GAAG,CAAE,GAAK,EAAG,EAAI,OAAS,GAC/H,EACE,EACA,EAAG,GAAM,EAAE,GAAG,CACd,GAAI,CACL,CACD,EACD,CACD,MAAO,CACL,WAAY,EACZ,eAAgB,EAChB,iBAAkB,EAAE,mBAAmB,CACvC,gBAAiB,EAAE,SAAS,CAC5B,eAAgB,EAAE,QAAS,MAAM,CACjC,aAAc,EACd,gBAAiB,EAAE,SAAS,CAC5B,gBAAiB,EACjB,cAAe,EAAE,OAAQ,MAAM,CAC/B,YAAa,EACb,cAAe,EAAE,OAAQ,MAAM,CAC/B,kBAAmB,EAAE,WAAY,MAAM,CACvC,YAAa,EACb,sBAAuB,EAAE,wBAAwB,CACjD,qBAAsB,EAAE,cAAc,CACvC,EAGQ,CAAC,CACX,CAAE,IAAM,CAAE,OAAQ,MAAwB,EAAA,EAAA,KAAE,MAAO,CAAE,MAAO,CAAE,OAAQ,EAAG,CAAE,CAAC,CAAE,GAAK,CAAE,eAAgB,OAAQ,SAAU,IAAI,CAAE,OAAQ,EAAG,CAAE,GAAK,CAAE,eAAgB,OAAQ,CAAE,GAAK,CAAE,GAAG,GAAI,QAAS,eAAgB,OAAQ,OAAQ,CAAE,GAAqB,EAAE,KAAK,SAAS,CAAE,YAAa,EAAI,CAAC,GAAK,CACjS,IAAM,EAAI,EAAE,YAAY,CAAE,EAAI,GAAG,aAAa,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,GAAG,6BAA6B,CAAE,EAAI,GAAG,uBAAuB,CAAE,EAAI,GAAK,EAAI,EAAI,EAAG,EAAI,EAAE,cAAc,CAAE,EAAI,EAAE,UAAU,CAAE,EAAI,EAAE,eAAe,CAAE,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,WAAW,CAAE,EAAI,EAAE,MAAM,CAAE,EAAI,GAAG,MAAM,CAAE,EAAI,EAAE,sBAAsB,CAAE,CAAE,YAAa,GAAM,GAC1X,EACA,EACA,EACA,EAAI,GAAK,EACT,EACA,EACA,EACA,EACA,EAAE,qCAAqC,CACxC,CAAE,CAAC,EAAG,GAAA,EAAO,SAAS,EAAE,CACzB,GAAG,YAAc,GAAM,CACrB,IAAM,GAAK,EAAE,EAAE,EACf,CACF,IAAM,EAAI,EAAE,mBAAmB,CAAE,EAAI,EAAE,wBAAwB,EAAI,GAAI,EAAI,EAAE,gBAAgB,CAAE,EAAI,EAAE,gBAAgB,CAAE,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,YAAY,CAAE,EAAI,EAAE,eAAe,CAAC,OAAS,EAAG,GAAI,EAAE,gBAAgB,CAAE,GAAI,EAAE,kCAAkC,CAAE,EAAI,EAAI,EAAE,CAAG,CAC5S,UAAW,aACX,GAAG,EAAI,CACL,QAAS,eACT,OAAQ,OACR,kBAAmB,IAAM,EAAQ,GAAI,OAAS,EAAjB,EAC7B,iBAAkB,EAAE,aACpB,mBAAoB,EAAE,UACtB,WAAY,SACb,CAAG,CACF,UAAW,IAAM,EAAQ,GAAI,OAAS,EAAjB,EACrB,cAAe,EAAE,aACjB,WAAY,EAAE,UACf,CACD,GAAG,GAAI,EAAE,CAAG,CAAE,WAAY,SAAU,CACrC,CACD,MAAO,CAAC,GAAK,EAAE,aAAe,GAAK,GAAM,MAAuC,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,EAAmB,EAAA,EAAA,KACtH,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,cAAe,EAAI,yBAA2B,qBAC9C,IAAK,EACL,MAAO,EACP,UAAW,EAAI,EAAE,SAAW,EAAE,OAAO,IAAK,GAAM,CAC9C,IAAM,EAAK,EAAE,cAAe,EAAI,EAAE,EAAK,EAAE,eAAgB,EAAE,KAAM,EAAE,CACnE,OAAO,GAAoB,EAAA,EAAA,eACzB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,OAAQ,EAAE,KACV,MAAO,EAAE,MACT,IAAK,EACL,KAAM,EAAE,MAAQ,OAChB,GAAG,EAAE,OAAS,QAAU,EAAE,CAAG,CAAE,WAAY,EAAE,WAAY,CAC1D,CACF,CAAG,EAAE,OAAS,SAA0B,EAAA,EAAA,eACvC,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,aAAc,EACd,kBAAmB,EAAE,MACrB,kBAAmB,EAAE,KACrB,IAAK,EACL,MAAO,GACR,CACD,EAAE,EAAE,MAAO,EAAE,CACd,EAAmB,EAAA,EAAA,eAClB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,GAAG,GAAG,EAAG,EAAE,KAAK,CAChB,aAAc,EACd,wBAAyB,EAAE,WAC3B,kBAAmB,EAAE,MACrB,kBAAmB,EAAE,KACrB,IAAK,EACL,MAAO,EAAI,GAAK,GACjB,CACD,EAAI,EAAE,EAAE,MAAO,EAAE,WAAY,EAAE,KAAM,EAAE,CAAG,EAAE,EAAE,MAAO,EAAE,KAAM,EAAE,CAChE,EACD,CACH,CACF,EACD,CAAE,GAAK,CACP,OAAQ,OACR,QAAS,OACT,UAAW,OACX,SAAU,WACV,wBAAyB,QAC1B,CAAE,GAAK,CACN,QAAS,OACT,UAAW,OACX,SAAU,WACX,CAAE,GAAM,IAAO,CACd,OAAQ,OACR,SAAU,WACV,IAAK,EACL,MAAO,OACP,GAAG,EAAI,CAAE,QAAS,OAAQ,cAAe,SAAU,CAAG,IAAK,GAC5D,EAAG,IAAM,EAAG,EAAG,EAAI,KAAO,CACzB,GAAG,GAAG,EAAE,CACR,SAAU,EAAI,WAAa,WAC3B,IAAK,EAAI,CAAC,EAAI,EACf,EAAG,GAAK,CACP,SAAU,IAAI,CACd,IAAK,EACL,MAAO,OACP,OAAQ,EACT,CACD,SAAS,EAAG,EAAG,EAAG,CAChB,GAAI,OAAO,GAAK,SACd,MAAO,CAAE,QAAS,EAAG,CAEzB,SAAS,GAAG,EAAG,EAAG,CAChB,MAAO,CAAE,KAAM,OAAO,GAAK,SAAW,IAAK,GAAI,EAAG,CAEpD,IAAM,GAAqB,EAAE,KAAK,UAAW,CAC3C,IAAM,EAAI,EAAE,kBAAkB,CAAE,EAAI,GAAG,eAAe,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,GAAA,EAClF,YACO,GAAM,CACX,EAAE,GAAG,EAAG,SAAS,CAAC,EAEpB,CAAC,EAAE,CACJ,CACD,CAAC,EACD,EAAE,qCAAqC,CACxC,CAAE,EAAI,EAAE,UAAU,CACnB,OAAO,GAAK,KAA2F,MAApE,EAAA,EAAA,KAAE,EAAG,CAAE,IAAK,EAAG,UAA0B,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,CAAE,CAAC,EACpG,CAAE,GAAqB,EAAE,KAAK,UAAW,CACzC,IAAM,EAAI,EAAE,kBAAkB,CAAE,EAAI,GAAG,eAAe,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,GAAA,EAClF,YACO,GAAM,CACX,EAAE,GAAG,EAAG,SAAS,CAAC,EAEpB,CAAC,EAAE,CACJ,CACD,CAAC,EACD,EAAE,qCAAqC,CACxC,CAAE,EAAI,EAAE,UAAU,CACnB,OAAO,GAAK,KAA2F,MAApE,EAAA,EAAA,KAAE,EAAG,CAAE,IAAK,EAAG,UAA0B,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,CAAE,CAAC,EACpG,CACF,SAAS,GAAG,CAAE,WAAY,EAAG,gBAAiB,EAAG,aAAc,GAAK,CAClE,OAAA,EAAS,KAAK,SAAS,CAAE,SAAU,EAAG,MAAO,EAAG,QAAS,EAAG,GAAG,GAAK,CAClE,IAAM,EAAI,EAAE,uBAAuB,CAAE,EAAI,EAAE,oBAAoB,CAAE,EAAI,EAAE,4BAA4B,CAAE,EAAI,EAAE,cAAc,CAAE,EAAI,EAAE,sBAAsB,EAAI,CAAC,EAAG,CAAE,iBAAkB,EAAG,YAAa,EAAG,iBAAkB,GAAM,GAC5N,EACA,EACA,EACA,EACA,IAAK,GACL,EACD,CACD,OAAO,EAAE,WAAY,EAAE,CAAE,EAAE,WAAY,EAAE,EAAkB,EAAA,EAAA,KACzD,EACA,CACE,cAAe,oBACf,yBAA0B,CAAC,EAC3B,IAAK,EACL,MAAO,CAAE,GAAG,EAAI,GAAK,GAAI,GAAG,EAAG,CAC/B,SAAU,EACV,GAAG,EACH,GAAG,EAAG,EAAG,EAAE,CACX,SAAU,EACX,CACF,EACD,CAEJ,SAAS,GAAG,CAAE,WAAY,EAAG,gBAAiB,EAAG,aAAc,GAAK,CAClE,OAAA,EAAS,KAAK,SAAS,CAAE,SAAU,EAAG,MAAO,EAAG,QAAS,EAAG,GAAG,GAAK,CAClE,IAAM,EAAI,EAAE,6BAA6B,CAAE,EAAI,EAAE,oBAAoB,CAAE,EAAI,EAAE,4BAA4B,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,YAAY,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAA,EAAM,OAAO,KAAK,CAAwB,CAAE,iBAAkB,EAAG,YAAa,EAAG,iBAAkB,GAAM,GAC7R,EACA,EACA,EAH4M,EAAE,cAI7M,CACD,EACD,CACD,OAAO,QAAU,EAAE,QAAU,GAAK,EAAE,SAAS,cAAc,gBAAmB,CAC5E,EAAE,QAAU,OACV,CAAC,EAAG,EAAE,CAAC,CAAE,EAAE,iBAAkB,EAAE,CAAE,EAAE,WAAY,EAAE,EAAkB,EAAA,EAAA,KACrE,EACA,CACE,IAAK,EACL,yBAA0B,CAAC,EAC3B,MAAO,CAAE,SAAU,WAAY,GAAG,EAAG,GAAG,IAAM,EAAwB,IAAK,GAAzB,CAAE,OAAQ,EAAI,EAAG,CAAW,CAC9E,GAAG,EACH,GAAG,EAAG,EAAG,EAAE,CACX,SAAU,EACX,CACF,EACD,CAEJ,IAAM,IAAM,CAAE,SAAU,KAAQ,CAC9B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,iBAAiB,CAAE,EAAI,GAAG,kBAAkB,CAAE,EAAI,EAAE,gBAAgB,CAAE,EAAI,EAAE,sBAAsB,CAGlI,EAAI,GAAA,EAHsI,YACrI,GAAG,EAAI,GAAM,GAAG,EAAG,EAAI,QAAU,SAAS,CAAC,CACjD,CAAC,EAAG,EAAE,CACG,CAAE,CAAC,EAAG,EAAE,qCAAqC,CAAC,CACzD,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,EAAE,eAAe,CAAE,EAAE,EAAE,WAAW,GACzC,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,qBAAsB,UAAW,IAAK,EAAG,MAAO,GAAG,EAAE,CAAE,SAAU,EAAG,CAAC,EAC9G,IAAM,CAAE,SAAU,KAAQ,CAC3B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,qBAAqB,CAAE,EAAI,GAAG,kBAAkB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,gBAAgB,CAAE,EAAI,GACtK,EACA,EACA,EAAE,qCAAqC,CACxC,CAAE,EAAI,EAAE,gBAAgB,CACzB,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,EAAE,WAAW,CAAE,EAAE,CAAE,WAAY,EAAG,UAAW,EAAG,cAAe,EAAE,eAAgB,aAAc,IAAK,CAAC,GAC5G,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,qBAAsB,SAAU,IAAK,EAAG,MAAO,GAAG,EAAG,EAAG,EAAE,CAAE,SAAU,EAAG,CAAC,EACnH,IAAM,CAAE,SAAU,KAAQ,CAC3B,IAAM,EAAI,EAAE,uBAAuB,EAAI,MAAO,EAAI,EAAE,eAAe,CACnE,OAAuB,EAAA,EAAA,KAAE,EAAG,CAAE,MAAO,CADsC,GAAG,GAAI,UAAW,GAAG,EAAE,IAC5D,CAAE,GAAG,EAAG,EAD+D,EAAE,UAC7D,CAAC,CAAE,SAAU,EAAG,CAAC,EAWjE,CACF,UAAW,GACX,WAAY,GACZ,gBAAiB,EACjB,aAAc,IACI,GAClB,GACA,CACE,SAAU,CACR,iBAAkB,mBAClB,QAAS,UACT,aAAc,eACd,uBAAwB,yBACxB,YAAa,cACb,aAAc,eACd,SAAU,WACV,mBAAoB,qBACpB,qBAAsB,uBACtB,WAAY,aACZ,YAAa,cACb,aAAc,eACd,eAAgB,iBAChB,wBAAyB,0BACzB,WAAY,aACZ,kBAAmB,oBACnB,eAAgB,iBAChB,eAAgB,iBAChB,kBAAmB,oBACnB,iBAAkB,mBAElB,gBAAiB,kBACjB,gBAAiB,kBACjB,SAAU,WACV,wBAAyB,0BACzB,gBAAiB,kBACjB,KAAM,OACN,iBAAkB,mBAClB,iBAAkB,mBAClB,cAAe,gBACf,gBAAiB,kBACjB,mBAAoB,qBACpB,YAAa,cACb,SAAU,WACV,oBAAqB,sBACrB,mCAAoC,qCACrC,CACD,QAAS,CACP,cAAe,gBACf,eAAgB,iBAChB,SAAU,WACV,SAAU,WACV,mBAAoB,qBACpB,SAAU,WACX,CACD,OAAQ,CACN,YAAa,cACb,WAAY,aACZ,aAAc,eACd,aAAc,eACd,oBAAqB,sBACrB,iBAAkB,mBAClB,uBAAwB,yBACxB,cAAe,gBACf,aAAc,eACf,CACF,CACD,EA5EwB,KAAK,SAAS,EAAG,CACzC,IAAM,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,kBAAkB,CAAC,OAAS,EAAG,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,UAAU,CAClH,OAAuB,EAAA,EAAA,MAAG,GAAK,EAAI,GAAK,GAAI,CAAE,GAAG,EAAG,QAAS,EAAG,SAAU,CACxE,IAAqB,EAAA,EAAA,KAAE,GAAI,CAAE,UAA0B,EAAA,EAAA,KAAE,GAAI,CAAE,YAAa,CAAC,EAAG,CAAC,CAAE,CAAC,EACpE,EAAA,EAAA,MAAG,GAAK,EAAI,GAAK,GAAI,CAAE,SAAU,EAC/B,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,EACT,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,EACT,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,CAC1B,CAAE,CAAC,CACL,CAAE,CAAC,EAmEF,CACH,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAG,aAAc,GAAI,CAAC,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAG,aAAc,GAAI,CAAC,CAAE,GAAK,GAmC1K,GAAqB,GACtB,CAAC,EAAG,MAAQ,CAAE,GAAG,EAAG,GAAG,EAAG,EAC3B,EAAG,GArC2M,MAAQ,CACtN,IAAM,EAAI,EAAG,IAAsB,EAAA,EAAA,MAAG,KAAM,CAAE,SAAU,CACtD,SACA,EACD,CAAE,CAAC,CAAC,CAAE,EAAI,EAAE,KAAK,CAAE,EAAI,EAAG,IAAsB,EAAA,EAAA,MAAG,KAAM,CAAE,QAAS,IAAK,SAAU,CAClF,SACA,EACD,CAAE,CAAC,CAAC,CAAE,EAAI,EAAE,KAAK,CAAE,EAAI,EAAE,KAAK,CAAE,EAAI,EAAE,EAAE,CAAC,CAAE,EAAI,EAAE,GAAG,CAAE,EAAI,EAAE,GAAG,CAAE,GAAK,EAAG,EAAI,OAAS,GACrF,EACE,EACA,EAAG,GAAM,EAAE,GAAG,CACd,GAAI,CACL,CACD,EACD,CACD,MAAO,CACL,WAAY,EACZ,eAAgB,EAChB,QAAS,EACT,iBAAkB,EAAE,mBAAmB,CACvC,UAAW,EAAE,YAAY,CACzB,mBAAoB,EACpB,mBAAoB,EACpB,YAAa,EACb,aAAc,EACd,kBAAmB,EAAE,WAAY,MAAM,CACvC,YAAa,EACb,sBAAuB,EAAE,wBAAwB,CACjD,mBAAoB,EAAE,YAAa,QAAQ,CAC3C,eAAgB,EAAE,QAAS,QAAQ,CACnC,qBAAsB,EAAE,YAAa,QAAQ,CAC7C,mBAAoB,EAAE,YAAa,QAAQ,CAC3C,kBAAmB,EAAE,WAAY,KAAK,CACtC,eAAgB,EAAE,QAAS,KAAK,CACjC,EAGQ,CAAC,CACX,CAAE,IAAM,CAAE,OAAQ,MAAwB,EAAA,EAAA,KAAE,KAAM,CAAE,UAA0B,EAAA,EAAA,KAAE,KAAM,CAAE,MAAO,CAAE,OAAQ,EAAG,CAAE,CAAC,CAAE,CAAC,CAAE,IAAM,CAAE,OAAQ,MAAwB,EAAA,EAAA,KAAE,KAAM,CAAE,UAA0B,EAAA,EAAA,KAAE,KAAM,CAAE,MAAO,CAAE,OAAQ,EAAG,OAAQ,EAAG,QAAS,EAAG,CAAE,CAAC,CAAE,CAAC,CAAE,GAAK,CAAE,eAAgB,OAAQ,CAAE,GAAK,CAAE,SAAU,IAAI,CAAE,OAAQ,EAAG,eAAgB,OAAQ,CAAE,GAAqB,EAAE,KAAK,SAAS,CAAE,YAAa,EAAI,CAAC,GAAK,CACvZ,IAAM,EAAI,EAAE,YAAY,CAAE,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,UAAU,CAAE,EAAI,EAAE,YAAY,CAAE,EAAI,EAAE,oBAAoB,CAAE,EAAI,EAAE,eAAe,CAAC,OAAS,EAAG,EAAI,EAAE,cAAc,CAAE,EAAI,EAAE,eAAe,CAAE,EAAI,EAAE,wBAAwB,EAAI,GAAI,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,oBAAoB,CAAE,GAAK,EAAI,EAAE,SAAW,EAAE,EAAE,QAAQ,EAAG,EAAG,KAAO,IAAM,EAAI,EAAE,KAAK,EAAE,KAAK,CAAG,EAAE,KAAK,EAAE,EAAI,GAAK,EAAE,KAAK,CAAE,GAAI,EAAE,CAAC,CACpa,OAAQ,EAAI,EAAE,SAAW,EAAE,OAAO,IAAK,GAAM,CAC3C,IAAM,EAAI,EAAE,cAAe,EAAI,EAAE,EAAI,EAAG,EAAE,KAAM,EAAE,CAAE,EAAI,EAAI,IAAM,EAAI,EAAI,EAAE,EAAI,GAAK,EACrF,OAAO,GAAoB,EAAA,EAAA,eACzB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,OAAQ,EAAE,KACV,MAAO,EAAE,MACT,IAAK,EACL,KAAM,EAAE,MAAQ,OACjB,CACF,CAAG,EAAE,OAAS,SAA0B,EAAA,EAAA,eACvC,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,aAAc,EACd,kBAAmB,EAAE,MACrB,kBAAmB,EAAE,KACrB,IAAK,EACL,MAAO,CACL,GAAG,GACH,IAAK,EACN,CACF,CACD,EAAE,EAAE,MAAO,EAAE,CACd,EAAmB,EAAA,EAAA,eAClB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,GAAG,GAAG,EAAG,EAAE,KAAK,CAChB,aAAc,EACd,kBAAmB,EAAE,MACrB,kBAAmB,EAAE,KACrB,wBAAyB,EAAE,WAC3B,IAAK,EACL,MAAO,EAAI,CAAE,GAAG,GAAI,IAAK,EAAI,EAAG,CAAG,GACpC,CACD,EAAI,EAAE,EAAE,MAAO,EAAE,WAAY,EAAE,KAAM,EAAE,CAAG,EAAE,EAAE,MAAO,EAAE,KAAM,EAAE,CAChE,EACD,EACF,CAAE,GAAqB,EAAE,KAAK,UAAW,CACzC,IAAM,EAAI,EAAE,YAAY,CAAE,EAAI,EAAE,kBAAkB,CAAC,OAAS,EAAG,EAAI,GAAG,aAAa,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,GAAG,6BAA6B,CAAE,EAAI,GAAG,uBAAuB,CAAE,EAAI,GAAK,EAAI,EAAI,EAAG,EAAI,EAAE,iBAAiB,CAAmC,CAAE,YAAa,EAAG,IAAK,GAAM,GAC3T,EADiQ,EAAE,WAElQ,CACD,EACA,EAJoR,EAAE,MAKrR,CACD,IAAK,GACL,EACA,CAAC,EACD,EAAE,qCAAqC,CACxC,CAAE,CAAC,EAAG,GAAA,EAAO,SAAS,EAAE,CACzB,GAAG,YAAc,GAAM,CACrB,IAAM,IAAM,EAAE,QAAQ,MAAM,UAAY,GAAG,EAAE,IAAK,EAAE,EAAE,GACtD,CACF,IAAM,EAAI,EAAE,mBAAmB,CAAE,EAAI,EAAE,YAAY,EAAI,GAAI,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,UAAU,CAClK,GAAI,IAAM,GAAK,GAAM,KACnB,OAAuB,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,CAC9C,IAAM,GAAK,EAAI,EAAE,SAAW,EAAE,EAAE,QAAQ,EAAG,IAAM,EAAI,EAAE,KAAM,EAAE,CAAE,EAAI,EAAE,UAAY,EAAI,EAAI,EAAG,EAAI,EAAE,aAAc,EAAI,EAAI,GAAoB,EAAA,EAAA,KAAE,EAAG,CAAE,QAAS,EAAG,OAAQ,EAAG,CAAE,cAAc,CAAG,KAAM,EAAI,EAAI,GAAoB,EAAA,EAAA,KAAE,EAAG,CAAE,QAAS,EAAG,OAAQ,EAAG,CAAE,iBAAiB,CAAG,KACrR,OAAuB,EAAA,EAAA,MAAG,EAAG,CAAE,cAAe,qBAAsB,IAAK,EAAG,GAAG,EAAG,EAAG,EAAE,CAAE,SAAU,CACjG,EACA,IAAqB,EAAA,EAAA,KAAE,GAAI,CAAE,YAAa,CAAC,EAAG,CAAC,EAC/B,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,CACzB,EACD,CAAE,CAAC,EACJ,CAAE,IAAM,CAAE,SAAU,KAAQ,CAC5B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,iBAAiB,CAAE,EAAI,GAAG,kBAAkB,CAAE,EAAI,GAAA,EACjF,YAAc,GAAG,EAAI,GAAM,GAAG,EAAG,SAAS,CAAC,CAAE,CAAC,EAAE,CAAC,CACnD,CAAC,EACD,EAAE,qCAAqC,CACxC,CACD,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,EAAE,eAAe,CAAE,EAAE,EAAE,WAAW,GACzC,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,qBAAsB,UAAW,IAAK,EAAG,MAAO,GAAG,CAAC,EAAE,CAAE,SAAU,EAAG,CAAC,EAC/G,IAAM,CAAE,SAAU,KAAQ,CAC3B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,qBAAqB,CAAE,EAAI,GAAG,kBAAkB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,GAC9I,EACA,EACA,EAAE,qCAAqC,CACxC,CACD,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,EAAE,WAAW,CAAE,EAAE,CAAE,WAAY,EAAG,UAAW,EAAG,cAAe,EAAE,eAAgB,aAAc,IAAK,CAAC,GAC5G,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,qBAAsB,SAAU,IAAK,EAAG,MAAO,GAAG,CAAC,EAAG,EAAE,CAAE,SAAU,EAAG,CAAC,EAkChH,CACF,UAAW,GACX,WAAY,GACZ,gBAAiB,EACjB,aAAc,IACI,GAClB,GACA,CACE,SAAU,CACR,iBAAkB,mBAClB,QAAS,UACT,aAAc,eACd,eAAgB,iBAChB,YAAa,cACb,aAAc,eACd,mBAAoB,qBACpB,mBAAoB,qBACpB,SAAU,WACV,mBAAoB,qBACpB,qBAAsB,uBACtB,WAAY,aACZ,aAAc,eACd,wBAAyB,0BACzB,WAAY,aACZ,YAAa,cACb,kBAAmB,oBACnB,eAAgB,iBAChB,eAAgB,iBAChB,kBAAmB,oBACnB,iBAAkB,mBAElB,gBAAiB,kBACjB,SAAU,WACV,wBAAyB,0BACzB,KAAM,OACN,iBAAkB,mBAClB,iBAAkB,mBAClB,cAAe,gBACf,gBAAiB,kBACjB,mBAAoB,qBACpB,YAAa,cACb,SAAU,WACX,CACD,QAAS,CACP,cAAe,gBACf,eAAgB,iBAChB,SAAU,WACV,SAAU,WACV,SAAU,WACX,CACD,OAAQ,CACN,YAAa,cACb,WAAY,aACZ,aAAc,eACd,aAAc,eACd,oBAAqB,sBACrB,iBAAkB,mBAClB,uBAAwB,yBACxB,cAAe,gBACf,aAAc,eACf,CACF,CACD,EA/FwB,KAAK,SAAS,EAAG,CACzC,IAAM,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,GAAG,oBAAoB,CAAE,EAAI,GAAG,oBAAoB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,UAAU,CAAE,EAAI,GAAA,EACnM,YAAc,GAAG,EAAI,GAAM,GAAG,EAAG,SAAS,CAAC,CAAE,CAAC,EAAE,CAAC,CACnD,CAAC,EACD,EAAE,qCAAqC,CACxC,CAAE,EAAI,GAAA,EACH,YAAc,GAAG,EAAI,GAAM,GAAG,EAAG,SAAS,CAAC,CAAE,CAAC,EAAE,CAAC,CACnD,CAAC,EACD,EAAE,qCAAqC,CACxC,CAAE,EAAI,GAAK,EAAI,GAAK,GAAI,EAAI,GAAK,EAAI,GAAK,GAAI,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,uBAAuB,CAAE,EAAI,GAAoB,EAAA,EAAA,KAC1J,EACA,CACE,IAAK,EACL,MAAO,CAAE,SAAU,SAAU,IAAK,EAAG,OAAQ,EAAG,CAChD,GAAG,EAAG,EAAG,EAAE,CACX,SAAU,GAAG,CACd,CACD,YACD,CAAG,KAAM,EAAI,GAAoB,EAAA,EAAA,KAChC,EACA,CACE,IAAK,EACL,MAAO,CAAE,OAAQ,EAAG,SAAU,SAAU,OAAQ,EAAG,CACnD,GAAG,EAAG,EAAG,EAAE,CACX,SAAU,GAAG,CACd,CACD,YACD,CAAG,KACJ,OAAuB,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,GAAG,EAAG,EAAG,EAAE,CAAE,UAA0B,EAAA,EAAA,KAAE,EAAG,CAAE,UAA0B,EAAA,EAAA,MAAG,EAAG,CAAE,MAAO,CAAE,cAAe,EAAG,eAAgB,OAAQ,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,SAAU,CAC9L,GACgB,EAAA,EAAA,KAAE,GAAI,EAAE,CAAE,YAAY,CACtC,EACD,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,EA+DR,CACH,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAG,aAAc,GAAI,CAAC,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAG,aAAc,GAAI,CAAC,CAAoB,GAAK,CAC9L,OAAQ,EACR,WAAY,EACZ,MAAO,EAAE,CACT,UAAW,EACX,aAAc,EACd,UAAW,EACX,IAAK,EACN,CAAE,GAAK,CACN,OAAQ,EACR,WAAY,EACZ,MAAO,CAAC,CAAE,MAAO,EAAG,CAAC,CACrB,UAAW,EACX,aAAc,EACd,UAAW,EACX,IAAK,EACN,CAAE,CAAE,KAAM,GAAI,MAAO,GAAI,IAAK,GAAI,IAAK,GAAI,MAAO,IAAO,KAC1D,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,MAAM,KAAK,CAAE,OAAQ,EAAI,EAAI,EAAG,CAAC,CAAC,KAAK,EAAG,KAAO,CAAE,KAAM,IAAM,KAAO,KAAO,EAAE,EAAI,GAAI,MAAO,EAAI,EAAG,EAAE,CAEhH,SAAS,GAAG,EAAG,CACb,MAAO,CACL,GAAG,GACH,MAAO,EACR,CAEH,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,IAAM,IAAK,IAAK,EAAE,QAAU,EAAE,OAAS,EAAE,SAAW,EAAE,OAE/D,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,IAAM,IAAK,IAAK,EAAE,SAAW,EAAE,QAAU,EAAE,MAAQ,EAAE,IAE9D,IAAM,GAAqB,GACxB,CACC,CAAE,mBAAoB,EAAG,aAAc,EAAG,SAAU,EAAG,aAAc,GACrE,CAAE,aAAc,EAAG,aAAc,EAAG,SAAU,EAAG,qBAAsB,EAAG,SAAU,EAAG,UAAW,EAAG,0BAA2B,EAAG,eAAgB,GACnJ,EACA,EACA,CAAE,SAAU,EAAG,WAAY,GAC3B,CAAE,mBAAoB,EAAG,gBAAiB,EAAG,2BAA4B,EAAG,eAAgB,EAAG,mBAAoB,GACnH,KACI,CACJ,IAAM,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,GAAG,CAAE,EAAI,EAAE,CAAE,OAAQ,EAAG,MAAO,EAAG,CAAC,CAAE,EAAI,EAAE,CAAE,OAAQ,EAAG,MAAO,EAAG,CAAC,CAAE,GAAI,GAAG,CAAE,GAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,GAAI,EAAE,KAAK,CAAE,EAAI,EAAE,CAAE,OAAQ,EAAG,IAAK,EAAG,CAAC,CAAE,GAAK,GAAG,CAAE,GAAI,GAAG,CAAE,GAAI,EAAE,CAAC,EAAE,CAAE,EAAK,EAAE,EAAE,CAAE,GAAK,EAAE,CAAC,EAAE,CAAE,GAAK,EAAE,CAAC,EAAE,CAAE,GAAK,EAAE,CAAC,EAAE,CACvP,EACE,EACE,EACA,EAAE,EAAG,CACL,GAAG,CAAC,EAAG,KAAO,IAAM,EAAE,CACvB,KACK,CACJ,EAAE,GAAI,CAAC,EAAE,EAEZ,CAAE,EACD,EACE,GAAG,EAAG,GAAI,EAAG,EAAG,EAAI,GAAG,CACvB,GAAG,CAAC,EAAG,EAAG,EAAG,GAAM,KAAQ,GAAK,CAAC,GAAK,EAAE,SAAW,GAAK,EAAG,SAAW,GAAK,CAAC,EAAG,CAChF,EACA,KAAS,KAAO,CACf,EAAE,GAAI,CAAC,EAAE,CAAE,GAAG,MAAS,CACrB,EAAE,GAAG,EAAE,EACP,CAAE,GAAG,EAAE,EAAE,KAAQ,CACjB,EAAE,EAAG,CAAC,EAAG,EAAE,CAAC,CAAE,EAAE,GAAI,CAAC,EAAE,EACvB,EAEL,CAAE,EACD,EACE,GACA,EAAG,GAAM,GAAK,MAAQ,EAAE,UAAY,EAAE,CACtC,GAAG,EAAE,CACN,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,GAAE,CACJ,GAAG,EAAG,KAAO,GAAK,KAAK,CACxB,EACA,EAAG,KAAO,CACT,IAAM,EAAE,EAAG,EAAE,SAAS,CAAE,EAAE,EAAG,EAAE,KAAK,CAAE,EAAE,EAAG,EAAE,IAAI,CAAE,EAAE,UAAY,IAAM,EAAE,GAAG,CAAC,EAAE,CAAE,GAAG,EAAE,EAAG,GAAG,EAAE,CAAC,CAAG,GAAM,CACtG,EAAE,GAAG,CAAC,EAAE,EACR,CAAE,EAAE,EAAG,CAAE,IAAK,EAAE,UAAW,CAAC,IAEjC,CAAE,EACD,EACE,EACA,GAAG,CAAE,OAAQ,KAAQ,EAAE,CACxB,CACD,EACD,CAAE,EACD,EACE,GACE,EAAE,EAAG,GAAG,CACR,EAAE,EAAG,GAAG,CACR,EAAE,GAAI,EAAG,IAAM,IAAM,IAAK,IAAK,EAAE,SAAW,EAAE,QAAU,EAAE,MAAQ,EAAE,IAAI,CACxE,EAAE,EAAE,CACL,CACD,GAAG,CAAC,EAAG,EAAG,EAAG,MAAS,CACpB,IAAK,EACL,KAAM,EACN,UAAW,EACX,SAAU,EACX,EAAE,CACJ,CACD,GACD,CAAE,EACD,EACE,GACE,EAAE,EAAE,CACJ,EACA,EAAE,EAAG,GAAG,CACR,EAAE,EAAG,GAAG,CACR,EAAE,EAAG,GAAG,CACR,EAAE,GAAE,CACJ,EAAE,EAAE,CACJ,EAAE,GAAE,CACJ,EAAE,GAAG,CACL,EAAE,EAAG,CACN,CACD,GAAG,QAAe,KAAO,CAAC,EAAE,CAC5B,GACG,CACC,EACA,CAAC,EAAG,GACJ,EACA,EACA,EACA,EACA,GAEA,EACA,KACI,CACJ,GAAM,CAAE,OAAQ,EAAI,IAAK,GAAO,EAAI,CAAE,OAAQ,EAAI,MAAO,GAAO,EAAI,CAAE,MAAO,GAAO,EACpF,GAAI,IAAO,IAAM,IAAM,GAAK,IAAO,GACjC,OAAO,GACT,GAAI,IAAO,EAAG,CACZ,IAAM,EAAK,GAAG,EAAI,EAAE,CACpB,OAAO,GAAG,GAAG,EADc,EAAK,KAAK,IAAI,EAAK,EAAG,EAAE,CAC9B,EAAG,CAAC,CAE3B,IAAM,EAAK,GAAG,EAAI,EAAI,EAAG,CACrB,EAAI,EACR,EAAK,IAAM,GAAK,IAAM,GAAK,EAAK,GAAK,EAAK,EAAG,EAAK,EAAK,IAAM,EAAK,EAAK,IAAI,EAAI,IAAO,EAAK,GAAI,CAAE,EAAK,EAAK,IAAI,EAAI,IAAO,EAAK,GAAI,CAAG,EAAG,EAAK,GAAG,EAAI,EAAG,GAAG,EAAI,EAAK,EAAE,CAAC,CAAE,EAAK,GAAG,EAAI,GAAG,EAAG,EAAG,CAAC,GAAK,EAAK,EAAG,EAAK,IACjN,IAAM,EAAK,GAAG,EAAI,EAAI,EAAG,CAAE,CAAE,OAAQ,EAAI,IAAK,GAAO,GAAG,EAAG,EAAI,EAAI,EAAG,CAAE,EAAK,GAAG,EAAI,EAAG,CACvF,MAAO,CAAE,OAAQ,EAAI,WAAY,EAAI,MAAO,EAAI,UAAW,EAAI,aAD+B,EAAK,GAAM,EAAK,GAAK,EAAK,EACvC,UAAW,EAAI,IAAK,EAAI,EAE5G,CACF,CACD,EACD,CAAE,EACD,EACE,GACA,EAAG,GAAM,IAAM,KAAK,CACpB,EAAG,GAAM,EAAE,OAAO,CACnB,CACD,EACD,CAAE,EACD,EACE,GAAG,EAAG,EAAG,EAAG,EAAE,CACd,GAAG,CAAC,EAAG,EAAG,CAAE,MAAO,MAAS,EAAE,OAAS,GAAK,EAAE,SAAW,GAAK,EAAE,SAAW,EAAE,CAC7E,GAAG,CAAC,EAAG,EAAG,CAAE,MAAO,GAAK,KAAQ,CAC9B,GAAM,CAAE,OAAQ,EAAI,IAAK,GAAM,GAAG,EAAG,EAAI,EAAG,EAAE,CAC9C,MAAO,CAAC,EAAG,EAAG,EACd,CACF,EAAG,GAAG,CACP,CACD,EACD,CACD,IAAM,GAAK,EAAE,CAAC,EAAE,CAChB,EACE,EACE,EACA,EAAE,GAAG,CACL,GAAG,CAAC,EAAG,KAAO,GAAK,IAAM,EAAE,CAC5B,CACD,GACD,CACD,IAAM,GAAK,GACT,EACE,GAAG,EAAG,EAAE,CACR,GAAG,CAAC,CAAE,MAAO,MAAS,EAAE,OAAS,EAAE,CACnC,EAAE,GAAG,CACL,GAAG,CAAC,CAAC,EAAG,GAAI,KAAO,CACjB,IAAM,EAAK,EAAE,MAAM,EAAE,MAAM,OAAS,GAAG,QAAU,EAAI,EACrD,OAAQ,GAAK,EAAE,OAAS,GAAK,EAAE,WAAa,GAAK,EAAE,eAAiB,GAAK,EAAE,MAAM,SAAW,IAAM,GAClG,CACF,GAAG,CAAC,EAAG,MAAQ,EAAI,EAAE,CACrB,GAAI,CACL,CACF,CAAE,GAAK,GACN,EACE,EAAE,EAAE,CACJ,GAAG,CAAE,MAAO,KAAQ,EAAE,OAAS,GAAK,EAAE,GAAG,QAAU,EAAE,CACrD,GAAG,EAAE,CACL,GAAI,CACL,CACF,CAAE,GAAK,GACN,EACE,EAAE,EAAE,CACJ,EAAE,GAAE,CACJ,GAAG,CAAC,CAAE,MAAO,GAAK,KAAO,EAAE,OAAS,GAAK,CAAC,EAAE,CAC5C,GAAG,CAAC,CAAE,MAAO,OAAU,CACrB,SAAU,EAAE,EAAE,OAAS,GAAG,MAC1B,WAAY,EAAE,GAAG,MAClB,EAAE,CACH,EAAG,GAAG,CACN,GAAG,EAAE,CACN,CACF,CACD,EAAE,GAAI,EAAE,uBAAuB,CAAE,EAC/B,EACE,GACA,EAAE,EAAG,EAAG,EAAG,EAAE,CACb,GAAG,CAAC,EAAG,EAAG,EAAG,EAAI,KAAQ,CACvB,IAAM,EAAI,GAAG,EAAE,CAAE,CAAE,MAAO,EAAI,SAAU,EAAI,OAAQ,GAAO,EACvD,EAAK,EAAE,MACX,IAAO,SAAW,EAAK,EAAK,GAAI,EAAK,GAAG,EAAG,EAAI,GAAG,EAAK,EAAG,EAAG,CAAC,CAC9D,IAAI,EAAK,GAAG,EAAG,EAAI,EAAG,EAAG,CACzB,OAAO,IAAO,MAAQ,EAAK,GAAG,EAAK,EAAE,OAAS,EAAE,OAAO,CAAG,IAAO,WAAa,EAAK,GAAG,EAAK,EAAE,OAAS,EAAI,EAAE,OAAS,EAAE,EAAG,IAAO,IAAK,IAAK,IAAO,IAAM,GAAM,GAAK,CAAE,SAAU,EAAI,IAAK,EAAI,EAC5L,CACH,CACD,EACD,CACD,IAAM,GAAK,GACT,EACE,EACA,EAAG,GAAM,EAAE,aAAe,EAAE,OAAO,CACpC,CACD,EACD,CACD,OAAO,EACL,EACE,EACA,EAAG,IAAO,CAAE,OAAQ,EAAE,cAAe,MAAO,EAAE,aAAc,EAAE,CAC/D,CACD,EACD,CAAE,CACD,mBAAoB,EAEpB,KAAM,GACN,UAAW,EACX,aAAc,EACd,IAAK,EACL,aAAc,EACd,mBAAoB,EACpB,iBAAkB,EAClB,eAAgB,EAChB,SAAU,EACV,iBAAkB,GAClB,SAAU,EACV,qBAAsB,EACtB,aAAc,GACd,SAAU,EACV,cAAe,GACf,UAAW,EACX,0BAA2B,EAC3B,WAAY,EACZ,gBAAiB,EACjB,mBAAoB,EACpB,2BAA4B,EAC5B,eAAgB,EAChB,mBAAoB,EACpB,GAAG,EAEH,UAAW,EACX,oBAAqB,GACrB,wBAAyB,EACzB,gBAAiB,GACjB,GAAG,EACH,WAAY,GACZ,WAAY,EACZ,aAAc,GACd,aAAc,GACd,aAAc,GACd,uBAAwB,GACxB,GAAG,EACJ,EAEH,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAG,CAC/B,CACD,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,GAAG,EAAG,IAAI,EAAI,IAAM,GAAG,EAAE,CAAG,GAAG,CAAC,CAEzC,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,CACtB,GAAM,CAAE,OAAQ,GAAM,EACtB,GAAI,IAAM,IAAK,IAAK,EAAE,SAAW,EAC/B,MAAO,CAAE,OAAQ,EAAG,IAAK,EAAG,CAC9B,IAAM,EAAI,GAAG,EAAG,EAAG,EAAG,EAAE,GAAG,MAAM,CACjC,MAAO,CAAE,OAAQ,GAAG,EAAG,EAAG,EAAG,EAAE,EAAE,OAAS,GAAG,MAAM,CAAG,EAAG,IAAK,EAAG,CAEnE,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,CACtB,IAA0C,EAAI,GAAG,EAAvC,GAAG,EAAE,MAAO,EAAE,MAAO,EAAE,OAAqB,CAAC,CAAE,EAAI,EAAI,EAAE,OAAS,GAAG,EAAG,EAAI,EAAE,CAAG,EAAE,IAC7F,OAAO,EAAI,EAAI,EAAI,EAAE,IAAM,EAE7B,IA2BI,GAAqB,GACtB,CAAC,EAAG,MAAQ,CAAE,GAAG,EAAG,GAAG,EAAG,EAC3B,EAAG,GA7BsB,MAAQ,CACjC,IAAM,EAAI,EAAG,GAAM,QAAQ,IAAI,CAAE,EAAI,EAAE,EAAE,CAAC,CAAE,EAAI,EAAE,KAAK,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,GAAG,CAAE,EAAI,EAAE,MAAM,CAAE,EAAI,EAAE,GAAG,CAAE,GAAK,EAAG,EAAI,OAAS,GAC1K,EACE,EACA,EAAG,GAAM,EAAE,GAAG,CACd,GAAI,CACL,CACD,EACD,CAAE,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,CAAC,EAAE,CACvB,OAAO,EAAE,EAAE,EAAE,CAAE,EAAE,CAAE,CACjB,WAAY,EACZ,eAAgB,EAChB,QAAS,EACT,gBAAiB,EAAE,SAAS,CAC5B,gBAAiB,EAAE,SAAS,CAC5B,gBAAiB,EACjB,cAAe,EACf,cAAe,EAAE,OAAQ,MAAM,CAC/B,YAAa,EACb,cAAe,EACf,cAAe,EAAE,OAAQ,MAAM,CAC/B,kBAAmB,EACnB,iBAAkB,EAClB,kBAAmB,EAAE,WAAY,MAAM,CACvC,YAAa,EACb,sBAAuB,EAAE,wBAAyB,MAAM,CACzD,EAGQ,CAAC,CACX,CAAE,GAAqB,EAAE,KAAK,UAAW,CACxC,IAAM,EAAI,EAAG,YAAY,CAAE,EAAI,EAAG,gBAAgB,CAAE,EAAI,EAAG,gBAAgB,CAAE,EAAI,EAAG,cAAc,CAAE,EAAI,EAAG,iBAAiB,CAAE,EAAI,EAAG,YAAY,CAAE,EAAI,GAAG,eAAe,CAAE,EAAI,EAAG,gBAAgB,CAAE,EAAI,EAAG,gBAAgB,CAAE,EAAI,EAAG,wBAAwB,CAAE,EAAI,EAAG,UAAU,CAAE,EAAI,GAAG,iBAAiB,CAAE,EAAI,GAAG,MAAM,CAAE,EAAI,EAAG,MAAM,CAAE,EAAI,EAAG,yBAAyB,CAAE,EAAI,GAAG,mBAAmB,CAAE,EAAI,GAAA,EACvY,YACO,GAAM,CACX,IAAM,EAAI,EAAE,cAAc,cAAc,aACxC,EAAE,EAAE,CACJ,IAAM,EAAI,EAAE,WACZ,GAAI,IAAM,KAAM,CACd,GAAM,CAAE,OAAQ,EAAG,MAAO,GAAM,EAAE,uBAAuB,CACzD,EAAE,CAAE,OAAQ,EAAG,MAAO,EAAG,CAAC,CAE5B,EAAE,CACA,OAAQ,GAAG,aAAc,iBAAiB,EAAE,CAAC,UAAW,EAAE,CAC1D,IAAK,GAAG,UAAW,iBAAiB,EAAE,CAAC,OAAQ,EAAE,CAClD,CAAC,EAEJ,CAAC,EAAG,EAAG,EAAG,EAAE,CACb,CACD,CAAC,EACD,CAAC,EACF,CACD,OAAO,OAAS,CACd,EAAE,WAAa,GAAK,EAAE,UAAY,GAAK,EAAE,CAAC,EAAE,EAC3C,CAAC,EAAE,CAAC,CAAE,EAAI,MAAuB,EAAA,EAAA,KAClC,EACA,CACE,UAAW,EACX,IAAK,EACL,GAAG,EAAG,EAAG,EAAE,CACX,cAAe,qBACf,MAAO,CAAE,cAAe,EAAE,aAAc,WAAY,EAAE,UAAW,CACjE,SAAU,EAAE,MAAM,IAAK,GAAM,CAC3B,IAAM,EAAI,EAAE,EAAE,MAAO,EAAE,KAAM,EAAE,CAC/B,OAAO,GAAoB,EAAA,EAAA,KACzB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,OAAQ,EAAE,WACV,MAAO,EAAE,MACT,MAAO,EAAE,UACV,CACD,EACD,EAAmB,EAAA,EAAA,eAClB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,UAAW,EACX,aAAc,EAAE,MAChB,IAAK,EACN,CACD,EAAE,EAAE,MAAO,EAAE,KAAM,EAAE,CACtB,EACD,CACH,CACF,EACD,CAAE,GAAA,EAAO,KAAK,UAAW,CACzB,IAAM,EAAI,EAAG,kBAAkB,CAAE,EAAI,GAAG,eAAe,CAAE,EAAI,EAAG,kBAAkB,CAAE,EAAI,GAAA,EACpF,YACO,GAAM,CACX,EAAE,GAAG,EAAG,SAAS,CAAC,EAEpB,CAAC,EAAE,CACJ,CACD,CAAC,EACD,CAAC,EACF,CAAE,EAAI,EAAG,UAAU,CACpB,OAAO,GAAK,KAA2F,MAApE,EAAA,EAAA,KAAE,EAAG,CAAE,IAAK,EAAG,UAA0B,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,CAAE,CAAC,EACpG,CAAE,GAAA,EAAO,KAAK,UAAW,CACzB,IAAM,EAAI,EAAG,kBAAkB,CAAE,EAAI,GAAG,eAAe,CAAE,EAAI,EAAG,kBAAkB,CAAE,EAAI,GAAA,EACpF,YACO,GAAM,CACX,EAAE,GAAG,EAAG,SAAS,CAAC,EAEpB,CAAC,EAAE,CACJ,CACD,CAAC,EACD,CAAC,EACF,CAAE,EAAI,EAAG,UAAU,CACpB,OAAO,GAAK,KAA2F,MAApE,EAAA,EAAA,KAAE,EAAG,CAAE,IAAK,EAAG,UAA0B,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,CAAE,CAAC,EACpG,CAAE,IAAM,CAAE,SAAU,KAAQ,CAC5B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,iBAAiB,CAAE,EAAI,GAAG,qBAAqB,CAAE,EAAI,GAAA,EACpF,YACO,GAAM,CACX,EAAE,EAAE,uBAAuB,CAAC,EAE9B,CAAC,EAAE,CACJ,CACD,CAAC,EACD,CAAC,EACF,CACD,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,CAAE,OAAQ,EAAE,eAAgB,MAAO,EAAE,cAAe,CAAC,CAAE,EAAE,CAAE,OAAQ,EAAE,WAAY,MAAO,EAAE,UAAW,CAAC,GAC7G,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,IAAK,EAAG,MAAO,GAAG,CAAC,EAAE,CAAE,SAAU,EAAG,CAAC,EAC9E,IAAM,CAAE,SAAU,KAAQ,CAC3B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,qBAAqB,CAAE,EAAI,GAAG,iBAAiB,CAAE,EAAI,EAAG,qBAAqB,CAAE,EAAI,EAAG,kBAAkB,CAAE,EAAI,GAAG,EAAG,EAAG,CAAC,EAAE,CAC7J,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,CAAE,OAAQ,EAAE,WAAY,MAAO,EAAE,UAAW,CAAC,CAAE,EAAE,CAAE,WAAY,EAAG,UAAW,EAAG,cAAe,EAAE,eAAgB,aAAc,EAAE,cAAe,CAAC,GACxJ,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,IAAK,EAAG,MAAO,GAAG,CAAC,EAAG,EAAE,CAAE,SAAU,EAAG,CAAC,EAQhF,CACF,UAAW,GACX,WAAY,GACZ,gBAAiB,EACjB,aAAc,IACI,GAClB,GACA,CACE,SAAU,CACR,QAAS,UACT,WAAY,aACZ,SAAU,WACV,YAAa,cACb,WAAY,aACZ,eAAgB,iBAChB,KAAM,OACN,iBAAkB,mBAClB,wBAAyB,0BACzB,gBAAiB,kBACjB,cAAe,gBACf,cAAe,gBACf,gBAAiB,kBACjB,mBAAoB,qBACpB,YAAa,cACb,SAAU,WACV,iBAAkB,mBAClB,wBAAyB,0BACzB,mBAAoB,qBACrB,CACD,QAAS,CACP,SAAU,WACV,SAAU,WACV,cAAe,gBAChB,CACD,OAAQ,CACN,YAAa,cACb,WAAY,aACZ,aAAc,eACd,aAAc,eACd,oBAAqB,sBACrB,iBAAkB,mBAClB,aAAc,eACd,kBAAmB,oBACpB,CACF,CACD,EApDwB,KAAK,SAAS,CAAE,GAAG,GAAK,CAChD,IAAM,EAAI,EAAG,kBAAkB,CAAE,EAAI,EAAG,qBAAqB,CAAE,EAAI,GAAK,EAAI,GAAK,GAAI,EAAI,GAAK,EAAI,GAAK,GAAI,EAAI,EAAG,UAAU,CAC5H,OAAuB,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,GAAG,EAAG,EAAG,EAAE,CAAE,UAA0B,EAAA,EAAA,MAAG,EAAG,CAAE,SAAU,EAC3E,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,EACT,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,EACT,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,CAC1B,CAAE,CAAC,CAAE,CAAC,EA8CL,CACH,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAI,aAAc,GAAI,CAAC,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAI,aAAc,GAAI,CAAC,CACzK,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,IAAM,UAAY,GAAG,SAAS,KAAK,GAAK,CAAC,GAAK,EAAE,GAAG,EAAE,4CAA6C,EAAG,GAAG,KAAK,CAAE,IAAM,SAAW,EAAI,SAAS,GAAK,IAAK,GAAG,CC11GnK,SAAgB,GAAwB,CAAE,UAAS,YAAqE,CACtH,IAAM,EAAyB,EAAe,GAAM,EAAE,uBAAuB,CACvE,CAAC,EAAY,IAAA,EAAA,EAAA,UAAyC,KAAK,CACjE,GAAI,CAAC,EAAU,OAAO,KACtB,GAAI,EAAS,WAAa,EAAS,UAAU,OAC3C,OAAO,EAAA,EAAA,KAAC,GAAD,CAAuB,UAAmB,WAAU,UAAW,EAAS,UAAa,CAAA,CAE9F,IAAM,EAAkB,EAClB,EAAU,EAAS,QAAQ,OAAS,EAAS,QAAU,CAC3D,CAAE,GAAI,UAAoB,MAAO,UAAW,CAC5C,CAAE,GAAI,OAAiB,MAAO,OAAQ,CACvC,CAED,eAAe,EAAO,EAAgC,CAChD,MACJ,GAAc,EAAO,GAAG,CACxB,GAAI,CACF,MAAM,EAAuB,EAAS,EAAgB,GAAI,EAAO,GAAG,QAC5D,CACR,EAAc,KAAK,GAIvB,IAAM,EAAS,EAAS,OAAS,OACjC,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oCACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sHACb,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kCAAf,CACG,GAAS,EAAA,EAAA,KAAC,GAAD,CAAY,UAAU,yCAA2C,CAAA,EAAG,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,yCAA2C,CAAA,EAChJ,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8CAAsC,EAAS,MAAY,CAAA,CACzE,EAAS,OAAS,GACf,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kGAAwF,EAAA,EAAA,KAAC,GAAD,CAAe,KAAM,EAAS,KAAM,QAAS,EAAS,KAAM,UAAU,kBAAoB,CAAA,CAAM,CAAA,EACvM,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+JAAuJ,EAAS,KAAW,CAAA,GAC9L,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,uCACZ,EAAQ,IAAK,IACZ,EAAA,EAAA,MAAC,EAAD,CAEE,KAAK,KACL,QAAS,EAAO,KAAO,QAAU,EAAO,KAAO,QAAU,UAAY,UACrE,SAAU,EAAQ,EAClB,YAAe,KAAK,EAAO,EAAO,CAClC,UAAU,4BANZ,CAQG,IAAe,EAAO,KAAM,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,8BAAgC,CAAA,CAC/E,EAAO,MACD,EATF,EAAO,GASL,CACT,CACE,CAAA,CACF,GACF,GACF,CAAA,CACF,CAAA,CAMV,SAAS,GAAiB,EAAgC,CAGxD,OAFK,EACD,EAAE,aAAe,EAAE,MAAM,MAAM,CAAS,GACrC,EAAE,OAAO,OAAS,EAFV,GAKjB,SAAS,GAAY,EAAmB,CACtC,IAAM,EAAQ,CAAC,GAAG,EAAE,OAAO,CAE3B,OADI,EAAE,aAAe,EAAE,MAAM,MAAM,EAAE,EAAM,KAAK,EAAE,MAAM,MAAM,CAAC,CACxD,EAAM,KAAK,KAAK,CAMzB,SAAS,GAAa,CAAE,UAAS,WAAU,aAAoG,CAC7I,IAAM,EAAyB,EAAe,GAAM,EAAE,uBAAuB,CACvE,CAAC,EAAM,IAAA,EAAA,EAAA,UAAoB,EAAE,CAC7B,CAAC,EAAO,IAAA,EAAA,EAAA,UAA6C,EAAE,CAAC,CACxD,CAAC,EAAY,IAAA,EAAA,EAAA,UAAuD,KAAK,CAEzE,EAAI,EAAU,KAAK,IAAI,EAAM,EAAU,OAAS,EAAE,EAClD,EAAM,EAAM,GAClB,GAAI,CAAC,EAAG,OAAO,KACf,IAAM,EAAQ,EAAQ,EAAE,YAClB,EAAQ,EAAU,OAClB,EAAS,IAAS,EAAQ,EAC1B,EAAW,GAAiB,EAAI,CAChC,EAAc,EAAU,OAAO,EAAG,IAAM,GAAiB,EAAM,GAAG,CAAC,CACnE,EAAO,EAAQ,EAErB,SAAS,EAAO,EAAwB,CACtC,EAAU,GAAS,CACjB,IAAM,EAAe,EAAK,IAAS,CAAE,OAAQ,EAAE,CAAE,MAAO,GAAI,YAAa,GAAO,CAChF,MAAO,CAAE,GAAG,GAAO,GAAO,CAAE,GAAG,EAAM,GAAG,EAAO,CAAE,EACjD,CAEJ,SAAS,EAAW,EAAe,CACjC,GAAI,EAAO,CACT,IAAM,EAAM,GAAK,OAAO,SAAS,EAAM,CACvC,EAAO,CAAE,OAAQ,GAAO,GAAK,QAAU,EAAE,EAAE,OAAQ,GAAM,IAAM,EAAM,CAAG,CAAC,GAAI,GAAK,QAAU,EAAE,CAAG,EAAM,CAAE,CAAC,MAE1G,EAAO,CAAE,OAAQ,CAAC,EAAM,CAAE,YAAa,GAAO,CAAC,CAGnD,SAAS,GAAY,CACR,EAAP,EAAc,CAAE,YAAa,CAAC,GAAK,YAAa,CACxC,CAAE,OAAQ,EAAE,CAAE,YAAa,GAAM,CAAC,CAGhD,eAAe,GAAS,CAClB,MAAC,GAAe,GACpB,GAAc,SAAS,CACvB,GAAI,CACF,IAAM,EAAkC,EAAE,CAC1C,EAAU,SAAS,EAAI,IAAM,CAAE,IAAM,EAAI,EAAM,GAAQ,IAAG,EAAQ,EAAG,UAAY,GAAY,EAAE,GAAG,CAClG,MAAM,EAAuB,EAAS,EAAS,GAAI,SAAU,EAAQ,QAC7D,CAAE,EAAc,KAAK,GAEjC,eAAe,GAAU,CACnB,MACJ,GAAc,UAAU,CACxB,GAAI,CAAE,MAAM,EAAuB,EAAS,EAAS,GAAI,OAAO,QAAW,CAAE,EAAc,KAAK,GAGlG,IAAM,EAAc,EAAQ,GAAK,YAEjC,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oCACb,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4HAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mCAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAuB,UAAU,kCAAoC,CAAA,EACrE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8CAAsC,EAAS,MAAY,CAAA,CACzE,EAAQ,IACP,EAAA,EAAA,MAAC,GAAD,CAAO,QAAQ,UAAU,UAAU,gEAAnC,CAA2F,EAAO,EAAE,MAAI,EAAc,GAEpH,IAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAf,CACG,EAAE,SAAU,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+EAAuE,EAAE,OAAa,CAAA,EAClH,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0EAAkE,EAAE,SAAe,CAAA,CACjG,IAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oDAA2C,wBAA2B,CAAA,EAE/F,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,sCAAf,CACG,EAAE,QAAQ,IAAK,GAAQ,CACtB,IAAM,EAAW,EAAQ,GAAK,OAAO,SAAS,EAAI,MAAM,CACxD,OACE,EAAA,EAAA,MAAC,SAAD,CAEE,KAAK,SACL,SAAU,EACV,YAAe,EAAW,EAAI,MAAM,CACpC,UAAW,EACT,mFACA,EAAW,sCAAwC,qDACnD,GAAQ,aACT,UATH,EAWE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EACf,iFACA,EAAQ,UAAY,eACpB,EAAW,mCAAqC,6BACjD,UACE,IAAY,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,UAAY,CAAA,CACrC,CAAA,EACP,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,mBAAhB,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCAA2B,EAAI,MAAa,CAAA,CAC3D,EAAI,cAAe,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,+CAAuC,EAAI,YAAmB,CAAA,CAC7F,GACA,EArBF,EAAI,MAqBF,EAEX,EAEF,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,SAAU,EACV,QAAS,EACT,UAAW,EACT,mFACA,EAAc,sCAAwC,qDACtD,GAAQ,aACT,UARH,EAUE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EACf,iFACA,EAAQ,UAAY,eACpB,EAAc,mCAAqC,6BACpD,UACE,IAAe,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,UAAY,CAAA,CACxC,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCAA0B,SAAa,CAAA,CAChD,GACR,IACC,EAAA,EAAA,KAAC,GAAD,CACE,UAAA,GACA,KAAM,EACN,SAAU,EACV,MAAO,GAAK,OAAS,GACrB,SAAW,GAAM,EAAO,CAAE,MAAO,EAAE,OAAO,MAAO,YAAa,GAAM,CAAC,CACrE,YAAY,mBACZ,UAAU,eACV,CAAA,CAEA,GACF,IAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0CAAf,CACG,EAAO,IACN,EAAA,EAAA,MAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,UAAU,SAAU,EAAM,YAAe,EAAS,GAAM,EAAI,EAAE,CAAE,UAAU,4BAApG,EACE,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,eAAiB,CAAA,CAAA,OACjC,GAET,GAKA,EAAA,EAAA,MAAC,EAAD,CAAQ,KAAK,KAAK,SAAU,GAAQ,CAAC,EAAa,YAAe,KAAK,GAAQ,CAAE,UAAU,4BAA1F,CACG,IAAe,WAAY,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,8BAAgC,CAAA,CAAC,cACpE,EAAQ,EAAI,IAAM,GACvB,IAPT,EAAA,EAAA,MAAC,EAAD,CAAQ,KAAK,KAAK,SAAU,GAAQ,CAAC,EAAU,YAAe,EAAS,GAAM,EAAI,EAAE,CAAE,UAAU,4BAA/F,CAAkH,QAC5G,EAAA,EAAA,KAAC,GAAD,CAAc,UAAU,eAAiB,CAAA,CACtC,IAOX,EAAA,EAAA,MAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,QAAQ,SAAU,EAAM,YAAe,KAAK,GAAS,CAAE,UAAU,0DAA3F,CACG,IAAe,YAAa,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,8BAAgC,CAAA,CAAC,UAE1E,GACL,GACF,GACF,CAAA,CCpNV,IAAM,GAAwB,IAQxB,GAAoB,IAAI,IAMxB,GAAS,eAgBf,SAAS,GAAe,CAAE,WAAgD,CACxE,GAAI,CAAC,EAAS,OAAO,KACrB,GAAM,CAAE,UAAS,OAAM,kBAAiB,eAAc,eAAc,eAAgB,EAC9E,EAAW,GAAQ,CAAC,EAO1B,MANI,CAAC,GAAmB,CAAC,EAAiB,MAOxC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,GAAG,GAAO,wBAA1B,CACG,IAAmB,EAAA,EAAA,KAAC,GAAD,CAA2D,UAAS,SAAU,EAAmB,CAAnE,EAAgB,GAAmD,CACpH,IAAY,EAAA,EAAA,KAAC,GAAD,CAA6B,eAAc,YAAa,EAAe,EAAc,IAAA,GAAa,CAAA,CAC3G,GAoCV,SAAS,GAAkB,EAA2C,CACpE,IAAM,EAAc,EAAS,UAAW,GAAU,EAAM,OAAS,QAAU,EAAM,OAAS,UAAU,CAC9F,EAAQ,GAAe,EAAI,EAAc,EACzC,EAAQ,EAAS,GACvB,MAAO,CAAE,IAAK,EAAQ,GAAiB,EAAM,CAAG,KAAM,QAAO,CAG/D,SAAS,GAAyB,EAAiB,EAAmC,CACpF,GAAM,CAAC,EAAgB,IAAA,EAAA,EAAA,cAAoC,GAAwB,EAAS,OAAO,CAC7F,GAAA,EAAA,EAAA,QAA+D,CACnE,UACA,OAAQ,GAAkB,EAAS,CACpC,CAAC,CAiBF,OAfA,EAAA,EAAA,qBAAsB,CACpB,IAAM,EAAa,GAAkB,EAAS,CACxC,EAAO,EAAS,QAEtB,EAAmB,GAAY,CAC7B,GAAI,EAAK,UAAY,EAAS,OAAO,GAAwB,EAAS,OACtE,GAAI,CAAC,EAAK,OAAO,IAAK,OAAO,EAE7B,IAAM,EADc,EAAS,UAAW,GAAU,GAAiB,EAAM,GAAK,EAAK,OAAO,IACpE,CAAc,EAAK,OAAO,MAChD,OAAO,EAAgB,EAAI,EAAU,EAAgB,GACrD,CAEF,EAAS,QAAU,CAAE,UAAS,OAAQ,EAAY,EACjD,CAAC,EAAS,EAAS,CAAC,CAEhB,EAGT,SAAgB,GAAgB,CAC9B,UACA,cACA,WACA,UACA,UACA,gBACA,gBACA,kBACA,eACA,eACA,eACA,mBACA,kBACA,mBACA,gBACA,cACA,cACA,uBACA,0BACA,8BACuB,CACvB,IAAM,GAAA,EAAA,EAAA,QAAqC,KAAK,CAC1C,GAAA,EAAA,EAAA,QAAyC,KAAK,CAC9C,CAAC,EAAU,IAAA,EAAA,EAAA,UAAwB,GAAK,CAQxC,EAAS,IAAgB,OACzB,CAAC,GAAY,KAAA,EAAA,EAAA,UAA0B,EAAO,EACpD,EAAA,EAAA,qBAAsB,CACpB,GAAI,EAAQ,CACV,GAAc,GAAK,CACnB,OAEF,IAAM,EAAQ,eAAiB,GAAc,GAAM,CAAE,IAAI,CACzD,UAAa,aAAa,EAAM,EAC/B,CAAC,EAAO,CAAC,CACZ,IAAM,EAAiB,GAAyB,EAAS,EAAS,CAC5D,GAAc,EAAS,OAAS,EAAI,EAAS,EAAS,OAAS,GAAM,KACrE,EAAY,GAAc,GAAiB,GAAY,CAAG,KAI1D,IAAqB,IAAa,OAAS,WAAa,IAAa,OAAS,mBAAqB,GAAY,IAAI,OAAA,OAMnH,IAAA,EAAA,EAAA,QAAqB,EAAS,CACpC,GAAY,QAAU,EACtB,IAAM,IAAA,EAAA,EAAA,QAA2B,EAAe,CAChD,GAAkB,QAAU,EAC5B,IAAM,IAAA,EAAA,EAAA,QAAkC,KAAK,CACvC,IAAA,EAAA,EAAA,aAAkC,GAAkC,CACxE,IAAM,EAAM,EAAM,WAAa,GAAkB,QAC3C,EAAQ,GAAY,QAAQ,GAClC,GAAU,QAAU,EAAQ,GAAiB,EAAM,CAAG,MACrD,EAAE,CAAC,CAKA,IAAA,EAAA,EAAA,QAA2C,KAAK,CACtD,GAAI,GAAmB,UAAY,KAAM,CACvC,IAAM,EAAQ,GAAkB,IAAI,EAAQ,CACxC,EAAM,GACN,GAAS,CAAC,EAAM,OAAS,EAAM,SAAQ,EAAM,EAAS,UAAW,GAAU,GAAiB,EAAM,GAAK,EAAM,OAAO,EACxH,GAAmB,QAAU,GAAO,EAAI,EAAM,KAAK,IAAI,EAAG,EAAS,OAAS,EAAE,CAGhF,IAAM,IAAA,EAAA,EAAA,QAA4C,EAAU,CACtD,IAAA,EAAA,EAAA,QAAyB,EAAQ,CACnC,GAAgB,UAAY,IAC9B,GAAgB,QAAU,EAC1B,GAAoB,QAAU,GAEhC,IAAM,GAAgB,GAAoB,QACtC,EAAS,UAAW,GAAU,GAAiB,EAAM,GAAK,GAAoB,QAAQ,CACtF,GAIE,GAAe,CAAC,GAAY,IAAiB,EAC/C,EAAS,MAAM,GAAgB,EAAE,CAAC,OAAQ,GAAU,EAAM,OAAS,WAAa,EAAM,IAAI,OAAA,OAAwB,CAAC,OACnH,GAEJ,EAAA,EAAA,qBAAsB,CAChB,IAAU,GAAoB,QAAU,IAC3C,CAAC,EAAU,EAAU,CAAC,CAKzB,IAAM,IAAA,EAAA,EAAA,QAAqB,EAAS,CACpC,GAAY,QAAU,EAiBtB,IAAM,IAAA,EAAA,EAAA,QAA0B,GAAkB,IAAI,EAAQ,EAAE,OAAS,GAAK,CACxE,IAAA,EAAA,EAAA,QAAsB,GAAM,CAO5B,IAAA,EAAA,EAAA,QAA0B,EAAE,CAC5B,IAAA,EAAA,EAAA,QAA8B,EAAE,CAChC,IAAA,EAAA,EAAA,iBAAqC,CACzC,GAAqB,QAAU,YAAY,KAAK,CAAG,KAClD,EAAE,CAAC,CAuCA,IAAA,EAAA,EAAA,iBAAgC,CACpC,IAAkB,CAClB,EAAY,SAAS,cAAc,CAAE,MAAO,OAAQ,MAAO,MAAO,CAAC,CACnE,IAGM,EAAQ,YAAY,KAAK,CAC3B,EAAM,EACN,EAAY,GACZ,EAAgB,GACd,MAAa,CACjB,GAAI,EAAW,OAQf,IAAM,EAAK,EAAY,QACvB,GAAI,EAAI,CACN,IAAM,EAAO,EAAG,aAAe,EAAG,aAAe,EAAG,UAO9C,EAAa,EAAG,aAAe,EAAG,aAAe,GASvD,GARI,GAAQ,IAAa,IACvB,EAAgB,GAChB,GAAa,QAAU,IAMrB,GAAiB,EAAO,IAAkB,OAC9C,IAAkB,CAClB,EAAG,SAAS,CAAE,IAAK,EAAG,aAAc,SAAU,OAAQ,CAAC,CAErD,YAAY,KAAK,CAAG,EAAQ,MAChC,EAAM,sBAAsB,EAAK,GAGnC,MADA,GAAM,sBAAsB,EAAK,KACpB,CACX,EAAY,GACZ,qBAAqB,EAAI,GAE1B,CAAC,GAAiB,CAAC,EAgBtB,EAAA,EAAA,qBAAsB,CAKpB,GAAI,KAAmB,GAAiB,QAAU,IAC7C,GAAiB,QACtB,OAAO,IAAa,EACnB,CAAC,EAAW,GAAmB,GAAY,CAAC,EAO/C,EAAA,EAAA,qBAAsB,CACpB,IAAM,EAAQ,GAAkB,IAAI,EAAQ,CAC5C,GAAI,CAAC,GAAS,EAAM,OAAS,CAAC,EAAM,OAAQ,OAC5C,IAAM,EAAY,EAAM,OACpB,EAAM,EACJ,EAAQ,YAAY,KAAK,CACzB,MAAmB,CACvB,IAAM,EAAM,GAAY,QAAQ,UAAW,GAAU,GAAiB,EAAM,GAAK,EAAU,CAC3F,GAAI,GAAO,EAAG,CACZ,IAAkB,CAClB,EAAY,SAAS,cAAc,CAAE,MAAO,EAAK,MAAO,QAAS,CAAC,CAClE,OAEE,YAAY,KAAK,CAAG,EAAQ,OAAM,EAAM,sBAAsB,EAAW,GAG/E,MADA,GAAM,sBAAsB,EAAW,KAC1B,qBAAqB,EAAI,EAErC,EAAE,CAAC,EAKN,EAAA,EAAA,mBACe,CACX,GAAkB,IAAI,EAAS,CAAE,MAAO,GAAiB,QAAS,OAAQ,GAAU,QAAS,CAAC,EAE/F,CAAC,EAAQ,CAAC,CAYb,IAAM,GAAa,GAAiB,IACpC,EAAA,EAAA,qBAAsB,CAEpB,GADI,CAAC,IAAc,CAAC,IAChB,CAAC,GAAiB,QAAS,OAC/B,IAAI,EAAM,EACJ,EAAQ,YAAY,KAAK,CACzB,MAAc,CAClB,IAAM,EAAK,EAAY,QACnB,GAAM,GAAiB,SAIZ,EAAG,aAAe,EAAG,aAAe,EAAG,UACzC,IACT,IAAkB,CAClB,EAAG,SAAS,CAAE,IAAK,EAAG,aAAc,SAAU,OAAQ,CAAC,EAGvD,YAAY,KAAK,CAAG,EAAQ,MAAK,EAAM,sBAAsB,EAAM,GAGzE,MADA,GAAM,sBAAsB,EAAM,KACrB,qBAAqB,EAAI,EACrC,CAAC,GAAY,GAAY,GAAiB,CAAC,EAO9C,EAAA,EAAA,qBAAsB,CACpB,GAAI,CAAC,GAAgB,CAAC,EAAkB,OACxC,IAAM,EAAM,GAAY,QAAQ,UAAW,GAAU,GAAiB,EAAM,GAAK,EAAiB,CAC9F,EAAM,IACV,GAAiB,QAAU,GAC3B,IAAkB,CAClB,EAAY,SAAS,cAAc,CAAE,MAAO,EAAK,MAAO,SAAU,CAAC,GAClE,CAAC,EAAc,EAAkB,GAAiB,CAAC,CAStD,IAAM,IAAA,EAAA,EAAA,QAAsD,KAAK,CAC3D,IAAA,EAAA,EAAA,aAA8B,GAAqC,CACvE,IAAM,EAAK,aAAe,YAAc,EAAM,KAK9C,GAJA,EAAY,QAAU,EACtB,IAAgB,EAAG,CACnB,GAAwB,WAAW,CACnC,GAAwB,QAAU,KAC9B,CAAC,EAAI,OACT,GAAiB,QAAU,EAAG,UAC9B,IAAM,MAAiB,CACrB,IAAM,EAAM,EAAG,UACT,EAAO,EAAG,aAAe,EAAG,aAAe,EAC3C,EAAe,YAAY,KAAK,CAAG,GAAqB,QAC1D,GAAQ,GACV,GAAiB,QAAU,GAClB,CAAC,GAAgB,EAAM,GAAiB,QAAU,IAC3D,GAAiB,QAAU,IAE7B,GAAiB,QAAU,GAE7B,EAAG,iBAAiB,SAAU,EAAU,CAAE,QAAS,GAAM,CAAC,CAC1D,GAAwB,YAAgB,EAAG,oBAAoB,SAAU,EAAS,EACjF,CAAC,EAAc,CAAC,CAEb,GAAA,EAAA,EAAA,aAAoC,GAAoB,CAC5D,EAAY,EAAO,CAOf,IAAQ,GAAiB,QAAU,IACvC,IAAmB,EAAO,EACzB,CAAC,EAAiB,CAAC,CAEhB,IAAA,EAAA,EAAA,iBAAuC,CACvC,CAAC,GAAW,GAChB,GAAa,EACZ,CAAC,EAAS,EAAS,EAAY,CAAC,CAE7B,IAAA,EAAA,EAAA,iBAAiC,CACrC,GAAoB,QAAU,EAO9B,GAAiB,QAAU,GAC3B,IAAa,EACZ,CAAC,EAAW,GAAY,CAAC,CAEtB,IAAA,EAAA,EAAA,aACG,UAA0B,CAC/B,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,aACd,EAAA,EAAA,KAAC,GAAD,CAA8B,UAAkB,UAAwB,gBAAe,SAAU,EAAS,OAAS,EAAK,CAAA,CACpH,CAAA,EAGT,CAAC,EAAS,EAAe,EAAS,EAAS,CAAC,CAOzC,IAAA,EAAA,EAAA,cACG,CAAE,UAAS,KAAM,GAAY,kBAAiB,eAAc,eAAc,cAAa,EAC9F,CAAC,EAAS,GAAY,EAAc,EAAc,EAAa,EAAgB,CAChF,CAEK,IAAA,EAAA,EAAA,aACG,UAAoC,CACzC,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wEAAf,CACG,GAAU,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,kDAAoD,CAAA,EAAG,EAAA,EAAA,KAAC,EAAD,CAAe,UAAU,6BAA+B,CAAA,EAC7I,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,yCAAiC,EAAU,mBAAqB,kBAAsB,CAAA,CAC/F,IAGT,CAAC,EAAQ,CAAC,CAEP,IAAA,EAAA,EAAA,cAA4B,CAAE,UAAQ,OAAQ,GAAgB,oBAAkB,EAAG,CAAC,GAAkB,GAAO,CAAC,CAEpH,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mCAAf,EAWE,EAAA,EAAA,KAAC,GAAD,CAEE,IAAK,EACL,YAAa,GACb,UAAU,sBAQV,MAAO,CAAE,OAAQ,OAAQ,UAAW,SAAU,mBAAoB,UAAW,CAC7E,QAAS,GACT,KAAM,EACU,iBAEhB,wBAAyB,GAAmB,SAAW,KAAK,IAAI,EAAG,EAAS,OAAS,EAAE,CACvF,gBAAiB,EAAG,IAAU,GAAiB,EAAM,CACrD,aAAc,GACd,aAAc,EAAO,IAAU,CAI7B,IAAM,EAAM,EAAe,GAAiB,EAAM,CAAG,GAC/C,EAAU,GAAgB,GAAiB,IAAI,EAAI,CACnD,EAAY,GAAW,IAAQ,EAK/B,EAAY,EAAQ,EACpB,EAAa,EAAM,OAAS,WAAa,EAAM,OAAS,iBAAoB,EAAM,IAAI,KAAO,KAC7F,EAAY,EAAS,EAAY,GACjC,EAAc,GAAW,OAAS,WAAa,GAAW,OAAS,iBAAoB,EAAU,IAAI,KAAO,KAC5G,EAAa,IAAc,MAAQ,IAAc,EACvD,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,aACd,EAAA,EAAA,KAAC,MAAD,CACE,UAAW,EACT,GAAW,wDACX,GAAa,uCACd,WAED,EAAA,EAAA,KAAC,GAAD,CACS,QACE,UACM,gBACH,aACU,uBACG,0BACG,6BAC5B,CAAA,CACE,CAAA,CACF,CAAA,EAGE,cACZ,aAAc,GACd,oBAAqB,EACrB,kBAAmB,GAenB,iBAAqB,GAAiB,QAAU,OAAS,GAoBzD,2BAA8B,CAC5B,GAAI,CAAC,GAAiB,QAAS,OAC/B,IAAM,EAAK,EAAY,QACvB,GAAI,CAAC,EAAI,OACT,IAAM,EAAO,EAAG,aAAe,EAAG,aAAe,EAAG,UAChD,GAAQ,GAAK,GAAQ,MACvB,IAAkB,CAClB,EAAG,SAAS,CAAE,IAAK,EAAG,aAAc,SAAU,OAAQ,CAAC,GAG3D,mBAAoB,CAAE,IAAK,IAAK,OAAQ,IAAK,CAC7C,CAzGK,EAyGL,CACD,CAAC,GAAY,EAAS,OAAS,IAC9B,EAAA,EAAA,MAAC,EAAD,CACE,KAAK,SACL,KAAK,KACL,QAAQ,YACR,UAAU,wIACV,QAAS,YALX,EAOE,EAAA,EAAA,KAAC,GAAD,CAAiB,UAAU,cAAgB,CAAA,UAE1C,GAAe,IACd,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,6HACb,GAAe,GAAK,MAAQ,GACxB,CAAA,CAEF,GAEP,GAIV,SAAS,GAAoB,CAAE,UAAS,UAAS,gBAAe,YAA+F,CAkB7J,OAjBI,GAEA,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qFAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,2BAA6B,CAAA,EAChD,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,2BAA+B,CAAA,CACjC,GAGN,CAAC,GAAW,GAAiB,GAE7B,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wFAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wBAA0B,CAAA,EACzC,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,4BAAgC,CAAA,EACtC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wBAA0B,CAAA,CACrC,GAGH,KAGT,SAAS,GAAY,CACnB,QACA,UACA,gBACA,aACA,uBACA,0BACA,8BASC,CAGD,IAAM,EAAY,EAAe,GAAM,EAAE,WAAW,IAAU,UAAU,CAsBxE,OArBI,EAAM,OAAS,WAEf,EAAA,EAAA,KAAC,GAAD,CACE,IAAK,EAAM,IACX,KAAM,EACM,aACU,uBACG,0BACG,6BAC5B,CAAA,CAGF,EAAM,OAAS,kBAAyB,EAAA,EAAA,KAAC,GAAD,CAAqB,IAAK,EAAM,IAAgB,YAAa,CAAA,CACrG,EAAM,OAAS,UAAiB,EAAA,EAAA,KAAC,GAAD,CAAY,IAAK,EAAM,IAAO,CAAA,CAC9D,EAAM,OAAS,mBAA0B,EAAA,EAAA,KAAC,GAAD,CAA0B,QAAS,CAAA,CAC5E,EAAM,OAAS,gBAAuB,EAAA,EAAA,KAAC,GAAD,CAAyB,QAAS,CAAA,CACxE,EAAM,OAAS,YAAmB,EAAA,EAAA,KAAC,GAAD,CAAe,MAAO,EAAM,MAAsB,gBAA0B,YAAa,CAAA,CAC3H,EAAM,OAAS,mBAA0B,EAAA,EAAA,KAAC,GAAD,CAAuB,QAAS,EAAM,QAAW,CAAA,CAC1F,EAAM,OAAS,oBAA2B,EAAA,EAAA,KAAC,GAAD,CAAuB,MAAO,EAAM,MAAO,YAAa,EAAM,QAAQ,kBAAoB,EAAM,QAAQ,aAAyB,YAAa,CAAA,CACxL,EAAM,OAAS,UAAiB,EAAA,EAAA,KAAC,GAAD,CAAc,MAAO,EAAM,MAAS,CAAA,CACpE,EAAM,OAAS,QAAe,EAAA,EAAA,KAAC,GAAD,CAAe,KAAM,EAAM,KAAQ,CAAA,EAC9D,EAAA,EAAA,KAAC,GAAD,CAAe,UAAW,EAAM,UAAa,CAAA,CC9qBtD,IAAM,GAA+B,EAAE,CAOjC,GAAyB,KAE/B,SAAS,GAAoB,EAAuB,CAClD,OAAO,EAAI,OAAS,WAAc,EAAI,SAAS,SAA2C,OAAS,SAGrG,SAAS,GAAiB,EAAgC,CACxD,IAAM,EAAe,EAAS,OAAQ,GAAM,EAAE,OAAS,QAAU,EAAE,OAAA,OAAwB,CAE3F,OADK,EAAa,OACX,EAAS,OAAQ,GAAM,CAC5B,GAAI,CAAC,GAAoB,EAAE,EAAI,EAAE,OAAA,OAAyB,MAAO,GACjE,IAAM,EAAO,GAAY,EAAE,CAAC,MAAM,CAClC,GAAI,CAAC,EAAM,MAAO,GAClB,IAAM,EAAK,GAAY,EAAE,UAAU,CACnC,MAAO,CAAC,EAAa,KAAM,GACzB,GAAY,EAAK,CAAC,MAAM,GAAK,GAAQ,KAAK,IAAI,GAAY,EAAK,UAAU,CAAG,EAAG,EAAI,GACpF,EACD,CAT+B,EAYnC,SAAgB,GAAU,CAAE,UAAS,SAAQ,kBAA6F,CACxI,IAAM,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAa,EAAe,GAAM,EAAE,WAAW,CAC/C,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAM,IAAQ,CACd,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAoB,EAAe,GAAM,EAAE,kBAAkB,CAC7D,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAwB,EAAe,GAAM,EAAE,sBAAsB,CACrE,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAe,EAAe,GAAM,EAAE,aAAa,CACnD,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAkB,EAAe,GAAM,EAAE,iBAAiB,EAAE,qBAAqB,CACjF,EAAoB,GAAiB,UAAY,GACjD,EAAY,EAAe,GAAM,EAAE,UAAU,CAC7C,GAAc,EAAe,GAAM,EAAE,YAAY,CACjD,GAAY,EAAe,GAAM,EAAE,UAAU,CAC7C,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,GAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,GAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,GAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,GAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAiB,EAAe,GAAM,EAAE,eAAe,CACvD,GAAgB,EAAe,GAAM,EAAE,cAAc,EAEtC,EAAA,EAAA,QAAyB,KAAK,CACnD,IAAM,IAAA,EAAA,EAAA,QAA4C,KAAK,CACjD,CAAC,GAAU,KAAA,EAAA,EAAA,UAA+D,OAAO,CACjF,IAAA,EAAA,EAAA,QAAoD,EAAE,CAAC,CACvD,CAAC,GAAoB,KAAA,EAAA,EAAA,UAAuD,EAAE,CAAC,CAC/E,CAAC,GAAY,KAAA,EAAA,EAAA,UAA0B,GAAM,CAC7C,CAAC,GAAa,KAAA,EAAA,EAAA,UAA4H,KAAK,CAC/I,CAAC,GAAiB,KAAA,EAAA,EAAA,UAAiJ,KAAK,CACxK,CAAC,GAAkB,KAAA,EAAA,EAAA,UAAgC,GAAG,CACtD,IAAA,EAAA,EAAA,QAA8C,KAAK,CACnD,IAAA,EAAA,EAAA,QAA4B,EAAE,CAG9B,CAAC,GAAc,KAAA,EAAA,EAAA,UAAgD,KAAK,CACpE,GAAe,GAAqB,EAAoB,CAExD,IAAA,EAAA,EAAA,aACE,EAAQ,KAAM,GAAM,EAAE,OAAS,EAAoB,EAAI,KAC7D,CAAC,EAAS,EAAoB,CAC/B,CAEK,IAAA,EAAA,EAAA,aAIG,GAHS,EACb,OAAQ,GAAY,GAAwB,EAAqB,EAAQ,EAAI,CAAC,GAAuB,EAAQ,CAAC,CAC9G,MAAM,EAAG,IAAM,EAAE,GAAK,EAAE,GACH,CAAQ,CAC/B,CAAC,EAAmB,EAAoB,CAAC,CAEtC,EAAQ,EAAW,IAAwB,KAI3C,GAAkB,OAAO,GAAO,MAAM,iBAAoB,UAAY,EAAM,KAAK,gBAAgB,WAAW,cAAc,CAC1H,CAAE,gBAAc,kBAAgB,mBAAiB,aAAc,GAAoB,cAAe,IAAwB,GAAiB,GAAO,GAAG,CACrJ,GAAsB,OAAO,GAAO,MAAM,gBAAmB,SAAW,EAAM,KAAK,eAA2B,GAC9G,IAAA,EAAA,EAAA,aACG,EAAmB,OAAQ,GAChC,EAAQ,gBAAkB,GAC1B,GAAQ,IAAuB,EAAQ,uBAAyB,IACjE,CACA,CAAC,GAAqB,EAAoB,EAAoB,CAAC,CAC5D,GAAe,GAAqB,EAAM,CAC1C,GAAkB,IAAc,gBAChC,IAAA,EAAA,EAAA,aAA2B,CAE/B,GADI,CAAC,GACD,CAAC,IAAU,GAAe,SAAW,EAAG,OAAO,KACnD,IAAM,EAAc,GAAe,GAAe,OAAS,IAAM,IAAQ,aAAe,KAClF,EAAiB,IAAQ,gBAAkB,GAAe,KAAM,GAAY,EAAQ,KAAO,GAAO,gBAAgB,GAAG,CACvH,GAAO,eACP,EACJ,MAAO,CACL,GAAI,IAAQ,IAAM,EAClB,KAAM,EACN,SAAU,GACV,cACA,iBACA,UAAW,IAAQ,WAAa,CAAE,OAAQ,EAAG,mBAAoB,GAAO,MAAO,EAAG,CAClF,SAAU,IAAQ,UAAY,GAC9B,MAAO,IAAQ,OAAS,GACzB,EACA,CAAC,EAAqB,GAAQ,GAAe,CAAC,CAC3C,GAAmB,KAAe,GAAgB,OAAS,EAAI,CAAE,KAAM,EAAqB,SAAU,EAAE,CAAE,mBAAiB,CAAG,MAC9H,GAAQ,EAAY,IAAwB,GAE5C,GAAc,OAAO,GAAO,MAAM,aAAgB,UAAa,EAAM,KAAK,YAAuB,MAAM,CAAG,EAAM,KAAK,YAAwB,KAC7I,GAAW,GAAc,EAAc,KAAM,GAAO,EAAU,eAAe,KAAM,GAAW,EAAE,UAAY,EAAO,IAAM,EAAE,cAAgB,GAAY,CAAC,EAAI,KAAO,KACnK,GAAkB,GAAQ,IAAe,IAAU,SAAW,UAAY,GAAO,sBAAsB,UAAU,MAAM,MACvH,GAAkB,GAAO,sBAAsB,OAAO,WAAa,OAAO,GAAO,MAAM,UAAa,SAAW,EAAM,KAAK,SAAW,IAAA,IACrI,GAAmB,GAAQ,KAAoB,GAAO,sBAAsB,UAAU,MAAM,OAAS,KAAoB,WACzH,GAAoB,GAAO,sBAAsB,UAAU,QAAQ,SAAW,GAC9E,GAAkB,IAAmB,GACrC,GAAa,GAA2B,EAAO,UAAU,CACzD,GAAkB,GAA2B,EAAO,eAAe,CACnE,GAAc,GAA2B,EAAO,WAAW,CAC3D,GAAe,GAA2B,EAAO,YAAY,CAC7D,OAAuB,CAAM,GAAO,EAAmB,EAAO,YAAY,EAI1E,CAAC,GAAY,KAAA,EAAA,EAAA,UAA0B,EAAE,CACzC,CAAC,GAAa,KAAA,EAAA,EAAA,UAA2B,GAAM,CAC/C,GAAe,GAAO,sBAAsB,aAAa,gBAAkB,GAC3E,GAAgB,GAAO,sBAAsB,OAAO,WAAa,OAAO,GAAO,MAAM,UAAa,SAAW,EAAM,KAAK,SAAW,IAAA,IACnI,GAAgB,IAAgB,CAAC,IAAe,UAAU,KAAK,GAAM,CACvE,GAAsB,GAAc,CAAC,OAAQ,GAAM,EAAE,KAAK,aAAa,CAAC,WAAW,GAAM,aAAa,CAAC,CAAC,CACxG,EAAE,CACA,GAAmB,GAAa,OAAS,KAAK,IAAI,GAAY,GAAa,OAAS,EAAE,CAAG,EAC/F,SAAS,GAAY,EAAmB,CACtC,EAAc,EAAqB,GAAG,EAAI,KAAK,GAAG,CAClD,GAAc,EAAE,CAElB,SAAS,GAAkB,EAAe,CACxC,EAAc,EAAqB,EAAM,CACrC,IAAa,GAAe,GAAM,CACtC,GAAc,EAAE,CAElB,IAAM,GAAoB,GAAmB,KAAM,GAAS,EAAK,UAAU,CACrE,GAAmB,GAAmB,OAAQ,GAAS,EAAK,SAAS,CACrE,GAAW,GAAM,MAAM,CAAC,OAAS,GAAK,GAAmB,OAAS,EAGxE,GAAqB,GAAO,IAAM,GAAI,GAAM,MAAM,CAAC,OAAS,EAAE,CAM9D,GAAqB,IAAA,EAAA,EAAA,iBAHmB,GAErC,EAAE,CAC0B,CAAc,CAE7C,GAAsB,QAAU,IAEhC,EAAA,EAAA,mBACe,CACX,GAA4B,GAAsB,QAAQ,EAE3D,EAAE,CAAC,EAEN,EAAA,EAAA,eAAgB,CACV,GAAO,MAAM,aAAe,EAAc,SAAW,GAAG,IAAyB,EACpF,CAAC,GAAO,GAAI,GAAO,MAAM,YAAa,EAAc,OAAO,CAAC,EAE/D,EAAA,EAAA,mBACe,CACP,GAAsB,UAAY,MAAM,OAAO,aAAa,GAAsB,QAAQ,EAE/F,EAAE,CAAC,CAEN,IAAM,GAAc,OAAO,GAAO,WAAc,SAAW,EAAM,UAAY,IAAA,GACvE,GAAoB,GAAe,EAAW,KAAc,MAAM,SAAkC,IAAA,GACpG,IAAA,EAAA,EAAA,aACE,GAAc,GAAgB,GAAc,GAAO,UAAW,GAAiB,GAAc,CAAE,UAAW,CAAE,QAAS,GAAa,SAAU,GAAmB,CAAE,CAAG,IAAA,GAAU,CACpL,CAAC,GAAgB,GAAc,GAAO,UAAW,GAAiB,GAAa,GAAkB,CAClG,CACK,IAAA,EAAA,EAAA,aACG,GAAuB,EAAO,GAAgB,IAAY,YAAa,GAAc,CAC3F,CAAC,EAAO,IAAY,YAAa,GAAe,GAAe,CAAC,CAE7D,GAAS,GAAc,GAAS,CAEhC,IAAA,EAAA,EAAA,iBAA8C,CAC9C,CAAC,GAAuB,CAAC,GAAiB,SAAW,EAAgB,SACzE,EAAe,EAAoB,EAClC,CAAC,GAAiB,QAAS,GAAiB,QAAS,EAAW,EAAoB,CAAC,CAElF,IAAA,EAAA,EAAA,iBAA+C,CAC/C,GAAsB,UAAY,OACtC,OAAO,aAAa,GAAsB,QAAQ,CAClD,GAAsB,QAAU,OAC/B,EAAE,CAAC,CAEA,IAAA,EAAA,EAAA,aAAoC,KAAO,IAAqD,CACpG,IAAM,EAAe,GAA2B,EAAe,EAAK,CACpE,GAAI,CAAC,EAAc,OAAO,KAC1B,GAAI,CACF,IAAM,EAAO,MAAM,EAAoB,MAAO,kBAAkB,mBAAmB,EAAa,GAAG,CAAC,mBAAmB,mBAAmB,EAAK,GAAG,CAClJ,MAAO,CAAE,eAAgB,EAAa,GAAI,KAAM,EAAK,KAAM,KAAM,EAAK,KAAM,MACtE,CACN,OAAO,OAER,CAAC,EAAc,CAAC,CAIb,IAAA,EAAA,EAAA,cAAqC,EAAc,EAAe,IAAqB,CAC3F,GAAI,CAAC,IAAyB,EAAI,CAAC,EAAQ,OAC3C,IAAM,EAAU,EAAE,GAAmB,QACrC,GAA2B,EAAK,CAAC,KAAM,GAAS,CAC1C,GAAmB,UAAY,GAC9B,IACL,IAA4B,CAC5B,GAAmB,CAAE,GAAG,EAAM,KAAM,GAAQ,EAAG,SAAQ,CAAC,CACxD,GAAoB,GAAG,GACvB,EACD,CAAC,GAA4B,GAAsB,CAAC,CAEjD,IAAA,EAAA,EAAA,iBAAuD,CAC3D,GAAmB,SAAW,EAC9B,IAA4B,CAC5B,GAAsB,QAAU,OAAO,eAAiB,CACtD,GAAmB,KAAK,EACvB,IAAI,EACN,CAAC,GAA2B,CAAC,CAI1B,IAAA,EAAA,EAAA,cAAkC,EAAc,IAAkB,CACtE,GAA2B,EAAK,CAAC,KAAM,GAAS,CAC9C,GAAI,CAAC,EAAM,CACT,GAAU,iBAAkB,EAAK,CACjC,OAEF,GAAI,IAAyB,CAAE,CAC7B,GAAmB,SAAW,EAC9B,IAA4B,CAC5B,GAAmB,KAAK,CACxB,GAAe,CAAE,GAAG,EAAM,KAAM,GAAQ,EAAG,CAAC,CAC5C,GAAoB,GAAG,CACvB,OAEE,EAAK,OAAS,YAAa,EAAiB,CAAE,eAAgB,EAAK,eAAgB,KAAM,EAAK,KAAM,QAAS,GAAM,CAAC,CACnH,EAAiB,CAAE,eAAgB,EAAK,eAAgB,KAAM,GAAW,EAAK,KAAK,CAAE,aAAc,EAAK,KAAM,OAAM,QAAS,GAAM,CAAC,EACzI,EACD,CAAC,GAA4B,EAAa,GAAuB,GAAU,CAAC,CAE/E,SAAS,IAAmB,CAC1B,GAAe,KAAK,CACpB,GAAoB,GAAG,CAEzB,eAAe,GAAY,EAA0B,CACnD,IAAM,EAAO,MAAM,KAAK,EAAM,CAAC,OAAQ,GAAS,EAAK,KAAO,EAAE,CAC9D,GAAI,CAAC,EAAK,OAAQ,OAClB,IAAM,EAAU,EAAK,IAAK,IAA6B,CACrD,GAAI,GAAG,KAAK,KAAK,CAAC,GAAG,EAAK,KAAK,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,GACrE,SAAU,EAAK,KACf,KAAM,EAAK,KACX,WAAY,EAAK,KAAK,WAAW,SAAS,CAAG,IAAI,gBAAgB,EAAK,CAAG,IAAA,GACzE,UAAW,GACZ,EAAE,CACH,GAAuB,GAAY,CAAC,GAAG,EAAS,GAAG,EAAQ,CAAC,CAE5D,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,GAAK,EAAG,CACvC,IAAM,EAAO,EAAK,GACZ,EAAO,EAAQ,GACrB,GAAI,CACF,IAAM,EAAW,MAAM,EAAoB,aAAc,EAAM,CAC7D,SAAU,EAAK,KACf,YAAa,SACd,CAAC,CACF,GAAuB,GAAY,EAAQ,IAAK,GAAU,EAAM,KAAO,EAAK,GAAK,CAAE,GAAG,EAAO,WAAU,UAAW,GAAO,CAAG,EAAM,CAAC,OAC5H,EAAG,CACV,GAAuB,GAAY,EAAQ,IAAK,GAAU,EAAM,KAAO,EAAK,GAAK,CAAE,GAAG,EAAO,MAAQ,EAAY,QAAS,UAAW,GAAO,CAAG,EAAM,CAAC,GAK5J,SAAS,GAAwB,EAAY,CAC3C,GAAuB,GAAY,CACjC,IAAM,EAAO,EAAQ,KAAM,GAAU,EAAM,KAAO,EAAG,CAErD,OADI,GAAM,YAAY,IAAI,gBAAgB,EAAK,WAAW,CACnD,EAAQ,OAAQ,GAAU,EAAM,KAAO,EAAG,EACjD,CAGJ,SAAS,IAA0B,CACjC,GAA4B,GAAmB,CAC/C,GAAsB,EAAE,CAAC,CAG3B,SAAS,IAAa,CACpB,GAAK,CAAC,GAAM,MAAM,EAAI,GAAiB,SAAW,GAAM,CAAC,GAAuB,GAAe,IAAqB,GAAiB,OACrI,IAAM,EAAc,GAAiB,IAAK,IAAyB,CACjE,WAAY,EAAK,SAAU,GAC3B,KAAM,EAAK,SAAU,KACrB,KAAM,QACN,MAAO,EAAK,SAAU,UAAY,EAAK,SACxC,EAAE,CACH,EAAgB,GAAO,CAAE,KAAM,EAAqB,YAAa,IAAY,aAAe,KAAM,CAAE,EAAY,CAChH,IAAyB,CAG3B,SAAS,GAAc,EAA6C,CAClE,GAAI,GAAa,OAAQ,CACvB,GAAI,EAAE,MAAQ,YAAa,CAAE,EAAE,gBAAgB,CAAE,GAAe,GAAM,KAAK,IAAI,EAAI,EAAG,GAAa,OAAS,EAAE,CAAC,CAAE,OACjH,GAAI,EAAE,MAAQ,UAAW,CAAE,EAAE,gBAAgB,CAAE,GAAe,GAAM,KAAK,IAAI,EAAI,EAAG,EAAE,CAAC,CAAE,OACzF,GAAI,EAAE,MAAQ,SAAU,CAAE,EAAE,gBAAgB,CAAE,GAAe,GAAK,CAAE,OACpE,GAAI,EAAE,MAAQ,SAAW,EAAE,MAAQ,MAAO,CAAE,EAAE,gBAAgB,CAAE,IAAM,EAAM,GAAa,IAAuB,GAAK,GAAY,EAAI,CAAE,QAErI,EAAE,MAAQ,SAAW,CAAC,EAAE,WAC1B,EAAE,gBAAgB,CAClB,IAAY,EAIhB,SAAS,GAAY,EAA8C,CACjE,IAAM,EAAQ,MAAM,KAAK,EAAE,cAAc,MAAM,CAAC,OAAQ,GAAS,EAAK,KAAK,WAAW,SAAS,CAAC,CAC3F,EAAM,SACX,EAAE,gBAAgB,CAClB,GAAiB,EAAM,EAMzB,eAAe,IAAW,CACxB,GAAI,CAAC,IAAgB,KAAa,QAAU,CAAC,EAAqB,OAClE,GAAS,SAAS,CAClB,IAAM,EAAW,IAAI,GACrB,GAAI,CACF,MAAM,EAAS,OAAO,CACtB,GAAe,QAAU,EACzB,GAAY,YAAY,OACjB,EAAG,CACV,GAAe,QAAU,KACzB,GAAY,OAAO,CACnB,GAAU,yBAA2B,GAAa,SAAW,mCAAmC,EAIpG,eAAe,IAAU,CACvB,IAAM,EAAW,GAAe,QAC5B,MAAC,GAAY,KAAa,aAE9B,CADA,GAAe,QAAU,KACzB,GAAY,eAAe,CAC3B,GAAI,CACF,IAAM,EAAO,MAAM,EAAS,MAAM,CAClC,GAAI,CAAC,EAAM,OACX,IAAM,EAAO,MAAM,GAAe,EAAK,CACvC,GAAI,CAAC,EAAM,OACX,IAAM,EAAW,GAAQ,GAAG,GAAM,GAAG,IAAS,EAC9C,GAAI,IAAmB,YAAc,CAAC,GAAe,CAAC,GAAmB,CAGvE,IAAM,EAAc,GAAiB,IAAK,IAAyB,CACjE,WAAY,EAAK,SAAU,GAC3B,KAAM,EAAK,SAAU,KACrB,KAAM,QACN,MAAO,EAAK,SAAU,UAAY,EAAK,SACxC,EAAE,CACH,EAAgB,EAAU,CAAE,KAAM,EAAqB,YAAa,IAAY,aAAe,KAAM,CAAE,EAAY,CACnH,IAAyB,MAEzB,EAAc,EAAqB,EAAS,OAEvC,EAAG,CACV,GAAU,uBAAyB,GAAa,SAAW,8BAA8B,QACjF,CACR,GAAY,OAAO,GAavB,OATK,GAUH,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACA,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,EACA,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+DAAf,EACE,EAAA,EAAA,KAAC,GAAD,CACuB,sBACd,QACF,MACS,gBACd,OAAQ,GACU,oBACD,mBACD,iBACR,SACS,kBACG,qBACH,mBACG,sBACH,mBACA,mBACG,sBACN,gBACE,kBACJ,cACK,mBACJ,eACA,eACI,kBACF,gBACI,oBACJ,gBACQ,wBACF,sBACP,eACd,aAAc,GAAO,WACrB,CAAA,EAGF,EAAA,EAAA,KAAC,GAAD,CACE,SAAU,IAAe,aAAc,GAAc,GAAY,SAAW,KAC5E,OAAQ,IAAe,WAAY,GAAc,GAAY,OAAS,IAAA,GACtE,QAAS,IAAa,QACtB,CAAA,CACD,GAAO,OACN,EAAA,EAAA,KAAC,GAAD,CACE,MAAO,GAAO,MACd,SAAU,GAAO,SACjB,MAAO,GAAO,MACd,cAAe,GAAO,SACtB,OAAQ,GAAO,KACf,OAAQ,GAAO,KACf,QAAS,GAAO,MAChB,CAAA,EAIJ,EAAA,EAAA,KAAC,GAAD,CAAoB,SAAU,GAAwB,YAAY,CAAA,EAClE,EAAA,EAAA,KAAC,GAAD,CACE,QAAS,EACT,YAAa,GAAO,OACV,YACV,QAAS,GAAiB,SAAW,GACrC,QAAS,GAAiB,SAAW,GACrC,cAAe,GAAiB,eAAiB,GAClC,iBACE,mBACjB,aAAc,IAAc,MACd,gBACd,aAAc,GAAO,KACrB,iBAAkB,GAAO,WACzB,gBAAiB,GAAO,YACxB,cAAe,GACf,YAAa,GACb,YAAa,GACb,qBAAsB,GACtB,wBAAyB,GACzB,2BAA4B,GAC5B,CAAA,EAEF,EAAA,EAAA,KAAC,GAAD,CACS,SACP,YAAa,WAAW,EAAQ,GAAY,EAAM,CAAG,EAAoB,GAC5D,cACb,SAAU,GACS,qBACnB,qBAAsB,GAAiB,OACnB,sBACN,gBACJ,YACI,gBACI,oBAClB,cAAe,GACf,UAAW,GACX,QAAS,GACT,cAAgB,GAAU,CAAE,GAAiB,EAAM,EACnD,0BAA2B,GAC3B,OAAQ,GACR,cAAe,GACf,aAAc,GACd,eAAkB,CAAE,IAAe,EACnC,cAAiB,CAAE,IAAc,EACjC,WAAY,GACR,GAAG,EAAQ,GAAY,EAAM,CAAG,QAAQ,oBAAoB,GAAO,MAAM,iBAA2B,MAAM,GAAqB,CAAC,sBAChI,0CACJ,CAAA,CACE,GACL,KACC,EAAA,EAAA,MAAC,QAAD,CACE,UAAU,0HADZ,EAGE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oEAA2D,eAAmB,CAAA,CAC7F,KAAoB,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,uDAA+C,GAAwB,CAAA,EAC5G,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,MAAM,gBAAgB,QAAS,aACpE,EAAA,EAAA,KAAC,EAAD,CAAG,UAAU,cAAgB,CAAA,CACtB,CAAA,CACL,IACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0BACZ,GAAY,OAAS,aACpB,EAAA,EAAA,KAAC,GAAD,CACE,eAAgB,GAAY,eAC5B,aAAc,GAAY,KAC1B,YAAa,GACb,CAAA,EAEF,EAAA,EAAA,KAAC,GAAD,CACE,eAAgB,GAAY,eAC5B,aAAc,GAAY,KAC1B,KAAM,GAAY,KAClB,YAAa,GACb,CAAA,CAEA,CAAA,CACA,GAEJ,GACL,KACC,EAAA,EAAA,KAAC,GAAD,CACE,QAAS,GACT,MAAO,GACP,YAAa,GACb,aAAc,GACd,aAAc,GACd,CAAA,CAEH,KACC,EAAA,EAAA,KAAC,GAAD,CAAgB,KAAM,GAAc,aAAc,GAAqB,eAAgB,GAAe,eAAgB,QAAS,GAAe,QAAS,YAAa,GAAe,aAAe,GAAoB,CAAA,CAErN,CAAA,CAAA,EA3JD,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAe,UAAU,+BAAiC,CAAA,EAC1D,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,yCAAgC,oCAAqC,CAAA,CAC9E,GC5cZ,SAAgB,IAAkB,CAChC,IAAM,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAa,EAAe,GAAM,EAAE,WAAW,CAC/C,EAAM,EAAe,GAAM,EAAE,IAAI,EAEvC,EAAA,EAAA,eAAgB,CACd,IAAM,EAAa,OAAO,KAAK,EAAY,CAC3C,GAAI,EAAW,SAAW,EAAG,OAE7B,IAAM,EAAQ,EAAW,OAAQ,GAAS,CAAC,EAAW,IAAS,IAAA,OAAwB,CACvF,GAAI,EAAM,SAAW,EAAG,OAGxB,IAAM,EAAQ,eAAiB,CAC7B,IAAM,EAAgB,EAAc,UAAU,CAAC,WACzC,EAAO,CAAE,GAAG,EAAc,UAAU,CAAC,YAAa,CACpD,EAAU,GACd,IAAK,IAAM,KAAQ,EACZ,EAAc,KACjB,OAAO,EAAK,GACZ,EAAU,IAGV,GAAS,EAAI,CAAE,YAAa,EAAM,CAAC,EACtC,IAAO,CAEV,UAAa,aAAa,EAAM,EAC/B,EAAE,CAAC,CCnBR,SAAgB,GAAqB,EAAe,EAAoB,EACtE,EAAA,EAAA,eAAgB,CAEd,GADI,OAAO,OAAW,KAAe,CAAC,GAClC,CAAC,OAAO,WAAW,qBAAqB,CAAC,QAAS,OAEtD,OAAO,QAAQ,UAAU,CAAE,SAAU,GAAM,CAAE,GAAG,CAEhD,SAAS,GAAiB,CACxB,GAAQ,CAIV,OAFA,OAAO,iBAAiB,WAAY,EAAe,KAEtC,CACX,OAAO,oBAAoB,WAAY,EAAe,CAGlD,OAAO,QAAQ,OAAO,UAAU,OAAO,QAAQ,MAAM,GAE1D,CAAC,EAAM,EAAO,CAAC,CCrBpB,SAAgB,IAAW,CACzB,IAAM,EAAU,IAAoB,CAC9B,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAM,EAAe,GAAM,EAAE,IAAI,CACjC,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAa,EAAe,GAAM,EAAE,WAAW,CAC/C,EAAiB,EAAQ,EAE/B,IAAiB,EAEjB,EAAA,EAAA,eAAgB,CACT,GACL,EAAmB,EAAoB,EACtC,CAAC,EAAqB,EAAc,CAAC,EAExC,EAAA,EAAA,eAAgB,CACT,IAIA,EAAW,IACd,EAAI,CAAE,oBAAqB,GAAI,CAAC,GAEjC,CAAC,EAAqB,EAAY,EAAI,CAAC,CAE1C,IAAM,GAAA,EAAA,EAAA,iBAAqC,CACzC,EAAI,CAAE,oBAAqB,GAAI,CAAC,EAC/B,CAAC,EAAI,CAAC,CAIT,OAFA,GAAqB,EAAgB,EAAiB,EAGpD,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iCAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,uEACb,EAAA,EAAA,KAAC,GAAD,CAAyB,UAAW,CAAA,CAChC,CAAA,EAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iDACb,EAAA,EAAA,KAAC,GAAD,CAAyD,UAAW,CAApD,GAAuB,QAA6B,CAChE,CAAA,CACF,IAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iDACX,GAKA,EAAA,EAAA,KAAC,GAAD,CAAA,UACE,EAAA,EAAA,KAAC,GAAD,CAAyD,UAAS,OAAQ,EAAkB,eAAA,GAAiB,CAA7F,GAAuB,QAAsE,CACzF,CAAA,EANtB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iDACb,EAAA,EAAA,KAAC,GAAD,CAAyB,UAAW,CAAA,CAChC,CAAA,CAMJ,CAAA,CACF,GAIV,SAAS,GAAoB,CAAE,YAA2C,CACxE,IAAM,EAAS,IAA2B,CAE1C,OACE,EAAA,EAAA,KAAC,MAAD,CACE,UAAU,yEACV,MAAO,CAAE,OAAQ,EAAS,GAAG,EAAO,IAAM,SAAU,CAEnD,WACG,CAAA"}