1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/App.tsx");import __vite__cjsImport0_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=9e8fcb68"; const Fragment = __vite__cjsImport0_react_jsxDevRuntime["Fragment"]; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"]; 2import * as RefreshRuntime from "/@react-refresh"; 3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope; 4let prevRefreshReg; 5let prevRefreshSig; 6if (import.meta.hot && !inWebWorker) { 7 if (!window.$RefreshReg$) { 8 throw new Error( 9 "@vitejs/plugin-react can't detect preamble. Something is wrong." 10 ); 11 } 12 prevRefreshReg = window.$RefreshReg$; 13 prevRefreshSig = window.$RefreshSig$; 14 window.$RefreshReg$ = RefreshRuntime.getRefreshReg("/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx"); 15 window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform; 16} 17var _s = $RefreshSig$(); 18import __vite__cjsImport3_react from "/node_modules/.vite/deps/react.js?v=9e8fcb68"; const useState = __vite__cjsImport3_react["useState"]; 19import { api } from "/src/lib/api.ts"; 20import { NodeEditor } from "/src/components/NodeEditor.tsx"; 21import { TreeVisualizer } from "/src/components/TreeVisualizer.tsx"; 22import { Login } from "/src/components/Login.tsx"; 23import { Sidebar } from "/src/components/Sidebar.tsx"; 24import { BetaWhitelist } from "/src/components/BetaWhitelist.tsx"; 25import { HoldfreeLogs } from "/src/components/HoldfreeLogs.tsx"; 26import { CompanyDirectory } from "/src/components/CompanyDirectory.tsx"; 27import { ActivityLogs } from "/src/components/ActivityLogs.tsx"; 28import { Input, Button, Card, Badge } from "/src/components/ui/index.tsx"; 29import { Modal } from "/src/components/ui/Modal.tsx"; 30import { Icons } from "/src/components/Icons.tsx"; 31function App() { 32 _s(); 33 const [token, setToken] = useState(localStorage.getItem("ivr_admin_token")); 34 const [phoneNumber, setPhoneNumber] = useState(""); 35 const [loading, setLoading] = useState(false); 36 const [menu, setMenu] = useState(null); 37 const [view, setView] = useState("menu"); 38 const [editPromptPath, setEditPromptPath] = useState(null); 39 const [editPromptValue, setEditPromptValue] = useState(""); 40 const [addOptionPath, setAddOptionPath] = useState(null); 41 const [newOptionKey, setNewOptionKey] = useState(""); 42 const [newOptionText, setNewOptionText] = useState(""); 43 const push = (msg) => { 44 console.log("Toast:", msg); 45 }; 46 const handleLogin = (newToken) => { 47 localStorage.setItem("ivr_admin_token", newToken); 48 setToken(newToken); 49 }; 50 const handleLogout = () => { 51 localStorage.removeItem("ivr_admin_token"); 52 setToken(null); 53 setMenu(null); 54 }; 55 const handleLoad = async () => { 56 if (!phoneNumber) return; 57 setLoading(true); 58 try { 59 const data = await api.getMenuByPhone(phoneNumber); 60 setMenu(data); 61 push("Menu loaded"); 62 } catch (e) { 63 console.error(e); 64 if (e.message !== "Unauthorized") { 65 setMenu(null); 66 alert("Menu not found. Click Create to start a new one."); 67 } 68 } finally { 69 setLoading(false); 70 } 71 }; 72 const handleCreate = async () => { 73 if (!phoneNumber) return; 74 setLoading(true); 75 try {
76 const data = await api.createMenu(phoneNumber, "Welcome! Please make a selection."); 77 setMenu(data); 78 push("Menu created"); 79 } catch (e) { 80 console.error(e); 81 let msg = "Failed to create menu."; 82 if (e instanceof Error) { 83 msg = e.message; 84 try { 85 const json = JSON.parse(msg); 86 if (json.detail && json.detail.includes("already exists")) { 87 msg = "This phone number already has a menu. Please click 'Load' instead."; 88 } else if (json.detail) { 89 msg = json.detail; 90 } 91 } catch { 92 } 93 } 94 alert(msg); 95 } finally { 96 setLoading(false); 97 } 98 }; 99 const openEditPrompt = (path, currentPrompt) => { 100 setEditPromptPath(path); 101 setEditPromptValue(currentPrompt); 102 }; 103 const submitEditPrompt = async () => { 104 if (!menu || !editPromptPath) return; 105 try { 106 const updated = await api.updatePrompt(menu.id, editPromptPath, editPromptValue); 107 setMenu(updated); 108 setEditPromptPath(null); 109 push("Prompt updated"); 110 } catch (e) { 111 alert("Failed to update prompt"); 112 } 113 }; 114 const openAddOption = (path) => { 115 setAddOptionPath(path); 116 setNewOptionKey(""); 117 setNewOptionText(""); 118 }; 119 const submitAddOption = async () => { 120 if (!menu || !addOptionPath || !newOptionKey || !newOptionText) return; 121 try { 122 const updated = await api.upsertOption(menu.id, addOptionPath, newOptionKey, newOptionText); 123 setMenu(updated); 124 setAddOptionPath(null); 125 push("Option added"); 126 } catch (e) { 127 alert("Failed to add option"); 128 } 129 }; 130 const handleDeleteOption = async (path, key) => { 131 if (!menu) return; 132 try { 133 const updated = await api.deleteOption(menu.id, path, key); 134 setMenu(updated); 135 push("Option deleted"); 136 } catch (e) { 137 alert("Failed to delete option"); 138 } 139 }; 140 const canOperate = phoneNumber.length > 3; 141 if (!token) { 142 return /* @__PURE__ */ jsxDEV(Login, { onLogin: handleLogin }, void 0, false, { 143 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 144 lineNumber: 162, 145 columnNumber: 12 146 }, this); 147 } 148 return /* @__PURE__ */ jsxDEV("div", { className: "flex min-h-screen bg-zinc-50 dark:bg-zinc-950", children: [ 149 /* @__PURE__ */ jsxDEV(Sidebar, { onLogout: handleLogout, active: view, onNavigate: setView }, void 0, false, { 150 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 151 lineNumber: 168, 152 columnNumber: 7 153 }, this), 154 /* @__PURE__ */ jsxDEV("main", { className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsxDEV("div", { className: "mx-auto max-w-6xl p-8 space-y-8", children: view === "whitelist" ? /* @__PURE__ */ jsxDEV(BetaWhitelist, {}, void 0, false, { 155 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 156 lineNumber: 174, 157 columnNumber: 11 158 }, this) : view === "companyDirectory" ? /* @__PURE__ */ jsxDEV(CompanyDirectory, {}, void 0, false, { 159 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 160 lineNumber: 176, 161 columnNumber: 11 162 }, this) : view === "logs" ? /* @__PURE__ */ jsxDEV(HoldfreeLogs, {}, void 0, false, { 163 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 164 lineNumber: 178, 165 columnNumber: 11 166 }, this) : view === "activityLogs" ? /* @__PURE__ */ jsxDEV(ActivityLogs, {}, void 0, false, { 167 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 168 lineNumber: 180, 169 columnNumber: 11 170 }, this) : /* @__PURE__ */ jsxDEV(Fragment, { children: [
171 /* @__PURE__ */ jsxDEV("div", { className: "flex flex-col gap-1 border-b border-zinc-200 pb-5 dark:border-zinc-800", children: [ 172 /* @__PURE__ */ jsxDEV("h1", { className: "text-2xl font-bold tracking-tight text-zinc-900 dark:text-zinc-50", children: "IVR Menu Editor" }, void 0, false, { 173 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 174 lineNumber: 185, 175 columnNumber: 13 176 }, this), 177 /* @__PURE__ */ jsxDEV("p", { className: "text-sm text-zinc-500 dark:text-zinc-400", children: "Configure phone trees and prompts for your AI agents." }, void 0, false, { 178 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 179 lineNumber: 186, 180 columnNumber: 13 181 }, this) 182 ] }, void 0, true, { 183 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 184 lineNumber: 184, 185 columnNumber: 11 186 }, this), 187 /* @__PURE__ */ jsxDEV("div", { className: "grid gap-8 lg:grid-cols-12", children: [
188 /* @__PURE__ */ jsxDEV("div", { className: "lg:col-span-4 space-y-6", children: [ 189 /* @__PURE__ */ jsxDEV(Card, { className: "overflow-hidden", children: [ 190 /* @__PURE__ */ jsxDEV("div", { className: "bg-zinc-50/50 p-4 border-b border-zinc-100 dark:bg-zinc-900/50 dark:border-zinc-800", children: /* @__PURE__ */ jsxDEV("h3", { className: "font-semibold text-sm", children: "Target Selection" }, void 0, false, { 191 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 192 lineNumber: 194, 193 columnNumber: 19 194 }, this) }, void 0, false, { 195 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 196 lineNumber: 193, 197 columnNumber: 17 198 }, this), 199 /* @__PURE__ */ jsxDEV("div", { className: "p-4 space-y-4", children: [ 200 /* @__PURE__ */ jsxDEV("div", { className: "space-y-2", children: [ 201 /* @__PURE__ */ jsxDEV("label", { className: "text-xs font-medium text-zinc-500 uppercase tracking-wider", children: "Phone Number" }, void 0, false, { 202 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 203 lineNumber: 198, 204 columnNumber: 21 205 }, this),
206 /* @__PURE__ */ jsxDEV("div", { className: "relative", children: [ 207 /* @__PURE__ */ jsxDEV("div", { className: "absolute left-3 top-2.5 text-zinc-400", children: /* @__PURE__ */ jsxDEV(Icons.Phone, { className: "h-4 w-4" }, void 0, false, { 208 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 209 lineNumber: 201, 210 columnNumber: 25 211 }, this) }, void 0, false, { 212 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 213 lineNumber: 200, 214 columnNumber: 23 215 }, this), 216 /* @__PURE__ */ jsxDEV( 217 Input, 218 { 219 className: "pl-9", 220 placeholder: "+1234567890", 221 value: phoneNumber, 222 onChange: (e) => setPhoneNumber(e.target.value) 223 }, 224 void 0, 225 false, 226 { 227 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 228 lineNumber: 203, 229 columnNumber: 23 230 }, 231 this 232 ) 233 ] }, void 0, true, { 234 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 235 lineNumber: 199, 236 columnNumber: 21 237 }, this) 238 ] }, void 0, true, { 239 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 240 lineNumber: 197, 241 columnNumber: 19 242 }, this),
243 /* @__PURE__ */ jsxDEV("div", { className: "grid grid-cols-2 gap-2", children: [ 244 /* @__PURE__ */ jsxDEV( 245 Button, 246 { 247 variant: "outline", 248 onClick: handleLoad, 249 disabled: !canOperate || loading, 250 className: "w-full", 251 children: [ 252 /* @__PURE__ */ jsxDEV(Icons.Search, { className: "mr-2 h-4 w-4" }, void 0, false, { 253 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 254 lineNumber: 219, 255 columnNumber: 23 256 }, this), 257 " ", 258 loading ? "..." : "Load" 259 ] 260 }, 261 void 0, 262 true, 263 { 264 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 265 lineNumber: 213, 266 columnNumber: 21 267 }, 268 this 269 ),
270 /* @__PURE__ */ jsxDEV( 271 Button, 272 { 273 onClick: handleCreate, 274 disabled: !canOperate || loading, 275 className: "w-full", 276 children: [ 277 /* @__PURE__ */ jsxDEV(Icons.Plus, { className: "mr-2 h-4 w-4" }, void 0, false, { 278 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 279 lineNumber: 226, 280 columnNumber: 23 281 }, this), 282 " Create" 283 ] 284 }, 285 void 0, 286 true, 287 { 288 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 289 lineNumber: 221, 290 columnNumber: 21 291 }, 292 this 293 ) 294 ] }, void 0, true, { 295 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 296 lineNumber: 212, 297 columnNumber: 19 298 }, this) 299 ] }, void 0, true, { 300 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 301 lineNumber: 196, 302 columnNumber: 17 303 }, this) 304 ] }, void 0, true, { 305 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 306 lineNumber: 192, 307 columnNumber: 15 308 }, this),
309 /* @__PURE__ */ jsxDEV("div", { className: "rounded-lg border border-blue-100 bg-blue-50/50 p-4 text-sm text-blue-900 dark:border-blue-900/30 dark:bg-blue-900/10 dark:text-blue-200", children: /* @__PURE__ */ jsxDEV("div", { className: "flex gap-3", children: [ 310 /* @__PURE__ */ jsxDEV(Icons.Alert, { className: "h-5 w-5 shrink-0" }, void 0, false, { 311 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 312 lineNumber: 234, 313 columnNumber: 19 314 }, this), 315 /* @__PURE__ */ jsxDEV("div", { className: "space-y-1", children: [ 316 /* @__PURE__ */ jsxDEV("p", { className: "font-semibold", children: "Quick Tip" }, void 0, false, { 317 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 318 lineNumber: 236, 319 columnNumber: 21 320 }, this), 321 /* @__PURE__ */ jsxDEV("p", { className: "text-xs opacity-90", children: 'Start by defining the Root Prompt. Adding options (e.g. Key "1") automatically creates branches.' }, void 0, false, { 322 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 323 lineNumber: 237, 324 columnNumber: 21 325 }, this) 326 ] }, void 0, true, { 327 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 328 lineNumber: 235, 329 columnNumber: 19 330 }, this) 331 ] }, void 0, true, { 332 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 333 lineNumber: 233, 334 columnNumber: 17 335 }, this) }, void 0, false, { 336 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 337 lineNumber: 232, 338 columnNumber: 15 339 }, this) 340 ] }, void 0, true, { 341 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 342 lineNumber: 191, 343 columnNumber: 13 344 }, this),
345 /* @__PURE__ */ jsxDEV("div", { className: "lg:col-span-8", children: !menu ? /* @__PURE__ */ jsxDEV("div", { className: "flex h-64 flex-col items-center justify-center rounded-xl border-2 border-dashed border-zinc-200 bg-zinc-50/50 text-zinc-400 dark:border-zinc-800 dark:bg-zinc-900/50", children: [ 346 /* @__PURE__ */ jsxDEV(Icons.Tree, { className: "h-12 w-12 mb-4 opacity-50" }, void 0, false, { 347 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 348 lineNumber: 247, 349 columnNumber: 19 350 }, this), 351 /* @__PURE__ */ jsxDEV("p", { className: "font-medium", children: "No menu selected" }, void 0, false, { 352 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 353 lineNumber: 248, 354 columnNumber: 19 355 }, this), 356 /* @__PURE__ */ jsxDEV("p", { className: "text-xs", children: "Enter a phone number to load or create a tree." }, void 0, false, { 357 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 358 lineNumber: 249, 359 columnNumber: 19 360 }, this) 361 ] }, void 0, true, { 362 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 363 lineNumber: 246, 364 columnNumber: 17 365 }, this) : /* @__PURE__ */ jsxDEV("div", { className: "space-y-6", children: [
366 /* @__PURE__ */ jsxDEV("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxDEV("div", { className: "space-y-1", children: [ 367 /* @__PURE__ */ jsxDEV("h2", { className: "text-lg font-semibold", children: "Tree Structure" }, void 0, false, { 368 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 369 lineNumber: 255, 370 columnNumber: 23 371 }, this), 372 /* @__PURE__ */ jsxDEV("div", { className: "flex gap-2", children: [ 373 /* @__PURE__ */ jsxDEV(Badge, { children: [ 374 "ID: ", 375 menu.id 376 ] }, void 0, true, { 377 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 378 lineNumber: 257, 379 columnNumber: 25 380 }, this), 381 /* @__PURE__ */ jsxDEV(Badge, { className: "bg-green-100 text-green-700 border-green-200 dark:bg-green-900/30 dark:text-green-400 dark:border-green-900", children: "Active" }, void 0, false, { 382 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 383 lineNumber: 258, 384 columnNumber: 25 385 }, this) 386 ] }, void 0, true, { 387 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 388 lineNumber: 256, 389 columnNumber: 23 390 }, this) 391 ] }, void 0, true, { 392 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 393 lineNumber: 254, 394 columnNumber: 21 395 }, this) }, void 0, false, { 396 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 397 lineNumber: 253, 398 columnNumber: 19 399 }, this),
400 /* @__PURE__ */ jsxDEV( 401 TreeVisualizer, 402 { 403 root: menu.menu, 404 onEditPrompt: openEditPrompt, 405 onAddOption: openAddOption, 406 onDeleteOption: handleDeleteOption 407 }, 408 void 0, 409 false, 410 { 411 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 412 lineNumber: 264, 413 columnNumber: 19 414 }, 415 this 416 ), 417 /* @__PURE__ */ jsxDEV("div", { className: "opacity-50 hover:opacity-100 transition-opacity", children: [ 418 /* @__PURE__ */ jsxDEV("div", { className: "text-xs text-center mb-2 uppercase text-zinc-400", children: "Legacy List Editor" }, void 0, false, { 419 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 420 lineNumber: 273, 421 columnNumber: 21 422 }, this), 423 /* @__PURE__ */ jsxDEV(Card, { className: "bg-white shadow-sm dark:bg-zinc-950", children: /* @__PURE__ */ jsxDEV("div", { className: "p-6", children: /* @__PURE__ */ jsxDEV( 424 NodeEditor, 425 { 426 menuId: menu.id, 427 node: menu.menu, 428 path: [], 429 depth: 0, 430 onMenuUpdated: (m) => setMenu(m), 431 toast: push 432 }, 433 void 0, 434 false, 435 { 436 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 437 lineNumber: 276, 438 columnNumber: 25 439 }, 440 this 441 ) }, void 0, false, { 442 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 443 lineNumber: 275, 444 columnNumber: 23 445 }, this) }, void 0, false, { 446 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 447 lineNumber: 274, 448 columnNumber: 21 449 }, this) 450 ] }, void 0, true, { 451 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 452 lineNumber: 272, 453 columnNumber: 19 454 }, this) 455 ] }, void 0, true, { 456 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 457 lineNumber: 252, 458 columnNumber: 17 459 }, this) }, void 0, false, { 460 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 461 lineNumber: 244, 462 columnNumber: 13 463 }, this) 464 ] }, void 0, true, { 465 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 466 lineNumber: 189, 467 columnNumber: 11 468 }, this),
469 /* @__PURE__ */ jsxDEV( 470 Modal, 471 { 472 isOpen: !!editPromptPath, 473 onClose: () => setEditPromptPath(null), 474 title: "Edit Prompt", 475 footer: /* @__PURE__ */ jsxDEV(Button, { onClick: submitEditPrompt, children: "Save" }, void 0, false, { 476 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 477 lineNumber: 298, 478 columnNumber: 15 479 }, this), 480 children: /* @__PURE__ */ jsxDEV("div", { className: "space-y-4", children: [ 481 /* @__PURE__ */ jsxDEV("p", { className: "text-sm text-zinc-500", children: "Enter the text or SSML that will be spoken to the caller." }, void 0, false, { 482 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 483 lineNumber: 302, 484 columnNumber: 13 485 }, this), 486 /* @__PURE__ */ jsxDEV( 487 "textarea", 488 { 489 className: "w-full h-32 rounded-md border border-zinc-200 bg-transparent p-3 text-sm focus:ring-2 focus:ring-zinc-900 dark:border-zinc-800 dark:focus:ring-zinc-100", 490 value: editPromptValue, 491 onChange: (e) => setEditPromptValue(e.target.value), 492 placeholder: "e.g. Thanks for calling. Press 1 for Sales." 493 }, 494 void 0, 495 false, 496 { 497 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 498 lineNumber: 303, 499 columnNumber: 13 500 }, 501 this 502 ) 503 ] }, void 0, true, { 504 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 505 lineNumber: 301, 506 columnNumber: 11 507 }, this) 508 }, 509 void 0, 510 false, 511 { 512 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 513 lineNumber: 293, 514 columnNumber: 9 515 }, 516 this 517 ),
518 /* @__PURE__ */ jsxDEV( 519 Modal, 520 { 521 isOpen: !!addOptionPath, 522 onClose: () => setAddOptionPath(null), 523 title: "Add Option", 524 footer: /* @__PURE__ */ jsxDEV(Button, { onClick: submitAddOption, disabled: !newOptionKey || !newOptionText, children: "Add" }, void 0, false, { 525 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 526 lineNumber: 317, 527 columnNumber: 15 528 }, this), 529 children: /* @__PURE__ */ jsxDEV("div", { className: "space-y-4", children: [ 530 /* @__PURE__ */ jsxDEV("div", { className: "grid grid-cols-4 gap-4 items-center", children: [ 531 /* @__PURE__ */ jsxDEV("label", { className: "text-sm font-medium text-right", children: "Key" }, void 0, false, { 532 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 533 lineNumber: 322, 534 columnNumber: 15 535 }, this), 536 /* @__PURE__ */ jsxDEV( 537 Input, 538 { 539 className: "col-span-3", 540 placeholder: "e.g. 1", 541 value: newOptionKey, 542 onChange: (e) => setNewOptionKey(e.target.value) 543 }, 544 void 0, 545 false, 546 { 547 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 548 lineNumber: 323, 549 columnNumber: 15 550 }, 551 this 552 ) 553 ] }, void 0, true, { 554 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 555 lineNumber: 321, 556 columnNumber: 13 557 }, this),
558 /* @__PURE__ */ jsxDEV("div", { className: "grid grid-cols-4 gap-4 items-center", children: [ 559 /* @__PURE__ */ jsxDEV("label", { className: "text-sm font-medium text-right", children: "Label" }, void 0, false, { 560 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 561 lineNumber: 331, 562 columnNumber: 15 563 }, this), 564 /* @__PURE__ */ jsxDEV( 565 Input, 566 { 567 className: "col-span-3", 568 placeholder: "e.g. Sales Department", 569 value: newOptionText, 570 onChange: (e) => setNewOptionText(e.target.value) 571 }, 572 void 0, 573 false, 574 { 575 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 576 lineNumber: 332, 577 columnNumber: 15 578 }, 579 this 580 ) 581 ] }, void 0, true, { 582 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 583 lineNumber: 330, 584 columnNumber: 13 585 }, this) 586 ] }, void 0, true, { 587 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 588 lineNumber: 320, 589 columnNumber: 11 590 }, this) 591 }, 592 void 0, 593 false, 594 { 595 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 596 lineNumber: 312, 597 columnNumber: 9 598 }, 599 this 600 ) 601 ] }, void 0, true, { 602 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 603 lineNumber: 182, 604 columnNumber: 11 605 }, this) }, void 0, false, { 606 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 607 lineNumber: 172, 608 columnNumber: 9 609 }, this) }, void 0, false, { 610 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 611 lineNumber: 171, 612 columnNumber: 7 613 }, this) 614 ] }, void 0, true, { 615 fileName: "/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", 616 lineNumber: 166, 617 columnNumber: 5 618 }, this); 619} 620_s(App, "2XKn+2ZO9yjz8Eo6rNs9Ncw+BZw="); 621_c = App; 622export default App; 623var _c; 624$RefreshReg$(_c, "App"); 625if (import.meta.hot && !inWebWorker) { 626 window.$RefreshReg$ = prevRefreshReg; 627 window.$RefreshSig$ = prevRefreshSig; 628} 629if (import.meta.hot && !inWebWorker) { 630 RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => { 631 RefreshRuntime.registerExportsForReactRefresh("/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", currentExports); 632 import.meta.hot.accept((nextExports) => { 633 if (!nextExports) return; 634 const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/home/holdfree/repos/holdfree/ivr_admin_fe/src/App.tsx", currentExports, nextExports); 635 if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); 636 }); 637 }); 638} 639 640//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBOElXLFNBb0JELFVBcEJDOzs7Ozs7Ozs7Ozs7Ozs7OztBQTlJWCxTQUFTQSxnQkFBZ0I7QUFDekIsU0FBU0MsV0FBVztBQUVwQixTQUFTQyxrQkFBa0I7QUFDM0IsU0FBU0Msc0JBQXNCO0FBQy9CLFNBQVNDLGFBQWE7QUFDdEIsU0FBU0MsZUFBZTtBQUN4QixTQUFTQyxxQkFBcUI7QUFDOUIsU0FBU0Msb0JBQW9CO0FBQzdCLFNBQVNDLHdCQUF3QjtB
640QUNqQyxTQUFTQyxvQkFBb0I7QUFDN0IsU0FBU0MsT0FBT0MsUUFBUUMsTUFBTUMsYUFBYTtBQUMzQyxTQUFTQyxhQUFhO0FBQ3RCLFNBQVNDLGFBQWE7QUFFdEIsU0FBU0MsTUFBTTtBQUFBQyxLQUFBO0FBQ2IsUUFBTSxDQUFDQyxPQUFPQyxRQUFRLElBQUluQixTQUF3Qm9CLGFBQWFDLFFBQVEsaUJBQWlCLENBQUM7QUFDekYsUUFBTSxDQUFDQyxhQUFhQyxjQUFjLElBQUl2QixTQUFTLEVBQUU7QUFDakQsUUFBTSxDQUFDd0IsU0FBU0MsVUFBVSxJQUFJekIsU0FBUyxLQUFLO0FBQzVDLFFBQU0sQ0FBQzBCLE1BQU1DLE9BQU8sSUFBSTNCLFNBQXlCLElBQUk7QUFDckQsUUFBTSxDQUFDNEIsTUFBTUMsT0FBTyxJQUFJN0IsU0FBOEUsTUFBTTtBQUc1RyxRQUFNLENBQUM4QixnQkFBZ0JDLGlCQUFpQixJQUFJL0IsU0FBMEIsSUFBSTtBQUMxRSxRQUFNLENBQUNnQyxpQkFBaUJDLGtCQUFrQixJQUFJakMsU0FBUyxFQUFFO0FBRXpELFFBQU0sQ0FBQ2tDLGVBQWVDLGdCQUFnQixJQUFJbkMsU0FBMEIsSUFBSTtBQUN4RSxRQUFNLENBQUNvQyxjQUFjQyxlQUFlLElBQUlyQyxTQUFTLEVBQUU7QUFDbkQsUUFBTSxDQUFDc0MsZUFBZUMsZ0JBQWdCLElBQUl2QyxTQUFTLEVBQUU7QUFFckQsUUFBTXdDLE9BQU9BLENBQUNDLFFBQWdCO0FBQzVCQyxZQUFRQyxJQUFJLFVBQVVGLEdBQUc7QUFBQSxFQUMzQjtBQUVBLFFBQU1HLGNBQWNBLENBQUNDLGFBQXFCO0FBQ3hDekIsaUJBQWEwQixRQUFRLG1CQUFtQkQsUUFBUTtBQUNoRDFCLGFBQVMwQixRQUFRO0FBQUEsRUFDbkI7QUFFQSxRQUFNRSxlQUFlQSxNQUFNO0FBQ3pCM0IsaUJBQWE0QixXQUFXLGlCQUFpQjtBQUN6QzdCLGFBQVMsSUFBSTtBQUNiUSxZQUFRLElBQUk7QUFBQSxFQUNkO0FBRUEsUUFBTXNCLGFBQWEsWUFBWTtBQUM3QixRQUFJLENBQUMzQixZQUFhO0FBQ2xCRyxlQUFXLElBQUk7QUFDZixRQUFJO0FBQ0YsWUFBTXlCLE9BQU8sTUFBTWpELElBQUlrRCxlQUFlN0IsV0FBVztBQUNqREssY0FBUXVCLElBQUk7QUFDWlYsV0FBSyxhQUFhO0FBQUEsSUFDcEIsU0FBU1ksR0FBRztBQUNWVixjQUFRVyxNQUFNRCxDQUFDO0FBQ2YsVUFBS0EsRUFBWUUsWUFBWSxnQkFBZ0I7QUFDM0MzQixnQkFBUSxJQUFJO0FBQ1o0QixjQUFNLGtEQUFrRDtBQUFBLE1BQzFEO0FBQUEsSUFDRixVQUFDO0FBQ0M5QixpQkFBVyxLQUFLO0FBQUEsSUFDbEI7QUFBQSxFQUNGO0FBRUEsUUFBTStCLGVBQWUsWUFBWTtBQUMvQixRQUFJLENBQUNsQyxZQUFhO0FBQ2xCRyxlQUFXLElBQUk7QUFDZixRQUFJO0FBQ0YsWUFBTXlCLE9BQU8sTUFBTWpELElBQUl3RCxXQUFXbkMsYUFBYSxtQ0FBbUM7QUFDbEZLLGNBQVF1QixJQUFJO0FBQ1pWLFdBQUssY0FBYztBQUFBLElBQ3JCLFNBQVNZLEdBQUc7QUFDVlYsY0FBUVcsTUFBTUQsQ0FBQztBQUVmLFVBQUlYLE1BQU07QUFDVixVQUFJVyxhQUFhTSxPQUFPO0FBQ3RCakIsY0FBTVcsRUFBRUU7QUFDUixZQUFJO0FBQ0YsZ0JBQU1LLE9BQU9DLEtBQUtDLE1BQU1wQixHQUFHO0FBQzNCLGNBQUlrQixLQUFLRyxVQUFVSCxLQUFLRyxPQUFPQyxTQUFTLGdCQUFnQixHQUFHO0FBQ3pEdEIsa0JBQU07QUFBQSxVQUNSLFdBQVdrQixLQUFLRyxRQUFRO0FBQ3RCckIsa0JBQU1rQixLQUFLRztBQUFBQSxVQUNiO0FBQUEsUUFDRixRQUFRO0FBQUEsUUFBRTtBQUFBLE1BQ1o7QUFDQVAsWUFBTWQsR0FBRztBQUFBLElBQ1gsVUFBQztBQUNDaEIsaUJBQVcsS0FBSztBQUFBLElBQ2xCO0FBQUEsRUFDRjtBQUlBLFFBQU11QyxpQkFBaUJBLENBQUNDLE1BQWdCQyxrQkFBMEI7QUFDaEVuQyxzQkFBa0JrQyxJQUFJO0FBQ3RCaEMsdUJBQW1CaUMsYUFBYTtBQUFBLEVBQ2xDO0FBRUEsUUFBTUMsbUJBQW1CLFlBQVk7QUFDbkMsUUFBSSxDQUFDekMsUUFBUSxDQUFDSSxlQUFnQjtBQUM5QixRQUFJO0FBQ0YsWUFBTXNDLFVBQVUsTUFBTW5FLElBQUlvRSxhQUFhM0MsS0FBSzRDLElBQUl4QyxnQkFBZ0JFLGVBQWU7QUFDL0VMLGNBQVF5QyxPQUFPO0FBQ2ZyQyx3QkFBa0IsSUFBSTtBQUN0QlMsV0FBSyxnQkFBZ0I7QUFBQSxJQUN2QixTQUFTWSxHQUFHO0FBQ1ZHLFlBQU0seUJBQXlCO0FBQUEsSUFDakM7QUFBQSxFQUNGO0FBRUEsUUFBTWdCLGdCQUFnQkEsQ0FBQ04sU0FBbUI7QUFDeEM5QixxQkFBaUI4QixJQUFJO0FBQ3JCNUIsb0JBQWdCLEVBQUU7QUFDbEJFLHFCQUFpQixFQUFFO0FBQUEsRUFDckI7QUFFQSxRQUFNaUMsa0JBQWtCLFlBQVk7QUFDbEMsUUFBSSxDQUFDOUMsUUFBUSxDQUFDUSxpQkFBaUIsQ0FBQ0UsZ0JBQWdCLENBQUNFLGNBQWU7QUFDaEUsUUFBSTtBQUNGLFlBQU04QixVQUFVLE1BQU1uRSxJQUFJd0UsYUFBYS9DLEtBQUs0QyxJQUFJcEMsZUFBZUUsY0FBY0UsYUFBYTtBQUMxRlgsY0FBUXlDLE9BQU87QUFDZmpDLHVCQUFpQixJQUFJO0FBQ3JCSyxXQUFLLGNBQWM7QUFBQSxJQUNyQixTQUFTWSxHQUFHO0FBQ1ZHLFlBQU0sc0JBQXNCO0FBQUEsSUFDOUI7QUFBQSxFQUNGO0FBRUEsUUFBTW1CLHFCQUFxQixPQUFPVCxNQUFnQlUsUUFBZ0I7QUFDaEUsUUFBSSxDQUFDakQsS0FBTTtBQUNYLFFBQUk7QUFDRixZQUFNMEMsVUFBVSxNQUFNbkUsSUFBSTJFLGFBQWFsRCxLQUFLNEMsSUFBSUwsTUFBTVUsR0FBRztBQUN6RGhELGNBQVF5QyxPQUFPO0FBQ2Y1QixXQUFLLGdCQUFnQjtBQUFBLElBQ3ZCLFNBQVNZLEdBQUc7QUFDVkcsWUFBTSx5QkFBeUI7QUFBQSxJQUNqQztBQUFBLEVBQ0Y7QUFFQSxRQUFNc0IsYUFBYXZELFlBQVl3RCxTQUFTO0FBRXhDLE1BQUksQ0FBQzVELE9BQU87QUFDVixXQUFPLHVCQUFDLFNBQU0sU0FBUzBCLGVBQWhCO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBNEI7QU
640FBQSxFQUNyQztBQUVBLFNBQ0UsdUJBQUMsU0FBSSxXQUFVLGlEQUViO0FBQUEsMkJBQUMsV0FBUSxVQUFVRyxjQUFjLFFBQVFuQixNQUFNLFlBQVlDLFdBQTNEO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBbUU7QUFBQSxJQUduRSx1QkFBQyxVQUFLLFdBQVUsMEJBQ2QsaUNBQUMsU0FBSSxXQUFVLG1DQUNaRCxtQkFBUyxjQUNSLHVCQUFDLG1CQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBYyxJQUNaQSxTQUFTLHFCQUNYLHVCQUFDLHNCQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBaUIsSUFDZkEsU0FBUyxTQUNYLHVCQUFDLGtCQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBYSxJQUNYQSxTQUFTLGlCQUNYLHVCQUFDLGtCQUFEO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBYSxJQUVmLG1DQUVBO0FBQUEsNkJBQUMsU0FBSSxXQUFVLDBFQUNiO0FBQUEsK0JBQUMsUUFBRyxXQUFVLHFFQUFvRSwrQkFBbEY7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUFpRztBQUFBLFFBQ2pHLHVCQUFDLE9BQUUsV0FBVSw0Q0FBMkMscUVBQXhEO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFBNkc7QUFBQSxXQUYvRztBQUFBO0FBQUE7QUFBQTtBQUFBLGFBR0E7QUFBQSxNQUVBLHVCQUFDLFNBQUksV0FBVSw4QkFFYjtBQUFBLCtCQUFDLFNBQUksV0FBVSwyQkFDYjtBQUFBLGlDQUFDLFFBQUssV0FBVSxtQkFDZDtBQUFBLG1DQUFDLFNBQUksV0FBVSx1RkFDYixpQ0FBQyxRQUFHLFdBQVUseUJBQXdCLGdDQUF0QztBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFzRCxLQUR4RDtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUVBO0FBQUEsWUFDQSx1QkFBQyxTQUFJLFdBQVUsaUJBQ2I7QUFBQSxxQ0FBQyxTQUFJLFdBQVUsYUFDYjtBQUFBLHVDQUFDLFdBQU0sV0FBVSw4REFBNkQsNEJBQTlFO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQTBGO0FBQUEsZ0JBQzFGLHVCQUFDLFNBQUksV0FBVSxZQUNiO0FBQUEseUNBQUMsU0FBSSxXQUFVLHlDQUNiLGlDQUFDLE1BQU0sT0FBTixFQUFZLFdBQVUsYUFBdkI7QUFBQTtBQUFBO0FBQUE7QUFBQSx5QkFBZ0MsS0FEbEM7QUFBQTtBQUFBO0FBQUE7QUFBQSx5QkFFQTtBQUFBLGtCQUNBO0FBQUEsb0JBQUM7QUFBQTtBQUFBLHNCQUNDLFdBQVU7QUFBQSxzQkFDVixhQUFZO0FBQUEsc0JBQ1osT0FBT047QUFBQUEsc0JBQ1AsVUFBVSxDQUFDOEIsTUFBTTdCLGVBQWU2QixFQUFFMkIsT0FBT0MsS0FBSztBQUFBO0FBQUEsb0JBSmhEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxrQkFJa0Q7QUFBQSxxQkFScEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSx1QkFVQTtBQUFBLG1CQVpGO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBYUE7QUFBQSxjQUVBLHVCQUFDLFNBQUksV0FBVSwwQkFDYjtBQUFBO0FBQUEsa0JBQUM7QUFBQTtBQUFBLG9CQUNDLFNBQVE7QUFBQSxvQkFDUixTQUFTL0I7QUFBQUEsb0JBQ1QsVUFBVSxDQUFDNEIsY0FBY3JEO0FBQUFBLG9CQUN6QixXQUFVO0FBQUEsb0JBRVY7QUFBQSw2Q0FBQyxNQUFNLFFBQU4sRUFBYSxXQUFVLGtCQUF4QjtBQUFBO0FBQUE7QUFBQTtBQUFBLDZCQUFzQztBQUFBLHNCQUFHO0FBQUEsc0JBQUVBLFVBQVUsUUFBUTtBQUFBO0FBQUE7QUFBQSxrQkFOL0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQU9BO0FBQUEsZ0JBQ0E7QUFBQSxrQkFBQztBQUFBO0FBQUEsb0JBQ0MsU0FBU2dDO0FBQUFBLG9CQUNULFVBQVUsQ0FBQ3FCLGNBQWNyRDtBQUFBQSxvQkFDekIsV0FBVTtBQUFBLG9CQUVWO0FBQUEsNkNBQUMsTUFBTSxNQUFOLEVBQVcsV0FBVSxrQkFBdEI7QUFBQTtBQUFBO0FBQUE7QUFBQSw2QkFBb0M7QUFBQSxzQkFBRztBQUFBO0FBQUE7QUFBQSxrQkFMekM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQU1BO0FBQUEsbUJBZkY7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFnQkE7QUFBQSxpQkFoQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFpQ0E7QUFBQSxlQXJDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQXNDQTtBQUFBLFVBRUEsdUJBQUMsU0FBSSxXQUFVLDRJQUNiLGlDQUFDLFNBQUksV0FBVSxjQUNiO0FBQUEsbUNBQUMsTUFBTSxPQUFOLEVBQVksV0FBVSxzQkFBdkI7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBeUM7QUFBQSxZQUN6Qyx1QkFBQyxTQUFJLFdBQVUsYUFDYjtBQUFBLHFDQUFDLE9BQUUsV0FBVSxpQkFBZ0IseUJBQTdCO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBQXNDO0FBQUEsY0FDdEMsdUJBQUMsT0FBRSxXQUFVLHNCQUFxQixnSEFBbEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFBa0k7QUFBQSxpQkFGcEk7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFHQTtBQUFBLGVBTEY7QUFBQTtBQUFBO0FBQUE7QUFBQSxpQkFNQSxLQVBGO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBUUE7QUFBQSxhQWpERjtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBa0RBO0FBQUEsUUFHQSx1QkFBQyxTQUFJLFdBQVUsaUJBQ1osV0FBQ0UsT0FDQSx1QkFBQyxTQUFJLFdBQVUseUtBQ2I7QUFBQSxpQ0FBQyxNQUFNLE1BQU4sRUFBVyxXQUFVLCtCQUF0QjtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFpRDtBQUFBLFVBQ2pELHVCQUFDLE9BQUUsV0FBVSxlQUFjLGdDQUEzQjtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUEyQztBQUFBLFVBQzNDLHVCQUFDLE9BQUUsV0FBVSxXQUFVLDhEQUF2QjtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFxRTtBQUFBLGFBSHZFO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFJQSxJQUVBLHVCQUFDLFNBQUksV0FBVSxhQUNiO0FBQUEsaUNBQUMsU0FBSSxXQUFVLHFDQUNiLGlDQUFDLFNBQUksV0FBVSxhQUNiO0FBQUEsbUNBQUMsUUFBRyxXQUFVLHlCQUF3Qiw4QkFBdEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBb0Q7QUFBQSxZQUNwRCx1QkFBQyxTQUFJLFdBQVUsY0FDYjtBQUFBLHFDQUFDLFNBQU07QUFBQTtBQUFBLGdCQUFLQSxLQUFLNEM7QUFBQUEsbUJBQWpCO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBQW9CO0FBQUEsY0FDcEIsdUJBQUMsU0FBTSxXQUFVLCtHQUE4RyxzQkFBL0g7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFBcUk7QUFBQSxpQkFGdkk7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQk
640FHQTtBQUFBLGVBTEY7QUFBQTtBQUFBO0FBQUE7QUFBQSxpQkFNQSxLQVBGO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBUUE7QUFBQSxVQUdBO0FBQUEsWUFBQztBQUFBO0FBQUEsY0FDQyxNQUFNNUMsS0FBS0E7QUFBQUEsY0FDWCxjQUFjc0M7QUFBQUEsY0FDZCxhQUFhTztBQUFBQSxjQUNiLGdCQUFnQkc7QUFBQUE7QUFBQUEsWUFKbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSXFDO0FBQUEsVUFJckMsdUJBQUMsU0FBSSxXQUFVLG1EQUNiO0FBQUEsbUNBQUMsU0FBSSxXQUFVLG9EQUFtRCxrQ0FBbEU7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBb0Y7QUFBQSxZQUNwRix1QkFBQyxRQUFLLFdBQVUsdUNBQ2QsaUNBQUMsU0FBSSxXQUFVLE9BQ2I7QUFBQSxjQUFDO0FBQUE7QUFBQSxnQkFDQyxRQUFRaEQsS0FBSzRDO0FBQUFBLGdCQUNiLE1BQU01QyxLQUFLQTtBQUFBQSxnQkFDWCxNQUFNO0FBQUEsZ0JBQ04sT0FBTztBQUFBLGdCQUNQLGVBQWUsQ0FBQ3VELE1BQU10RCxRQUFRc0QsQ0FBQztBQUFBLGdCQUMvQixPQUFPekM7QUFBQUE7QUFBQUEsY0FOVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFNYyxLQVBoQjtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQVNBLEtBVkY7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFXQTtBQUFBLGVBYkY7QUFBQTtBQUFBO0FBQUE7QUFBQSxpQkFjQTtBQUFBLGFBbENGO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFtQ0EsS0EzQ0o7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQTZDQTtBQUFBLFdBcEdGO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFxR0E7QUFBQSxNQUdGO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDQyxRQUFRLENBQUMsQ0FBQ1Y7QUFBQUEsVUFDVixTQUFTLE1BQU1DLGtCQUFrQixJQUFJO0FBQUEsVUFDckMsT0FBTTtBQUFBLFVBQ04sUUFDRSx1QkFBQyxVQUFPLFNBQVNvQyxrQkFBa0Isb0JBQW5DO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBQXVDO0FBQUEsVUFHekMsaUNBQUMsU0FBSSxXQUFVLGFBQ2I7QUFBQSxtQ0FBQyxPQUFFLFdBQVUseUJBQXdCLHlFQUFyQztBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUE4RjtBQUFBLFlBQzlGO0FBQUEsY0FBQztBQUFBO0FBQUEsZ0JBQ0MsV0FBVTtBQUFBLGdCQUNWLE9BQU9uQztBQUFBQSxnQkFDUCxVQUFVLENBQUFvQixNQUFLbkIsbUJBQW1CbUIsRUFBRTJCLE9BQU9DLEtBQUs7QUFBQSxnQkFDaEQsYUFBWTtBQUFBO0FBQUEsY0FKZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJMkQ7QUFBQSxlQU43RDtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQVFBO0FBQUE7QUFBQSxRQWhCRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFpQkE7QUFBQSxNQUVBO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDQyxRQUFRLENBQUMsQ0FBQzlDO0FBQUFBLFVBQ1YsU0FBUyxNQUFNQyxpQkFBaUIsSUFBSTtBQUFBLFVBQ3BDLE9BQU07QUFBQSxVQUNOLFFBQ0UsdUJBQUMsVUFBTyxTQUFTcUMsaUJBQWlCLFVBQVUsQ0FBQ3BDLGdCQUFnQixDQUFDRSxlQUFlLG1CQUE3RTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFnRjtBQUFBLFVBR2xGLGlDQUFDLFNBQUksV0FBVSxhQUNiO0FBQUEsbUNBQUMsU0FBSSxXQUFVLHVDQUNiO0FBQUEscUNBQUMsV0FBTSxXQUFVLGtDQUFpQyxtQkFBbEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFBcUQ7QUFBQSxjQUNyRDtBQUFBLGdCQUFDO0FBQUE7QUFBQSxrQkFDQyxXQUFVO0FBQUEsa0JBQ1YsYUFBWTtBQUFBLGtCQUNaLE9BQU9GO0FBQUFBLGtCQUNQLFVBQVUsQ0FBQWdCLE1BQUtmLGdCQUFnQmUsRUFBRTJCLE9BQU9DLEtBQUs7QUFBQTtBQUFBLGdCQUovQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FJaUQ7QUFBQSxpQkFObkQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFRQTtBQUFBLFlBQ0EsdUJBQUMsU0FBSSxXQUFVLHVDQUNiO0FBQUEscUNBQUMsV0FBTSxXQUFVLGtDQUFpQyxxQkFBbEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFBdUQ7QUFBQSxjQUN2RDtBQUFBLGdCQUFDO0FBQUE7QUFBQSxrQkFDQyxXQUFVO0FBQUEsa0JBQ1YsYUFBWTtBQUFBLGtCQUNaLE9BQU8xQztBQUFBQSxrQkFDUCxVQUFVLENBQUFjLE1BQUtiLGlCQUFpQmEsRUFBRTJCLE9BQU9DLEtBQUs7QUFBQTtBQUFBLGdCQUpoRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FJa0Q7QUFBQSxpQkFOcEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFRQTtBQUFBLGVBbEJGO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBbUJBO0FBQUE7QUFBQSxRQTNCRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUE0QkE7QUFBQSxTQTlKRTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBZ0tBLEtBMUtGO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0E0S0EsS0E3S0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQThLQTtBQUFBLE9BbkxGO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FvTEE7QUFFSjtBQUFDL0QsR0F6VFFELEtBQUc7QUFBQWtFLEtBQUhsRTtBQTJUVCxlQUFlQTtBQUFJLElBQUFrRTtBQUFBQyxhQUFBRCxJQUFBIiwibmFtZXMiOlsidXNlU3RhdGUiLCJhcGkiLCJOb2RlRWRpdG9yIiwiVHJlZVZpc3VhbGl6ZXIiLCJMb2dpbiIsIlNpZGViYXIiLCJCZXRhV2hpdGVsaXN0IiwiSG9sZGZyZWVMb2dzIiwiQ29tcGFueURpcmVjdG9yeSIsIkFjdGl2aXR5TG9ncyIsIklucHV0IiwiQnV0dG9uIiwiQ2FyZCIsIkJhZGdlIiwiTW9kYWwiLCJJY29ucyIsIkFwcCIsIl9zIiwidG9rZW4iLCJzZXRUb2tlbiIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJwaG9uZU51bWJlciIsInNldFBob25lTnVtYmVyIiwibG9hZGluZyIsInNldExvYWRpbmciLCJtZW51Iiwic2V0TWVudSIsInZpZXciLCJzZXRWaWV3IiwiZWRpdFByb21wdFBhdGgiLCJzZXRFZGl0UHJvbXB0UGF0aCIsImVkaXRQcm9tcHRWYWx1ZSIsInNldEVkaXRQcm9tcHRWYWx1ZSIsImFkZE9wdGlvblBhdGgiLCJzZXRBZGRPcHRpb25QYXRoIiwibmV3T3B0aW9uS2V5Iiwic2V0TmV3T3B0aW9uS2V5IiwibmV3T3B0aW9uVGV4dCIsInNldE5ld09wdGlvblRleHQiLCJwdXNoIiwibXNnIiwiY29uc29sZSIsImxvZyIsImhhbmRsZUxvZ2luIiwibmV3VG9rZW4iLCJzZXRJdGVtIiwiaGFuZGxlTG9nb3V0IiwicmVtb3ZlSXRlbSIsImhhbmRsZUxvYWQiLCJkYXRhIiwiZ2V0TWVudUJ5UGhvbmUiLCJlIiwiZXJyb3IiLCJtZXNzYWdlIiwiYWxlcnQiLCJoYW5kbGVDcmVhdGUiLCJjcmVhdGVNZW51IiwiRXJyb3IiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwiZGV0YWlsIiwiaW5jbHVkZXMiLCJvcGVuRWRpdFByb21wdCIsInBhdGgiLCJjdXJyZW50UHJvbXB0Iiwic3VibWl0RWRpdFByb21wdCIsInVwZGF0ZWQiLCJ1cGRhdGVQcm9tcHQiLCJpZCIsIm9wZW5BZGRPcHRpb24iLCJzdWJtaXRBZGRPcHRpb24iLCJ1cHNlcnRPcHRpb24iLCJoYW5kbGVEZWxldGVPcHRpb24iLCJrZXkiLCJkZWxldGVPcHRpb24iLCJjYW5PcGVyYXRlIiwibGVuZ3RoIiwidGFyZ2V0IiwidmFsdWUiLCJtIiwiX2MiLCIkUmVmcmVzaFJlZyQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiQXBwLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXBpIH0gZnJvbSBcIi4vbGliL2FwaVwiO1xuaW1wb3J0IHR5cGUgeyBJdnJNZW51IH0gZnJvbSBcIi4vbGliL3R5cGVzXCI7XG5pbXBvcnQgeyBOb2RlRWRpdG9yIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Ob2RlRWRpdG9yXCI7XG5pbXBvcnQgeyBUcmVlVmlzdWFsaXplciB9IGZyb20gXCIuL2NvbXBvbmVudHMvVHJlZVZpc3VhbGl6ZXJcIjtcbmltcG9ydCB7
640IExvZ2luIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Mb2dpblwiO1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2lkZWJhclwiO1xuaW1wb3J0IHsgQmV0YVdoaXRlbGlzdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvQmV0YVdoaXRlbGlzdFwiO1xuaW1wb3J0IHsgSG9sZGZyZWVMb2dzIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Ib2xkZnJlZUxvZ3NcIjtcbmltcG9ydCB7IENvbXBhbnlEaXJlY3RvcnkgfSBmcm9tIFwiLi9jb21wb25lbnRzL0NvbXBhbnlEaXJlY3RvcnlcIjtcbmltcG9ydCB7IEFjdGl2aXR5TG9ncyB9IGZyb20gXCIuL2NvbXBvbmVudHMvQWN0aXZpdHlMb2dzXCI7XG5pbXBvcnQgeyBJbnB1dCwgQnV0dG9uLCBDYXJkLCBCYWRnZSB9IGZyb20gXCIuL2NvbXBvbmVudHMvdWlcIjtcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4vY29tcG9uZW50cy91aS9Nb2RhbFwiO1xuaW1wb3J0IHsgSWNvbnMgfSBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25zXCI7XG5cbmZ1bmN0aW9uIEFwcCgpIHtcbiAgY29uc3QgW3Rva2VuLCBzZXRUb2tlbl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIml2cl9hZG1pbl90b2tlblwiKSk7XG4gIGNvbnN0IFtwaG9uZU51bWJlciwgc2V0UGhvbmVOdW1iZXJdID0gdXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW21lbnUsIHNldE1lbnVdID0gdXNlU3RhdGU8SXZyTWVudSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTxcIm1lbnVcIiB8IFwid2hpdGVsaXN0XCIgfCBcImNvbXBhbnlEaXJlY3RvcnlcIiB8IFwibG9nc1wiIHwgXCJhY3Rpdml0eUxvZ3NcIj4oXCJtZW51XCIpO1xuICBcbiAgLy8gTW9kYWxzIFN0YXRlXG4gIGNvbnN0IFtlZGl0UHJvbXB0UGF0aCwgc2V0RWRpdFByb21wdFBhdGhdID0gdXNlU3RhdGU8c3RyaW5nW10gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2VkaXRQcm9tcHRWYWx1ZSwgc2V0RWRpdFByb21wdFZhbHVlXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBcbiAgY29uc3QgW2FkZE9wdGlvblBhdGgsIHNldEFkZE9wdGlvblBhdGhdID0gdXNlU3RhdGU8c3RyaW5nW10gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW25ld09wdGlvbktleSwgc2V0TmV3T3B0aW9uS2V5XSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbbmV3T3B0aW9uVGV4dCwgc2V0TmV3T3B0aW9uVGV4dF0gPSB1c2VTdGF0ZShcIlwiKTtcblxuICBjb25zdCBwdXNoID0gKG1zZzogc3RyaW5nKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJUb2FzdDpcIiwgbXNnKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVMb2dpbiA9IChuZXdUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJpdnJfYWRtaW5fdG9rZW5cIiwgbmV3VG9rZW4pO1xuICAgIHNldFRva2VuKG5ld1Rva2VuKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVMb2dvdXQgPSAoKSA9PiB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJpdnJfYWRtaW5fdG9rZW5cIik7XG4gICAgc2V0VG9rZW4obnVsbCk7XG4gICAgc2V0TWVudShudWxsKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVMb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghcGhvbmVOdW1iZXIpIHJldHVybjtcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgYXBpLmdldE1lbnVCeVBob25lKHBob25lTnVtYmVyKTtcbiAgICAgIHNldE1lbnUoZGF0YSk7XG4gICAgICBwdXNoKFwiTWVudSBsb2FkZWRcIik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIGlmICgoZSBhcyBFcnJvcikubWVzc2FnZSAhPT0gXCJVbmF1dGhvcml6ZWRcIikge1xuICAgICAgICBzZXRNZW51KG51bGwpO1xuICAgICAgICBhbGVydChcIk1lbnUgbm90IGZvdW5kLiBDbGljayBDcmVhdGUgdG8gc3RhcnQgYSBuZXcgb25lLlwiKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNyZWF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXBob25lTnVtYmVyKSByZXR1cm47XG4gICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwaS5jcmVhdGVNZW51KHBob25lTnVtYmVyLCBcIldlbGNvbWUhIFBsZWFzZSBtYWtlIGEgc2VsZWN0aW9uLlwiKTtcbiAgICAgIHNldE1lbnUoZGF0YSk7XG4gICAgICBwdXNoKFwiTWVudSBjcmVhdGVkXCIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAvLyDop6PmnpDlkI7nq6/plJnor6/or6bmg4VcbiAgICAgIGxldCBtc2cgPSBcIkZhaWxlZCB0byBjcmVhdGUgbWVudS5cIjtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbXNnID0gZS5tZXNzYWdlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKG1zZyk7XG4gICAgICAgICAgaWYgKGpzb24uZGV0YWlsICYmIGpzb24uZGV0YWlsLmluY2x1ZGVzKFwiYWxyZWFkeSBleGlzdHNcIikpIHtcbiAgICAgICAgICAgIG1zZyA9IFwiVGhpcyBwaG9uZSBudW1iZXIgYWxyZWFkeSBoYXMgYSBtZW51LiBQbGVhc2UgY2xpY2sgJ0xvYWQnIGluc3RlYWQuXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChqc29uLmRldGFpbCkge1xuICAgICAgICAgICAgbXNnID0ganNvbi5kZXRhaWw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHsgLyogbm90IGpzb24gKi8gfVxuICAgICAgfVxuICAgICAgYWxlcnQobXNnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIC0tLSBWaXN1YWwgRWRpdG9yIEhhbmRsZXJzIC0tLVxuXG4gIGNvbnN0IG9wZW5FZGl0UHJvbXB0ID0gKHBhdGg6IHN0cmluZ1tdLCBjdXJyZW50UHJvbXB0OiBzdHJpbmcpID0+IHtcbiAgICBzZXRFZGl0UHJvbXB0UGF0aChwYXRoKTtcbiAgICBzZXRFZGl0UHJvbXB0VmFsdWUoY3VycmVudFByb21wdCk7XG4gIH07XG5cbiAgY29uc3Qgc3VibWl0RWRpdFByb21wdCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIW1lbnUgfHwgIWVkaXRQcm9tcHRQYXRoKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCBhcGkudXBkYXRlUHJvbXB0KG1lbnUuaWQsIGVkaXRQcm9tcHRQYXRoLCBlZGl0UHJvbXB0VmFsdWUpO1xuICAgICAgc2V0TWVudSh1cGRhdGVkKTtcbiAgICAgIHNldEVkaXRQcm9tcHRQYXRoKG51bGwpO1xuICAgICAgcHVzaChcIlByb21wdCB1cGRhdGVkXCIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFsZXJ0KFwiRmFpbGVkIHRvIHVwZGF0ZSBwcm9tcHRcIik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9wZW5BZGRPcHRpb24gPSAocGF0aDogc3RyaW5nW10pID0+IHtcbiAgICBzZXRBZGRPcHRpb25QYXRoKHBhdGgpO1xuICAgIHNldE5ld09wdGlvbktleShcIlwiKTtcbiAgICBzZXROZXdPcHRpb25UZXh0KFwiXCIpO1xuICB9O1xuXG4gIGNvbnN0IHN1Ym1pdEFkZE9wdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIW1lbnUgfHwgIWFkZE9wdGlvblBhdGggfHwgIW5ld09wdGlvbktleSB8fCAhbmV3T3B0aW9uVGV4dCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgYXBpLnVwc2VydE9wdGlvbihtZW51LmlkLCBhZGRPcHRpb25QYXRoLCBuZXdPcHRpb25LZXksIG5ld09wdGlvblRleHQpO1xuICAgICAgc2V0TWVudSh1cGRhdGVkKTtcbiAgICAgIHNldEFkZE9wdGlvblBhdGgobnVsbCk7XG4gICAgICBwdXNoKFwiT3B0aW9uIGFkZGVkXCIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFsZXJ0KFwiRmFpbGVkIHRvIGFkZCBvcHRpb25cIik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZU9wdGlvbiA9IGFzeW5jIChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIW1lbnUpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IGFwaS5kZWxldGVPcHRpb24obWVudS5pZCwgcGF0aCwga2V5KTtcbiAgICAgIHNldE1lbnUodXBkYXRlZCk7XG4gICAgICBwdXNoKFwiT3B0aW9uIGRlbGV0ZWRcIik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYWxlcnQoXCJGYWlsZWQgdG8gZGVsZXRlIG9wdGlvblwiKTtcbiAgICB9XG4gI
640H07XG5cbiAgY29uc3QgY2FuT3BlcmF0ZSA9IHBob25lTnVtYmVyLmxlbmd0aCA+IDM7XG5cbiAgaWYgKCF0b2tlbikge1xuICAgIHJldHVybiA8TG9naW4gb25Mb2dpbj17aGFuZGxlTG9naW59IC8+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWluLWgtc2NyZWVuIGJnLXppbmMtNTAgZGFyazpiZy16aW5jLTk1MFwiPlxuICAgICAgey8qIFNpZGViYXIgKi99XG4gICAgICA8U2lkZWJhciBvbkxvZ291dD17aGFuZGxlTG9nb3V0fSBhY3RpdmU9e3ZpZXd9IG9uTmF2aWdhdGU9e3NldFZpZXd9IC8+XG5cbiAgICAgIHsvKiBNYWluIENvbnRlbnQgQXJlYSAqL31cbiAgICAgIDxtYWluIGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBwLTggc3BhY2UteS04XCI+XG4gICAgICAgICAge3ZpZXcgPT09IFwid2hpdGVsaXN0XCIgPyAoXG4gICAgICAgICAgICA8QmV0YVdoaXRlbGlzdCAvPlxuICAgICAgICAgICkgOiB2aWV3ID09PSBcImNvbXBhbnlEaXJlY3RvcnlcIiA/IChcbiAgICAgICAgICAgIDxDb21wYW55RGlyZWN0b3J5IC8+XG4gICAgICAgICAgKSA6IHZpZXcgPT09IFwibG9nc1wiID8gKFxuICAgICAgICAgICAgPEhvbGRmcmVlTG9ncyAvPlxuICAgICAgICAgICkgOiB2aWV3ID09PSBcImFjdGl2aXR5TG9nc1wiID8gKFxuICAgICAgICAgICAgPEFjdGl2aXR5TG9ncyAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMSBib3JkZXItYiBib3JkZXItemluYy0yMDAgcGItNSBkYXJrOmJvcmRlci16aW5jLTgwMFwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZCB0cmFja2luZy10aWdodCB0ZXh0LXppbmMtOTAwIGRhcms6dGV4dC16aW5jLTUwXCI+SVZSIE1lbnUgRWRpdG9yPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCBkYXJrOnRleHQtemluYy00MDBcIj5Db25maWd1cmUgcGhvbmUgdHJlZXMgYW5kIHByb21wdHMgZm9yIHlvdXIgQUkgYWdlbnRzLjwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtOCBsZzpncmlkLWNvbHMtMTJcIj5cbiAgICAgICAgICAgIHsvKiBMZWZ0IENvbHVtbjogQ29udHJvbHMgKDQvMTIpICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZzpjb2wtc3Bhbi00IHNwYWNlLXktNlwiPlxuICAgICAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXppbmMtNTAvNTAgcC00IGJvcmRlci1iIGJvcmRlci16aW5jLTEwMCBkYXJrOmJnLXppbmMtOTAwLzUwIGRhcms6Ym9yZGVyLXppbmMtODAwXCI+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNtXCI+VGFyZ2V0IFNlbGVjdGlvbjwvaDM+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTQgc3BhY2UteS00XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtNTAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlclwiPlBob25lIE51bWJlcjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMyB0b3AtMi41IHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29ucy5QaG9uZSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwbC05XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIisxMjM0NTY3ODkwXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cGhvbmVOdW1iZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFBob25lTnVtYmVyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICB2Y
640XJpYW50PVwib3V0bGluZVwiIFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUxvYWR9IFxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuT3BlcmF0ZSB8fCBsb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbnMuU2VhcmNoIGNsYXNzTmFtZT1cIm1yLTIgaC00IHctNFwiIC8+IHtsb2FkaW5nID8gXCIuLi5cIiA6IFwiTG9hZFwifVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDcmVhdGV9IFxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuT3BlcmF0ZSB8fCBsb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbnMuUGx1cyBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPiBDcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9DYXJkPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWJsdWUtMTAwIGJnLWJsdWUtNTAvNTAgcC00IHRleHQtc20gdGV4dC1ibHVlLTkwMCBkYXJrOmJvcmRlci1ibHVlLTkwMC8zMCBkYXJrOmJnLWJsdWUtOTAwLzEwIGRhcms6dGV4dC1ibHVlLTIwMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPEljb25zLkFsZXJ0IGNsYXNzTmFtZT1cImgtNSB3LTUgc2hyaW5rLTBcIiAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZFwiPlF1aWNrIFRpcDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBvcGFjaXR5LTkwXCI+U3RhcnQgYnkgZGVmaW5pbmcgdGhlIFJvb3QgUHJvbXB0LiBBZGRpbmcgb3B0aW9ucyAoZS5nLiBLZXkgXCIxXCIpIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBicmFuY2hlcy48L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIFJpZ2h0IENvbHVtbjogRWRpdG9yICg4LzEyKSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGc6Y29sLXNwYW4tOFwiPlxuICAgICAgICAgICAgICB7IW1lbnUgPyAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtNjQgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQteGwgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItemluYy0yMDAgYmctemluYy01MC81MCB0ZXh0LXppbmMtNDAwIGRhcms6Ym9yZGVyLXppbmMtODAwIGRhcms6YmctemluYy05MDAvNTBcIj5cbiAgICAgICAgICAgICAgICAgIDxJY29ucy5UcmVlIGNsYXNzTmFtZT1cImgtMTIgdy0xMiBtYi00IG9wYWNpdHktNTBcIiAvPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj5ObyBtZW51IHNlbGVjdGVkPC9wPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14c1wiPkVudGVyIGEgcGhvbmUgbnVtYmVyIHRvIGxvYWQgb3IgY3JlYXRlIGEgdHJlZS48L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTZcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZFwiPlRyZWUgU3RydWN0dXJlPC9oMj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCYWRnZT5JRDoge21lbnUuaWR9PC9CYWRnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCYWRnZSBjbGFzc05hbWU9XCJiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi03MDAgYm9yZGVyLWdyZWVuLTIwMCBkYXJrOmJnLWdyZWVuLTkwMC8zMCBkYXJrOnRleHQtZ3JlZW4tNDAwIGRhcms6Ym9yZGVyLWdyZWVuLTkwMFwiPkFjdGl2ZTwvQmFkZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIHsvKiBWaXN1YWwgRWRpdG9yIChSZXBsYWNlcyBPbGQgTGlzdCBFZGl0b3IpICovfVxuICAgICAgICAgICAgICAgICAgPFRyZWVWaXN1YWxpemVyIFxuICAgICAgICAgICAgICAgICAgICByb290PXttZW51Lm1lbnV9IFxuICAgICAgICAgICAgICAgICAgICBvbkVkaXRQcm9tcHQ9e29wZW5FZGl0UHJvbXB0fVxuICAgICAgICAgICAgICAgICAgICBvbkFkZE9wdGlvbj17b3BlbkFkZE9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgb25EZWxldGVPcHRpb249e2hhbmRsZURlbGV0ZU9wdGlvbn1cbiAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgIHsvKiBPbGQgRWRpdG9yIChDb2xsYXBzZWQgb3IgUmVtb3ZlZD8gS2VlcGluZyBmb3IgZmFsbGJhY2sgYXMgcmVxdWVzdGVkKSAqL31cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3BhY2l0eS01MCBob3ZlcjpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtY2VudGVyIG1iLTIgdXBwZXJjYXNlIHRleHQtemluYy00MDBcIj5MZWdhY3kgTGlzdCBFZGl0b3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPENhcmQgY2xhc3NOYW1lPVwiYmctd2h
640pdGUgc2hhZG93LXNtIGRhcms6YmctemluYy05NTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE5vZGVFZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudUlkPXttZW51LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlPXttZW51Lm1lbnV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9e1tdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aD17MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25NZW51VXBkYXRlZD17KG0pID0+IHNldE1lbnUobSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0PXtwdXNofVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7LyogTW9kYWxzICovfVxuICAgICAgICA8TW9kYWwgXG4gICAgICAgICAgaXNPcGVuPXshIWVkaXRQcm9tcHRQYXRofSBcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRFZGl0UHJvbXB0UGF0aChudWxsKX1cbiAgICAgICAgICB0aXRsZT1cIkVkaXQgUHJvbXB0XCJcbiAgICAgICAgICBmb290ZXI9e1xuICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtzdWJtaXRFZGl0UHJvbXB0fT5TYXZlPC9CdXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkVudGVyIHRoZSB0ZXh0IG9yIFNTTUwgdGhhdCB3aWxsIGJlIHNwb2tlbiB0byB0aGUgY2FsbGVyLjwvcD5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtMzIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtMjAwIGJnLXRyYW5zcGFyZW50IHAtMyB0ZXh0LXNtIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXppbmMtOTAwIGRhcms6Ym9yZGVyLXppbmMtODAwIGRhcms6Zm9jdXM6cmluZy16aW5jLTEwMFwiXG4gICAgICAgICAgICAgIHZhbHVlPXtlZGl0UHJvbXB0VmFsdWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHNldEVkaXRQcm9tcHRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBUaGFua3MgZm9yIGNhbGxpbmcuIFByZXNzIDEgZm9yIFNhbGVzLlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L01vZGFsPlxuXG4gICAgICAgIDxNb2RhbCBcbiAgICAgICAgICBpc09wZW49eyEhYWRkT3B0aW9uUGF0aH0gXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0QWRkT3B0aW9uUGF0aChudWxsKX1cbiAgICAgICAgICB0aXRsZT1cIkFkZCBPcHRpb25cIlxuICAgICAgICAgIGZvb3Rlcj17XG4gICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e3N1Ym1pdEFkZE9wdGlvbn0gZGlzYWJsZWQ9eyFuZXdPcHRpb25LZXkgfHwgIW5ld09wdGlvblRleHR9PkFkZDwvQnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTQgZ2FwLTQgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtcmlnaHRcIj5LZXk8L2xhYmVsPlxuICAgICAgICAgICAgICA8SW5wdXQgXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY29sLXNwYW4tM1wiIFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiAxXCIgXG4gICAgICAgICAgICAgICAgdmFsdWU9e25ld09wdGlvbktleX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBzZXROZXdPcHRpb25LZXkoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTQgZ2FwLTQgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtcmlnaHRcIj5MYWJlbDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxJbnB1dCBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJjb2wtc3Bhbi0zXCIgXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIFNhbGVzIERlcGFydG1lbnRcIiBcbiAgICAgICAgICAgICAgICB2YWx1ZT17bmV3T3B0aW9uVGV4dH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBzZXROZXdPcHRpb25UZXh0KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L01vZGFsPlxuXG4gICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcDtcbiJdLCJmaWxlIjoiL2hvbWUvaG9sZGZyZWUvcmVwb3MvaG9sZGZyZWUvaXZyX2FkbWluX2ZlL3NyYy9BcHAudHN4In0=
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.