22 lines
133 KiB
JavaScript
22 lines
133 KiB
JavaScript
"use strict";
|
|
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
self["webpackHotUpdate_N_E"]("app/page",{
|
|
|
|
/***/ "(app-pages-browser)/./src/components/chat-interface.tsx":
|
|
/*!*******************************************!*\
|
|
!*** ./src/components/chat-interface.tsx ***!
|
|
\*******************************************/
|
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChatInterface: () => (/* binding */ ChatInterface)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var framer_motion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! framer-motion */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs\");\n/* harmony import */ var framer_motion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! framer-motion */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./src/components/ui/button.tsx\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/square-pen.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/copy.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/chevron-down.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/paperclip.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/loader-circle.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/send.js\");\n/* harmony import */ var _components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/dropdown-menu */ \"(app-pages-browser)/./src/components/ui/dropdown-menu.tsx\");\n/* harmony import */ var _markdown_renderer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./markdown-renderer */ \"(app-pages-browser)/./src/components/markdown-renderer.tsx\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./src/lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ ChatInterface auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\n\nfunction ChatInterface(param) {\n let { agent, agents, onAgentSelected, isAgentsLoading } = param;\n _s();\n const heroGreeting = \"hello, user\";\n const [messages, setMessages] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [isLoading, setIsLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [sessionId, setSessionId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [selectedImages, setSelectedImages] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [composerAgentId, setComposerAgentId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [textareaHeight, setTextareaHeight] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(32);\n const messagesContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const inputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const fileInputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const [copiedMessageId, setCopiedMessageId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n // Use agent-specific session ID: chat-session-{agentId}\n const sessionKey = \"chat-session-\".concat(agent.id);\n let existingSessionId = localStorage.getItem(sessionKey);\n if (!existingSessionId) {\n // Generate new sessionID using timestamp and random string\n existingSessionId = \"session-\".concat(agent.id, \"-\").concat(Date.now(), \"-\").concat(Math.random().toString(36).substring(2, 15));\n localStorage.setItem(sessionKey, existingSessionId);\n }\n setSessionId(existingSessionId);\n // Load existing messages for this agent\n const messagesKey = \"chat-messages-\".concat(agent.id);\n const savedMessages = localStorage.getItem(messagesKey);\n if (savedMessages) {\n try {\n const parsed = JSON.parse(savedMessages);\n // Ensure timestamps are Date objects\n const messages = parsed.map({\n \"ChatInterface.useEffect.messages\": (msg)=>({\n ...msg,\n timestamp: new Date(msg.timestamp)\n })\n }[\"ChatInterface.useEffect.messages\"]);\n setMessages(messages);\n } catch (err) {\n console.error(\"[chat] Failed to load saved messages:\", err);\n }\n }\n }\n }[\"ChatInterface.useEffect\"], [\n agent.id\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n if (messagesContainerRef.current) {\n messagesContainerRef.current.scrollTop = messagesContainerRef.current.scrollHeight;\n }\n }\n }[\"ChatInterface.useEffect\"], [\n messages,\n isLoading\n ]);\n // Update textarea height based on content\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n if (inputRef.current) {\n const element = inputRef.current;\n element.style.height = \"auto\";\n const newHeight = Math.min(element.scrollHeight, 224);\n setTextareaHeight(newHeight);\n }\n }\n }[\"ChatInterface.useEffect\"], [\n input\n ]);\n // Save messages to localStorage whenever they change\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n const messagesKey = \"chat-messages-\".concat(agent.id);\n localStorage.setItem(messagesKey, JSON.stringify(messages));\n }\n }[\"ChatInterface.useEffect\"], [\n messages,\n agent.id\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n if (inputRef.current) {\n inputRef.current.style.height = \"auto\";\n inputRef.current.style.height = Math.min(inputRef.current.scrollHeight, 160) + \"px\";\n }\n }\n }[\"ChatInterface.useEffect\"], [\n input\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n if (messages.length > 0 && composerAgentId !== agent.id) {\n setComposerAgentId(agent.id);\n }\n }\n }[\"ChatInterface.useEffect\"], [\n messages.length,\n agent.id\n ]);\n // Handle image file selection\n const handleImageSelect = async (e)=>{\n const files = e.currentTarget.files;\n if (!files) return;\n const newImages = [];\n for(let i = 0; i < files.length; i++){\n const file = files[i];\n // Only accept image files\n if (!file.type.startsWith(\"image/\")) {\n console.warn(\"[chat] Skipping non-image file:\", file.name);\n continue;\n }\n try {\n const base64 = await fileToBase64(file);\n newImages.push(base64);\n } catch (err) {\n console.error(\"[chat] Failed to convert image:\", err);\n }\n }\n setSelectedImages((prev)=>[\n ...prev,\n ...newImages\n ]);\n // Reset file input\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n // Convert file to base64 string\n const fileToBase64 = (file)=>{\n return new Promise((resolve, reject)=>{\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = ()=>resolve(reader.result);\n reader.onerror = reject;\n });\n };\n // Remove selected image\n const removeImage = (index)=>{\n setSelectedImages((prev)=>prev.filter((_, i)=>i !== index));\n };\n const sendMessage = async (e)=>{\n if (e) {\n e.preventDefault();\n }\n if (!input.trim() || isLoading) return;\n const userMessage = {\n id: Date.now().toString(),\n role: \"user\",\n content: input.trim(),\n timestamp: new Date(),\n images: selectedImages.length > 0 ? selectedImages : undefined\n };\n setMessages((prev)=>[\n ...prev,\n userMessage\n ]);\n setInput(\"\");\n setSelectedImages([]);\n setIsLoading(true);\n try {\n const response = await fetch(\"/api/chat\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n message: userMessage.content,\n timestamp: userMessage.timestamp.toISOString(),\n sessionId: sessionId,\n agentId: agent.id,\n images: selectedImages.length > 0 ? selectedImages : undefined\n })\n });\n const data = await response.json();\n if (!response.ok) {\n const errorMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: data.error || \"Failed to communicate with the webhook.\",\n timestamp: new Date(),\n isError: true,\n hint: data.hint\n };\n setMessages((prev)=>[\n ...prev,\n errorMessage\n ]);\n } else {\n const assistantMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: data.response || data.message || JSON.stringify(data),\n timestamp: new Date()\n };\n setMessages((prev)=>[\n ...prev,\n assistantMessage\n ]);\n }\n } catch (error) {\n console.error(\"[v0] Error sending message:\", error);\n const errorMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: \"Sorry, I encountered an error processing your message. Please try again.\",\n timestamp: new Date(),\n isError: true\n };\n setMessages((prev)=>[\n ...prev,\n errorMessage\n ]);\n } finally{\n var _inputRef_current;\n setIsLoading(false);\n (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus();\n }\n };\n const startNewChat = ()=>{\n var // Focus input\n _inputRef_current;\n // Clear all messages\n setMessages([]);\n // Generate new sessionID for this agent\n const newSessionId = \"session-\".concat(agent.id, \"-\").concat(Date.now(), \"-\").concat(Math.random().toString(36).substring(2, 15));\n setSessionId(newSessionId);\n const sessionKey = \"chat-session-\".concat(agent.id);\n localStorage.setItem(sessionKey, newSessionId);\n // Clear input and images\n setInput(\"\");\n setSelectedImages([]);\n setComposerAgentId(null);\n (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus();\n };\n const handleKeyDown = (e)=>{\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n sendMessage();\n }\n };\n const handleCopyMessage = async (id, content)=>{\n try {\n await navigator.clipboard.writeText(content);\n setCopiedMessageId(id);\n setTimeout(()=>{\n setCopiedMessageId((current)=>current === id ? null : current);\n }, 1200);\n } catch (error) {\n console.error(\"[chat] Failed to copy message\", error);\n }\n };\n const handleComposerAgentSelect = (entry)=>{\n setComposerAgentId(entry.id);\n onAgentSelected(entry);\n };\n const canSwitchAgents = agents.length > 0 && !isAgentsLoading;\n const hasMessages = messages.length > 0;\n const dropdownSelectedId = composerAgentId !== null && composerAgentId !== void 0 ? composerAgentId : hasMessages ? agent.id : null;\n var _agents_find;\n const dropdownAgentEntry = dropdownSelectedId ? (_agents_find = agents.find((entry)=>entry.id === dropdownSelectedId)) !== null && _agents_find !== void 0 ? _agents_find : agent : null;\n const dropdownLabel = dropdownAgentEntry ? dropdownAgentEntry.name : \"Select a correspondent\";\n const highlightAgentDropdown = !dropdownSelectedId && !hasMessages;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.div, {\n initial: {\n opacity: 0,\n y: 35\n },\n animate: {\n opacity: 1,\n y: 0\n },\n transition: {\n duration: 0.85,\n ease: \"easeOut\"\n },\n className: \"chat-panel relative flex h-full w-full flex-col overflow-hidden rounded-[2.5rem] bg-gradient-to-b from-white/0 via-white/15 to-white/45 px-5 py-6 shadow-[0_15px_35px_rgba(45,45,45,0.1),0_0_0_1px_rgba(255,255,255,0.25)_inset,0_15px_25px_rgba(255,255,255,0.12)_inset] backdrop-blur-xl dark:bg-gradient-to-b dark:from-transparent dark:via-white/5 dark:to-white/20 dark:shadow-[0_12px_25px_rgba(0,0,0,0.35),0_0_0_1px_rgba(255,255,255,0.06)_inset,0_12px_20px_rgba(255,255,255,0.04)_inset] sm:px-8 sm:py-10\",\n children: [\n messages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute left-8 top-8 z-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: startNewChat,\n variant: \"ghost\",\n size: \"icon\",\n className: \"group h-11 w-11 rounded-2xl border border-white/25 bg-white/15 text-white shadow-[0_2px_6px_rgba(0,0,0,0.12)] backdrop-blur transition hover:bg-white/25\",\n title: \"Start a fresh conversation\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 299,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 292,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 291,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: messagesContainerRef,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)(\"mobile-feed px-0 pt-6 sm:px-0\", hasMessages ? \"flex-1 overflow-y-auto pb-32 sm:pb-10\" : \"pb-10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto w-full max-w-3xl space-y-8 px-2 sm:space-y-10 sm:px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_8__.AnimatePresence, {\n mode: \"wait\",\n children: hasMessages ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.div, {\n initial: {\n opacity: 0,\n y: 30\n },\n animate: {\n opacity: 1,\n y: 0\n },\n exit: {\n opacity: 0,\n y: -20\n },\n transition: {\n duration: 0.6,\n ease: \"easeOut\"\n },\n className: \"space-y-10\",\n children: [\n messages.map((message)=>{\n const isUser = message.role === \"user\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.div, {\n layout: true,\n initial: {\n opacity: 0,\n y: 15\n },\n animate: {\n opacity: 1,\n y: 0\n },\n transition: {\n duration: 0.35,\n ease: \"easeOut\"\n },\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)(\"message-frame flex flex-col gap-3\", isUser ? \"items-end text-right\" : \"\"),\n children: [\n isUser ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-bubble user\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_markdown_renderer__WEBPACK_IMPORTED_MODULE_4__.MarkdownRenderer, {\n content: message.content,\n tone: \"bubble\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 335,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 334,\n columnNumber: 25\n }, this) : message.isError ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-base font-medium text-destructive sm:text-sm\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"whitespace-pre-wrap break-words leading-relaxed\",\n children: message.content\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 339,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 338,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative text-base text-charcoal dark:text-foreground sm:text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_markdown_renderer__WEBPACK_IMPORTED_MODULE_4__.MarkdownRenderer, {\n content: message.content\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 343,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 flex items-center justify-end gap-3 border-t border-white/10 pt-3 opacity-50 transition hover:opacity-100\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleCopyMessage(message.id, message.content),\n className: \"inline-flex h-7 w-7 items-center justify-center rounded border border-white/20 bg-white/8 text-white/70 shadow-[0_2px_5px_rgba(0,0,0,0.07)] backdrop-blur transition-transform duration-150 hover:bg-white/18 \".concat(copiedMessageId === message.id ? \"scale-90 bg-white/20 text-white\" : \"\"),\n \"aria-label\": \"Copy response\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-2.5 w-2.5\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 353,\n columnNumber: 31\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 345,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 344,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 342,\n columnNumber: 25\n }, this),\n message.hint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-lg border border-accent/60 bg-accent/40 px-3 py-2 text-xs text-charcoal\",\n children: message.hint\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 360,\n columnNumber: 25\n }, this)\n ]\n }, message.id, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 325,\n columnNumber: 21\n }, this);\n }),\n isLoading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-frame flex flex-col gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3 text-sm text-muted-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"uppercase tracking-[0.25em] text-white/70\",\n children: \"Correspondent\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 371,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"relative flex h-3 w-24 overflow-hidden rounded-full bg-white/10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute inset-y-0 w-1/2 animate-[shimmer_1.4s_infinite] bg-white/40\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 373,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 372,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 370,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 369,\n columnNumber: 19\n }, this)\n ]\n }, \"conversation\", true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 314,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.div, {\n initial: {\n opacity: 0,\n y: 60\n },\n animate: {\n opacity: 1,\n y: 0\n },\n exit: {\n opacity: 0,\n y: -20\n },\n transition: {\n duration: 0.65,\n ease: \"easeOut\"\n },\n className: \"flex min-h-[45vh] flex-col items-center justify-center gap-6 text-center sm:min-h-[40vh]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full sm:hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mobile-hero-card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mobile-hero-icon\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {}, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 391,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 390,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mobile-hero-label\",\n children: \"Correspondent studio\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 394,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mobile-hero-heading\",\n children: \"Who should we bring in?\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 395,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 393,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 389,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 388,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden text-center sm:block\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"font-heading text-[7rem] lowercase tracking-tight text-white/85 drop-shadow-[0_12px_30px_rgba(0,0,0,0.4)]\",\n children: heroGreeting.split(\"\").map((char, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.span, {\n initial: {\n opacity: 0,\n y: 18\n },\n animate: {\n opacity: 1,\n y: 0\n },\n transition: {\n delay: 0.15 + index * 0.05,\n duration: 0.35,\n ease: \"easeOut\"\n },\n className: \"inline-block\",\n children: char === \" \" ? \"\\u00A0\" : char\n }, \"\".concat(char, \"-\").concat(index), false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 403,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 401,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 400,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-3xl space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mobile-hero-label sm:hidden\",\n children: \"Select a correspondent to begin\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 417,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"hidden text-sm uppercase tracking-[0.35em] text-white/80 sm:block\",\n children: \"Select a correspondent to begin\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 418,\n columnNumber: 19\n }, this),\n agents.length > 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mobile-agent-stack sm:hidden\",\n children: agents.map((entry)=>{\n const isActive = dropdownSelectedId === entry.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleComposerAgentSelect(entry),\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)(\"mobile-agent-chip\", isActive ? \"is-active\" : undefined),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: entry.name\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 432,\n columnNumber: 31\n }, this)\n }, \"mobile-\".concat(entry.id), false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 427,\n columnNumber: 29\n }, this);\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 423,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden flex-wrap items-center justify-center gap-3 sm:flex\",\n children: agents.map((entry)=>{\n const isActive = dropdownSelectedId === entry.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleComposerAgentSelect(entry),\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)(\"rounded-full border px-4 py-2 text-[0.65rem] uppercase tracking-[0.35em] transition\", isActive ? \"border-white/25 bg-white/25 text-white shadow-[0_5px_20px_rgba(0,0,0,0.35)]\" : \"border-white/10 bg-white/5 text-white/70 hover:border-white/30 hover:text-white\"),\n children: entry.name\n }, entry.id, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 441,\n columnNumber: 29\n }, this);\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 437,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-white/60\",\n children: \"No agents available yet.\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 458,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 416,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid w-full max-w-2xl gap-4 sm:grid-cols-2\",\n children: [\n \"Help me brainstorm ideas for a new mobile app\",\n \"Generate creative writing prompts for a fantasy novel\",\n \"Suggest innovative marketing strategies for a startup\",\n \"Create a list of unique product names for a tech company\"\n ].map((prompt, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setInput(prompt),\n className: \"scroll-reveal rounded-2xl border border-border/30 bg-white/80 p-4 text-left text-sm text-charcoal shadow-sm transition hover:border-ring/60 hover:bg-white\",\n style: {\n animationDelay: \"\".concat(index * 50, \"ms\")\n },\n children: prompt\n }, prompt, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 469,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 462,\n columnNumber: 17\n }, this)\n ]\n }, \"empty-state\", true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 380,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 312,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 311,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 304,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.div, {\n layout: true,\n className: \"composer-affix mt-auto pt-6 transition-all duration-500 sm:pb-4\",\n animate: {\n y: hasMessages ? 0 : -40\n },\n transition: {\n type: \"spring\",\n stiffness: 160,\n damping: 24\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: sendMessage,\n className: \"composer-form w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"composer-panel\",\n children: [\n selectedImages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"composer-images\",\n children: selectedImages.map((image, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"composer-image-thumb\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: image,\n alt: \"Selected \".concat(index)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 497,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>removeImage(index),\n className: \"composer-image-remove\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-3 w-3\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 503,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 498,\n columnNumber: 21\n }, this)\n ]\n }, index, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 496,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 494,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.textarea, {\n ref: inputRef,\n value: input,\n onChange: (e)=>setInput(e.target.value),\n onKeyDown: handleKeyDown,\n placeholder: \"Write a note, share a hunch, or paste a brief…\",\n disabled: isLoading,\n rows: 1,\n className: \"composer-textarea hide-scrollbar w-full resize-none border-0 bg-transparent text-lg text-foreground placeholder:text-muted-foreground/80 focus:outline-none\",\n animate: {\n height: textareaHeight\n },\n transition: {\n height: {\n type: \"spring\",\n stiffness: 600,\n damping: 35,\n mass: 0.5\n }\n },\n style: {\n overflowY: \"auto\",\n minHeight: \"32px\",\n maxHeight: \"224px\"\n }\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 510,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"composer-toolbar\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenu, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuTrigger, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)(\"composer-dropdown-trigger\", highlightAgentDropdown ? \"agent-picker-prompt text-white\" : \"text-white\", !canSwitchAgents && \"opacity-60\"),\n disabled: !canSwitchAgents,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"truncate text-xs font-heading normal-case tracking-normal text-white\",\n children: dropdownLabel\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 549,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"h-3.5 w-3.5 text-white/70\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 552,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 540,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 539,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuContent, {\n align: \"start\",\n className: \"min-w-[12rem] rounded-2xl border border-white/15 bg-white/10 p-2 text-white shadow-[0_20px_40px_rgba(0,0,0,0.3)] backdrop-blur\",\n children: isAgentsLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuItem, {\n disabled: true,\n className: \"text-white/50\",\n children: \"Gathering correspondents…\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 560,\n columnNumber: 21\n }, this) : agents.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuItem, {\n disabled: true,\n className: \"text-white/50\",\n children: \"No agents configured\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 564,\n columnNumber: 21\n }, this) : agents.map((entry)=>{\n const isActive = dropdownSelectedId === entry.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuItem, {\n onClick: ()=>handleComposerAgentSelect(entry),\n className: \"flex w-full items-center justify-between rounded-xl px-3 py-2 text-xs transition \".concat(isActive ? \"bg-white/15 text-white\" : \"text-white/90 hover:bg-white/5 hover:text-white\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-heading text-sm\",\n children: entry.name\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 578,\n columnNumber: 27\n }, this),\n isActive && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[0.55rem] uppercase tracking-[0.3em]\",\n children: \"Active\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 579,\n columnNumber: 40\n }, this)\n ]\n }, entry.id, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 571,\n columnNumber: 25\n }, this);\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 555,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 538,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"composer-actions\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"button\",\n variant: \"ghost\",\n size: \"icon\",\n onClick: ()=>{\n var _fileInputRef_current;\n return (_fileInputRef_current = fileInputRef.current) === null || _fileInputRef_current === void 0 ? void 0 : _fileInputRef_current.click();\n },\n disabled: isLoading,\n className: \"composer-action-button\",\n title: \"Attach image\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 597,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 588,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"submit\",\n disabled: !input.trim() || isLoading,\n size: \"icon\",\n className: \"composer-send-button\",\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"h-4 w-4 animate-spin\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 605,\n columnNumber: 32\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 605,\n columnNumber: 79\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 599,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 587,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 537,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 492,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n ref: fileInputRef,\n type: \"file\",\n multiple: true,\n accept: \"image/*\",\n onChange: handleImageSelect,\n className: \"hidden\",\n disabled: isLoading\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 611,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 491,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 485,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 284,\n columnNumber: 5\n }, this);\n}\n_s(ChatInterface, \"jNuMOyH6mV8ht8JTxxWJkWg6Gko=\");\n_c = ChatInterface;\nvar _c;\n$RefreshReg$(_c, \"ChatInterface\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL2NoYXQtaW50ZXJmYWNlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSW1EO0FBQ0k7QUFDUjtBQUN5QztBQU1sRDtBQUNnQjtBQUV0QjtBQVN6QixTQUFTbUIsY0FBYyxLQUtUO1FBTFMsRUFDNUJDLEtBQUssRUFDTEMsTUFBTSxFQUNOQyxlQUFlLEVBQ2ZDLGVBQWUsRUFDSSxHQUxTOztJQU01QixNQUFNQyxlQUFlO0lBQ3JCLE1BQU0sQ0FBQ0MsVUFBVUMsWUFBWSxHQUFHMUIsK0NBQVFBLENBQVksRUFBRTtJQUN0RCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBQztJQUNuQyxNQUFNLENBQUM2QixXQUFXQyxhQUFhLEdBQUc5QiwrQ0FBUUEsQ0FBQztJQUMzQyxNQUFNLENBQUMrQixXQUFXQyxhQUFhLEdBQUdoQywrQ0FBUUEsQ0FBUztJQUNuRCxNQUFNLENBQUNpQyxnQkFBZ0JDLGtCQUFrQixHQUFHbEMsK0NBQVFBLENBQVcsRUFBRTtJQUNqRSxNQUFNLENBQUNtQyxpQkFBaUJDLG1CQUFtQixHQUFHcEMsK0NBQVFBLENBQWdCO0lBQ3RFLE1BQU0sQ0FBQ3FDLGdCQUFnQkMsa0JBQWtCLEdBQUd0QywrQ0FBUUEsQ0FBUztJQUM3RCxNQUFNdUMsdUJBQXVCdEMsNkNBQU1BLENBQWlCO0lBQ3BELE1BQU11QyxXQUFXdkMsNkNBQU1BLENBQXNCO0lBQzdDLE1BQU13QyxlQUFleEMsNkNBQU1BLENBQW1CO0lBQzlDLE1BQU0sQ0FBQ3lDLGlCQUFpQkMsbUJBQW1CLEdBQUczQywrQ0FBUUEsQ0FBZ0I7SUFFdEVFLGdEQUFTQTttQ0FBQztZQUNSLHdEQUF3RDtZQUN4RCxNQUFNMEMsYUFBYSxnQkFBeUIsT0FBVHhCLE1BQU15QixFQUFFO1lBQzNDLElBQUlDLG9CQUFvQkMsYUFBYUMsT0FBTyxDQUFDSjtZQUU3QyxJQUFJLENBQUNFLG1CQUFt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TUFBTWlGLElBQUksTUFBTS9FO29EQUMzQm1JLE1BQUs7b0RBQ0xILFdBQVU7OERBRVRoSSwwQkFBWSw4REFBQ3RCLGdJQUFPQTt3REFBQ3NKLFdBQVU7Ozs7OzZFQUE0Qiw4REFBQ3ZKLGdJQUFJQTt3REFBQ3VKLFdBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NDQU1wRiw4REFBQ2xJOzRCQUNDdUksS0FBS3pIOzRCQUNMMkMsTUFBSzs0QkFDTHNILFFBQVE7NEJBQ1JDLFFBQU87NEJBQ1BkLFVBQVVoSDs0QkFDVmdGLFdBQVU7NEJBQ1ZvQyxVQUFVcEs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTXRCO0dBdGxCZ0JWO0tBQUFBIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL3NyYy9jb21wb25lbnRzL2NoYXQtaW50ZXJmYWNlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIlxuXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIlxuXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgbW90aW9uLCBBbmltYXRlUHJlc2VuY2UgfSBmcm9tIFwiZnJhbWVyLW1vdGlvblwiXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2J1dHRvblwiXG5pbXBvcnQgeyBTZW5kLCBMb2FkZXIyLCBTcXVhcmVQZW4sIFBhcGVyY2xpcCwgQ29weSwgWCwgQ2hldnJvbkRvd24gfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcbmltcG9ydCB7XG4gIERyb3Bkb3duTWVudSxcbiAgRHJvcGRvd25NZW51Q29udGVudCxcbiAgRHJvcGRvd25NZW51SXRlbSxcbiAgRHJvcGRvd25NZW51VHJpZ2dlcixcbn0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9kcm9wZG93bi1tZW51XCJcbmltcG9ydCB7IE1hcmtkb3duUmVuZGVyZXIgfSBmcm9tIFwiLi9tYXJrZG93bi1yZW5kZXJlclwiXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIEFnZW50IH0gZnJvbSBcIkAvbGliL3R5cGVzXCJcbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCJcblxuaW50ZXJmYWNlIENoYXRJbnRlcmZhY2VQcm9wcyB7XG4gIGFnZW50OiBBZ2VudFxuICBhZ2VudHM6IEFnZW50W11cbiAgb25BZ2VudFNlbGVjdGVkOiAoYWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIGlzQWdlbnRzTG9hZGluZzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2hhdEludGVyZmFjZSh7XG4gIGFnZW50LFxuICBhZ2VudHMsXG4gIG9uQWdlbnRTZWxlY3RlZCxcbiAgaXNBZ2VudHNMb2FkaW5nLFxufTogQ2hhdEludGVyZmFjZVByb3BzKSB7XG4gIGNvbnN0IGhlcm9HcmVldGluZyA9IFwiaGVsbG8sIHVzZXJcIlxuICBjb25zdCBbbWVzc2FnZXMsIHNldE1lc3NhZ2VzXSA9IHVzZVN0YXRlPE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IFtpbnB1dCwgc2V0SW5wdXRdID0gdXNlU3RhdGUoXCJcIilcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2Vzc2lvbklkLCBzZXRTZXNzaW9uSWRdID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKVxuICBjb25zdCBbc2VsZWN0ZWRJbWFnZXMsIHNldFNlbGVjdGVkSW1hZ2VzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSlcbiAgY29uc3QgW2NvbXBvc2VyQWdlbnRJZCwgc2V0Q29tcG9zZXJBZ2VudElkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFt0ZXh0YXJlYUhlaWdodCwgc2V0VGV4dGFyZWFIZWlnaHRdID0gdXNlU3RhdGU8bnVtYmVyPigzMilcbiAgY29uc3QgbWVzc2FnZXNDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBbY29waWVkTWVzc2FnZUlkLCBzZXRDb3BpZWRNZXNzYWdlSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFVzZSBhZ2VudC1zcGVjaWZpYyBzZXNzaW9uIElEOiBjaGF0LXNlc3Npb24te2FnZW50SWR9XG4gICAgY29uc3Qgc2Vzc2lvbktleSA9IGBjaGF0LXNlc3Npb24tJHthZ2VudC5pZH1gXG4gICAgbGV0IGV4aXN0aW5nU2Vzc2lvbklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc2Vzc2lvbktleSlcblxuICAgIGlmICghZXhpc3RpbmdTZXNzaW9uSWQpIHtcbiAgICAgIC8vIEdlbmVyYXRlIG5ldyBzZXNzaW9uSUQgdXNpbmcgdGltZXN0YW1wIGFuZCByYW5kb20gc3RyaW5nXG4gICAgICBleGlzdGluZ1Nlc3Npb25JZCA9IGBzZXNzaW9uLSR7YWdlbnQuaWR9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpfWBcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHNlc3Npb25LZXksIGV4aXN0aW5nU2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHNldFNlc3Npb25JZChleGlzdGluZ1Nlc3Npb25JZClcblxuICAgIC8vIExvYWQgZXhpc3RpbmcgbWVzc2FnZXMgZm9yIHRoaXMgYWdlbnRcbiAgICBjb25zdCBtZXNzYWdlc0tleSA9IGBjaGF0LW1lc3NhZ2VzLSR7YWdlbnQuaWR9YFxuICAgIGNvbnN0IHNhdmVkTWVzc2FnZXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShtZXNzYWdlc0tleSlcbiAgICBpZiAoc2F2ZWRNZXNzYWdlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzYXZlZE1lc3NhZ2VzKVxuICAgICAgICAvLyBFbnN1cmUgdGltZXN0YW1wcyBhcmUgRGF0ZSBvYmplY3RzXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gcGFyc2VkLm1hcCgobXNnOiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubXNnLFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUobXNnLnRpbWVzdGFtcCksXG4gICAgICAgIH0pKVxuICAgICAgICBzZXRNZXNzYWdlcyhtZXNzYWdlcylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW2NoYXRdIEZhaWxlZCB0byBsb2FkIHNhdmVkIG1lc3NhZ2VzOlwiLCBlcnIpXG4gICAgICB9XG4gICAgfVxuICB9LCBbYWdlbnQuaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lc3NhZ2VzQ29udGFpbmVyUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNDb250YWluZXJSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICB9XG4gIH0sIFttZXNzYWdlcywgaXNMb2FkaW5nXSlcblxuICAvLyBVcGRhdGUgdGV4dGFyZWEgaGVpZ2h0IGJhc2VkIG9uIGNvbnRlbnRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGlucHV0UmVmLmN1cnJlbnRcbiAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCJcbiAgICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgubWluKGVsZW1lbnQuc2Nyb2xsSGVpZ2h0LCAyMjQpXG4gICAgICBzZXRUZXh0YXJlYUhlaWdodChuZXdIZWlnaHQpXG4gICAgfVxuICB9LCBbaW5wdXRdKVxuXG4gIC8vIFNhdmUgbWVzc2FnZXMgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIHRoZXkgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZXNLZXkgPSBgY2hhdC1tZXNzYWdlcy0ke2FnZW50LmlkfWBcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShtZXNzYWdlc0tleSwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpKVxuICB9LCBbbWVzc2FnZXMsIGFnZW50LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IFwiYXV0b1wiXG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IE1hdGgubWluKGlucHV0UmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0LCAxNjApICsgXCJweFwiXG4gICAgfVxuICB9LCBbaW5wdXRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA+IDAgJiYgY29tcG9zZXJBZ2VudElkICE9PSBhZ2VudC5pZCkge1xuICAgICAgc2V0Q29tcG9zZXJBZ2VudElkKGFnZW50LmlkKVxuICAgIH1cbiAgfSwgW21lc3NhZ2VzLmxlbmd0aCwgYWdlbnQuaWRdKVxuXG4gIC8vIEhhbmRsZSBpbWFnZSBmaWxlIHNlbGVjdGlvblxuICBjb25zdCBoYW5kbGVJbWFnZVNlbGVjdCA9IGFzeW5jIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS5jdXJyZW50VGFyZ2V0LmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG5cbiAgICBjb25zdCBuZXdJbWFnZXM6IHN0cmluZ1tdID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV1cbiAgICAgIC8vIE9ubHkgYWNjZXB0IGltYWdlIGZpbGVzXG4gICAgICBpZiAoIWZpbGUudHlwZS5zdGFydHNXaXRoKFwiaW1hZ2UvXCIpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltjaGF0XSBTa2lwcGluZyBub24taW1hZ2UgZmlsZTpcIiwgZmlsZS5uYW1lKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCBmaWxlVG9CYXNlNjQoZmlsZSlcbiAgICAgICAgbmV3SW1hZ2VzLnB1c2goYmFzZTY0KVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbY2hhdF0gRmFpbGVkIHRvIGNvbnZlcnQgaW1hZ2U6XCIsIGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTZWxlY3RlZEltYWdlcygocHJldikgPT4gWy4uLnByZXYsIC4uLm5ld0ltYWdlc10pXG4gICAgLy8gUmVzZXQgZmlsZSBpbnB1dFxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSBcIlwiXG4gICAgfVxuICB9XG5cbiAgLy8gQ29udmVydCBmaWxlIHRvIGJhc2U2NCBzdHJpbmdcbiAgY29uc3QgZmlsZVRvQmFzZTY0ID0gKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKVxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpXG4gICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdFxuICAgIH0pXG4gIH1cblxuICAvLyBSZW1vdmUgc2VsZWN0ZWQgaW1hZ2VcbiAgY29uc3QgcmVtb3ZlSW1hZ2UgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHNldFNlbGVjdGVkSW1hZ2VzKChwcmV2KSA9PiBwcmV2LmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpKVxuICB9XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSBhc3luYyAoZT86IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGlmIChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAoIWlucHV0LnRyaW0oKSB8fCBpc0xvYWRpbmcpIHJldHVyblxuXG4gICAgY29uc3QgdXNlck1lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICBpZDogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgcm9sZTogXCJ1c2VyXCIsXG4gICAgICBjb250ZW50OiBpbnB1dC50cmltKCksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICBpbWFnZXM6IHNlbGVjdGVkSW1hZ2VzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZEltYWdlcyA6IHVuZGVmaW5lZCxcbiAgICB9XG5cbiAgICBzZXRNZXNzYWdlcygocHJldikgPT4gWy4uLnByZXYsIHVzZXJNZXNzYWdlXSlcbiAgICBzZXRJbnB1dChcIlwiKVxuICAgIHNldFNlbGVjdGVkSW1hZ2VzKFtdKVxuICAgIHNldElzTG9hZGluZyh0cnVlKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIvYXBpL2NoYXRcIiwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBtZXNzYWdlOiB1c2VyTWVzc2FnZS5jb250ZW50LFxuICAgICAgICAgIHRpbWVzdGFtcDogdXNlck1lc3NhZ2UudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQuaWQsXG4gICAgICAgICAgaW1hZ2VzOiBzZWxlY3RlZEltYWdlcy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJbWFnZXMgOiB1bmRlZmluZWQsXG4gICAgICAgIH0pLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgZXJyb3I/OiBzdHJpbmdcbiAgICAgICAgaGludD86IHN0cmluZ1xuICAgICAgICByZXNwb25zZT86IHN0cmluZ1xuICAgICAgICBtZXNzYWdlPzogc3RyaW5nXG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlOiBNZXNzYWdlID0ge1xuICAgICAgICAgIGlkOiAoRGF0ZS5ub3coKSArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgICBjb250ZW50OiBkYXRhLmVycm9yIHx8IFwiRmFpbGVkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHdlYmhvb2suXCIsXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgICAgaGludDogZGF0YS5oaW50LFxuICAgICAgICB9XG4gICAgICAgIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgZXJyb3JNZXNzYWdlXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICAgICAgaWQ6IChEYXRlLm5vdygpICsgMSkudG9TdHJpbmcoKSxcbiAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgIGNvbnRlbnQ6IGRhdGEucmVzcG9uc2UgfHwgZGF0YS5tZXNzYWdlIHx8IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgfVxuICAgICAgICBzZXRNZXNzYWdlcygocHJldikgPT4gWy4uLnByZXYsIGFzc2lzdGFudE1lc3NhZ2VdKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW3YwXSBFcnJvciBzZW5kaW5nIG1lc3NhZ2U6XCIsIGVycm9yKVxuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICAgIGlkOiAoRGF0ZS5ub3coKSArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgIGNvbnRlbnQ6IFwiU29ycnksIEkgZW5jb3VudGVyZWQgYW4gZXJyb3IgcHJvY2Vzc2luZyB5b3VyIG1lc3NhZ2UuIFBsZWFzZSB0cnkgYWdhaW4uXCIsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgc2V0TWVzc2FnZXMoKHByZXYpID0+IFsuLi5wcmV2LCBlcnJvck1lc3NhZ2VdKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICBpbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RhcnROZXdDaGF0ID0gKCkgPT4ge1xuICAgIC8vIENsZWFyIGFsbCBtZXNzYWdlc1xuICAgIHNldE1lc3NhZ2VzKFtdKVxuICAgIC8vIEdlbmVyYXRlIG5ldyBzZXNzaW9uSUQgZm9yIHRoaXMgYWdlbnRcbiAgICBjb25zdCBuZXdTZXNzaW9uSWQgPSBgc2Vzc2lvbi0ke2FnZW50LmlkfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KX1gXG4gICAgc2V0U2Vzc2lvbklkKG5ld1Nlc3Npb25JZClcbiAgICBjb25zdCBzZXNzaW9uS2V5ID0gYGNoYXQtc2Vzc2lvbi0ke2FnZW50LmlkfWBcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzZXNzaW9uS2V5LCBuZXdTZXNzaW9uSWQpXG4gICAgLy8gQ2xlYXIgaW5wdXQgYW5kIGltYWdlc1xuICAgIHNldElucHV0KFwiXCIpXG4gICAgc2V0U2VsZWN0ZWRJbWFnZXMoW10pXG4gICAgc2V0Q29tcG9zZXJBZ2VudElkKG51bGwpXG4gICAgLy8gRm9jdXMgaW5wdXRcbiAgICBpbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpXG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgc2VuZE1lc3NhZ2UoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNvcHlNZXNzYWdlID0gYXN5bmMgKGlkOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb250ZW50KVxuICAgICAgc2V0Q29waWVkTWVzc2FnZUlkKGlkKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldENvcGllZE1lc3NhZ2VJZCgoY3VycmVudCkgPT4gKGN1cnJlbnQgPT09IGlkID8gbnVsbCA6IGN1cnJlbnQpKVxuICAgICAgfSwgMTIwMClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIltjaGF0XSBGYWlsZWQgdG8gY29weSBtZXNzYWdlXCIsIGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNvbXBvc2VyQWdlbnRTZWxlY3QgPSAoZW50cnk6IEFnZW50KSA9PiB7XG4gICAgc2V0Q29tcG9zZXJBZ2VudElkKGVudHJ5LmlkKVxuICAgIG9uQWdlbnRTZWxlY3RlZChlbnRyeSlcbiAgfVxuXG4gIGNvbnN0IGNhblN3aXRjaEFnZW50cyA9IGFnZW50cy5sZW5ndGggPiAwICYmICFpc0FnZW50c0xvYWRpbmdcbiAgY29uc3QgaGFzTWVzc2FnZXMgPSBtZXNzYWdlcy5sZW5ndGggPiAwXG4gIGNvbnN0IGRyb3Bkb3duU2VsZWN0ZWRJZCA9IGNvbXBvc2VyQWdlbnRJZCA/PyAoaGFzTWVzc2FnZXMgPyBhZ2VudC5pZCA6IG51bGwpXG4gIGNvbnN0IGRyb3Bkb3duQWdlbnRFbnRyeSA9IGRyb3Bkb3duU2VsZWN0ZWRJZFxuICAgID8gYWdlbnRzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5pZCA9PT0gZHJvcGRvd25TZWxlY3RlZElkKSA/PyBhZ2VudFxuICAgIDogbnVsbFxuICBjb25zdCBkcm9wZG93bkxhYmVsID0gZHJvcGRvd25BZ2VudEVudHJ5ID8gZHJvcGRvd25BZ2VudEVudHJ5Lm5hbWUgOiBcIlNlbGVjdCBhIGNvcnJlc3BvbmRlbnRcIlxuICBjb25zdCBoaWdobGlnaHRBZ2VudERyb3Bkb3duID0gIWRyb3Bkb3duU2VsZWN0ZWRJZCAmJiAhaGFzTWVzc2FnZXNcblxuICByZXR1cm4gKFxuICAgIDxtb3Rpb24uZGl2XG4gICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IDM1IH19XG4gICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuODUsIGVhc2U6IFwiZWFzZU91dFwiIH19XG4gICAgICBjbGFzc05hbWU9XCJjaGF0LXBhbmVsIHJlbGF0aXZlIGZsZXggaC1mdWxsIHctZnVsbCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1bMi41cmVtXSBiZy1ncmFkaWVudC10by1iIGZyb20td2hpdGUvMCB2aWEtd2hpdGUvMTUgdG8td2hpdGUvNDUgcHgtNSBweS02IHNoYWRvdy1bMF8xNXB4XzM1cHhfcmdiYSg0NSw0NSw0NSwwLjEpLDBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMjUpX2luc2V0LDBfMTVweF8yNXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4xMilfaW5zZXRdIGJhY2tkcm9wLWJsdXIteGwgZGFyazpiZy1ncmFkaWVudC10by1iIGRhcms6ZnJvbS10cmFuc3BhcmVudCBkYXJrOnZpYS13aGl0ZS81IGRhcms6dG8td2hpdGUvMjAgZGFyazpzaGFkb3ctWzBfMTJweF8yNXB4X3JnYmEoMCwwLDAsMC4zNSksMF8wXzBfMXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNilfaW5zZXQsMF8xMnB4XzIwcHhfcmdiYSgyNTUsMjU1LDI1NSwwLjA0KV9pbnNldF0gc206cHgtOCBzbTpweS0xMFwiXG4gICAgPlxuICAgICAge21lc3NhZ2VzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtOCB0b3AtOCB6LTEwXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17c3RhcnROZXdDaGF0fVxuICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImdyb3VwIGgtMTEgdy0xMSByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXdoaXRlLzI1IGJnLXdoaXRlLzE1IHRleHQtd2hpdGUgc2hhZG93LVswXzJweF82cHhfcmdiYSgwLDAsMCwwLjEyKV0gYmFja2Ryb3AtYmx1ciB0cmFuc2l0aW9uIGhvdmVyOmJnLXdoaXRlLzI1XCJcbiAgICAgICAgICAgIHRpdGxlPVwiU3RhcnQgYSBmcmVzaCBjb252ZXJzYXRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTcXVhcmVQZW4gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgPGRpdlxuICAgICAgICByZWY9e21lc3NhZ2VzQ29udGFpbmVyUmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgIFwibW9iaWxlLWZlZWQgcHgtMCBwdC02IHNtOnB4LTBcIixcbiAgICAgICAgICBoYXNNZXNzYWdlcyA/IFwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwYi0zMiBzbTpwYi0xMFwiIDogXCJwYi0xMFwiXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byB3LWZ1bGwgbWF4LXctM3hsIHNwYWNlLXktOCBweC0yIHNtOnNwYWNlLXktMTAgc206cHgtNFwiPlxuICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgIHtoYXNNZXNzYWdlcyA/IChcbiAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICBrZXk9XCJjb252ZXJzYXRpb25cIlxuICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogMzAgfX1cbiAgICAgICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0yMCB9fVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuNiwgZWFzZTogXCJlYXNlT3V0XCIgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzcGFjZS15LTEwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVXNlciA9IG1lc3NhZ2Uucm9sZSA9PT0gXCJ1c2VyXCJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXttZXNzYWdlLmlkfVxuICAgICAgICAgICAgICAgICAgICAgIGxheW91dFxuICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogMTUgfX1cbiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjM1LCBlYXNlOiBcImVhc2VPdXRcIiB9fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXCJtZXNzYWdlLWZyYW1lIGZsZXggZmxleC1jb2wgZ2FwLTNcIiwgaXNVc2VyID8gXCJpdGVtcy1lbmQgdGV4dC1yaWdodFwiIDogXCJcIil9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7aXNVc2VyID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWJ1YmJsZSB1c2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxNYXJrZG93blJlbmRlcmVyIGNvbnRlbnQ9e21lc3NhZ2UuY29udGVudH0gdG9uZT1cImJ1YmJsZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogbWVzc2FnZS5pc0Vycm9yID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC1kZXN0cnVjdGl2ZSBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIndoaXRlc3BhY2UtcHJlLXdyYXAgYnJlYWstd29yZHMgbGVhZGluZy1yZWxheGVkXCI+e21lc3NhZ2UuY29udGVudH08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB0ZXh0LWJhc2UgdGV4dC1jaGFyY29hbCBkYXJrOnRleHQtZm9yZWdyb3VuZCBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxNYXJrZG93blJlbmRlcmVyIGNvbnRlbnQ9e21lc3NhZ2UuY29udGVudH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0zIGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBwdC0zIG9wYWNpdHktNTAgdHJhbnNpdGlvbiBob3ZlcjpvcGFjaXR5LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ29weU1lc3NhZ2UobWVzc2FnZS5pZCwgbWVzc2FnZS5jb250ZW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGlubGluZS1mbGV4IGgtNyB3LTcgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci13aGl0ZS8yMCBiZy13aGl0ZS84IHRleHQtd2hpdGUvNzAgc2hhZG93LVswXzJweF81cHhfcmdiYSgwLDAsMCwwLjA3KV0gYmFja2Ryb3AtYmx1ciB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0xNTAgaG92ZXI6Ymctd2hpdGUvMTggJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkTWVzc2FnZUlkID09PSBtZXNzYWdlLmlkID8gXCJzY2FsZS05MCBiZy13aGl0ZS8yMCB0ZXh0LXdoaXRlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb3B5IHJlc3BvbnNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29weSBjbGFzc05hbWU9XCJoLTIuNSB3LTIuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICAgIHttZXNzYWdlLmhpbnQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYWNjZW50LzYwIGJnLWFjY2VudC80MCBweC0zIHB5LTIgdGV4dC14cyB0ZXh0LWNoYXJjb2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttZXNzYWdlLmhpbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1mcmFtZSBmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1cHBlcmNhc2UgdHJhY2tpbmctWzAuMjVlbV0gdGV4dC13aGl0ZS83MFwiPkNvcnJlc3BvbmRlbnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleCBoLTMgdy0yNCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1mdWxsIGJnLXdoaXRlLzEwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC15LTAgdy0xLzIgYW5pbWF0ZS1bc2hpbW1lcl8xLjRzX2luZmluaXRlXSBiZy13aGl0ZS80MFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICBrZXk9XCJlbXB0eS1zdGF0ZVwiXG4gICAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiA2MCB9fVxuICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTIwIH19XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC42NSwgZWFzZTogXCJlYXNlT3V0XCIgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IG1pbi1oLVs0NXZoXSBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTYgdGV4dC1jZW50ZXIgc206bWluLWgtWzQwdmhdXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIHNtOmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2JpbGUtaGVyby1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9iaWxlLWhlcm8taWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm1vYmlsZS1oZXJvLWxhYmVsXCI+Q29ycmVzcG9uZGVudCBzdHVkaW88L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibW9iaWxlLWhlcm8taGVhZGluZ1wiPldobyBzaG91bGQgd2UgYnJpbmcgaW4/PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gdGV4dC1jZW50ZXIgc206YmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJmb250LWhlYWRpbmcgdGV4dC1bN3JlbV0gbG93ZXJjYXNlIHRyYWNraW5nLXRpZ2h0IHRleHQtd2hpdGUvODUgZHJvcC1zaGFkb3ctWzBfMTJweF8zMHB4X3JnYmEoMCwwLDAsMC40KV1cIj5cbiAgICAgICAgICAgICAgICAgICAge2hlcm9HcmVldGluZy5zcGxpdChcIlwiKS5tYXAoKGNoYXIsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2NoYXJ9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogMTggfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkZWxheTogMC4xNSArIGluZGV4ICogMC4wNSwgZHVyYXRpb246IDAuMzUsIGVhc2U6IFwiZWFzZU91dFwiIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGFyID09PSBcIiBcIiA/IFwiXFx1MDBBMFwiIDogY2hhcn1cbiAgICAgICAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBtYXgtdy0zeGwgc3BhY2UteS00XCI+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtb2JpbGUtaGVyby1sYWJlbCBzbTpoaWRkZW5cIj5TZWxlY3QgYSBjb3JyZXNwb25kZW50IHRvIGJlZ2luPC9wPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiaGlkZGVuIHRleHQtc20gdXBwZXJjYXNlIHRyYWNraW5nLVswLjM1ZW1dIHRleHQtd2hpdGUvODAgc206YmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgY29ycmVzcG9uZGVudCB0byBiZWdpblxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAge2FnZW50cy5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9iaWxlLWFnZW50LXN0YWNrIHNtOmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2FnZW50cy5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gZHJvcGRvd25TZWxlY3RlZElkID09PSBlbnRyeS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YG1vYmlsZS0ke2VudHJ5LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDb21wb3NlckFnZW50U2VsZWN0KGVudHJ5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXCJtb2JpbGUtYWdlbnQtY2hpcFwiLCBpc0FjdGl2ZSA/IFwiaXMtYWN0aXZlXCIgOiB1bmRlZmluZWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntlbnRyeS5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBzbTpmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YWdlbnRzLm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBkcm9wZG93blNlbGVjdGVkSWQgPT09IGVudHJ5LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtlbnRyeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNvbXBvc2VyQWdlbnRTZWxlY3QoZW50cnkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyb3VuZGVkLWZ1bGwgYm9yZGVyIHB4LTQgcHktMiB0ZXh0LVswLjY1cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMzVlbV0gdHJhbnNpdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItd2hpdGUvMjUgYmctd2hpdGUvMjUgdGV4dC13aGl0ZSBzaGFkb3ctWzBfNXB4XzIwcHhfcmdiYSgwLDAsMCwwLjM1KV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItd2hpdGUvMTAgYmctd2hpdGUvNSB0ZXh0LXdoaXRlLzcwIGhvdmVyOmJvcmRlci13aGl0ZS8zMCBob3Zlcjp0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2VudHJ5Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC13aGl0ZS82MFwiPk5vIGFnZW50cyBhdmFpbGFibGUgeWV0LjwvcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgdy1mdWxsIG1heC13LTJ4bCBnYXAtNCBzbTpncmlkLWNvbHMtMlwiPlxuICAgICAgICAgICAgICAgICAge1tcbiAgICAgICAgICAgICAgICAgICAgXCJIZWxwIG1lIGJyYWluc3Rvcm0gaWRlYXMgZm9yIGEgbmV3IG1vYmlsZSBhcHBcIixcbiAgICAgICAgICAgICAgICAgICAgXCJHZW5lcmF0ZSBjcmVhdGl2ZSB3cml0aW5nIHByb21wdHMgZm9yIGEgZmFudGFzeSBub3ZlbFwiLFxuICAgICAgICAgICAgICAgICAgICBcIlN1Z2dlc3QgaW5ub3ZhdGl2ZSBtYXJrZXRpbmcgc3RyYXRlZ2llcyBmb3IgYSBzdGFydHVwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiQ3JlYXRlIGEgbGlzdCBvZiB1bmlxdWUgcHJvZHVjdCBuYW1lcyBmb3IgYSB0ZWNoIGNvbXBhbnlcIixcbiAgICAgICAgICAgICAgICAgIF0ubWFwKChwcm9tcHQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e3Byb21wdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJbnB1dChwcm9tcHQpfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNjcm9sbC1yZXZlYWwgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ib3JkZXIvMzAgYmctd2hpdGUvODAgcC00IHRleHQtbGVmdCB0ZXh0LXNtIHRleHQtY2hhcmNvYWwgc2hhZG93LXNtIHRyYW5zaXRpb24gaG92ZXI6Ym9yZGVyLXJpbmcvNjAgaG92ZXI6Ymctd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGFuaW1hdGlvbkRlbGF5OiBgJHtpbmRleCAqIDUwfW1zYCB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3Byb21wdH1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgbGF5b3V0XG4gICAgICAgIGNsYXNzTmFtZT1cImNvbXBvc2VyLWFmZml4IG10LWF1dG8gcHQtNiB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi01MDAgc206cGItNFwiXG4gICAgICAgIGFuaW1hdGU9e3sgeTogaGFzTWVzc2FnZXMgPyAwIDogLTQwIH19XG4gICAgICAgIHRyYW5zaXRpb249e3sgdHlwZTogXCJzcHJpbmdcIiwgc3RpZmZuZXNzOiAxNjAsIGRhbXBpbmc6IDI0IH19XG4gICAgICA+XG4gICAgICAgIDxmb3JtIG9uU3VibWl0PXtzZW5kTWVzc2FnZX0gY2xhc3NOYW1lPVwiY29tcG9zZXItZm9ybSB3LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbXBvc2VyLXBhbmVsXCI+XG4gICAgICAgICAgICB7c2VsZWN0ZWRJbWFnZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29tcG9zZXItaW1hZ2VzXCI+XG4gICAgICAgICAgICAgICAge3NlbGVjdGVkSW1hZ2VzLm1hcCgoaW1hZ2UsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGtleT17aW5kZXh9IGNsYXNzTmFtZT1cImNvbXBvc2VyLWltYWdlLXRodW1iXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXtpbWFnZX0gYWx0PXtgU2VsZWN0ZWQgJHtpbmRleH1gfSAvPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcmVtb3ZlSW1hZ2UoaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImNvbXBvc2VyLWltYWdlLXJlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8WCBjbGFzc05hbWU9XCJoLTMgdy0zXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICA8bW90aW9uLnRleHRhcmVhXG4gICAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICAgIHZhbHVlPXtpbnB1dH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRJbnB1dChlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXcml0ZSBhIG5vdGUsIHNoYXJlIGEgaHVuY2gsIG9yIHBhc3RlIGEgYnJpZWbigKZcIlxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICByb3dzPXsxfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJjb21wb3Nlci10ZXh0YXJlYSBoaWRlLXNjcm9sbGJhciB3LWZ1bGwgcmVzaXplLW5vbmUgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgdGV4dC1sZyB0ZXh0LWZvcmVncm91bmQgcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzgwIGZvY3VzOm91dGxpbmUtbm9uZVwiXG4gICAgICAgICAgICAgIGFuaW1hdGU9e3tcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRleHRhcmVhSGVpZ2h0LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInNwcmluZ1wiLFxuICAgICAgICAgICAgICAgICAgc3RpZmZuZXNzOiA2MDAsXG4gICAgICAgICAgICAgICAgICBkYW1waW5nOiAzNSxcbiAgICAgICAgICAgICAgICAgIG1hc3M6IDAuNSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIG92ZXJmbG93WTogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjMycHhcIixcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IFwiMjI0cHhcIixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29tcG9zZXItdG9vbGJhclwiPlxuICAgICAgICAgICAgICA8RHJvcGRvd25NZW51PlxuICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnVUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgIFwiY29tcG9zZXItZHJvcGRvd24tdHJpZ2dlclwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFnZW50RHJvcGRvd24gPyBcImFnZW50LXBpY2tlci1wcm9tcHQgdGV4dC13aGl0ZVwiIDogXCJ0ZXh0LXdoaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgIWNhblN3aXRjaEFnZW50cyAmJiBcIm9wYWNpdHktNjBcIlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhblN3aXRjaEFnZW50c31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidHJ1bmNhdGUgdGV4dC14cyBmb250LWhlYWRpbmcgbm9ybWFsLWNhc2UgdHJhY2tpbmctbm9ybWFsIHRleHQtd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7ZHJvcGRvd25MYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC0zLjUgdy0zLjUgdGV4dC13aGl0ZS83MFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudVRyaWdnZXI+XG4gICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudUNvbnRlbnRcbiAgICAgICAgICAgICAgICAgIGFsaWduPVwic3RhcnRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWluLXctWzEycmVtXSByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXdoaXRlLzE1IGJnLXdoaXRlLzEwIHAtMiB0ZXh0LXdoaXRlIHNoYWRvdy1bMF8yMHB4XzQwcHhfcmdiYSgwLDAsMCwwLjMpXSBiYWNrZHJvcC1ibHVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7aXNBZ2VudHNMb2FkaW5nID8gKFxuICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51SXRlbSBkaXNhYmxlZCBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlLzUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgR2F0aGVyaW5nIGNvcnJlc3BvbmRlbnRz4oCmXG4gICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICkgOiBhZ2VudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51SXRlbSBkaXNhYmxlZCBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlLzUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgTm8gYWdlbnRzIGNvbmZpZ3VyZWRcbiAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRzLm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGRyb3Bkb3duU2VsZWN0ZWRJZCA9PT0gZW50cnkuaWRcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtlbnRyeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ29tcG9zZXJBZ2VudFNlbGVjdChlbnRyeSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcm91bmRlZC14bCBweC0zIHB5LTIgdGV4dC14cyB0cmFuc2l0aW9uICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmUgPyBcImJnLXdoaXRlLzE1IHRleHQtd2hpdGVcIiA6IFwidGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS81IGhvdmVyOnRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1oZWFkaW5nIHRleHQtc21cIj57ZW50cnkubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtpc0FjdGl2ZSAmJiA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVswLjU1cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuM2VtXVwiPkFjdGl2ZTwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29tcG9zZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImNvbXBvc2VyLWFjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBdHRhY2ggaW1hZ2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxQYXBlcmNsaXAgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWlucHV0LnRyaW0oKSB8fCBpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJjb21wb3Nlci1zZW5kLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2lzTG9hZGluZyA/IDxMb2FkZXIyIGNsYXNzTmFtZT1cImgtNCB3LTQgYW5pbWF0ZS1zcGluXCIgLz4gOiA8U2VuZCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz59XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUltYWdlU2VsZWN0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaGlkZGVuXCJcbiAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9tb3Rpb24uZGl2PlxuICAgIDwvbW90aW9uLmRpdj5cbiAgKVxufVxuIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlUmVmIiwidXNlRWZmZWN0IiwibW90aW9uIiwiQW5pbWF0ZVByZXNlbmNlIiwiQnV0dG9uIiwiU2VuZCIsIkxvYWRlcjIiLCJTcXVhcmVQZW4iLCJQYXBlcmNsaXAiLCJDb3B5IiwiWCIsIkNoZXZyb25Eb3duIiwiRHJvcGRvd25NZW51IiwiRHJvcGRvd25NZW51Q29udGVudCIsIkRyb3Bkb3duTWVudUl0ZW0iLCJEcm9wZG93bk1lbnVUcmlnZ2VyIiwiTWFya2Rvd25SZW5kZXJlciIsImNuIiwiQ2hhdEludGVyZmFjZSIsImFnZW50IiwiYWdlbnRzIiwib25BZ2VudFNlbGVjdGVkIiwiaXNBZ2VudHNMb2FkaW5nIiwiaGVyb0dyZWV0aW5nIiwibWVzc2FnZXMiLCJzZXRNZXNzYWdlcyIsImlucHV0Iiwic2V0SW5wdXQiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJzZXNzaW9uSWQiLCJzZXRTZXNzaW9uSWQiLCJzZWxlY3RlZEltYWdlcyIsInNldFNlbGVjdGVkSW1hZ2VzIiwiY29tcG9zZXJBZ2VudElkIiwic2V0Q29tcG9zZXJBZ2VudElkIiwidGV4dGFyZWFIZWlnaHQiLCJzZXRUZXh0YXJlYUhlaWdodCIsIm1lc3NhZ2VzQ29udGFpbmVyUmVmIiwiaW5wdXRSZWYiLCJmaWxlSW5wdXRSZWYiLCJjb3BpZWRNZXNzYWdlSWQiLCJzZXRDb3BpZWRNZXNzYWdlSWQiLCJzZXNzaW9uS2V5IiwiaWQiLCJleGlzdGluZ1Nlc3Npb25JZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJEYXRlIiwiTWF0aCIsIm5vdyIsInJhbmRvbSIsInRvU3RyaW5nIiwic3Vic3RyaW5nIiwic2V0SXRlbSIsIm1lc3NhZ2VzS2V5Iiwic2F2ZWRNZXNzYWdlcyIsInBhcnNlZCIsIkpTT04iLCJwYXJzZSIsIm1hcCIsIm1zZyIsInRpbWVzdGFtcCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJlbGVtZW50Iiwic3R5bGUiLCJoZWlnaHQiLCJuZXdIZWlnaHQiLCJtaW4iLCJzdHJpbmdpZnkiLCJsZW5ndGgiLCJoYW5kbGVJbWFnZVNlbGVjdCIsImUiLCJmaWxlcyIsImN1cnJlbnRUYXJnZXQiLCJuZXdJbWFnZXMiLCJpIiwiZmlsZSIsInR5cGUiLCJzdGFydHNXaXRoIiwid2FybiIsIm5hbWUiLCJiYXNlNjQiLCJmaWxlVG9CYXNlNjQiLCJwdXNoIiwicHJldiIsInZhbHVlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwicmVhZEFzRGF0YVVSTCIsIm9ubG9hZCIsInJlc3VsdCIsIm9uZXJyb3IiLCJyZW1vdmVJbWFnZSIsImluZGV4IiwiZmlsdGVyIiwiXyIsInNlbmRNZXNzYWdlIiwicHJldmVudERlZmF1bHQiLCJ0cmltIiwidXNlck1lc3NhZ2UiLCJyb2xlIiwiY29udGVudCIsImltYWdlcyIsInVuZGVmaW5lZCIsInJlc3BvbnNlIiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIm1lc3NhZ2UiLCJ0b0lTT1N0cmluZyIsImFnZW50SWQiLCJkYXRhIiwianNvbiIsIm9rIiwiZXJyb3JNZXNzYWdlIiwiaXNFcnJvciIsImhpbnQiLCJhc3Npc3RhbnRNZXNzYWdlIiwiZm9jdXMiLCJzdGFydE5ld0NoYXQiLCJuZXdTZXNzaW9uSWQiLCJoYW5kbGVLZXlEb3duIiwia2V5Iiwic2hpZnRLZXkiLCJoYW5kbGVDb3B5TWVzc2FnZSIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsInNldFRpbWVvdXQiLCJoYW5kbGVDb21wb3NlckFnZW50U2VsZWN0IiwiZW50cnkiLCJjYW5Td2l0Y2hBZ2VudHMiLCJoYXNNZXNzYWdlcyIsImRyb3Bkb3duU2VsZWN0ZWRJZCIsImRyb3Bkb3duQWdlbnRFbnRyeSIsImZpbmQiLCJkcm9wZG93bkxhYmVsIiwiaGlnaGxpZ2h0QWdlbnREcm9wZG93biIsImRpdiIsImluaXRpYWwiLCJvcGFjaXR5IiwieSIsImFuaW1hdGUiLCJ0cmFuc2l0aW9uIiwiZHVyYXRpb24iLCJlYXNlIiwiY2xhc3NOYW1lIiwib25DbGljayIsInZhcmlhbnQiLCJzaXplIiwidGl0bGUiLCJyZWYiLCJtb2RlIiwiZXhpdCIsImlzVXNlciIsImxheW91dCIsInRvbmUiLCJwIiwiYnV0dG9uIiwiYXJpYS1sYWJlbCIsInNwYW4iLCJhcmlhLWhpZGRlbiIsImgxIiwic3BsaXQiLCJjaGFyIiwiZGVsYXkiLCJpc0FjdGl2ZSIsInByb21wdCIsImFuaW1hdGlvbkRlbGF5Iiwic3RpZmZuZXNzIiwiZGFtcGluZyIsImZvcm0iLCJvblN1Ym1pdCIsImltYWdlIiwiaW1nIiwic3JjIiwiYWx0IiwidGV4dGFyZWEiLCJvbkNoYW5nZSIsInRhcmdldCIsIm9uS2V5RG93biIsInBsYWNlaG9sZGVyIiwiZGlzYWJsZWQiLCJyb3dzIiwibWFzcyIsIm92ZXJmbG93WSIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsImFzQ2hpbGQiLCJhbGlnbiIsImNsaWNrIiwibXVsdGlwbGUiLCJhY2NlcHQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/chat-interface.tsx\n"));
|
|
|
|
/***/ })
|
|
|
|
}); |