22 lines
84 KiB
JavaScript
22 lines
84 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/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/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/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/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 _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_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/square-pen.js\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/loader-circle.js\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/send.js\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/paperclip.js\");\n/* harmony import */ var _markdown_renderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./markdown-renderer */ \"(app-pages-browser)/./src/components/markdown-renderer.tsx\");\n/* __next_internal_client_entry_do_not_use__ ChatInterface auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nfunction ChatInterface(param) {\n let { agent } = param;\n _s();\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 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 (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 // 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 // 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 (_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 return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"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/40 px-4 py-8 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/15 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-full border border-white/25 bg-white/15 text-white shadow-[0_5px_12px_rgba(0,0,0,0.2)] 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_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"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: 232,\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: 225,\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: 224,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: messagesContainerRef,\n className: \"flex-1 overflow-y-auto px-1 pt-4 pb-10 sm:px-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-3xl space-y-10\",\n children: messages.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex min-h-[60vh] flex-col items-center justify-center gap-10 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\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: \"hello,\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 242,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 241,\n columnNumber: 15\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: 254,\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: 247,\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: 240,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\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)(\"div\", {\n className: \"message-frame flex flex-col gap-3 \".concat(isUser ? \"items-end text-right\" : \"\"),\n children: [\n isUser && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap items-center gap-2 text-xs uppercase tracking-[0.2em] text-muted-foreground justify-end\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Collector\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 277,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[0.65rem] normal-case tracking-normal\",\n children: message.timestamp.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\"\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 278,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 276,\n columnNumber: 23\n }, this),\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_3__.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: 286,\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: 285,\n columnNumber: 23\n }, this) : message.isError ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-medium text-destructive\",\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: 290,\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: 289,\n columnNumber: 23\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-charcoal dark:text-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>navigator.clipboard.writeText(message.content),\n className: \"ml-auto inline-flex items-center gap-1 rounded-full border border-white/20 bg-white/10 px-3 py-1 text-[0.55rem] uppercase tracking-[0.35em] text-white/70 hover:bg-white/20\",\n children: \"copy\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 294,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_markdown_renderer__WEBPACK_IMPORTED_MODULE_3__.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: 301,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 293,\n columnNumber: 23\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: 306,\n columnNumber: 23\n }, this)\n ]\n }, message.id, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 271,\n columnNumber: 19\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: 317,\n columnNumber: 21\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: 319,\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: 318,\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: 316,\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: 315,\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: 267,\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: 238,\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: 237,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative mt-auto pt-6 pb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: sendMessage,\n className: \"relative flex justify-center\",\n children: [\n selectedImages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 flex flex-wrap gap-3 px-3 pt-2\",\n children: selectedImages.map((image, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: image,\n alt: \"Selected \".concat(index),\n className: \"h-16 w-16 rounded-lg border border-border/40 object-cover shadow-md\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 336,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>removeImage(index),\n className: \"absolute -right-2 -top-2 flex h-5 w-5 items-center justify-center rounded-full text-white shadow-md hover:opacity-80\",\n style: {\n backgroundColor: \"var(--charcoal-ink)\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"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: 347,\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: 341,\n columnNumber: 19\n }, this)\n ]\n }, index, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 335,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 333,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"manuscript-panel w-[90%] max-w-3xl p-5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"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: \"min-h-[32px] max-h-32 w-full resize-none border-0 bg-transparent text-lg text-foreground placeholder:text-muted-foreground/80 focus:outline-none\",\n style: {\n overflow: \"hidden\",\n height: \"auto\"\n },\n onInput: (e)=>{\n const target = e.target;\n target.style.height = \"auto\";\n target.style.height = Math.min(target.scrollHeight, 160) + \"px\";\n }\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 356,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap items-center justify-end gap-3 text-xs uppercase tracking-[0.25em] text-muted-foreground\",\n children: [\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: \"group h-12 w-12 flex-shrink-0 rounded-2xl border border-white/20 bg-white/30 text-white shadow-[0_10px_25px_rgba(0,0,0,0.2)] backdrop-blur transition hover:bg-white/40 disabled:opacity-50\",\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"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: 384,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_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: 386,\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: 377,\n columnNumber: 17\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: 389,\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: \"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: \"h-11 w-11 rounded-2xl border border-white/20 bg-white/10 text-white/80 transition hover:bg-white/20 hover:text-white\",\n title: \"Attach image\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"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: 407,\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: 398,\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: 376,\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: 355,\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: 354,\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: 330,\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: 329,\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: 222,\n columnNumber: 5\n }, this);\n}\n_s(ChatInterface, \"fmAT6pXX0uqZjtSTUpB5qg6rKhQ=\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL2NoYXQtaW50ZXJmYWNlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBSW1EO0FBQ0o7QUFFMEM7QUFDbkM7QUFPL0MsU0FBU1UsY0FBYyxLQUE2QjtRQUE3QixFQUFFQyxLQUFLLEVBQXNCLEdBQTdCOztJQUM1QixNQUFNLENBQUNDLFVBQVVDLFlBQVksR0FBR2IsK0NBQVFBLENBQVksRUFBRTtJQUN0RCxNQUFNLENBQUNjLE9BQU9DLFNBQVMsR0FBR2YsK0NBQVFBLENBQUM7SUFDbkMsTUFBTSxDQUFDZ0IsV0FBV0MsYUFBYSxHQUFHakIsK0NBQVFBLENBQUM7SUFDM0MsTUFBTSxDQUFDa0IsV0FBV0MsYUFBYSxHQUFHbkIsK0NBQVFBLENBQVM7SUFDbkQsTUFBTSxDQUFDb0IsZ0JBQWdCQyxrQkFBa0IsR0FBR3JCLCtDQUFRQSxDQUFXLEVBQUU7SUFDakUsTUFBTXNCLHVCQUF1QnJCLDZDQUFNQSxDQUFpQjtJQUNwRCxNQUFNc0IsV0FBV3RCLDZDQUFNQSxDQUFzQjtJQUM3QyxNQUFNdUIsZUFBZXZCLDZDQUFNQSxDQUFtQjtJQUU5Q0MsZ0RBQVNBO21DQUFDO1lBQ1Isd0RBQXdEO1lBQ3hELE1BQU11QixhQUFhLGdCQUF5QixPQUFUZCxNQUFNZSxFQUFFO1lBQzNDLElBQUlDLG9CQUFvQkMsYUFBYUMsT0FBTyxDQUFDSjtZQUU3QyxJQUFJLENBQUNFLG1CQUFtQjtnQkFDdEIsMkRBQTJEO2dCQUMzREEsb0JBQW9CLFdBQXVCRyxPQUFabkIsTUFBTWUsRUFBRSxFQUFDLEtBQWlCSyxPQUFkRCxLQUFLRSxHQUFHLElBQUcsS0FBK0MsT0FBNUNELEtBQUtFLE1BQU0sR0FBR0MsUUFBUSxDQUFDLElBQUlDLFNBQVMsQ0FBQyxHQUFHO2dCQUNqR1AsYUFBYVEsT0FBTyxDQUFDWCxZQUFZRTtZQUNuQztZQUVBUixhQUFhUTtZQUViLHdDQUF3QztZQUN4QyxNQUFNVSxjQUFjLGlCQUEw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Q0FBQzBGLE9BQU85RixZQUFZLEVBQUUsT0FBTzt3Q0FDN0Q7Ozs7OztrREFHRiw4REFBQ2dFO3dDQUFJQyxXQUFVOzswREFDYiw4REFBQ2hILHlEQUFNQTtnREFDTDRELE1BQUs7Z0RBQ0xvRixVQUFVLENBQUNySSxNQUFNeUUsSUFBSSxNQUFNdkU7Z0RBQzNCc0csTUFBSztnREFDTEgsV0FBVTswREFFVG5HLDBCQUNDLDhEQUFDWCw4R0FBT0E7b0RBQUM4RyxXQUFVOzs7Ozt5RUFFbkIsOERBQUMvRyw4R0FBSUE7b0RBQUMrRyxXQUFVOzs7Ozs7Ozs7OzswREFHcEIsOERBQUNyRztnREFDQzBHLEtBQUtoRztnREFDTHVDLE1BQUs7Z0RBQ0x3RixRQUFRO2dEQUNSQyxRQUFPO2dEQUNQVCxVQUFVeEY7Z0RBQ1Y0RCxXQUFVO2dEQUNWZ0MsVUFBVW5JOzs7Ozs7MERBRVosOERBQUNiLHlEQUFNQTtnREFDTDRELE1BQUs7Z0RBQ0xzRCxTQUFRO2dEQUNSQyxNQUFLO2dEQUNMRixTQUFTO3dEQUFNNUY7NERBQUFBLHdCQUFBQSxhQUFhd0IsT0FBTyxjQUFwQnhCLDRDQUFBQSxzQkFBc0JpSSxLQUFLOztnREFDMUNOLFVBQVVuSTtnREFDVm1HLFdBQVU7Z0RBQ1ZJLE9BQU07MERBRU4sNEVBQUNoSCw4R0FBU0E7b0RBQUM0RyxXQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTdkM7R0FoWmdCekc7S0FBQUEiLCJzb3VyY2VzIjpbIi9ob21lL25pY2hvbGFpL0RvY3VtZW50cy9kZXYvbXVsdGktYWdlbnRfY2hhdF9pbnRlcmZhY2Uvc3JjL2NvbXBvbmVudHMvY2hhdC1pbnRlcmZhY2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiXG5cbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiXG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2J1dHRvblwiXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvaW5wdXRcIlxuaW1wb3J0IHsgU2VuZCwgQm90LCBMb2FkZXIyLCBTcXVhcmVQZW4sIFNwYXJrbGVzLCBQYXBlcmNsaXAsIE1pYywgWCB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHsgTWFya2Rvd25SZW5kZXJlciB9IGZyb20gXCIuL21hcmtkb3duLXJlbmRlcmVyXCJcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgQWdlbnQgfSBmcm9tIFwiQC9saWIvdHlwZXNcIlxuXG5pbnRlcmZhY2UgQ2hhdEludGVyZmFjZVByb3BzIHtcbiAgYWdlbnQ6IEFnZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGF0SW50ZXJmYWNlKHsgYWdlbnQgfTogQ2hhdEludGVyZmFjZVByb3BzKSB7XG4gIGNvbnN0IFttZXNzYWdlcywgc2V0TWVzc2FnZXNdID0gdXNlU3RhdGU8TWVzc2FnZVtdPihbXSlcbiAgY29uc3QgW2lucHV0LCBzZXRJbnB1dF0gPSB1c2VTdGF0ZShcIlwiKVxuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZXNzaW9uSWQsIHNldFNlc3Npb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpXG4gIGNvbnN0IFtzZWxlY3RlZEltYWdlcywgc2V0U2VsZWN0ZWRJbWFnZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKVxuICBjb25zdCBtZXNzYWdlc0NvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbClcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBVc2UgYWdlbnQtc3BlY2lmaWMgc2Vzc2lvbiBJRDogY2hhdC1zZXNzaW9uLXthZ2VudElkfVxuICAgIGNvbnN0IHNlc3Npb25LZXkgPSBgY2hhdC1zZXNzaW9uLSR7YWdlbnQuaWR9YFxuICAgIGxldCBleGlzdGluZ1Nlc3Npb25JZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHNlc3Npb25LZXkpXG5cbiAgICBpZiAoIWV4aXN0aW5nU2Vzc2lvbklkKSB7XG4gICAgICAvLyBHZW5lcmF0ZSBuZXcgc2Vzc2lvbklEIHVzaW5nIHRpbWVzdGFtcCBhbmQgcmFuZG9tIHN0cmluZ1xuICAgICAgZXhpc3RpbmdTZXNzaW9uSWQgPSBgc2Vzc2lvbi0ke2FnZW50LmlkfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KX1gXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzZXNzaW9uS2V5LCBleGlzdGluZ1Nlc3Npb25JZClcbiAgICB9XG5cbiAgICBzZXRTZXNzaW9uSWQoZXhpc3RpbmdTZXNzaW9uSWQpXG5cbiAgICAvLyBMb2FkIGV4aXN0aW5nIG1lc3NhZ2VzIGZvciB0aGlzIGFnZW50XG4gICAgY29uc3QgbWVzc2FnZXNLZXkgPSBgY2hhdC1tZXNzYWdlcy0ke2FnZW50LmlkfWBcbiAgICBjb25zdCBzYXZlZE1lc3NhZ2VzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0obWVzc2FnZXNLZXkpXG4gICAgaWYgKHNhdmVkTWVzc2FnZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc2F2ZWRNZXNzYWdlcylcbiAgICAgICAgLy8gRW5zdXJlIHRpbWVzdGFtcHMgYXJlIERhdGUgb2JqZWN0c1xuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IHBhcnNlZC5tYXAoKG1zZzogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLm1zZyxcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKG1zZy50aW1lc3RhbXApLFxuICAgICAgICB9KSlcbiAgICAgICAgc2V0TWVzc2FnZXMobWVzc2FnZXMpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltjaGF0XSBGYWlsZWQgdG8gbG9hZCBzYXZlZCBtZXNzYWdlczpcIiwgZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2FnZW50LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtZXNzYWdlc0NvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBtZXNzYWdlc0NvbnRhaW5lclJlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzQ29udGFpbmVyUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIGlzTG9hZGluZ10pXG5cbiAgLy8gU2F2ZSBtZXNzYWdlcyB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgdGhleSBjaGFuZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlc0tleSA9IGBjaGF0LW1lc3NhZ2VzLSR7YWdlbnQuaWR9YFxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG1lc3NhZ2VzS2V5LCBKU09OLnN0cmluZ2lmeShtZXNzYWdlcykpXG4gIH0sIFttZXNzYWdlcywgYWdlbnQuaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCJcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gTWF0aC5taW4oaW5wdXRSZWYuY3VycmVudC5zY3JvbGxIZWlnaHQsIDE2MCkgKyBcInB4XCJcbiAgICB9XG4gIH0sIFtpbnB1dF0pXG5cbiAgLy8gSGFuZGxlIGltYWdlIGZpbGUgc2VsZWN0aW9uXG4gIGNvbnN0IGhhbmRsZUltYWdlU2VsZWN0ID0gYXN5bmMgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBlLmN1cnJlbnRUYXJnZXQuZmlsZXNcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cblxuICAgIGNvbnN0IG5ld0ltYWdlczogc3RyaW5nW10gPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXVxuICAgICAgLy8gT25seSBhY2NlcHQgaW1hZ2UgZmlsZXNcbiAgICAgIGlmICghZmlsZS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2NoYXRdIFNraXBwaW5nIG5vbi1pbWFnZSBmaWxlOlwiLCBmaWxlLm5hbWUpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IGZpbGVUb0Jhc2U2NChmaWxlKVxuICAgICAgICBuZXdJbWFnZXMucHVzaChiYXNlNjQpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltjaGF0XSBGYWlsZWQgdG8gY29udmVydCBpbWFnZTpcIiwgZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIHNldFNlbGVjdGVkSW1hZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgLi4ubmV3SW1hZ2VzXSlcbiAgICAvLyBSZXNldCBmaWxlIGlucHV0XG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9IFwiXCJcbiAgICB9XG4gIH1cblxuICAvLyBDb252ZXJ0IGZpbGUgdG8gYmFzZTY0IHN0cmluZ1xuICBjb25zdCBmaWxlVG9CYXNlNjQgPSAoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZylcbiAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0XG4gICAgfSlcbiAgfVxuXG4gIC8vIFJlbW92ZSBzZWxlY3RlZCBpbWFnZVxuICBjb25zdCByZW1vdmVJbWFnZSA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRJbWFnZXMoKHByZXYpID0+IHByZXYuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCkpXG4gIH1cblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IGFzeW5jIChlPzogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgaWYgKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIH1cblxuICAgIGlmICghaW5wdXQudHJpbSgpIHx8IGlzTG9hZGluZykgcmV0dXJuXG5cbiAgICBjb25zdCB1c2VyTWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgIGlkOiBEYXRlLm5vdygpLnRvU3RyaW5nKCksXG4gICAgICByb2xlOiBcInVzZXJcIixcbiAgICAgIGNvbnRlbnQ6IGlucHV0LnRyaW0oKSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIGltYWdlczogc2VsZWN0ZWRJbWFnZXMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSW1hZ2VzIDogdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgdXNlck1lc3NhZ2VdKVxuICAgIHNldElucHV0KFwiXCIpXG4gICAgc2V0U2VsZWN0ZWRJbWFnZXMoW10pXG4gICAgc2V0SXNMb2FkaW5nKHRydWUpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcIi9hcGkvY2hhdFwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG1lc3NhZ2U6IHVzZXJNZXNzYWdlLmNvbnRlbnQsXG4gICAgICAgICAgdGltZXN0YW1wOiB1c2VyTWVzc2FnZS50aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudC5pZCxcbiAgICAgICAgICBpbWFnZXM6IHNlbGVjdGVkSW1hZ2VzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZEltYWdlcyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSksXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMge1xuICAgICAgICBlcnJvcj86IHN0cmluZ1xuICAgICAgICBoaW50Pzogc3RyaW5nXG4gICAgICAgIHJlc3BvbnNlPzogc3RyaW5nXG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmdcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICAgICAgaWQ6IChEYXRlLm5vdygpICsgMSkudG9TdHJpbmcoKSxcbiAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgIGNvbnRlbnQ6IGRhdGEuZXJyb3IgfHwgXCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgd2ViaG9vay5cIixcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgICBoaW50OiBkYXRhLmhpbnQsXG4gICAgICAgIH1cbiAgICAgICAgc2V0TWVzc2FnZXMoKHByZXYpID0+IFsuLi5wcmV2LCBlcnJvck1lc3NhZ2VdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXNzaXN0YW50TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICBpZDogKERhdGUubm93KCkgKyAxKS50b1N0cmluZygpLFxuICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgY29udGVudDogZGF0YS5yZXNwb25zZSB8fCBkYXRhLm1lc3NhZ2UgfHwgSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICB9XG4gICAgICAgIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgYXNzaXN0YW50TWVzc2FnZV0pXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbdjBdIEVycm9yIHNlbmRpbmcgbWVzc2FnZTpcIiwgZXJyb3IpXG5cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgaWQ6IChEYXRlLm5vdygpICsgMSkudG9TdHJpbmcoKSxcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgY29udGVudDogXCJTb3JyeSwgSSBlbmNvdW50ZXJlZCBhbiBlcnJvciBwcm9jZXNzaW5nIHlvdXIgbWVzc2FnZS4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBzZXRNZXNzYWdlcygocHJldikgPT4gWy4uLnByZXYsIGVycm9yTWVzc2FnZV0pXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGFydE5ld0NoYXQgPSAoKSA9PiB7XG4gICAgLy8gQ2xlYXIgYWxsIG1lc3NhZ2VzXG4gICAgc2V0TWVzc2FnZXMoW10pXG4gICAgLy8gR2VuZXJhdGUgbmV3IHNlc3Npb25JRCBmb3IgdGhpcyBhZ2VudFxuICAgIGNvbnN0IG5ld1Nlc3Npb25JZCA9IGBzZXNzaW9uLSR7YWdlbnQuaWR9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpfWBcbiAgICBzZXRTZXNzaW9uSWQobmV3U2Vzc2lvbklkKVxuICAgIGNvbnN0IHNlc3Npb25LZXkgPSBgY2hhdC1zZXNzaW9uLSR7YWdlbnQuaWR9YFxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHNlc3Npb25LZXksIG5ld1Nlc3Npb25JZClcbiAgICAvLyBDbGVhciBpbnB1dCBhbmQgaW1hZ2VzXG4gICAgc2V0SW5wdXQoXCJcIilcbiAgICBzZXRTZWxlY3RlZEltYWdlcyhbXSlcbiAgICAvLyBGb2N1cyBpbnB1dFxuICAgIGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBzZW5kTWVzc2FnZSgpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXggaC1mdWxsIHctZnVsbCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1bMi41cmVtXSBiZy1ncmFkaWVudC10by1iIGZyb20td2hpdGUvMCB2aWEtd2hpdGUvMTUgdG8td2hpdGUvNDAgcHgtNCBweS04IHNoYWRvdy1bMF8xNXB4XzM1cHhfcmdiYSg0NSw0NSw0NSwwLjEpLDBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMjUpX2luc2V0LDBfMTVweF8yNXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4xMilfaW5zZXRdIGJhY2tkcm9wLWJsdXIteGwgZGFyazpiZy1ncmFkaWVudC10by1iIGRhcms6ZnJvbS10cmFuc3BhcmVudCBkYXJrOnZpYS13aGl0ZS81IGRhcms6dG8td2hpdGUvMTUgZGFyazpzaGFkb3ctWzBfMTJweF8yNXB4X3JnYmEoMCwwLDAsMC4zNSksMF8wXzBfMXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNilfaW5zZXQsMF8xMnB4XzIwcHhfcmdiYSgyNTUsMjU1LDI1NSwwLjA0KV9pbnNldF0gc206cHgtOCBzbTpweS0xMFwiPlxuICAgICAge21lc3NhZ2VzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtOCB0b3AtOCB6LTEwXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17c3RhcnROZXdDaGF0fVxuICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImdyb3VwIGgtMTEgdy0xMSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci13aGl0ZS8yNSBiZy13aGl0ZS8xNSB0ZXh0LXdoaXRlIHNoYWRvdy1bMF81cHhfMTJweF9yZ2JhKDAsMCwwLDAuMildIGJhY2tkcm9wLWJsdXIgdHJhbnNpdGlvbiBob3ZlcjpiZy13aGl0ZS8yNVwiXG4gICAgICAgICAgICB0aXRsZT1cIlN0YXJ0IGEgZnJlc2ggY29udmVyc2F0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3F1YXJlUGVuIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIDxkaXYgcmVmPXttZXNzYWdlc0NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBweC0xIHB0LTQgcGItMTAgc206cHgtMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctM3hsIHNwYWNlLXktMTBcIj5cbiAgICAgICAgICB7bWVzc2FnZXMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1pbi1oLVs2MHZoXSBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEwIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwiZm9udC1oZWFkaW5nIHRleHQtWzdyZW1dIGxvd2VyY2FzZSB0cmFja2luZy10aWdodCB0ZXh0LXdoaXRlLzg1IGRyb3Atc2hhZG93LVswXzEycHhfMzBweF9yZ2JhKDAsMCwwLDAuNCldXCI+XG4gICAgICAgICAgICAgICAgICBoZWxsbyxcbiAgICAgICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgdy1mdWxsIG1heC13LTJ4bCBnYXAtNCBzbTpncmlkLWNvbHMtMlwiPlxuICAgICAgICAgICAgICAgIHtbXG4gICAgICAgICAgICAgICAgICBcIkhlbHAgbWUgYnJhaW5zdG9ybSBpZGVhcyBmb3IgYSBuZXcgbW9iaWxlIGFwcFwiLFxuICAgICAgICAgICAgICAgICAgXCJHZW5lcmF0ZSBjcmVhdGl2ZSB3cml0aW5nIHByb21wdHMgZm9yIGEgZmFudGFzeSBub3ZlbFwiLFxuICAgICAgICAgICAgICAgICAgXCJTdWdnZXN0IGlubm92YXRpdmUgbWFya2V0aW5nIHN0cmF0ZWdpZXMgZm9yIGEgc3RhcnR1cFwiLFxuICAgICAgICAgICAgICAgICAgXCJDcmVhdGUgYSBsaXN0IG9mIHVuaXF1ZSBwcm9kdWN0IG5hbWVzIGZvciBhIHRlY2ggY29tcGFueVwiLFxuICAgICAgICAgICAgICAgIF0ubWFwKChwcm9tcHQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtleT17cHJvbXB0fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJbnB1dChwcm9tcHQpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzY3JvbGwtcmV2ZWFsIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItYm9yZGVyLzMwIGJnLXdoaXRlLzgwIHAtNCB0ZXh0LWxlZnQgdGV4dC1zbSB0ZXh0LWNoYXJjb2FsIHNoYWRvdy1zbSB0cmFuc2l0aW9uIGhvdmVyOmJvcmRlci1yaW5nLzYwIGhvdmVyOmJnLXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgYW5pbWF0aW9uRGVsYXk6IGAke2luZGV4ICogNTB9bXNgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9tcHR9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMTBcIj5cbiAgICAgICAgICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzVXNlciA9IG1lc3NhZ2Uucm9sZSA9PT0gXCJ1c2VyXCJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e21lc3NhZ2UuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YG1lc3NhZ2UtZnJhbWUgZmxleCBmbGV4LWNvbCBnYXAtMyAke2lzVXNlciA/IFwiaXRlbXMtZW5kIHRleHQtcmlnaHRcIiA6IFwiXCJ9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2lzVXNlciAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMmVtXSB0ZXh0LW11dGVkLWZvcmVncm91bmQganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkNvbGxlY3Rvcjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtWzAuNjVyZW1dIG5vcm1hbC1jYXNlIHRyYWNraW5nLW5vcm1hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7bWVzc2FnZS50aW1lc3RhbXAudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7IGhvdXI6IFwiMi1kaWdpdFwiLCBtaW51dGU6IFwiMi1kaWdpdFwiIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgICAgIHtpc1VzZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWJ1YmJsZSB1c2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFya2Rvd25SZW5kZXJlciBjb250ZW50PXttZXNzYWdlLmNvbnRlbnR9IHRvbmU9XCJidWJibGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApIDogbWVzc2FnZS5pc0Vycm9yID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWRlc3RydWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIGxlYWRpbmctcmVsYXhlZFwiPnttZXNzYWdlLmNvbnRlbnR9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWNoYXJjb2FsIGRhcms6dGV4dC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChtZXNzYWdlLmNvbnRlbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtbC1hdXRvIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci13aGl0ZS8yMCBiZy13aGl0ZS8xMCBweC0zIHB5LTEgdGV4dC1bMC41NXJlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjM1ZW1dIHRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYXJrZG93blJlbmRlcmVyIGNvbnRlbnQ9e21lc3NhZ2UuY29udGVudH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICB7bWVzc2FnZS5oaW50ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1hY2NlbnQvNjAgYmctYWNjZW50LzQwIHB4LTMgcHktMiB0ZXh0LXhzIHRleHQtY2hhcmNvYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHttZXNzYWdlLmhpbnR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgIHtpc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1mcmFtZSBmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVwcGVyY2FzZSB0cmFja2luZy1bMC4yNWVtXSB0ZXh0LXdoaXRlLzcwXCI+Q29ycmVzcG9uZGVudDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleCBoLTMgdy0yNCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1mdWxsIGJnLXdoaXRlLzEwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQteS0wIHctMS8yIGFuaW1hdGUtW3NoaW1tZXJfMS40c19pbmZpbml0ZV0gYmctd2hpdGUvNDBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBtdC1hdXRvIHB0LTYgcGItNFwiPlxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17c2VuZE1lc3NhZ2V9IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICB7LyogSW1hZ2UgcHJldmlldyBzZWN0aW9uICovfVxuICAgICAgICAgIHtzZWxlY3RlZEltYWdlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMyBmbGV4IGZsZXgtd3JhcCBnYXAtMyBweC0zIHB0LTJcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkSW1hZ2VzLm1hcCgoaW1hZ2UsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICBzcmM9e2ltYWdlfVxuICAgICAgICAgICAgICAgICAgICBhbHQ9e2BTZWxlY3RlZCAke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtMTYgdy0xNiByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYm9yZGVyLzQwIG9iamVjdC1jb3ZlciBzaGFkb3ctbWRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJlbW92ZUltYWdlKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgLXJpZ2h0LTIgLXRvcC0yIGZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQtd2hpdGUgc2hhZG93LW1kIGhvdmVyOm9wYWNpdHktODBcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tY2hhcmNvYWwtaW5rKVwiIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxYIGNsYXNzTmFtZT1cImgtMyB3LTNcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWFudXNjcmlwdC1wYW5lbCB3LVs5MCVdIG1heC13LTN4bCBwLTVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtNFwiPlxuICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldElucHV0KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXcml0ZSBhIG5vdGUsIHNoYXJlIGEgaHVuY2gsIG9yIHBhc3RlIGEgYnJpZWbigKZcIlxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgcm93cz17MX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtaW4taC1bMzJweF0gbWF4LWgtMzIgdy1mdWxsIHJlc2l6ZS1ub25lIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHRleHQtbGcgdGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZC84MCBmb2N1czpvdXRsaW5lLW5vbmVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbklucHV0PXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudFxuICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IFwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gTWF0aC5taW4odGFyZ2V0LnNjcm9sbEhlaWdodCwgMTYwKSArIFwicHhcIlxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTMgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMjVlbV0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWlucHV0LnRyaW0oKSB8fCBpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJncm91cCBoLTEyIHctMTIgZmxleC1zaHJpbmstMCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXdoaXRlLzIwIGJnLXdoaXRlLzMwIHRleHQtd2hpdGUgc2hhZG93LVswXzEwcHhfMjVweF9yZ2JhKDAsMCwwLDAuMildIGJhY2tkcm9wLWJsdXIgdHJhbnNpdGlvbiBob3ZlcjpiZy13aGl0ZS80MCBkaXNhYmxlZDpvcGFjaXR5LTUwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgICAgICAgICAgICA8TG9hZGVyMiBjbGFzc05hbWU9XCJoLTQgdy00IGFuaW1hdGUtc3BpblwiIC8+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8U2VuZCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbWFnZVNlbGVjdH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKCl9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0xMSB3LTExIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItd2hpdGUvMjAgYmctd2hpdGUvMTAgdGV4dC13aGl0ZS84MCB0cmFuc2l0aW9uIGhvdmVyOmJnLXdoaXRlLzIwIGhvdmVyOnRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBdHRhY2ggaW1hZ2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxQYXBlcmNsaXAgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJCdXR0b24iLCJTZW5kIiwiTG9hZGVyMiIsIlNxdWFyZVBlbiIsIlBhcGVyY2xpcCIsIlgiLCJNYXJrZG93blJlbmRlcmVyIiwiQ2hhdEludGVyZmFjZSIsImFnZW50IiwibWVzc2FnZXMiLCJzZXRNZXNzYWdlcyIsImlucHV0Iiwic2V0SW5wdXQiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJzZXNzaW9uSWQiLCJzZXRTZXNzaW9uSWQiLCJzZWxlY3RlZEltYWdlcyIsInNldFNlbGVjdGVkSW1hZ2VzIiwibWVzc2FnZXNDb250YWluZXJSZWYiLCJpbnB1dFJlZiIsImZpbGVJbnB1dFJlZiIsInNlc3Npb25LZXkiLCJpZCIsImV4aXN0aW5nU2Vzc2lvbklkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkRhdGUiLCJNYXRoIiwibm93IiwicmFuZG9tIiwidG9TdHJpbmciLCJzdWJzdHJpbmciLCJzZXRJdGVtIiwibWVzc2FnZXNLZXkiLCJzYXZlZE1lc3NhZ2VzIiwicGFyc2VkIiwiSlNPTiIsInBhcnNlIiwibWFwIiwibXNnIiwidGltZXN0YW1wIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwiY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsInN0cmluZ2lmeSIsInN0eWxlIiwiaGVpZ2h0IiwibWluIiwiaGFuZGxlSW1hZ2VTZWxlY3QiLCJlIiwiZmlsZXMiLCJjdXJyZW50VGFyZ2V0IiwibmV3SW1hZ2VzIiwiaSIsImxlbmd0aCIsImZpbGUiLCJ0eXBlIiwic3RhcnRzV2l0aCIsIndhcm4iLCJuYW1lIiwiYmFzZTY0IiwiZmlsZVRvQmFzZTY0IiwicHVzaCIsInByZXYiLCJ2YWx1ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlYWRBc0RhdGFVUkwiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwicmVtb3ZlSW1hZ2UiLCJpbmRleCIsImZpbHRlciIsIl8iLCJzZW5kTWVzc2FnZSIsInByZXZlbnREZWZhdWx0IiwidHJpbSIsInVzZXJNZXNzYWdlIiwicm9sZSIsImNvbnRlbnQiLCJpbWFnZXMiLCJ1bmRlZmluZWQiLCJyZXNwb25zZSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJtZXNzYWdlIiwidG9JU09TdHJpbmciLCJhZ2VudElkIiwiZGF0YSIsImpzb24iLCJvayIsImVycm9yTWVzc2FnZSIsImlzRXJyb3IiLCJoaW50IiwiYXNzaXN0YW50TWVzc2FnZSIsImZvY3VzIiwic3RhcnROZXdDaGF0IiwibmV3U2Vzc2lvbklkIiwiaGFuZGxlS2V5RG93biIsImtleSIsInNoaWZ0S2V5IiwiZGl2IiwiY2xhc3NOYW1lIiwib25DbGljayIsInZhcmlhbnQiLCJzaXplIiwidGl0bGUiLCJyZWYiLCJoMSIsInByb21wdCIsImJ1dHRvbiIsImFuaW1hdGlvbkRlbGF5IiwiaXNVc2VyIiwic3BhbiIsInRvTG9jYWxlVGltZVN0cmluZyIsImhvdXIiLCJtaW51dGUiLCJ0b25lIiwicCIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsImZvcm0iLCJvblN1Ym1pdCIsImltYWdlIiwiaW1nIiwic3JjIiwiYWx0IiwiYmFja2dyb3VuZENvbG9yIiwidGV4dGFyZWEiLCJvbkNoYW5nZSIsInRhcmdldCIsIm9uS2V5RG93biIsInBsYWNlaG9sZGVyIiwiZGlzYWJsZWQiLCJyb3dzIiwib3ZlcmZsb3ciLCJvbklucHV0IiwibXVsdGlwbGUiLCJhY2NlcHQiLCJjbGljayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/chat-interface.tsx\n"));
|
|
|
|
/***/ })
|
|
|
|
}); |