1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/dashboard/MedicalCurrentContextRule.jsx");import.meta.env = {"BASE_URL": "/", "DEV": true, "MODE": "development", "PROD": false, "SSR": false, "VITE_BACKEND_URL": "https://doctorassist.ai/api/", "VITE_QUALITY_CHECKER_SECRET": "another-super-secure-one-time-secret"};import __vite__cjsImport0_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=dfc5466a"; const Fragment = __vite__cjsImport0_react_jsxDevRuntime["Fragment"]; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"]; 2var _s = $RefreshSig$(); 3import __vite__cjsImport1_react from "/node_modules/.vite/deps/react.js?v=dfc5466a"; const React = __vite__cjsImport1_react.__esModule ? __vite__cjsImport1_react.default : __vite__cjsImport1_react; const useState = __vite__cjsImport1_react["useState"]; const useEffect = __vite__cjsImport1_react["useEffect"]; const useRef = __vite__cjsImport1_react["useRef"]; 4import { useLocation, useNavigate } from "/node_modules/.vite/deps/react-router-dom.js?v=dfc5466a"; 5import logo from "/src/assets/lodo_only.png?import"; 6import { 7 Home, 8 Settings, 9 Bed, 10 MessageCircle, 11 Calendar, 12 Activity, 13 LogOut, 14 UserPlus, 15 Shield, 16 Brain, 17 Stethoscope, 18 ClipboardList, 19 Gauge, 20 Sparkles, 21 Target, 22 FileText, 23 CheckCircle, 24 Plus, 25 Notebook 26} from "/node_modules/.vite/deps/lucide-react.js?v=dfc5466a"; 27const API_BASE_URL = import.meta.env.VITE_BACKEND_URL; 28const T = { 29 bg: "#ffffff", 30 bgAlt: "#fafafa", 31 bgTert: "#f5f5f5", 32 text: "#000000", 33 textSec: "#444444", 34 textMuted: "#888888", 35 border: "#e0e0e0", 36 borderStr: "#000000", 37 font: "'Open Sans', sans-serif" 38}; 39const SIDEBAR_W = "240px"; 40const CSS = ` 41 @import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600&display=swap'); 42 *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } 43 ::selection { background: #000; color: #fff; } 44 body, html { font-family: ${T.font}; font-weight: 300; background: ${T.bg}; color: ${T.text}; -webkit-font-smoothing: antialiased; } 45 input, select, textarea, button { font-family: ${T.font}; font-weight: 300; } 46 47 .da-nav-btn { transition: background 0.15s, color 0.15s; } 48 .da-nav-btn:hover { background: ${T.bgAlt} !important; color: ${T.text} !important; } 49 .da-nav-btn.da-active { background: ${T.bgAlt} !important; color: ${T.text} !important; font-weight: 400 !important; border-left-color: ${T.borderStr} !important; } 50 51 .da-btn-primary:hover { background: transparent !important; color: ${T.text} !important; } 52 .da-btn-outline:hover { border-color: ${T.borderStr} !important; color: ${T.text} !important; } 53 .da-btn-ghost:hover { background: ${T.bgAlt} !important; } 54 55 .da-tab-btn { transition: all 0.15s; cursor: pointer; } 56 .da-tab-btn:hover { background: ${T.bgAlt} !important; color: ${T.text} !important; } 57 58 .da-cat-row:hover { background: ${T.bgAlt} !important; } 59 .da-sidebar-scroll::-webkit-scrollbar { display: none; } 60 .da-sidebar-scroll { -ms-overflow-style: none; scrollbar-width: none; } 61 62 .da-list-scroll { max-height: 520px; overflow-y: auto; } 63 .da-list-scroll::-webkit-scrollbar { width: 3px; } 64 .da-list-scroll::-webkit-scrollbar-thumb { background: ${T.border}; } 65 66 .da-textarea { 67 width: 100%; padding: 0.75rem 0.875rem; 68 border: 1px solid ${T.border}; background: ${T.bg}; 69 font-family: 'Courier New', monospace; font-weight: 300; 70 font-size: 0.78rem; color: ${T.text}; 71 outline: none; resize: vertical; line-height: 1.6; 72 transition: border-color 0.15s; 73 } 74 .da-textarea:focus { border-color: ${T.borderStr}; } 75 76 .da-input { 77 width: 100%; height: 40px; padding: 0 0.875rem; 78 border: 1px solid ${T.border}; background: ${T.bg}; 79 font-family: ${T.font}; font-weight: 300; 80 font-size: 0.82rem; color: ${T.text}; 81 outline: none; transition: border-color 0.15s; 82 } 83 .da-input:focus { border-color: ${T.borderStr}; } 84 .da-input::placeholder { color: #bbb; } 85 86 @keyframes da-fadeup { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } } 87 .da-fadein { animation: da-fadeup 0.18s ease; } 88`; 89const S = { 90 secLabel: { 91 fontSize: "0.6rem", 92 textTransform: "uppercase", 93 letterSpacing: "0.18em", 94 color: T.textMuted, 95 fontWeight: 400, 96 display: "block", 97 marginBottom: "0.2rem" 98 }, 99 btnPrimary: { 100 padding: "0.55rem 1.25rem", 101 background: T.text, 102 color: T.bg, 103 border: `1px solid ${T.text}`, 104 fontSize: "0.75rem", 105 fontWeight: 400, 106 cursor: "pointer", 107 fontFamily: T.font, 108 transition: "all 0.15s", 109 display: "inline-flex", 110 alignItems: "center",
111 gap: "6px", 112 letterSpacing: "0.04em" 113 }, 114 btnOutline: { 115 padding: "0.55rem 1.25rem", 116 background: T.bg, 117 color: T.textSec, 118 border: `1px solid ${T.border}`, 119 fontSize: "0.75rem", 120 fontWeight: 300, 121 cursor: "pointer", 122 fontFamily: T.font, 123 transition: "all 0.15s", 124 display: "inline-flex", 125 alignItems: "center", 126 gap: "6px" 127 }, 128 card: { 129 background: T.bg, 130 border: `1px solid ${T.border}`, 131 padding: "1.5rem" 132 }, 133 cardHeader: { 134 display: "flex", 135 alignItems: "center", 136 gap: "10px", 137 paddingBottom: "1rem", 138 marginBottom: "1.25rem", 139 borderBottom: `1px solid ${T.border}` 140 } 141}; 142const MedicalCurrentContextRule = () => { 143 _s(); 144 const location = useLocation(); 145 const navigate = useNavigate(); 146 const currentPath = location.pathname; 147 const queryParams = new URLSearchParams(location.search); 148 let doctorId = queryParams.get("doctor_id"); 149 if (!doctorId) { 150 const match = location.search.match(/doctor_id=([^&]+)/); 151 if (match) doctorId = match[1]; 152 } 153 const [medicalCategoriesList, setMedicalCategoriesList] = useState([]); 154 const [currentCategoriesList, setCurrentCategoriesList] = useState([]); 155 const [showNewMedicalInput, setShowNewMedicalInput] = useState(false); 156 const [showNewCurrentInput, setShowNewCurrentInput] = useState(false); 157 const [newMedicalCategory, setNewMedicalCategory] = useState(""); 158 const [newCurrentCategory, setNewCurrentCategory] = useState(""); 159 const [doctorName, setDoctorName] = useState(""); 160 const [doctorSpeciality, setDoctorSpeciality] = useState(""); 161 const [medicalCategoryRules, setMedicalCategoryRules] = useState({}); 162 const [currentCategoryRules, setCurrentCategoryRules] = useState({}); 163 const [doctorMedicalRulesCache, setDoctorMedicalRulesCache] = useState({}); 164 const [doctorCurrentRulesCache, setDoctorCurrentRulesCache] = useState({}); 165 const [focusedField, setFocusedField] = useState(null); 166 const [activeTab, setActiveTab] = useState("medical"); 167 const [authChecked, setAuthChecked] = useState(false); 168 const [formData, setFormData] = useState({ 169 specialty: "", 170 medicalOutputCategories: [], 171 currentOutputCategories: [], 172 medicalCategoryRules: {}, 173 currentCategoryRules: {}, 174 isActive: false 175 }); 176 const medicalScrollRef = useRef(null); 177 const currentScrollRef = useRef(null); 178 useEffect(() => { 179 if (!doctorId) { 180 navigate("/login"); 181 return; 182 } 183 fetch(`${API_BASE_URL}/hms/users/doctors/verify`, { credentials: "include" }).then((r) => r.ok ? r.json() : Promise.reject()).then((data) => { 184 if (doctorId !== data.doctor.sys_user_id) navigate("/login"); 185 }).catch(() => navigate("/login")).finally(() => setAuthChecked(true)); 186 }, [doctorId, navigate]); 187 useEffect(() => { 188 if (!doctorId) return; 189 fetch(`${API_BASE_URL}/hms/users/speciality/users/patient/get_doctor_details`, { 190 method: "POST", 191 headers: { "Content-Type": "application/json" }, 192 body: JSON.stringify({ doctor_id: doctorId }) 193 }).then((r) => r.json()).then((d) => { 194 if (d.status === "success") { 195 setDoctorName(d.doctor_name); 196 setDoctorSpeciality(d.doctor_speciality); 197 } 198 }).catch(console.error); 199 }, [doctorId]); 200 useEffect(() => { 201 if (!doctorId || !doctorSpeciality) return; 202 const load = async () => { 203 try { 204 const drRes = await fetch(`${API_BASE_URL}/hms/users/data/context/get_DoctorMedicalCurrentRule/${doctorId}`, { credentials: "include" }); 205 const drData = await drRes.json(); 206 if (drData.status === "success") { 207 const rule = drData.data; 208 const mCats = rule.medical_context.map((i) => i.medical_output_category); 209 const mRules = Object.fromEntries(rule.medical_context.map((i) => [i.medical_output_category, i.rule_text])); 210 const cCats = rule.current_context.map((i) => i.current_output_category); 211 const cRules = Object.fromEntries(rule.current_context.map((i) => [i.current_output_category, i.rule_text])); 212 const adminRes2 = await fetch(`${API_BASE_URL}/hms/users/data/context/get_MedicalCurrentAdminRules`, { credentials: "include" }); 213 const adminData2 = await adminRes2.json(); 214 if (adminData2.status === "success") { 215 const m = adminData2.data.find((r) => r.speciality === doctorSpeciality); 216 if (m) { 217 const aMCats = m.medical_context.map((i) => i.medical_output_category); 218 const aCCats = m.current_context.map((i) => i.current_output_category); 219 setMedicalCategoriesList([.../* @__PURE__ */ new Set([...aMCats, ...mCats])]); 220 setCurrentCategoriesList([.../* @__PURE__ */ new Set([...aCCats, ...cCats])]); 221 } 222 } 223 setMedicalCategoryRules(mRules); 224 setCurrentCategoryRules(cRules); 225 setDoctorMedicalRulesCache(mRules); 226 setDoctorCurrentRulesCache(cRules); 227 setFormData({ specialty: rule.speciality || "", medicalOutputCategories: mC
227ats, currentOutputCategories: cCats, medicalCategoryRules: mRules, currentCategoryRules: cRules, isActive: rule.is_active ?? true }); 228 return; 229 } 230 const adminRes = await fetch(`${API_BASE_URL}/hms/users/data/context/get_MedicalCurrentAdminRules`, { credentials: "include" }); 231 const adminData = await adminRes.json(); 232 if (adminData.status === "success") { 233 const m = adminData.data.find((r) => r.speciality === doctorSpeciality); 234 if (!m) return; 235 const mCats = m.medical_context.map((i) => i.medical_output_category); 236 const mRules = Object.fromEntries(m.medical_context.map((i) => [i.medical_output_category, i.rule_text])); 237 const cCats = m.current_context.map((i) => i.current_output_category); 238 const cRules = Object.fromEntries(m.current_context.map((i) => [i.current_output_category, i.rule_text])); 239 setMedicalCategoriesList(mCats); 240 setCurrentCategoriesList(cCats); 241 setMedicalCategoryRules(mRules); 242 setCurrentCategoryRules(cRules); 243 setFormData({ specialty: m.speciality || "", medicalOutputCategories: mCats, currentOutputCategories: cCats, medicalCategoryRules: mRules, currentCategoryRules: cRules, isActive: true }); 244 } 245 } catch (e) { 246 console.error(e); 247 } 248 }; 249 load(); 250 }, [doctorId, doctorSpeciality]); 251 useEffect(() => { 252 if (medicalScrollRef.current) medicalScrollRef.current.scrollTop = medicalScrollRef.current.scrollHeight; 253 }, [medicalCategoriesList]); 254 useEffect(() => { 255 if (currentScrollRef.current) currentScrollRef.current.scrollTop = currentScrollRef.current.scrollHeight; 256 }, [currentCategoriesList]); 257 const handleLogout = async () => { 258 try { 259 await fetch(`${API_BASE_URL}/hms/users/auth/logout`, { method: "POST", credentials: "include" }); 260 } finally { 261 navigate("/login"); 262 } 263 }; 264 const handleMedicalRuleChange = (cat, val) => { 265 setMedicalCategoryRules((p) => ({ ...p, [cat]: val })); 266 setFormData((p) => ({ ...p, medicalCategoryRules: { ...p.medicalCategoryRules, [cat]: val } })); 267 setDoctorMedicalRulesCache((p) => ({ ...p, [cat]: val })); 268 }; 269 const handleCurrentRuleChange = (cat, val) => { 270 setCurrentCategoryRules((p) => ({ ...p, [cat]: val })); 271 setFormData((p) => ({ ...p, currentCategoryRules: { ...p.currentCategoryRules, [cat]: val } })); 272 setDoctorCurrentRulesCache((p) => ({ ...p, [cat]: val })); 273 }; 274 const handleAddMedicalCategory = () => { 275 const cat = newMedicalCategory.trim(); 276 if (!cat) return; 277 setMedicalCategoriesList((p) => [...p, cat]); 278 setMedicalCategoryRules((p) => ({ ...p, [cat]: "" })); 279 setDoctorMedicalRulesCache((p) => ({ ...p, [cat]: "" })); 280 setFormData((p) => ({ ...p, medicalOutputCategories: [...p.medicalOutputCategories, cat], medicalCategoryRules: { ...p.medicalCategoryRules, [cat]: "" } })); 281 setNewMedicalCategory(""); 282 setShowNewMedicalInput(false); 283 setTimeout(() => { 284 if (medicalScrollRef.current) medicalScrollRef.current.scrollTop = medicalScrollRef.current.scrollHeight; 285 }, 100); 286 }; 287 const handleAddCurrentCategory = () => { 288 const cat = newCurrentCategory.trim(); 289 if (!cat) return; 290 setCurrentCategoriesList((p) => [...p, cat]); 291 setCurrentCategoryRules((p) => ({ ...p, [cat]: "" })); 292 setDoctorCurrentRulesCache((p) => ({ ...p, [cat]: "" })); 293 setFormData((p) => ({ ...p, currentOutputCategories: [...p.currentOutputCategories, cat], currentCategoryRules: { ...p.currentCategoryRules, [cat]: "" } })); 294 setNewCurrentCategory(""); 295 setShowNewCurrentInput(false); 296 }; 297 const handleMedicalCategoryChange = async (cat) => { 298 const isSelected = formData.medicalOutputCategories.includes(cat); 299 if (isSelected) { 300 const updated = formData.medicalOutputCategories.filter((c) => c !== cat); 301 setFormData((p) => ({ ...p, medicalOutputCategories: updated })); 302 } else { 303 let ruleText = ""; 304 try { 305 const res = await fetch(`${API_BASE_URL}/hms/users/data/context/get_MedicalCurrentAdminRules`, { credentials: "include" }); 306 const data = await res.json(); 307 if (data.status === "success") { 308 const m = data.data.find((r) => r.speciality === doctorSpeciality); 309 ruleText = m?.medical_context.find((i) => i.medical_output_category === cat)?.rule_text || ""; 310 } 311 } catch { 312 } 313 const rule = doctorMedicalRulesCache[cat] ?? ruleText; 314 const updatedRules = { ...formData.medicalCategoryRules, [cat]: rule }; 315 setMedicalCategoryRules(updatedRules); 316 setFormData((p) => ({ ...p, medicalOutputCategories: [...p.medicalOutputCategories, cat], medicalCategoryRules: updatedRules })); 317 } 318 }; 319 const handleCurrentCategoryChange = async (cat) => { 320 const isSelected = formData.currentOutputCategories.includes(cat); 321 if (isSelected) { 322 setFormData((p) => ({ ...p, currentOutputCategories: p.currentOutputCategories.filter((c) => c !== cat) })); 323 } else { 324 let ruleText = "";
325 try { 326 const res = await fetch(`${API_BASE_URL}/hms/users/data/context/get_MedicalCurrentAdminRules`, { credentials: "include" }); 327 const data = await res.json(); 328 if (data.status === "success") { 329 const m = data.data.find((r) => r.speciality === doctorSpeciality); 330 ruleText = m?.current_context.find((i) => i.current_output_category === cat)?.rule_text || ""; 331 } 332 } catch { 333 } 334 const rule = doctorCurrentRulesCache[cat] ?? formData.currentCategoryRules?.[cat] ?? ruleText; 335 const updatedRules = { ...formData.currentCategoryRules, [cat]: rule }; 336 setCurrentCategoryRules(updatedRules); 337 setFormData((p) => ({ ...p, currentOutputCategories: [...p.currentOutputCategories, cat], currentCategoryRules: updatedRules })); 338 } 339 }; 340 const handleSubmit = async (e) => { 341 e.preventDefault(); 342 try { 343 const payload = { 344 doctor_id: doctorId, 345 speciality: doctorSpeciality, 346 medical_context: formData.medicalOutputCategories.map((cat) => ({ medical_output_category: cat, rule_text: formData.medicalCategoryRules[cat] || "" })), 347 current_context: formData.currentOutputCategories.map((cat) => ({ current_output_category: cat, rule_text: formData.currentCategoryRules[cat] || "" })), 348 is_active: formData.isActive 349 }; 350 const res = await fetch(`${API_BASE_URL}/hms/users/data/context/save_DoctorMedicalCurrentRule`, { 351 method: "POST", 352 headers: { "Content-Type": "application/json" }, 353 credentials: "include", 354 body: JSON.stringify(payload) 355 }); 356 if (res.ok) alert("Configuration saved successfully."); 357 else 358 alert("Failed to save configuration."); 359 } catch (e2) { 360 console.error(e2); 361 alert("Something went wrong."); 362 } 363 }; 364 if (!authChecked) return /* @__PURE__ */ jsxDEV("div", { style: { height: "100vh", display: "flex", alignItems: "center", justifyContent: "center", fontFamily: T.font, fontSize: "0.78rem", color: T.textMuted, textTransform: "uppercase", letterSpacing: "0.15em" }, children: "Verifying sessionâ¦" }, void 0, false, { 365 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 366 lineNumber: 331, 367 columnNumber: 5 368 }, this); 369 if (!doctorId) return /* @__PURE__ */ jsxDEV("div", { style: { height: "100vh", display: "flex", alignItems: "center", justifyContent: "center", fontFamily: T.font, fontSize: "0.82rem", color: T.text }, children: "Doctor ID missing. Please log in again." }, void 0, false, { 370 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 371 lineNumber: 336, 372 columnNumber: 5 373 }, this); 374 const navItems = [ 375 { label: "Dashboard", icon: /* @__PURE__ */ jsxDEV(Home, { size: 14 }, void 0, false, { 376 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 377 lineNumber: 342, 378 columnNumber: 31 379 }, this), onClick: () => navigate(`/doctor-dashboard?doctor_id=${doctorId}`) }, 380 { label: "Medical Context Skills", icon: /* @__PURE__ */ jsxDEV(Calendar, { size: 14 }, void 0, false, { 381 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 382 lineNumber: 343, 383 columnNumber: 44 384 }, this), active: currentPath.includes("medical-current-context-rule"), onClick: () => navigate(`/medical-current-context-rule-settings?doctor_id=${doctorId}`) }, 385 { label: "Structured Note Skills", icon: /* @__PURE__ */ jsxDEV(Notebook, { size: 14 }, void 0, false, { 386 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 387 lineNumber: 344, 388 columnNumber: 44 389 }, this), onClick: () => navigate(`/structured-note-instructions-settings?doctor_id=${doctorId}`) }, 390 { label: "Guidelines Skills", icon: /* @__PURE__ */ jsxDEV(FileText, { size: 14 }, void 0, false, { 391 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 392 lineNumber: 345, 393 columnNumber: 39 394 }, this), onClick: () => navigate(`/guidelines-settings?doctor_id=${doctorId}`) } 395 ]; 396 const renderCategorySection = (type) => { 397 const isMedical = type === "medical"; 398 const categories = isMedical ? medicalCategoriesList : currentCategoriesList; 399 const selected = isMedical ? formData.medicalOutputCategories : formData.currentOutputCategories; 400 const rules = isMedical ? medicalCategoryRules : currentCategoryRules; 401 const scrollRef = isMedical ? medicalScrollRef : currentScrollRef; 402 const showNew = isMedical ? showNewMedicalInput : showNewCurrentInput; 403 const newVal = isMedical ? newMedicalCategory : newCurrentCategory; 404 const setShowNew = isMedical ? setShowNewMedicalInput : setShowNewCurrentInput; 405 const setNewVal = isMedical ? setNewMedicalCategory : setNewCurrentCategory; 406 const onAdd = isMedical ? handleAddMedicalCategory : handleAddCurrentCategory; 407 const onChange = isMedical ? handleMedicalCategoryChange : handleCurrentCategoryChange; 408 const onRuleChange = isMedical ? handleMedicalRuleChange : handleCurrentRuleChange; 409 const fieldPrefix = isMedical ? "medical" : "current"; 410 const sectionTitle = isMedical ? "Medical Output Categories" : "Current Output Categories"; 411 const sectionSub = isMedical ? "Select categories and define rules for each medical context" : "Select categories and define rules for each current patient context"; 412 const Icon = isMedical ? ClipboardList : Gauge; 413 return /* @__PURE__ */ jsxDEV("div", { style: { ...S.card, marginBottom: "1.5rem" }, className: "da-fadein", children: [
414 /* @__PURE__ */ jsxDEV("div", { style: S.cardHeader, children: [ 415 /* @__PURE__ */ jsxDEV("div", { style: { width: 36, height: 36, background: T.bgAlt, border: `1px solid ${T.border}`, display: "flex", alignItems: "center", justifyContent: "center", flexShrink: 0 }, children: /* @__PURE__ */ jsxDEV(Icon, { size: 16, color: T.textMuted }, void 0, false, { 416 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 417 lineNumber: 372, 418 columnNumber: 13 419 }, this) }, void 0, false, { 420 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 421 lineNumber: 371, 422 columnNumber: 11 423 }, this), 424 /* @__PURE__ */ jsxDEV("div", { children: [ 425 /* @__PURE__ */ jsxDEV("p", { style: { fontSize: "0.9rem", fontWeight: 400, color: T.text, margin: 0 }, children: sectionTitle }, void 0, false, { 426 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 427 lineNumber: 375, 428 columnNumber: 13 429 }, this),
430 /* @__PURE__ */ jsxDEV("p", { style: { fontSize: "0.7rem", color: T.textMuted, margin: "2px 0 0", fontWeight: 300 }, children: sectionSub }, void 0, false, { 431 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 432 lineNumber: 376, 433 columnNumber: 13 434 }, this) 435 ] }, void 0, true, { 436 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 437 lineNumber: 374, 438 columnNumber: 11 439 }, this), 440 /* @__PURE__ */ jsxDEV("span", { style: { marginLeft: "auto", ...S.secLabel, margin: 0 }, children: [ 441 selected.length, 442 " selected" 443 ] }, void 0, true, { 444 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 445 lineNumber: 378, 446 columnNumber: 11 447 }, this) 448 ] }, void 0, true, { 449 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 450 lineNumber: 370, 451 columnNumber: 9 452 }, this), 453 /* @__PURE__ */ jsxDEV("div", { style: { border: `1px solid ${T.border}`, background: T.bgAlt }, children: [
454 /* @__PURE__ */ jsxDEV("div", { style: { padding: "0.65rem 1rem", borderBottom: `1px solid ${T.border}`, display: "flex", justifyContent: "space-between", alignItems: "center" }, children: /* @__PURE__ */ jsxDEV("span", { style: { fontSize: "0.65rem", textTransform: "uppercase", letterSpacing: "0.12em", color: T.textMuted }, children: [ 455 "Available Categories (", 456 categories.length, 457 ")" 458 ] }, void 0, true, { 459 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 460 lineNumber: 385, 461 columnNumber: 13 462 }, this) }, void 0, false, { 463 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 464 lineNumber: 384, 465 columnNumber: 11 466 }, this), 467 /* @__PURE__ */ jsxDEV("div", { ref: scrollRef, className: "da-list-scroll", style: { background: T.bg }, children: categories.map((cat, i) => { 468 const isSelected = selected.includes(cat); 469 return /* @__PURE__ */ jsxDEV("div", { style: { 470 borderBottom: `1px solid ${T.border}`, 471 background: isSelected ? T.bgAlt : T.bg, 472 transition: "background 0.15s" 473 }, children: [
474 /* @__PURE__ */ jsxDEV( 475 "div", 476 { 477 className: "da-cat-row", 478 style: { display: "flex", alignItems: "center", gap: "10px", padding: "0.75rem 1rem", cursor: "pointer" }, 479 onClick: () => onChange(cat), 480 children: [ 481 /* @__PURE__ */ jsxDEV( 482 "input", 483 { 484 type: "checkbox", 485 checked: isSelected, 486 onChange: () => onChange(cat), 487 style: { width: 15, height: 15, cursor: "pointer", accentColor: T.text, flexShrink: 0 } 488 }, 489 void 0, 490 false, 491 { 492 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 493 lineNumber: 404, 494 columnNumber: 21 495 }, 496 this 497 ), 498 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: "0.82rem", fontWeight: isSelected ? 400 : 300, color: T.text, flex: 1 }, children: cat }, void 0, false, { 499 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 500 lineNumber: 406, 501 columnNumber: 21 502 }, this),
503 isSelected && /* @__PURE__ */ jsxDEV(CheckCircle, { size: 13, color: T.textMuted }, void 0, false, { 504 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 505 lineNumber: 409, 506 columnNumber: 36 507 }, this) 508 ] 509 }, 510 void 0, 511 true, 512 { 513 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 514 lineNumber: 401, 515 columnNumber: 19 516 }, 517 this 518 ), 519 isSelected && /* @__PURE__ */ jsxDEV("div", { style: { padding: "0 1rem 1rem 2.5rem", background: T.bgAlt }, children: /* @__PURE__ */ jsxDEV("div", { style: { borderLeft: `2px solid ${T.borderStr}`, paddingLeft: "0.875rem" }, children: [ 520 /* @__PURE__ */ jsxDEV("label", { style: { ...S.secLabel, marginBottom: "0.35rem", display: "block" }, children: [ 521 "Rule definition for ", 522 cat 523 ] }, void 0, true, { 524 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 525 lineNumber: 416, 526 columnNumber: 25 527 }, this),
528 /* @__PURE__ */ jsxDEV( 529 "textarea", 530 { 531 className: "da-textarea", 532 rows: 5, 533 value: rules[cat] || formData[`${fieldPrefix}CategoryRules`]?.[cat] || "", 534 onChange: (e) => onRuleChange(cat, e.target.value), 535 onFocus: () => setFocusedField(`${fieldPrefix}-${cat}`), 536 onBlur: () => setFocusedField(null), 537 placeholder: `Define specific rules for ${cat}â¦`, 538 style: { borderColor: focusedField === `${fieldPrefix}-${cat}` ? T.borderStr : T.border } 539 }, 540 void 0, 541 false, 542 { 543 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 544 lineNumber: 419, 545 columnNumber: 25 546 }, 547 this 548 ), 549 /* @__PURE__ */ jsxDEV("p", { style: { fontSize: "0.65rem", color: T.textMuted, marginTop: "0.35rem", fontStyle: "italic", fontWeight: 300 }, children: [ 550 "Example: For ", 551 cat, 552 ", specify clinical criteria, required assessments, and protocols." 553 ] }, void 0, true, { 554 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 555 lineNumber: 429, 556 columnNumber: 25 557 }, this) 558 ] }, void 0, true, { 559 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 560 lineNumber: 415, 561 columnNumber: 23 562 }, this) }, void 0, false, { 563 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 564 lineNumber: 414, 565 columnNumber: 19 566 }, this) 567 ] }, i, true, { 568 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 569 lineNumber: 395, 570 columnNumber: 17 571 }, this); 572 }) }, void 0, false, { 573 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 574 lineNumber: 391, 575 columnNumber: 11 576 }, this),
577 /* @__PURE__ */ jsxDEV("div", { style: { borderTop: `1px dashed ${T.border}`, padding: "1rem" }, children: !showNew ? /* @__PURE__ */ jsxDEV( 578 "button", 579 { 580 className: "da-btn-outline", 581 style: { ...S.btnOutline, width: "100%", justifyContent: "center" }, 582 onClick: () => setShowNew(true), 583 children: [ 584 /* @__PURE__ */ jsxDEV(Plus, { size: 13 }, void 0, false, { 585 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 586 lineNumber: 445, 587 columnNumber: 17 588 }, this), 589 " Add New Category" 590 ] 591 }, 592 void 0, 593 true, 594 { 595 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 596 lineNumber: 443, 597 columnNumber: 13 598 }, 599 this 600 ) : /* @__PURE__ */ jsxDEV("div", { children: [ 601 /* @__PURE__ */ jsxDEV( 602 "input", 603 { 604 className: "da-input", 605 style: { marginBottom: "0.75rem" }, 606 type: "text", 607 value: newVal, 608 autoFocus: true, 609 onChange: (e) => setNewVal(e.target.value), 610 onKeyDown: (e) => { 611 if (e.key === "Enter") { 612 e.preventDefault(); 613 onAdd(); 614 } 615 }, 616 placeholder: "Enter new category nameâ¦" 617 }, 618 void 0, 619 false, 620 { 621 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 622 lineNumber: 449, 623 columnNumber: 17 624 }, 625 this 626 ),
627 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", gap: "0.625rem", justifyContent: "flex-end" }, children: [ 628 /* @__PURE__ */ jsxDEV( 629 "button", 630 { 631 className: "da-btn-outline", 632 style: S.btnOutline, 633 onClick: () => { 634 setShowNew(false); 635 setNewVal(""); 636 }, 637 children: "Cancel" 638 }, 639 void 0, 640 false, 641 { 642 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 643 lineNumber: 455, 644 columnNumber: 19 645 }, 646 this 647 ), 648 /* @__PURE__ */ jsxDEV("button", { className: "da-btn-primary", style: S.btnPrimary, onClick: onAdd, children: "Add Category" }, void 0, false, { 649 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 650 lineNumber: 459, 651 columnNumber: 19 652 }, this) 653 ] }, void 0, true, { 654 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 655 lineNumber: 454, 656 columnNumber: 17 657 }, this) 658 ] }, void 0, true, { 659 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 660 lineNumber: 448, 661 columnNumber: 13 662 }, this) }, void 0, false, { 663 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 664 lineNumber: 441, 665 columnNumber: 11 666 }, this) 667 ] }, void 0, true, { 668 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 669 lineNumber: 382, 670 columnNumber: 9 671 }, this) 672 ] }, void 0, true, { 673 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 674 lineNumber: 368, 675 columnNumber: 7 676 }, this); 677 }; 678 return /* @__PURE__ */ jsxDEV(Fragment, { children: [ 679 /* @__PURE__ */ jsxDEV("style", { children: CSS }, void 0, false, { 680 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 681 lineNumber: 473, 682 columnNumber: 7 683 }, this), 684 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", minHeight: "100vh", background: T.bg, fontFamily: T.font, fontWeight: 300, color: T.text }, children: [
685 /* @__PURE__ */ jsxDEV("aside", { style: { 686 width: SIDEBAR_W, 687 minHeight: "100vh", 688 position: "fixed", 689 top: 0, 690 left: 0, 691 bottom: 0, 692 zIndex: 100, 693 background: T.bg, 694 borderRight: `1px solid ${T.border}`, 695 display: "flex", 696 flexDirection: "column" 697 }, children: [ 698 /* @__PURE__ */ jsxDEV("div", { style: { padding: "1.5rem 1.5rem 1rem", borderBottom: `1px solid ${T.border}`, flexShrink: 0 }, children: [ 699 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", alignItems: "center", gap: "10px", marginBottom: "1.25rem" }, children: /* @__PURE__ */ jsxDEV("span", { style: { fontSize: "0.9rem", fontWeight: 400, letterSpacing: "-0.01em", color: T.text }, children: "Doctorassist.AI" }, void 0, false, { 700 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 701 lineNumber: 487, 702 columnNumber: 15 703 }, this) }, void 0, false, { 704 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 705 lineNumber: 485, 706 columnNumber: 13 707 }, this),
708 /* @__PURE__ */ jsxDEV("span", { style: S.secLabel, children: "Physician" }, void 0, false, { 709 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 710 lineNumber: 489, 711 columnNumber: 13 712 }, this), 713 /* @__PURE__ */ jsxDEV("p", { style: { fontSize: "0.85rem", fontWeight: 400, color: T.text, margin: 0 }, children: doctorName || "Loadingâ¦" }, void 0, false, { 714 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 715 lineNumber: 490, 716 columnNumber: 13 717 }, this), 718 /* @__PURE__ */ jsxDEV("p", { style: { fontSize: "0.7rem", color: T.textMuted, marginTop: "2px" }, children: doctorSpeciality || "â" }, void 0, false, { 719 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 720 lineNumber: 491, 721 columnNumber: 13 722 }, this) 723 ] }, void 0, true, { 724 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 725 lineNumber: 484, 726 columnNumber: 11 727 }, this),
728 /* @__PURE__ */ jsxDEV("nav", { className: "da-sidebar-scroll", style: { flex: 1, overflowY: "auto", padding: "0.75rem 0" }, children: [ 729 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: "0.58rem", textTransform: "uppercase", letterSpacing: "0.15em", color: T.textMuted, padding: "0.5rem 1.25rem", display: "block" }, children: "Settings" }, void 0, false, { 730 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 731 lineNumber: 496, 732 columnNumber: 13 733 }, this), 734 navItems.map( 735 (item, i) => /* @__PURE__ */ jsxDEV( 736 "button", 737 { 738 className: `da-nav-btn${item.active ? " da-active" : ""}`, 739 onClick: item.onClick, 740 style: { 741 width: "100%", 742 background: "transparent", 743 border: "none", 744 textAlign: "left", 745 padding: "0.55rem 1.25rem", 746 fontSize: "0.78rem", 747 fontWeight: item.active ? 400 : 300, 748 color: item.active ? T.text : T.textSec, 749 cursor: "pointer", 750 display: "flex", 751 alignItems: "flex-start", 752 gap: "10px", 753 fontFamily: T.font, 754 transition: "all 0.15s", 755 lineHeight: 1.4, 756 borderLeft: item.active ? `2px solid ${T.borderStr}` : "2px solid transparent" 757 }, 758 children: [
759 /* @__PURE__ */ jsxDEV("span", { style: { flexShrink: 0, marginTop: "2px" }, children: item.icon }, void 0, false, { 760 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 761 lineNumber: 509, 762 columnNumber: 17 763 }, this), 764 /* @__PURE__ */ jsxDEV("span", { children: item.label }, void 0, false, { 765 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 766 lineNumber: 510, 767 columnNumber: 17 768 }, this) 769 ] 770 }, 771 i, 772 true, 773 { 774 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 775 lineNumber: 498, 776 columnNumber: 13 777 }, 778 this 779 ) 780 ) 781 ] }, void 0, true, { 782 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 783 lineNumber: 495, 784 columnNumber: 11 785 }, this),
786 /* @__PURE__ */ jsxDEV("div", { style: { padding: "1rem 1.25rem", borderTop: `1px solid ${T.border}`, flexShrink: 0 }, children: /* @__PURE__ */ jsxDEV("button", { className: "da-btn-outline", style: { ...S.btnOutline, width: "100%", justifyContent: "center" }, onClick: handleLogout, children: [ 787 /* @__PURE__ */ jsxDEV(LogOut, { size: 13 }, void 0, false, { 788 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 789 lineNumber: 518, 790 columnNumber: 15 791 }, this), 792 " Logout" 793 ] }, void 0, true, { 794 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 795 lineNumber: 517, 796 columnNumber: 13 797 }, this) }, void 0, false, { 798 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 799 lineNumber: 516, 800 columnNumber: 11 801 }, this) 802 ] }, void 0, true, { 803 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 804 lineNumber: 477, 805 columnNumber: 9 806 }, this),
807 /* @__PURE__ */ jsxDEV("main", { style: { marginLeft: SIDEBAR_W, flex: 1, minWidth: 0, display: "flex", flexDirection: "column" }, children: [ 808 /* @__PURE__ */ jsxDEV("div", { style: { 809 position: "sticky", 810 top: 0, 811 zIndex: 50, 812 background: T.bg, 813 borderBottom: `1px solid ${T.border}`, 814 padding: "0.875rem 2rem", 815 display: "flex", 816 justifyContent: "space-between", 817 alignItems: "center" 818 }, children: [ 819 /* @__PURE__ */ jsxDEV("div", { children: [ 820 /* @__PURE__ */ jsxDEV("span", { style: S.secLabel, children: "Clinical Configuration" }, void 0, false, { 821 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 822 lineNumber: 534, 823 columnNumber: 15 824 }, this), 825 /* @__PURE__ */ jsxDEV("h1", { style: { fontSize: "1rem", fontWeight: 400, letterSpacing: "-0.01em", color: T.text, margin: 0 }, children: "Medical Current Context Instructions" }, void 0, false, { 826 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 827 lineNumber: 535, 828 columnNumber: 15 829 }, this) 830 ] }, void 0, true, { 831 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 832 lineNumber: 533, 833 columnNumber: 13 834 }, this),
835 /* @__PURE__ */ jsxDEV( 836 "button", 837 { 838 className: "da-btn-primary", 839 style: S.btnPrimary, 840 onClick: () => navigate(`/register-patient?doctor_id=${doctorId}`), 841 children: [ 842 /* @__PURE__ */ jsxDEV(UserPlus, { size: 13 }, void 0, false, { 843 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 844 lineNumber: 541, 845 columnNumber: 15 846 }, this), 847 " Register Patient â" 848 ] 849 }, 850 void 0, 851 true, 852 { 853 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 854 lineNumber: 539, 855 columnNumber: 13 856 }, 857 this 858 ) 859 ] }, void 0, true, { 860 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 861 lineNumber: 527, 862 columnNumber: 11 863 }, this), 864 /* @__PURE__ */ jsxDEV("div", { style: { padding: "1.5rem 2rem", flex: 1 }, children: [
865 /* @__PURE__ */ jsxDEV("div", { style: { border: `1px solid ${T.border}`, background: T.bgAlt, padding: "1rem 1.25rem", marginBottom: "1.5rem", display: "flex", gap: "1px", flexWrap: "wrap" }, children: [ 866 { label: "Specialty", val: doctorSpeciality || "Not Set" }, 867 { label: "Medical Categories", val: formData.medicalOutputCategories.length }, 868 { label: "Current Categories", val: formData.currentOutputCategories.length }, 869 { label: "Status", val: formData.isActive ? "Active" : "Inactive" } 870 ].map( 871 ({ label, val }) => /* @__PURE__ */ jsxDEV("div", { style: { background: T.bg, padding: "0.875rem 1.25rem", flex: "1 1 140px", minWidth: 130 }, children: [ 872 /* @__PURE__ */ jsxDEV("span", { style: S.secLabel, children: label }, void 0, false, { 873 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 874 lineNumber: 557, 875 columnNumber: 19 876 }, this), 877 /* @__PURE__ */ jsxDEV("p", { style: { fontSize: "0.95rem", fontWeight: 400, color: T.text, margin: 0 }, children: val }, void 0, false, { 878 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 879 lineNumber: 558, 880 columnNumber: 19 881 }, this) 882 ] }, label, true, { 883 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 884 lineNumber: 556, 885 columnNumber: 15 886 }, this) 887 ) }, void 0, false, { 888 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 889 lineNumber: 549, 890 columnNumber: 13 891 }, this),
892 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", borderBottom: `1px solid ${T.border}`, marginBottom: "1.5rem" }, children: [ 893 { key: "medical", label: "Medical Context", Icon: Brain }, 894 { key: "current", label: "Current Context", Icon: Target } 895 ].map( 896 ({ key, label, Icon }) => /* @__PURE__ */ jsxDEV( 897 "button", 898 { 899 className: "da-tab-btn", 900 onClick: () => setActiveTab(key), 901 style: { 902 padding: "0.75rem 1.25rem", 903 background: activeTab === key ? T.bg : T.bgAlt, 904 border: "none", 905 borderBottom: activeTab === key ? `2px solid ${T.borderStr}` : "2px solid transparent", 906 fontSize: "0.78rem", 907 fontWeight: activeTab === key ? 400 : 300, 908 color: activeTab === key ? T.text : T.textMuted, 909 display: "inline-flex", 910 alignItems: "center", 911 gap: "6px", 912 fontFamily: T.font, 913 cursor: "pointer", 914 marginBottom: "-1px" 915 }, 916 children: [
917 /* @__PURE__ */ jsxDEV(Icon, { size: 14 }, void 0, false, { 918 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 919 lineNumber: 581, 920 columnNumber: 19 921 }, this), 922 " ", 923 label 924 ] 925 }, 926 key, 927 true, 928 { 929 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 930 lineNumber: 569, 931 columnNumber: 15 932 }, 933 this 934 ) 935 ) }, void 0, false, { 936 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 937 lineNumber: 564, 938 columnNumber: 13 939 }, this), 940 /* @__PURE__ */ jsxDEV("form", { onSubmit: handleSubmit, children: [ 941 activeTab === "medical" && renderCategorySection("medical"), 942 activeTab === "current" && renderCategorySection("current"), 943 /* @__PURE__ */ jsxDEV("div", { style: { border: `1px solid ${T.border}`, background: T.bgAlt, padding: "1rem 1.25rem", display: "flex", justifyContent: "space-between", alignItems: "center", flexWrap: "wrap", gap: "0.875rem" }, children: [
944 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", alignItems: "center", gap: "1.5rem", flexWrap: "wrap" }, children: [ 945 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", alignItems: "center", gap: "0.75rem" }, children: [ 946 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: "0.75rem", color: T.textSec, fontWeight: 300 }, children: "Rule Status:" }, void 0, false, { 947 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 948 lineNumber: 600, 949 columnNumber: 21 950 }, this), 951 /* @__PURE__ */ jsxDEV("div", { style: { position: "relative", width: 44, height: 24, cursor: "pointer" }, onClick: () => setFormData((p) => ({ ...p, isActive: !p.isActive })), children: [ 952 /* @__PURE__ */ jsxDEV("div", { style: { 953 position: "absolute", 954 inset: 0, 955 background: formData.isActive ? T.text : T.border, 956 transition: "background 0.2s" 957 } }, void 0, false, { 958 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 959 lineNumber: 602, 960 columnNumber: 23 961 }, this),
962 /* @__PURE__ */ jsxDEV("div", { style: { 963 position: "absolute", 964 width: 18, 965 height: 18, 966 top: 3, 967 left: formData.isActive ? 23 : 3, 968 background: T.bg, 969 transition: "left 0.2s" 970 } }, void 0, false, { 971 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 972 lineNumber: 607, 973 columnNumber: 23 974 }, this) 975 ] }, void 0, true, { 976 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 977 lineNumber: 601, 978 columnNumber: 21 979 }, this), 980 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: "0.7rem", textTransform: "uppercase", letterSpacing: "0.1em", color: T.textMuted }, children: formData.isActive ? "Active" : "Inactive" }, void 0, false, { 981 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 982 lineNumber: 613, 983 columnNumber: 21 984 }, this) 985 ] }, void 0, true, { 986 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 987 lineNumber: 599, 988 columnNumber: 19 989 }, this),
990 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", gap: "1.25rem", paddingLeft: "1.25rem", borderLeft: `1px solid ${T.border}` }, children: [ 991 { label: "Medical", val: formData.medicalOutputCategories.length }, 992 { label: "Current", val: formData.currentOutputCategories.length } 993 ].map( 994 ({ label, val }) => /* @__PURE__ */ jsxDEV("div", { style: { textAlign: "center" }, children: [ 995 /* @__PURE__ */ jsxDEV("p", { style: { fontSize: "0.6rem", color: T.textMuted, textTransform: "uppercase", letterSpacing: "0.1em", margin: "0 0 2px" }, children: label }, void 0, false, { 996 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 997 lineNumber: 625, 998 columnNumber: 25 999 }, this), 1000 /* @__PURE__ */ jsxDEV("p", { style: { fontSize: "1.1rem", fontWeight: 300, letterSpacing: "-0.03em", color: T.text, margin: 0 }, children: val }, void 0, false, { 1001 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1002 lineNumber: 626, 1003 columnNumber: 25 1004 }, this) 1005 ] }, label, true, { 1006 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1007 lineNumber: 624, 1008 columnNumber: 21 1009 }, this) 1010 ) }, void 0, false, { 1011 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1012 lineNumber: 619, 1013 columnNumber: 19 1014 }, this) 1015 ] }, void 0, true, { 1016 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1017 lineNumber: 596, 1018 columnNumber: 17 1019 }, this),
1020 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", gap: "0.625rem" }, children: [ 1021 activeTab === "current" && /* @__PURE__ */ jsxDEV( 1022 "button", 1023 { 1024 type: "button", 1025 className: "da-btn-outline", 1026 style: S.btnOutline, 1027 onClick: () => setActiveTab("medical"), 1028 children: "â Back" 1029 }, 1030 void 0, 1031 false, 1032 { 1033 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1034 lineNumber: 635, 1035 columnNumber: 19 1036 }, 1037 this 1038 ), 1039 activeTab === "medical" && /* @__PURE__ */ jsxDEV( 1040 "button", 1041 { 1042 type: "button", 1043 className: "da-btn-primary", 1044 style: S.btnPrimary, 1045 onClick: () => setActiveTab("current"), 1046 children: "Next â" 1047 }, 1048 void 0, 1049 false, 1050 { 1051 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1052 lineNumber: 641, 1053 columnNumber: 19 1054 }, 1055 this 1056 ), 1057 activeTab === "current" && /* @__PURE__ */ jsxDEV("button", { type: "submit", className: "da-btn-primary", style: S.btnPrimary, children: [
1058 /* @__PURE__ */ jsxDEV(CheckCircle, { size: 13 }, void 0, false, { 1059 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1060 lineNumber: 648, 1061 columnNumber: 23 1062 }, this), 1063 " Save Configuration" 1064 ] }, void 0, true, { 1065 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1066 lineNumber: 647, 1067 columnNumber: 19 1068 }, this) 1069 ] }, void 0, true, { 1070 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1071 lineNumber: 633, 1072 columnNumber: 17 1073 }, this) 1074 ] }, void 0, true, { 1075 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1076 lineNumber: 593, 1077 columnNumber: 15 1078 }, this) 1079 ] }, void 0, true, { 1080 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1081 lineNumber: 587, 1082 columnNumber: 13 1083 }, this) 1084 ] }, void 0, true, { 1085 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1086 lineNumber: 546, 1087 columnNumber: 11 1088 }, this) 1089 ] }, void 0, true, { 1090 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1091 lineNumber: 524, 1092 columnNumber: 9 1093 }, this) 1094 ] }, void 0, true, { 1095 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1096 lineNumber: 474, 1097 columnNumber: 7 1098 }, this) 1099 ] }, void 0, true, { 1100 fileName: "/app/src/dashboard/MedicalCurrentContextRule.jsx", 1101 lineNumber: 472, 1102 columnNumber: 5 1103 }, this); 1104}; 1105_s(MedicalCurrentContextRule, "WM/E4pqqWfkT1JDktchIiyy7nlw=", false, function() { 1106 return [useLocation, useNavigate]; 1107}); 1108_c = MedicalCurrentContextRule; 1109export default MedicalCurrentContextRule; 1110var _c; 1111$RefreshReg$(_c, "MedicalCurrentContextRule"); 1112import * as RefreshRuntime from "/@react-refresh"; 1113const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope; 1114if (import.meta.hot && !inWebWorker) { 1115 if (!window.$RefreshReg$) { 1116 throw new Error( 1117 "@vitejs/plugin-react can't detect preamble. Something is wrong." 1118 ); 1119 } 1120 RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => { 1121 RefreshRuntime.registerExportsForReactRefresh("/app/src/dashboard/MedicalCurrentContextRule.jsx", currentExports); 1122 import.meta.hot.accept((nextExports) => { 1123 if (!nextExports) return; 1124 const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/app/src/dashboard/MedicalCurrentContextRule.jsx", currentExports, nextExports); 1125 if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); 1126 }); 1127 }); 1128} 1129function $RefreshReg$(type, id) { 1130 return RefreshRuntime.register(type, "/app/src/dashboard/MedicalCurrentContextRule.jsx " + id); 1131} 1132function $RefreshSig$() { 1133 return RefreshRuntime.createSignatureFunctionForTransform(); 1134} 1135 1136//# sourceMappingURL=data:application/json;base64,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7QUFBQSxlQWpFRjtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQW1FQTtBQUFBLGFBNUdGO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUE2R0E7QUFBQSxXQW5JRjtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBb0lBO0FBQUEsU0F0TEY7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQXVMQTtBQUFBLE9BekxGO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0EwTEE7QUFFSjtBQUFFYyxHQXhoQklELDJCQUF5QjtBQUFBLFVBQ1Y1RCxhQUNBQyxXQUFXO0FBQUE7QUFBQW9QLEtBRjFCekw7QUEwaEJOLGVBQWVBO0FBQTBCLElBQUF5TDtBQUFBQyxhQUFBRCxJQUFBIiwibmFtZXMiOlsiUmVhY3QiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZUxvY2F0aW9uIiwidXNlTmF2aWdhdGUiLCJsb2dvIiwiSG9tZSIsIlNldHRpbmdzIiwiQmVkIiwiTWVzc2FnZUNpcmNsZSIsIkNhbGVuZGFyIiwiQWN0aXZpdHkiLCJMb2dPdXQiLCJVc2VyUGx1cyIsIlNoaWVsZCIsIkJyYWluIiwiU3RldGhvc2NvcGUiLCJDbGlwYm9hcmRMaXN0IiwiR2F1Z2UiLCJTcGFya2xlcyIsIlRhcmdldCIsIkZpbGVUZXh0IiwiQ2hlY2tDaXJjbGUiLCJQbHVzIiwiTm90ZWJvb2siLCJBUElfQkFTRV9VUkwiLCJpbXBvcnQiLCJlbnYiLCJWSVRFX0JBQ0tFTkRfVVJMIiwiVCIsImJnIiwiYmdBbHQiLCJiZ1RlcnQiLCJ0ZXh0IiwidGV4dFNlYyIsInRleHRNdXRlZCIsImJvcmRlciIsImJvcmRlclN0ciIsImZvbnQiLCJTSURFQkFSX1ciLCJDU1MiLCJTIiwic2VjTGFiZWwiLCJmb250U2l6ZSIsInRleHRUcmFuc2Zvcm0iLCJsZXR0ZXJTcGFjaW5nIiwiY29sb3IiLCJmb250V2VpZ2h0IiwiZGlzcGxheSIsIm1hcmdpbkJvdHRvbSIsImJ0blByaW1hcnkiLCJwYWRkaW5nIiwiYmFja2dyb3VuZCIsImN1cnNvciIsImZvbnRGYW1pbHkiLCJ0cmFuc2l0aW9uIiwiYWxpZ25JdGVtcyIsImdhcCIsImJ0bk91dGxpbmUiLCJjYXJkIiwiY2FyZEhlYWRlciIsInBhZGRpbmdCb3R0b20iLCJib3JkZXJCb3R0b20iLCJNZWRpY2FsQ3VycmVudENvbnRleHRSdWxlIiwiX3MiLCJsb2NhdGlvbiIsIm5hdmlnYXRlIiwiY3VycmVudFBhdGgiLCJwYXRobmFtZSIsInF1ZXJ5UGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiZG9jdG9ySWQiLCJnZXQiLCJtYXRjaCIsIm1lZGljYWxDYXRlZ29yaWVzTGlzdCIsInNldE1lZGljYWxDYXRlZ29yaWVzTGlzdCIsImN1cnJlbnRDYXRlZ29yaWVzTGlzdCIsInNldEN1cnJlbnRDYXRlZ29yaWVzTGlzdCIsInNob3dOZXdNZWRpY2FsSW5wdXQiLCJzZXRTaG93TmV3TWVkaWNhbElucHV0Iiwic2hvd05ld0N1cnJlbnRJbnB1dCIsInNldFNob3dOZXdDdXJyZW50SW5wdXQiLCJuZXdNZWRpY2FsQ2F0ZWdvcnkiLCJzZXROZXdNZWRpY2FsQ2F0ZWdvcnkiLCJuZXdDdXJyZW50Q2F0ZWdvcnkiLCJzZXROZXdDdXJyZW50Q2F0ZWdvcnkiLCJkb2N0b3JOYW1lIiwic2V0RG9jdG9yTmFtZSIsImRvY3RvclNwZWNpYWxpdHkiLCJzZXREb2N0b3JTcGVjaWFsaXR5IiwibWVkaWNhbENhdGVnb3J5UnVsZXMiLCJzZXRNZWRpY2FsQ2F0ZWdvcnlSdWxlcyIsImN1cnJlbnRDYXRlZ29yeVJ1bGVzIiwic2V0Q3VycmVudENhdGVnb3J5UnVsZXMiLCJkb2N0b3JNZWRpY2FsUnVsZXNDYWNoZSIsInNldERvY3Rvck1lZGljYWxSdWxlc0NhY2hlIiwiZG9jdG9yQ3VycmVudFJ1bGVzQ2FjaGUiLCJzZXREb2N0b3JDdXJyZW50UnVsZXNDYWNoZSIsImZvY3VzZWRGaWVsZCIsInNldEZvY3VzZWRGaWVsZCIsImFjdGl2ZVRhYiIsInNldEFjdGl2ZVRhYiIsImF1dGhDaGVja2VkIiwic2V0QXV0aENoZWNrZWQiLCJmb3JtRGF0YSIsInNldEZvcm1EYXRhIiwic3BlY2lhbHR5IiwibWVkaWNhbE91dHB1dENhdGVnb3JpZXMiLCJjdXJyZW50T3V0cHV0Q2F0ZWdvcmllcyIsImlzQWN0aXZlIiwibWVkaWNhbFNjcm9sbFJlZiIsImN1cnJlbnRTY3JvbGxSZWYiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwidGhlbiIsInIiLCJvayIsImpzb24iLCJQcm9taXNlIiwicmVqZWN0IiwiZGF0YSIsImRvY3RvciIsInN5c191c2VyX2lkIiwiY2F0Y2giLCJmaW5hbGx5IiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwiZG9jdG9yX2lkIiwiZCIsInN0YXR1cyIsImRvY3Rvcl9uYW1lIiwiZG9jdG9yX3NwZWNpYWxpdHkiLCJjb25zb2xlIiwiZXJyb3IiLCJsb2FkIiwiZHJSZXMiLCJkckRhdGEiLCJydWxlIiwibUNhdHMiLCJtZWRpY2FsX2NvbnRleHQiLCJtYXAiLCJpIiwibWVkaWNhbF9vdXRwdXRfY2F0ZWdvcnkiLCJtUnVsZXMiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsInJ1bGVfdGV4dCIsImNDYXRzIiwiY3VycmVudF9jb250ZXh0IiwiY3VycmVudF9vdXRwdXRfY2F0ZWdvcnkiLCJjUnVsZXMiLCJhZG1pblJlcyIsImFkbWluRGF0YSIsIm0iLCJmaW5kIiwic3BlY2lhbGl0eSIsImFNQ2F0cyIsImFDQ2F0cyIsIlNldCIsImlzX2FjdGl2ZSIsImUiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiaGFuZGxlTG9nb3V0IiwiaGFuZGxlTWVkaWNhbFJ1bGVDaGFuZ2UiLCJjYXQiLCJ2YWwiLCJwIiwiaGFuZGxlQ3VycmVudFJ1bGVDaGFuZ2UiLCJoYW5kbGVBZGRNZWRpY2FsQ2F0ZWdvcnkiLCJ0cmltIiwic2V0VGltZW91dCIsImhhbmRsZUFkZEN1cnJlbnRDYXRlZ29yeSIsImhhbmRsZU1lZGljYWxDYXRlZ29yeUNoYW5nZSIsImlzU2VsZWN0ZWQiLCJpbmNsdWRlcyIsInVwZGF0ZWQiLCJmaWx0ZXIiLCJjIiwicnVsZVRleHQiLCJyZXMiLCJ1cGRhdGVkUnVsZXMiLCJoYW5kbGVDdXJyZW50Q2F0ZWdvcnlDaGFuZ2UiLCJoYW5kbGVTdWJtaXQiLCJwcmV2ZW50RGVmYXVsdCIsInBheWxvYWQiLCJhbGVydCIsImhlaWdodCIsImp1c3RpZnlDb250ZW50IiwibmF2SXRlbXMiLCJsYWJlbCIsImljb24iLCJvbkNsaWNrIiwiYWN0aXZlIiwicmVuZGVyQ2F0ZWdvcnlTZWN0aW9uIiwidHlwZSIsImlzTWVkaWNhbCIsImNhdGVnb3JpZXMiLCJzZWxlY3RlZCIsInJ1bGVzIiwic2Nyb2xsUmVmIiwic2hvd05ldyIsIm5ld1ZhbCIsInNldFNob3dOZXciLCJzZXROZXdWYWwiLCJvbkFkZCIsIm9uQ2hhbmdlIiwib25SdWxlQ2hhbmdlIiwiZmllbGRQcmVmaXgiLCJzZWN0aW9uVGl0bGUiLCJzZWN0aW9uU3ViIiwiSWNvbiIsIndpZHRoIiwiZmxleFNocmluayIsIm1hcmdpbiIsIm1hcmdpbkxlZnQiLCJsZW5ndGgiLCJhY2NlbnRDb2xvciIsImZsZXgiLCJib3JkZXJMZWZ0IiwicGFkZGluZ0xlZnQiLCJ0YXJnZXQiLCJ2YWx1ZSIsImJvcmRlckNvbG9yIiwibWFyZ2luVG9wIiwiZm9udFN0eWxlIiwiYm9yZGVyVG9wIiwia2V5IiwibWluSGVpZ2h0IiwicG9zaXRpb24iLCJ0b3AiLCJsZWZ0IiwiYm90dG9tIiwiekluZGV4IiwiYm9yZGVyUmlnaHQiLCJmbGV4RGlyZWN0aW9uIiwib3ZlcmZsb3dZIiwiaXRlbSIsInRleHRBbGlnbiIsImxpbmVIZWlnaHQiLCJtaW5XaWR0aCIsImZsZXhXcmFwIiwiaW5zZXQiLCJfYyIsIiRSZWZyZXNoUmVnJCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJNZWRpY2FsQ3VycmVudENvbnRleHRSdWxlLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYW
1136N0XCI7XG5pbXBvcnQgeyB1c2VMb2NhdGlvbiwgdXNlTmF2aWdhdGUgfSBmcm9tIFwicmVhY3Qtcm91dGVyLWRvbVwiO1xuaW1wb3J0IGxvZ28gZnJvbSBcIi4uL2Fzc2V0cy9sb2RvX29ubHkucG5nXCI7XG5pbXBvcnQge1xuICBIb21lLCBTZXR0aW5ncywgQmVkLCBNZXNzYWdlQ2lyY2xlLCBDYWxlbmRhciwgQWN0aXZpdHksXG4gIExvZ091dCwgVXNlclBsdXMsIFNoaWVsZCwgQnJhaW4sIFN0ZXRob3Njb3BlLCBDbGlwYm9hcmRMaXN0LFxuICBHYXVnZSwgU3BhcmtsZXMsIFRhcmdldCwgRmlsZVRleHQsIENoZWNrQ2lyY2xlLCBQbHVzLCBOb3RlYm9vayxcbn0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPSBpbXBvcnQubWV0YS5lbnYuVklURV9CQUNLRU5EX1VSTDtcblxuLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICBUSEVNRSBUT0tFTlNcbuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuY29uc3QgVCA9IHtcbiAgYmc6ICAgICAgICBcIiNmZmZmZmZcIixcbiAgYmdBbHQ6ICAgICBcIiNmYWZhZmFcIixcbiAgYmdUZXJ0OiAgICBcIiNmNWY1ZjVcIixcbiAgdGV4dDogICAgICBcIiMwMDAwMDBcIixcbiAgdGV4dFNlYzogICBcIiM0NDQ0NDRcIixcbiAgdGV4dE11dGVkOiBcIiM4ODg4ODhcIixcbiAgYm9yZGVyOiAgICBcIiNlMGUwZTBcIixcbiAgYm9yZGVyU3RyOiBcIiMwMDAwMDBcIixcbiAgZm9udDogICAgICBcIidPcGVuIFNhbnMnLCBzYW5zLXNlcmlmXCIsXG59O1xuXG5jb25zdCBTSURFQkFSX1cgPSBcIjI0MHB4XCI7XG5cbi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgR0xPQkFMIENTU1xu4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG5jb25zdCBDU1MgPSBgXG4gIEBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PU9wZW4rU2Fuczp3Z2h0QDMwMDs0MDA7NjAwJmRpc3BsYXk9c3dhcCcpO1xuICAqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9XG4gIDo6c2VsZWN0aW9uIHsgYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmZmY7IH1cbiAgYm9keSwgaHRtbCB7IGZvbnQtZmFtaWx5OiAke1QuZm9udH07IGZvbnQtd2VpZ2h0OiAzMDA7IGJhY2tncm91bmQ6ICR7VC5iZ307IGNvbG9yOiAke1QudGV4dH07IC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyB9XG4gIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b24geyBmb250LWZhbWlseTogJHtULmZvbnR9OyBmb250LXdlaWdodDogMzAwOyB9XG5cbiAgLmRhLW5hdi1idG4geyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzLCBjb2xvciAwLjE1czsgfVxuICAuZGEtbmF2LWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6ICR7VC5iZ0FsdH0gIWltcG9ydGFudDsgY29sb3I6ICR7VC50ZXh0fSAhaW1wb3J0YW50OyB9XG4gIC5kYS1uYXYtYnRuLmRhLWFjdGl2ZSB7IGJhY2tncm91bmQ6ICR7VC5iZ0FsdH0gIWltcG9ydGFudDsgY29sb3I6ICR7VC50ZXh0fSAhaW1wb3J0YW50OyBmb250LXdlaWdodDogNDAwICFpbXBvcnRhbnQ7IGJvcmRlci1sZWZ0LWNvbG9yOiAke1QuYm9yZGVyU3RyfSAhaW1wb3J0YW50OyB9XG5cbiAgLmRhLWJ0bi1wcmltYXJ5OmhvdmVyIHsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsgY29sb3I6ICR7VC50ZXh0fSAhaW1wb3J0YW50OyB9XG4gIC5kYS1idG4tb3V0bGluZTpob3ZlciB7IGJvcmRlci1jb2xvcjogJHtULmJvcmRlclN0cn0gIWltcG9ydGFudDsgY29sb3I6ICR7VC50ZXh0fSAhaW1wb3J0YW50OyB9XG4gIC5kYS1idG4tZ2hvc3Q6aG92ZXIgICB7IGJhY2tncm91bmQ6ICR7VC5iZ0FsdH0gIWltcG9ydGFudDsgfVxuXG4gIC5kYS10YWItYnRuIHsgdHJhbnNpdGlvbjogYWxsIDAuMTVzOyBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgLmRhLXRhYi1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiAke1QuYmdBbHR9ICFpbXBvcnRhbnQ7IGNvbG9yOiAke1QudGV4dH0gIWltcG9ydGFudDsgfVxuXG4gIC5kYS1jYXQtcm93OmhvdmVyIHsgYmFja2dyb3VuZDogJHtULmJnQWx0fSAhaW1wb3J0YW50OyB9XG4gIC5kYS1zaWRlYmFyLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXIgeyBkaXNwbGF5OiBub25lOyB9XG4gIC5kYS1zaWRlYmFyLXNjcm9sbCB7IC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgc2Nyb2xsYmFyLXdpZHRoOiBub25lOyB9XG5cbiAgLmRhLWxpc3Qtc2Nyb2xsIHsgbWF4LWhlaWdodDogNTIwcHg7IG92ZXJmbG93LXk6IGF1dG87IH1cbiAgLmRhLWxpc3Qtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOiAzcHg7IH1cbiAgLmRhLWxpc3Qtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7IGJhY2tncm91bmQ6ICR7VC5ib3JkZXJ9OyB9XG5cbiAgLmRhLXRleHRhcmVhIHtcbiAgICB3aWR0aDogMTAwJTsgcGFkZGluZzogMC43NXJlbSAwLjg3NXJlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAke1QuYm9yZGVyfTsgYmFja2dyb3VuZDogJHtULmJnfTtcbiAgICBmb250LWZhbWlseTogJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOyBmb250LXdlaWdodDogMzAwO1xuICAgIGZvbnQtc2l6ZTogMC43OHJlbTsgY29sb3I6ICR7VC50ZXh0fTtcbiAgICBvdXRsaW5lOiBub25lOyByZXNpemU6IHZlcnRpY2FsOy
1136BsaW5lLWhlaWdodDogMS42O1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cztcbiAgfVxuICAuZGEtdGV4dGFyZWE6Zm9jdXMgeyBib3JkZXItY29sb3I6ICR7VC5ib3JkZXJTdHJ9OyB9XG5cbiAgLmRhLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTsgaGVpZ2h0OiA0MHB4OyBwYWRkaW5nOiAwIDAuODc1cmVtO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7VC5ib3JkZXJ9OyBiYWNrZ3JvdW5kOiAke1QuYmd9O1xuICAgIGZvbnQtZmFtaWx5OiAke1QuZm9udH07IGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgZm9udC1zaXplOiAwLjgycmVtOyBjb2xvcjogJHtULnRleHR9O1xuICAgIG91dGxpbmU6IG5vbmU7IHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cztcbiAgfVxuICAuZGEtaW5wdXQ6Zm9jdXMgeyBib3JkZXItY29sb3I6ICR7VC5ib3JkZXJTdHJ9OyB9XG4gIC5kYS1pbnB1dDo6cGxhY2Vob2xkZXIgeyBjb2xvcjogI2JiYjsgfVxuXG4gIEBrZXlmcmFtZXMgZGEtZmFkZXVwIHsgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOyB9IHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9IH1cbiAgLmRhLWZhZGVpbiB7IGFuaW1hdGlvbjogZGEtZmFkZXVwIDAuMThzIGVhc2U7IH1cbmA7XG5cbi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgU0hBUkVEIFNUWUxFIFNOSVBQRVRTXG7ilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cbmNvbnN0IFMgPSB7XG4gIHNlY0xhYmVsOiB7XG4gICAgZm9udFNpemU6IFwiMC42cmVtXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsXG4gICAgbGV0dGVyU3BhY2luZzogXCIwLjE4ZW1cIiwgY29sb3I6IFQudGV4dE11dGVkLFxuICAgIGZvbnRXZWlnaHQ6IDQwMCwgZGlzcGxheTogXCJibG9ja1wiLCBtYXJnaW5Cb3R0b206IFwiMC4ycmVtXCIsXG4gIH0sXG4gIGJ0blByaW1hcnk6IHtcbiAgICBwYWRkaW5nOiBcIjAuNTVyZW0gMS4yNXJlbVwiLFxuICAgIGJhY2tncm91bmQ6IFQudGV4dCwgY29sb3I6IFQuYmcsXG4gICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7VC50ZXh0fWAsXG4gICAgZm9udFNpemU6IFwiMC43NXJlbVwiLCBmb250V2VpZ2h0OiA0MDAsXG4gICAgY3Vyc29yOiBcInBvaW50ZXJcIiwgZm9udEZhbWlseTogVC5mb250LFxuICAgIHRyYW5zaXRpb246IFwiYWxsIDAuMTVzXCIsXG4gICAgZGlzcGxheTogXCJpbmxpbmUtZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBnYXA6IFwiNnB4XCIsXG4gICAgbGV0dGVyU3BhY2luZzogXCIwLjA0ZW1cIixcbiAgfSxcbiAgYnRuT3V0bGluZToge1xuICAgIHBhZGRpbmc6IFwiMC41NXJlbSAxLjI1cmVtXCIsXG4gICAgYmFja2dyb3VuZDogVC5iZywgY29sb3I6IFQudGV4dFNlYyxcbiAgICBib3JkZXI6IGAxcHggc29saWQgJHtULmJvcmRlcn1gLFxuICAgIGZvbnRTaXplOiBcIjAuNzVyZW1cIiwgZm9udFdlaWdodDogMzAwLFxuICAgIGN1cnNvcjogXCJwb2ludGVyXCIsIGZvbnRGYW1pbHk6IFQuZm9udCxcbiAgICB0cmFuc2l0aW9uOiBcImFsbCAwLjE1c1wiLFxuICAgIGRpc3BsYXk6IFwiaW5saW5lLWZsZXhcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwgZ2FwOiBcIjZweFwiLFxuICB9LFxuICBjYXJkOiB7XG4gICAgYmFja2dyb3VuZDogVC5iZywgYm9yZGVyOiBgMXB4IHNvbGlkICR7VC5ib3JkZXJ9YCxcbiAgICBwYWRkaW5nOiBcIjEuNXJlbVwiLFxuICB9LFxuICBjYXJkSGVhZGVyOiB7XG4gICAgZGlzcGxheTogXCJmbGV4XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGdhcDogXCIxMHB4XCIsXG4gICAgcGFkZGluZ0JvdHRvbTogXCIxcmVtXCIsIG1hcmdpbkJvdHRvbTogXCIxLjI1cmVtXCIsXG4gICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7VC5ib3JkZXJ9YCxcbiAgfSxcbn07XG5cbi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgTUFJTiBDT01QT05FTlRcbuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuY29uc3QgTWVkaWNhbEN1cnJlbnRDb250ZXh0UnVsZSA9ICgpID0+IHtcbiAgY29uc3QgbG9jYXRpb24gICA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IG5hdmlnYXRlICAgPSB1c2VOYXZpZ2F0ZSgpO1xuICBjb25zdCBjdXJyZW50UGF0aCA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKTtcbiAgbGV0IGRvY3RvcklkID0gcXVlcnlQYXJhbXMuZ2V0KFwiZG9jdG9yX2lkXCIpO1xuXG4gIGlmICghZG9jdG9ySWQpIHtcbiAgICBjb25zdCBtYXRjaCA9IGxvY2F0aW9uLnNlYXJjaC5tYXRjaCgvZG9jdG9yX2lkPShbXiZdKykvKTtcbiAgICBpZiAobWF0Y2gpIGRvY3RvcklkID0gbWF0Y2hbMV07XG4gIH1cblxuICAvKiDilIDilIAgc3RhdGUg4pSA4pSAICovXG4gIGNvbnN0IFttZWRpY2FsQ2F0ZWdvcmllc0xpc3QsIHNldE1lZGljYWxDYXRlZ29yaWVzTGlzdF0gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtjdXJyZW50Q2F0ZWdvcmllc0xpc3QsIHNldEN1cnJlbnRDYXRlZ29yaWVzTGlzdF0gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtzaG93TmV3TWVkaWNhbElucHV0LCAgIHNldFNob3dOZXdNZWRpY2FsSW5wdXRdICAgPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TmV3Q3VycmVudElucHV0LCAgIHNldFNob3dOZXd
1136DdXJyZW50SW5wdXRdICAgPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtuZXdNZWRpY2FsQ2F0ZWdvcnksICAgIHNldE5ld01lZGljYWxDYXRlZ29yeV0gICAgPSB1c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW25ld0N1cnJlbnRDYXRlZ29yeSwgICAgc2V0TmV3Q3VycmVudENhdGVnb3J5XSAgICA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbZG9jdG9yTmFtZSwgICAgICAgICAgICBzZXREb2N0b3JOYW1lXSAgICAgICAgICAgID0gdXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IFtkb2N0b3JTcGVjaWFsaXR5LCAgICAgIHNldERvY3RvclNwZWNpYWxpdHldICAgICAgPSB1c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW21lZGljYWxDYXRlZ29yeVJ1bGVzLCAgc2V0TWVkaWNhbENhdGVnb3J5UnVsZXNdICA9IHVzZVN0YXRlKHt9KTtcbiAgY29uc3QgW2N1cnJlbnRDYXRlZ29yeVJ1bGVzLCAgc2V0Q3VycmVudENhdGVnb3J5UnVsZXNdICA9IHVzZVN0YXRlKHt9KTtcbiAgY29uc3QgW2RvY3Rvck1lZGljYWxSdWxlc0NhY2hlLCBzZXREb2N0b3JNZWRpY2FsUnVsZXNDYWNoZV0gPSB1c2VTdGF0ZSh7fSk7XG4gIGNvbnN0IFtkb2N0b3JDdXJyZW50UnVsZXNDYWNoZSwgc2V0RG9jdG9yQ3VycmVudFJ1bGVzQ2FjaGVdID0gdXNlU3RhdGUoe30pO1xuICBjb25zdCBbZm9jdXNlZEZpZWxkLCAgICAgICAgICBzZXRGb2N1c2VkRmllbGRdICAgICAgICAgID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFthY3RpdmVUYWIsICAgICAgICAgICAgIHNldEFjdGl2ZVRhYl0gICAgICAgICAgICAgPSB1c2VTdGF0ZShcIm1lZGljYWxcIik7XG4gIGNvbnN0IFthdXRoQ2hlY2tlZCwgICAgICAgICAgIHNldEF1dGhDaGVja2VkXSAgICAgICAgICAgPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtmb3JtRGF0YSwgc2V0Rm9ybURhdGFdID0gdXNlU3RhdGUoe1xuICAgIHNwZWNpYWx0eTogXCJcIiwgbWVkaWNhbE91dHB1dENhdGVnb3JpZXM6IFtdLCBjdXJyZW50T3V0cHV0Q2F0ZWdvcmllczogW10sXG4gICAgbWVkaWNhbENhdGVnb3J5UnVsZXM6IHt9LCBjdXJyZW50Q2F0ZWdvcnlSdWxlczoge30sIGlzQWN0aXZlOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3QgbWVkaWNhbFNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgY3VycmVudFNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcblxuICAvKiDilIDilIAgYXV0aCDilIDilIAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRvY3RvcklkKSB7IG5hdmlnYXRlKFwiL2xvZ2luXCIpOyByZXR1cm47IH1cbiAgICBmZXRjaChgJHtBUElfQkFTRV9VUkx9L2htcy91c2Vycy9kb2N0b3JzL3ZlcmlmeWAsIHsgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiIH0pXG4gICAgICAudGhlbihyID0+IHIub2sgPyByLmpzb24oKSA6IFByb21pc2UucmVqZWN0KCkpXG4gICAgICAudGhlbihkYXRhID0+IHsgaWYgKGRvY3RvcklkICE9PSBkYXRhLmRvY3Rvci5zeXNfdXNlcl9pZCkgbmF2aWdhdGUoXCIvbG9naW5cIik7IH0pXG4gICAgICAuY2F0Y2goKCkgPT4gbmF2aWdhdGUoXCIvbG9naW5cIikpXG4gICAgICAuZmluYWxseSgoKSA9PiBzZXRBdXRoQ2hlY2tlZCh0cnVlKSk7XG4gIH0sIFtkb2N0b3JJZCwgbmF2aWdhdGVdKTtcblxuICAvKiDilIDilIAgZG9jdG9yIGRldGFpbHMg4pSA4pSAICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkb2N0b3JJZCkgcmV0dXJuO1xuICAgIGZldGNoKGAke0FQSV9CQVNFX1VSTH0vaG1zL3VzZXJzL3NwZWNpYWxpdHkvdXNlcnMvcGF0aWVudC9nZXRfZG9jdG9yX2RldGFpbHNgLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLCBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGRvY3Rvcl9pZDogZG9jdG9ySWQgfSksXG4gICAgfSlcbiAgICAgIC50aGVuKHIgPT4gci5qc29uKCkpXG4gICAgICAudGhlbihkID0+IHsgaWYgKGQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgeyBzZXREb2N0b3JOYW1lKGQuZG9jdG9yX25hbWUpOyBzZXREb2N0b3JTcGVjaWFsaXR5KGQuZG9jdG9yX3NwZWNpYWxpdHkpOyB9IH0pXG4gICAgICAuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gIH0sIFtkb2N0b3JJZF0pO1xuXG4gIC8qIOKUgOKUgCBsb2FkIHJ1bGVzIOKUgOKUgCAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZG9jdG9ySWQgfHwgIWRvY3RvclNwZWNpYWxpdHkpIHJldHVybjtcbiAgICBjb25zdCBsb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZHJSZXMgID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9obXMvdXNlcnMvZGF0YS9jb250ZXh0L2dldF9Eb2N0b3JNZWRpY2FsQ3VycmVudFJ1bGUvJHtkb2N0b3JJZH1gLCB7IGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIiB9KTtcbiAgICAgICAgY29uc3QgZHJEYXRhID0gYXdhaXQgZHJSZXMuanNvbigpO1xuXG4gICAgICAgIGlmIChkckRhdGEuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIGNvbnN0IHJ1bGUgPSBkckRhdGEuZGF0YTtcbiAgICAgICAgICBjb25zdCBtQ2F0cyAgPSBydWxlLm1lZGljYWxfY29udGV4dC5tYXAoaSA9PiBpLm1lZGljYWxfb3V0cHV0X2NhdGVnb3J5KTtcbiAgICAgICAgICBjb25zdCBtUnVsZXMgPSBPYmplY3QuZnJvbUVudHJpZXMocnVsZS5tZWRpY2FsX2NvbnRleHQubWFwKGkgPT4gW2kubWVkaWNhbF9vdXRwdXRfY2F0ZWdvcnksIGkucnVsZV90ZXh0XSkpO1xuICAgICAgICAgIGNvbnN0IGNDYXRzICA9IHJ1bGUuY3VycmVudF9jb250ZXh0Lm1hcChpID0+IGkuY3VycmVudF9vdXRwdXRfY2F0ZWdvcnkpO1xuICAgICAgICAgIGNvbnN0IGNSdWxlcyA9IE9iamVjdC5mcm9tRW50cmllcyhydWxlLmN1cnJlbnRfY29udGV4dC5tYXAoaSA9PiBbaS5jdXJyZW50X291dHB1dF9jYXRlZ29yeSwgaS5ydWxlX3RleHRdKSk7XG5cbiAgICAgICAgICBjb25zdCBhZG1pblJlcyAgPSBhd2FpdCBmZXRjaChgJHtBUElfQkFTRV9VUkx9L2htcy91c2Vycy9kYXRhL2NvbnRleHQvZ2V0X01lZGljYWxDdXJyZW50QWRtaW5SdWxlc2AsIHsgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiIH0pO1xuICAgICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGF3YWl0IGFkbWluUmVzLmpzb24oKTtcbiAgICAgICAgICBpZiAoYWRtaW5EYXRhLnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBhZG1pbkRhdGEuZGF0YS5maW5kKHIgPT4gci5zcGVjaWFsaXR5ID09PSBkb2N0b3JTcGVjaWFsaXR5KTtcbiAgICAgICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFNQ2F0cyA9IG0ubWVkaWNhbF9jb250ZXh0Lm1hcChpID0+IGkubWVkaWNhbF9vdXRwdXRfY2F0ZWdvcnkpO1xuICAgICAgICAgICAgICBjb25zdCBhQ0NhdHMgP
1136SBtLmN1cnJlbnRfY29udGV4dC5tYXAoaSA9PiBpLmN1cnJlbnRfb3V0cHV0X2NhdGVnb3J5KTtcbiAgICAgICAgICAgICAgc2V0TWVkaWNhbENhdGVnb3JpZXNMaXN0KFsuLi5uZXcgU2V0KFsuLi5hTUNhdHMsIC4uLm1DYXRzXSldKTtcbiAgICAgICAgICAgICAgc2V0Q3VycmVudENhdGVnb3JpZXNMaXN0KFsuLi5uZXcgU2V0KFsuLi5hQ0NhdHMsIC4uLmNDYXRzXSldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0TWVkaWNhbENhdGVnb3J5UnVsZXMobVJ1bGVzKTsgc2V0Q3VycmVudENhdGVnb3J5UnVsZXMoY1J1bGVzKTtcbiAgICAgICAgICBzZXREb2N0b3JNZWRpY2FsUnVsZXNDYWNoZShtUnVsZXMpOyBzZXREb2N0b3JDdXJyZW50UnVsZXNDYWNoZShjUnVsZXMpO1xuICAgICAgICAgIHNldEZvcm1EYXRhKHsgc3BlY2lhbHR5OiBydWxlLnNwZWNpYWxpdHkgfHwgXCJcIiwgbWVkaWNhbE91dHB1dENhdGVnb3JpZXM6IG1DYXRzLCBjdXJyZW50T3V0cHV0Q2F0ZWdvcmllczogY0NhdHMsIG1lZGljYWxDYXRlZ29yeVJ1bGVzOiBtUnVsZXMsIGN1cnJlbnRDYXRlZ29yeVJ1bGVzOiBjUnVsZXMsIGlzQWN0aXZlOiBydWxlLmlzX2FjdGl2ZSA/PyB0cnVlIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkbWluUmVzICA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vaG1zL3VzZXJzL2RhdGEvY29udGV4dC9nZXRfTWVkaWNhbEN1cnJlbnRBZG1pblJ1bGVzYCwgeyBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIgfSk7XG4gICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGF3YWl0IGFkbWluUmVzLmpzb24oKTtcbiAgICAgICAgaWYgKGFkbWluRGF0YS5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgY29uc3QgbSA9IGFkbWluRGF0YS5kYXRhLmZpbmQociA9PiByLnNwZWNpYWxpdHkgPT09IGRvY3RvclNwZWNpYWxpdHkpO1xuICAgICAgICAgIGlmICghbSkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IG1DYXRzICA9IG0ubWVkaWNhbF9jb250ZXh0Lm1hcChpID0+IGkubWVkaWNhbF9vdXRwdXRfY2F0ZWdvcnkpO1xuICAgICAgICAgIGNvbnN0IG1SdWxlcyA9IE9iamVjdC5mcm9tRW50cmllcyhtLm1lZGljYWxfY29udGV4dC5tYXAoaSA9PiBbaS5tZWRpY2FsX291dHB1dF9jYXRlZ29yeSwgaS5ydWxlX3RleHRdKSk7XG4gICAgICAgICAgY29uc3QgY0NhdHMgID0gbS5jdXJyZW50X2NvbnRleHQubWFwKGkgPT4gaS5jdXJyZW50X291dHB1dF9jYXRlZ29yeSk7XG4gICAgICAgICAgY29uc3QgY1J1bGVzID0gT2JqZWN0LmZyb21FbnRyaWVzKG0uY3VycmVudF9jb250ZXh0Lm1hcChpID0+IFtpLmN1cnJlbnRfb3V0cHV0X2NhdGVnb3J5LCBpLnJ1bGVfdGV4dF0pKTtcbiAgICAgICAgICBzZXRNZWRpY2FsQ2F0ZWdvcmllc0xpc3QobUNhdHMpOyBzZXRDdXJyZW50Q2F0ZWdvcmllc0xpc3QoY0NhdHMpO1xuICAgICAgICAgIHNldE1lZGljYWxDYXRlZ29yeVJ1bGVzKG1SdWxlcyk7IHNldEN1cnJlbnRDYXRlZ29yeVJ1bGVzKGNSdWxlcyk7XG4gICAgICAgICAgc2V0Rm9ybURhdGEoeyBzcGVjaWFsdHk6IG0uc3BlY2lhbGl0eSB8fCBcIlwiLCBtZWRpY2FsT3V0cHV0Q2F0ZWdvcmllczogbUNhdHMsIGN1cnJlbnRPdXRwdXRDYXRlZ29yaWVzOiBjQ2F0cywgbWVkaWNhbENhdGVnb3J5UnVsZXM6IG1SdWxlcywgY3VycmVudENhdGVnb3J5UnVsZXM6IGNSdWxlcywgaXNBY3RpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHsgY29uc29sZS5lcnJvcihlKTsgfVxuICAgIH07XG4gICAgbG9hZCgpO1xuICB9LCBbZG9jdG9ySWQsIGRvY3RvclNwZWNpYWxpdHldKTtcblxuICB1c2VFZmZlY3QoKCkgPT4geyBpZiAobWVkaWNhbFNjcm9sbFJlZi5jdXJyZW50KSBtZWRpY2FsU2Nyb2xsUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVkaWNhbFNjcm9sbFJlZi5jdXJyZW50LnNjcm9sbEhlaWdodDsgfSwgW21lZGljYWxDYXRlZ29yaWVzTGlzdF0pO1xuICB1c2VFZmZlY3QoKCkgPT4geyBpZiAoY3VycmVudFNjcm9sbFJlZi5jdXJyZW50KSBjdXJyZW50U2Nyb2xsUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gY3VycmVudFNjcm9sbFJlZi5jdXJyZW50LnNjcm9sbEhlaWdodDsgfSwgW2N1cnJlbnRDYXRlZ29yaWVzTGlzdF0pO1xuXG4gIC8qIOKUgOKUgCBoYW5kbGVycyDilIDilIAgKi9cbiAgY29uc3QgaGFuZGxlTG9nb3V0ID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vaG1zL3VzZXJzL2F1dGgvbG9nb3V0YCwgeyBtZXRob2Q6IFwiUE9TVFwiLCBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIgfSk7IH1cbiAgICBmaW5hbGx5IHsgbmF2aWdhdGUoXCIvbG9naW5cIik7IH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZWRpY2FsUnVsZUNoYW5nZSA9IChjYXQsIHZhbCkgPT4ge1xuICAgIHNldE1lZGljYWxDYXRlZ29yeVJ1bGVzKHAgPT4gKHsgLi4ucCwgW2NhdF06IHZhbCB9KSk7XG4gICAgc2V0Rm9ybURhdGEocCA9PiAoeyAuLi5wLCBtZWRpY2FsQ2F0ZWdvcnlSdWxlczogeyAuLi5wLm1lZGljYWxDYXRlZ29yeVJ1bGVzLCBbY2F0XTogdmFsIH0gfSkpO1xuICAgIHNldERvY3Rvck1lZGljYWxSdWxlc0NhY2hlKHAgPT4gKHsgLi4ucCwgW2NhdF06IHZhbCB9KSk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUN1cnJlbnRSdWxlQ2hhbmdlID0gKGNhdCwgdmFsKSA9PiB7XG4gICAgc2V0Q3VycmVudENhdGVnb3J5UnVsZXMocCA9PiAoeyAuLi5wLCBbY2F0XTogdmFsIH0pKTtcbiAgICBzZXRGb3JtRGF0YShwID0+ICh7IC4uLnAsIGN1cnJlbnRDYXRlZ29yeVJ1bGVzOiB7IC4uLnAuY3VycmVudENhdGVnb3J5UnVsZXMsIFtjYXRdOiB2YWwgfSB9KSk7XG4gICAgc2V0RG9jdG9yQ3VycmVudFJ1bGVzQ2FjaGUocCA9PiAoeyAuLi5wLCBbY2F0XTogdmFsIH0pKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVBZGRNZWRpY2FsQ2F0ZWdvcnkgPSAoKSA9PiB7XG4gICAgY29uc3QgY2F0ID0gbmV3TWVkaWNhbENhdGVnb3J5LnRyaW0oKTsgaWYgKCFjYXQpIHJldHVybjtcbiAgICBzZXRNZWRpY2FsQ2F0ZWdvcmllc0xpc3QocCA9PiBbLi4ucCwgY2F0XSk7XG4gICAgc2V0TWVkaWNhbENhdGVnb3J5UnVsZXMocCA9PiAoeyAuLi5wLCBbY2F0XTogXCJcIiB9KSk7XG4gICAgc2V0RG9jdG9yTWVkaWNhbFJ1bGVzQ2FjaGUocCA9PiAoeyAuLi5wLCBbY2F0XTogXCJcIiB9KSk7XG4gICAgc2V0Rm9ybURhdGEocCA9PiAoeyAuLi5wLCBtZWRpY2FsT3V0cHV0Q2F0ZWdvcmllczogWy4uLnAubWVkaWNhbE91dHB1dENhdGVnb3JpZXMsIGNhdF0sIG1lZGljYWxDYXRlZ29yeVJ1bGVzOiB7IC4uLnAubWVkaWNhbENhdGVnb3J5UnVsZXMsIFtjYXRdOiBcIlwiIH0gfSkpO1xuICAgIHNldE5ld01lZGljYWxDYXRlZ29yeShcIlwiKTsgc2V0U2hvd05ld01lZGljYWxJbnB1dChmYWxzZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IGlmIChtZWRpY2FsU2Nyb2xsUmVmLmN1cnJlbnQpIG1lZGljYWxTY3JvbGxSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZWRpY2FsU2Nyb2xsUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0OyB9LCAxM
1136DApO1xuICB9O1xuICBjb25zdCBoYW5kbGVBZGRDdXJyZW50Q2F0ZWdvcnkgPSAoKSA9PiB7XG4gICAgY29uc3QgY2F0ID0gbmV3Q3VycmVudENhdGVnb3J5LnRyaW0oKTsgaWYgKCFjYXQpIHJldHVybjtcbiAgICBzZXRDdXJyZW50Q2F0ZWdvcmllc0xpc3QocCA9PiBbLi4ucCwgY2F0XSk7XG4gICAgc2V0Q3VycmVudENhdGVnb3J5UnVsZXMocCA9PiAoeyAuLi5wLCBbY2F0XTogXCJcIiB9KSk7XG4gICAgc2V0RG9jdG9yQ3VycmVudFJ1bGVzQ2FjaGUocCA9PiAoeyAuLi5wLCBbY2F0XTogXCJcIiB9KSk7XG4gICAgc2V0Rm9ybURhdGEocCA9PiAoeyAuLi5wLCBjdXJyZW50T3V0cHV0Q2F0ZWdvcmllczogWy4uLnAuY3VycmVudE91dHB1dENhdGVnb3JpZXMsIGNhdF0sIGN1cnJlbnRDYXRlZ29yeVJ1bGVzOiB7IC4uLnAuY3VycmVudENhdGVnb3J5UnVsZXMsIFtjYXRdOiBcIlwiIH0gfSkpO1xuICAgIHNldE5ld0N1cnJlbnRDYXRlZ29yeShcIlwiKTsgc2V0U2hvd05ld0N1cnJlbnRJbnB1dChmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTWVkaWNhbENhdGVnb3J5Q2hhbmdlID0gYXN5bmMgKGNhdCkgPT4ge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBmb3JtRGF0YS5tZWRpY2FsT3V0cHV0Q2F0ZWdvcmllcy5pbmNsdWRlcyhjYXQpO1xuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gZm9ybURhdGEubWVkaWNhbE91dHB1dENhdGVnb3JpZXMuZmlsdGVyKGMgPT4gYyAhPT0gY2F0KTtcbiAgICAgIHNldEZvcm1EYXRhKHAgPT4gKHsgLi4ucCwgbWVkaWNhbE91dHB1dENhdGVnb3JpZXM6IHVwZGF0ZWQgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcnVsZVRleHQgPSBcIlwiO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vaG1zL3VzZXJzL2RhdGEvY29udGV4dC9nZXRfTWVkaWNhbEN1cnJlbnRBZG1pblJ1bGVzYCwgeyBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoZGF0YS5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgY29uc3QgbSA9IGRhdGEuZGF0YS5maW5kKHIgPT4gci5zcGVjaWFsaXR5ID09PSBkb2N0b3JTcGVjaWFsaXR5KTtcbiAgICAgICAgICBydWxlVGV4dCA9IG0/Lm1lZGljYWxfY29udGV4dC5maW5kKGkgPT4gaS5tZWRpY2FsX291dHB1dF9jYXRlZ29yeSA9PT0gY2F0KT8ucnVsZV90ZXh0IHx8IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge31cbiAgICAgIGNvbnN0IHJ1bGUgPSBkb2N0b3JNZWRpY2FsUnVsZXNDYWNoZVtjYXRdID8/IHJ1bGVUZXh0O1xuICAgICAgY29uc3QgdXBkYXRlZFJ1bGVzID0geyAuLi5mb3JtRGF0YS5tZWRpY2FsQ2F0ZWdvcnlSdWxlcywgW2NhdF06IHJ1bGUgfTtcbiAgICAgIHNldE1lZGljYWxDYXRlZ29yeVJ1bGVzKHVwZGF0ZWRSdWxlcyk7XG4gICAgICBzZXRGb3JtRGF0YShwID0+ICh7IC4uLnAsIG1lZGljYWxPdXRwdXRDYXRlZ29yaWVzOiBbLi4ucC5tZWRpY2FsT3V0cHV0Q2F0ZWdvcmllcywgY2F0XSwgbWVkaWNhbENhdGVnb3J5UnVsZXM6IHVwZGF0ZWRSdWxlcyB9KSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVDdXJyZW50Q2F0ZWdvcnlDaGFuZ2UgPSBhc3luYyAoY2F0KSA9PiB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGZvcm1EYXRhLmN1cnJlbnRPdXRwdXRDYXRlZ29yaWVzLmluY2x1ZGVzKGNhdCk7XG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIHNldEZvcm1EYXRhKHAgPT4gKHsgLi4ucCwgY3VycmVudE91dHB1dENhdGVnb3JpZXM6IHAuY3VycmVudE91dHB1dENhdGVnb3JpZXMuZmlsdGVyKGMgPT4gYyAhPT0gY2F0KSB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBydWxlVGV4dCA9IFwiXCI7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9obXMvdXNlcnMvZGF0YS9jb250ZXh0L2dldF9NZWRpY2FsQ3VycmVudEFkbWluUnVsZXNgLCB7IGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIiB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmIChkYXRhLnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICBjb25zdCBtID0gZGF0YS5kYXRhLmZpbmQociA9PiByLnNwZWNpYWxpdHkgPT09IGRvY3RvclNwZWNpYWxpdHkpO1xuICAgICAgICAgIHJ1bGVUZXh0ID0gbT8uY3VycmVudF9jb250ZXh0LmZpbmQoaSA9PiBpLmN1cnJlbnRfb3V0cHV0X2NhdGVnb3J5ID09PSBjYXQpPy5ydWxlX3RleHQgfHwgXCJcIjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7fVxuICAgICAgY29uc3QgcnVsZSA9IGRvY3RvckN1cnJlbnRSdWxlc0NhY2hlW2NhdF0gPz8gZm9ybURhdGEuY3VycmVudENhdGVnb3J5UnVsZXM/LltjYXRdID8/IHJ1bGVUZXh0O1xuICAgICAgY29uc3QgdXBkYXRlZFJ1bGVzID0geyAuLi5mb3JtRGF0YS5jdXJyZW50Q2F0ZWdvcnlSdWxlcywgW2NhdF06IHJ1bGUgfTtcbiAgICAgIHNldEN1cnJlbnRDYXRlZ29yeVJ1bGVzKHVwZGF0ZWRSdWxlcyk7XG4gICAgICBzZXRGb3JtRGF0YShwID0+ICh7IC4uLnAsIGN1cnJlbnRPdXRwdXRDYXRlZ29yaWVzOiBbLi4ucC5jdXJyZW50T3V0cHV0Q2F0ZWdvcmllcywgY2F0XSwgY3VycmVudENhdGVnb3J5UnVsZXM6IHVwZGF0ZWRSdWxlcyB9KSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IGFzeW5jIChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBkb2
1136N0b3JfaWQ6IGRvY3RvcklkLCBzcGVjaWFsaXR5OiBkb2N0b3JTcGVjaWFsaXR5LFxuICAgICAgICBtZWRpY2FsX2NvbnRleHQ6IGZvcm1EYXRhLm1lZGljYWxPdXRwdXRDYXRlZ29yaWVzLm1hcChjYXQgPT4gKHsgbWVkaWNhbF9vdXRwdXRfY2F0ZWdvcnk6IGNhdCwgcnVsZV90ZXh0OiBmb3JtRGF0YS5tZWRpY2FsQ2F0ZWdvcnlSdWxlc1tjYXRdIHx8IFwiXCIgfSkpLFxuICAgICAgICBjdXJyZW50X2NvbnRleHQ6IGZvcm1EYXRhLmN1cnJlbnRPdXRwdXRDYXRlZ29yaWVzLm1hcChjYXQgPT4gKHsgY3VycmVudF9vdXRwdXRfY2F0ZWdvcnk6IGNhdCwgcnVsZV90ZXh0OiBmb3JtRGF0YS5jdXJyZW50Q2F0ZWdvcnlSdWxlc1tjYXRdIHx8IFwiXCIgfSkpLFxuICAgICAgICBpc19hY3RpdmU6IGZvcm1EYXRhLmlzQWN0aXZlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vaG1zL3VzZXJzL2RhdGEvY29udGV4dC9zYXZlX0RvY3Rvck1lZGljYWxDdXJyZW50UnVsZWAsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIiwgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzLm9rKSBhbGVydChcIkNvbmZpZ3VyYXRpb24gc2F2ZWQgc3VjY2Vzc2Z1bGx5LlwiKTtcbiAgICAgIGVsc2UgYWxlcnQoXCJGYWlsZWQgdG8gc2F2ZSBjb25maWd1cmF0aW9uLlwiKTtcbiAgICB9IGNhdGNoIChlKSB7IGNvbnNvbGUuZXJyb3IoZSk7IGFsZXJ0KFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuXCIpOyB9XG4gIH07XG5cbiAgaWYgKCFhdXRoQ2hlY2tlZCkgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXt7IGhlaWdodDogXCIxMDB2aFwiLCBkaXNwbGF5OiBcImZsZXhcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsIGZvbnRGYW1pbHk6IFQuZm9udCwgZm9udFNpemU6IFwiMC43OHJlbVwiLCBjb2xvcjogVC50ZXh0TXV0ZWQsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIGxldHRlclNwYWNpbmc6IFwiMC4xNWVtXCIgfX0+XG4gICAgICBWZXJpZnlpbmcgc2Vzc2lvbuKAplxuICAgIDwvZGl2PlxuICApO1xuICBpZiAoIWRvY3RvcklkKSByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBcIjEwMHZoXCIsIGRpc3BsYXk6IFwiZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIiwgZm9udEZhbWlseTogVC5mb250LCBmb250U2l6ZTogXCIwLjgycmVtXCIsIGNvbG9yOiBULnRleHQgfX0+XG4gICAgICBEb2N0b3IgSUQgbWlzc2luZy4gUGxlYXNlIGxvZyBpbiBhZ2Fpbi5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBjb25zdCBuYXZJdGVtcyA9IFtcbiAgICB7IGxhYmVsOiBcIkRhc2hib2FyZFwiLCAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiA8SG9tZSBzaXplPXsxNH0gLz4sICAgICAgICAgb25DbGljazogKCkgPT4gbmF2aWdhdGUoYC9kb2N0b3ItZGFzaGJvYXJkP2RvY3Rvcl9pZD0ke2RvY3RvcklkfWApIH0sXG4gICAgeyBsYWJlbDogXCJNZWRpY2FsIENvbnRleHQgU2tpbGxzXCIsICAgICAgaWNvbjogPENhbGVuZGFyIHNpemU9ezE0fSAvPiwgICAgIGFjdGl2ZTogY3VycmVudFBhdGguaW5jbHVkZXMoXCJtZWRpY2FsLWN1cnJlbnQtY29udGV4dC1ydWxlXCIpLCBvbkNsaWNrOiAoKSA9PiBuYXZpZ2F0ZShgL21lZGljYWwtY3VycmVudC1jb250ZXh0LXJ1bGUtc2V0dGluZ3M/ZG9jdG9yX2lkPSR7ZG9jdG9ySWR9YCkgfSxcbiAgICB7IGxhYmVsOiBcIlN0cnVjdHVyZWQgTm90ZSBTa2lsbHNcIiwgICAgICBpY29uOiA8Tm90ZWJvb2sgc2l6ZT17MTR9IC8+LCAgICAgb25DbGljazogKCkgPT4gbmF2aWdhdGUoYC9zdHJ1Y3R1cmVkLW5vdGUtaW5zdHJ1Y3Rpb25zLXNldHRpbmdzP2RvY3Rvcl9pZD0ke2RvY3RvcklkfWApIH0sXG4gICAgeyBsYWJlbDogXCJHdWlkZWxpbmVzIFNraWxsc1wiLCAgICAgICAgICAgICAgIGljb246IDxGaWxlVGV4dCBzaXplPXsxNH0gLz4sICAgICBvbkNsaWNrOiAoKSA9PiBuYXZpZ2F0ZShgL2d1aWRlbGluZXMtc2V0dGluZ3M/ZG9jdG9yX2lkPSR7ZG9jdG9ySWR9YCkgfSxcbiAgXTtcblxuICAvKiDilIDilIAgQ2F0ZWdvcnkgc2VjdGlvbiByZW5kZXJlciDilIDilIAgKi9cbiAgY29uc3QgcmVuZGVyQ2F0ZWdvcnlTZWN0aW9uID0gKHR5cGUpID0+IHtcbiAgICBjb25zdCBpc01lZGljYWwgICA9IHR5cGUgPT09IFwibWVkaWNhbFwiO1xuICAgIGNvbnN0IGNhdGVnb3JpZXMgID0gaXNNZWRpY2FsID8gbWVkaWNhbENhdGVnb3JpZXNMaXN0ICAgICAgICA6IGN1cnJlbnRDYXRlZ29yaWVzTGlzdDtcbiAgICBjb25zdCBzZWxlY3RlZCAgICA9IGlzTWVkaWNhbCA/IGZvcm1EYXRhLm1lZGljYWxPdXRwdXRDYXRlZ29yaWVzIDogZm9ybURhdGEuY3VycmVudE91dHB1dENhdGVnb3JpZXM7XG4gICAgY29uc3QgcnVsZXMgICAgICAgPSBpc01lZGljYWwgPyBtZWRpY2FsQ2F0ZWdvcnlSdWxlcyAgICAgICAgIDogY3VycmVudENhdGVnb3J5UnVsZXM7XG4gICAgY29uc3Qgc2Nyb2xsUmVmICAgPSBpc01lZGljYWwgPyBtZWRpY2FsU2Nyb2xsUmVmICAgICAgICAgICAgIDogY3VycmVudFNjcm9sbFJlZjtcbiAgICBjb25zdCBzaG93TmV3ICAgICA9IGlzTWVkaWNhbCA/IHNob3dOZXdNZWRpY2FsSW5wdXQgICAgICAgICAgOiBzaG93TmV3Q3VycmVudElucHV0O1xuICAgIGNvbnN0IG5ld1ZhbCAgICAgID0gaXNNZWRpY2FsID8gbmV3TWVkaWNhbENhdGVnb3J5ICAgICAgICAgICA6IG5ld0N1cnJlbnRDYXRlZ29yeTtcbiAgICBjb25zdCBzZXRTaG93TmV3ICA9IGlzTWVkaWNhbCA/IHNldFNob3dOZXdNZWRpY2FsSW5wdXQgICAgICAgOiBzZXRTaG93TmV3Q3VycmVudElucHV0O1xuICAgIGNvbnN0IHNldE5ld1ZhbCAgID0gaXNNZWRpY2FsID8gc2V0TmV3TWVkaWNhbENhdGVnb3J5ICAgICAgICA6IHNldE5ld0N1cnJlbnRDYXRlZ29yeTtcbiAgICBjb25zdCBvbkFkZCAgICAgICA9IGlzTWVkaWNhbCA/IGhhbmRsZUFkZE1lZGljYWxDYXRlZ29yeSAgICAgOiBoYW5kbGVBZGRDdXJyZW50Q2F0ZWdvcnk7XG4gICAgY29uc3Qgb25DaGFuZ2UgICAgPSBpc01lZGljYWwgPyBoYW5kbGVNZWRpY2FsQ2F0ZWdvcnlDaGFuZ2UgIDogaGFuZGxlQ3VycmVudENhdGVnb3J5Q2hhbmdlO1xuICAgIGNvbnN0IG9uUnVsZUNoYW5nZSA9IGlzTWVkaWNhbCA/IGhhbmRsZU1lZGljYWxSdWxlQ2hhbmdlICAgICA6IGhhbmRsZUN1cnJlbnRSdWxlQ2hhbmdlO1xuICAgIGNvbnN0IGZpZWxkUHJlZml4ID0gaXNNZWRpY2FsID8gXCJtZWRpY2FsXCIgOiBcImN1cnJlbnRcIjtcbiAgICBjb25zdCBzZWN0aW9uVGl0bGUgPSBpc01lZGljYWwgPyBcIk1lZGljYWwgT3V0cHV0IENhdGVnb3JpZXNcIiA6IFwiQ3VycmVudCBPdXRwdXQgQ2F0ZWdvcmllc1wiO1xuICAgIGNvbnN0IHNlY3Rpb25TdWIgICA9IGlzTWVkaWNhbCA/IFwiU2VsZWN0IGNhdGVnb3JpZXMgYW5kIGRlZmluZSBydWxlcyBmb3IgZWFjaCBtZWRpY2FsIGNvbnRleHRcIiA6IFwiU2VsZWN0IGNhdGVnb3JpZXMgYW5kIGRlZmluZSBydWxlcyBmb3IgZWFjaCBjdXJyZW50IHBhdGllbnQgY29udGV4dFwiO1xuICAgIGNvbnN0IEljb24gICAgICAgICA9IGlzTWVkaWNhbCA/IENsaXBib2FyZExpc3QgOiBHYXVnZTtcblxuICAgI
1136HJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXt7IC4uLlMuY2FyZCwgbWFyZ2luQm90dG9tOiBcIjEuNXJlbVwiIH19IGNsYXNzTmFtZT1cImRhLWZhZGVpblwiPlxuICAgICAgICB7LyogaGVhZGVyICovfVxuICAgICAgICA8ZGl2IHN0eWxlPXtTLmNhcmRIZWFkZXJ9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDM2LCBoZWlnaHQ6IDM2LCBiYWNrZ3JvdW5kOiBULmJnQWx0LCBib3JkZXI6IGAxcHggc29saWQgJHtULmJvcmRlcn1gLCBkaXNwbGF5OiBcImZsZXhcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsIGZsZXhTaHJpbms6IDAgfX0+XG4gICAgICAgICAgICA8SWNvbiBzaXplPXsxNn0gY29sb3I9e1QudGV4dE11dGVkfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIwLjlyZW1cIiwgZm9udFdlaWdodDogNDAwLCBjb2xvcjogVC50ZXh0LCBtYXJnaW46IDAgfX0+e3NlY3Rpb25UaXRsZX08L3A+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIwLjdyZW1cIiwgY29sb3I6IFQudGV4dE11dGVkLCBtYXJnaW46IFwiMnB4IDAgMFwiLCBmb250V2VpZ2h0OiAzMDAgfX0+e3NlY3Rpb25TdWJ9PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IFwiYXV0b1wiLCAuLi5TLnNlY0xhYmVsLCBtYXJnaW46IDAgfX0+e3NlbGVjdGVkLmxlbmd0aH0gc2VsZWN0ZWQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBsaXN0ICovfVxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGJvcmRlcjogYDFweCBzb2xpZCAke1QuYm9yZGVyfWAsIGJhY2tncm91bmQ6IFQuYmdBbHQgfX0+XG4gICAgICAgICAgey8qIGxpc3QgaGVhZGVyICovfVxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogXCIwLjY1cmVtIDFyZW1cIiwgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7VC5ib3JkZXJ9YCwgZGlzcGxheTogXCJmbGV4XCIsIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiB9fT5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiBcIjAuNjVyZW1cIiwgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiwgbGV0dGVyU3BhY2luZzogXCIwLjEyZW1cIiwgY29sb3I6IFQudGV4dE11dGVkIH19PlxuICAgICAgICAgICAgICBBdmFpbGFibGUgQ2F0ZWdvcmllcyAoe2NhdGVnb3JpZXMubGVuZ3RofSlcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBzY3JvbGxhYmxlIGNhdGVnb3J5IHJvd3MgKi99XG4gICAgICAgICAgPGRpdiByZWY9e3Njcm9sbFJlZn0gY2xhc3NOYW1lPVwiZGEtbGlzdC1zY3JvbGxcIiBzdHlsZT17eyBiYWNrZ3JvdW5kOiBULmJnIH19PlxuICAgICAgICAgICAge2NhdGVnb3JpZXMubWFwKChjYXQsIGkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkLmluY2x1ZGVzKGNhdCk7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9e2l9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHtULmJvcmRlcn1gLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaXNTZWxlY3RlZCA/IFQuYmdBbHQgOiBULmJnLFxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogXCJiYWNrZ3JvdW5kIDAuMTVzXCIsXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICB7LyogY2hlY2tib3ggcm93ICovfVxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYS1jYXQtcm93XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGdhcDogXCIxMHB4XCIsIHBhZGRpbmc6IFwiMC43NXJlbSAxcmVtXCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoY2F0KX0+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjaGVja2VkPXtpc1NlbGVjdGVkfSBvbkNoYW5nZT17KCkgPT4gb25DaGFuZ2UoY2F0KX1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogMTUsIGhlaWdodDogMTUsIGN1cnNvcjogXCJwb2ludGVyXCIsIGFjY2VudENvbG9yOiBULnRleHQsIGZsZXhTaHJpbms6IDAgfX0gLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6IFwiMC44MnJlbVwiLCBmb250V2VpZ2h0OiBpc1NlbGVjdGVkID8gNDAwIDogMzAwLCBjb2xvcjogVC50ZXh0LCBmbGV4OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgIHtjYXR9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgJiYgPENoZWNrQ2lyY2xlIHNpemU9ezEzfSBjb2xvcj17VC50ZXh0TXV0ZWR9IC8+fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIHsvKiBydWxlIHRleHRhcmVhIOKAlCBzaG93biB3aGVuIHNlbGVjdGVkICovfVxuICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6IFwiMCAxcmVtIDFyZW0gMi41cmVtXCIsIGJhY2tncm91bmQ6IFQuYmdBbHQgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBib3JkZXJMZWZ0OiBgMnB4IHNvbGlkICR7VC5ib3JkZXJTdHJ9YCwgcGFkZGluZ0xlZnQ6IFwiMC44NzVyZW1cIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyAuLi5TLnNlY0xhYmVsLCBtYXJnaW5Cb3R0b206IFwiMC4zNXJlbVwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGUgZGVmaW5pdGlvbiBmb3Ige2NhdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGEtdGV4dGFyZWFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPXs1fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cnVsZXNbY2F0XSB8fCBmb3JtRGF0YVtgJHtmaWVsZFByZWZpeH1DYXRlZ29yeVJ1bGVzYF0/LltjYXRdIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IG9uUnVsZUNoYW5nZShjYXQsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KCkgPT4gc2V0Rm9jdXNlZEZpZWxkKGAke2ZpZWxkUHJlZml4fS0ke2NhdH1gKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25CbHVyPXsoKSA9PiBzZXRGb2N1c2VkRmllbGQobnVsbCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgI
1136HBsYWNlaG9sZGVyPXtgRGVmaW5lIHNwZWNpZmljIHJ1bGVzIGZvciAke2NhdH3igKZgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBib3JkZXJDb2xvcjogZm9jdXNlZEZpZWxkID09PSBgJHtmaWVsZFByZWZpeH0tJHtjYXR9YCA/IFQuYm9yZGVyU3RyIDogVC5ib3JkZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIwLjY1cmVtXCIsIGNvbG9yOiBULnRleHRNdXRlZCwgbWFyZ2luVG9wOiBcIjAuMzVyZW1cIiwgZm9udFN0eWxlOiBcIml0YWxpY1wiLCBmb250V2VpZ2h0OiAzMDAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGU6IEZvciB7Y2F0fSwgc3BlY2lmeSBjbGluaWNhbCBjcml0ZXJpYSwgcmVxdWlyZWQgYXNzZXNzbWVudHMsIGFuZCBwcm90b2NvbHMuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIGFkZCBjYXRlZ29yeSAqL31cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGJvcmRlclRvcDogYDFweCBkYXNoZWQgJHtULmJvcmRlcn1gLCBwYWRkaW5nOiBcIjFyZW1cIiB9fT5cbiAgICAgICAgICAgIHshc2hvd05ldyA/IChcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJkYS1idG4tb3V0bGluZVwiIHN0eWxlPXt7IC4uLlMuYnRuT3V0bGluZSwgd2lkdGg6IFwiMTAwJVwiLCBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIiB9fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dOZXcodHJ1ZSl9PlxuICAgICAgICAgICAgICAgIDxQbHVzIHNpemU9ezEzfSAvPiBBZGQgTmV3IENhdGVnb3J5XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPVwiZGEtaW5wdXRcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206IFwiMC43NXJlbVwiIH19XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIHZhbHVlPXtuZXdWYWx9IGF1dG9Gb2N1c1xuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4gc2V0TmV3VmFsKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB7IGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7IGUucHJldmVudERlZmF1bHQoKTsgb25BZGQoKTsgfSB9fVxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBuZXcgY2F0ZWdvcnkgbmFtZeKAplwiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwgZ2FwOiBcIjAuNjI1cmVtXCIsIGp1c3RpZnlDb250ZW50OiBcImZsZXgtZW5kXCIgfX0+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImRhLWJ0bi1vdXRsaW5lXCIgc3R5bGU9e1MuYnRuT3V0bGluZX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4geyBzZXRTaG93TmV3KGZhbHNlKTsgc2V0TmV3VmFsKFwiXCIpOyB9fT5cbiAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiZGEtYnRuLXByaW1hcnlcIiBzdHlsZT17Uy5idG5QcmltYXJ5fSBvbkNsaWNrPXtvbkFkZH0+XG4gICAgICAgICAgICAgICAgICAgIEFkZCBDYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxzdHlsZT57Q1NTfTwvc3R5bGU+XG4gICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBtaW5IZWlnaHQ6IFwiMTAwdmhcIiwgYmFja2dyb3VuZDogVC5iZywgZm9udEZhbWlseTogVC5mb250LCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBULnRleHQgfX0+XG5cbiAgICAgICAgey8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCBTSURFQkFSIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL31cbiAgICAgICAgPGFzaWRlIHN0eWxlPXt7XG4gICAgICAgICAgd2lkdGg6IFNJREVCQVJfVywgbWluSGVpZ2h0OiBcIjEwMHZoXCIsXG4gICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIiwgdG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDAsIHpJbmRleDogMTAwLFxuICAgICAgICAgIGJhY2tncm91bmQ6IFQuYmcsIGJvcmRlclJpZ2h0OiBgMXB4IHNvbGlkICR7VC5ib3JkZXJ9YCxcbiAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgICAgICAgfX0+XG4gICAgICAgICAgey8qIGJyYW5kICovfVxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogXCIxLjVyZW0gMS41cmVtIDFyZW1cIiwgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7VC5ib3JkZXJ9YCwgZmxleFNocmluazogMCB9fT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGdhcDogXCIxMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIxLjI1cmVtXCIgfX0+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogXCIwLjlyZW1cIiwgZm9udFdlaWdodDogNDAwLCBsZXR0ZXJTcGFjaW5nOiBcIi0wLjAxZW1cIiwgY29sb3I6IFQudGV4dCB9fT5Eb2N0b3Jhc3Npc3QuQUk8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXtTLnNlY0xhYmVsfT5QaHlzaWNpYW48L3NwYW4+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIwLjg1cmVtXCIsIGZvbnRXZWlnaHQ6IDQwMCwgY29sb3I6IFQudGV4dCwgbWFyZ2luOiAwIH19Pntkb2N0b3JOYW1lIHx8IFwiTG9hZGluZ+KAplwifTwvcD5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiBcIjAuN3JlbVwiLCBjb2xvcjogVC50ZXh0TXV0ZWQsIG1hcmdpblRvcDogXCIycHhcIiB9fT57ZG9jdG9yU3BlY2lhbGl0eSB8fCBcIuKAlFwifTwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgI
1136HsvKiBuYXYgKi99XG4gICAgICAgICAgPG5hdiBjbGFzc05hbWU9XCJkYS1zaWRlYmFyLXNjcm9sbFwiIHN0eWxlPXt7IGZsZXg6IDEsIG92ZXJmbG93WTogXCJhdXRvXCIsIHBhZGRpbmc6IFwiMC43NXJlbSAwXCIgfX0+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogXCIwLjU4cmVtXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIGxldHRlclNwYWNpbmc6IFwiMC4xNWVtXCIsIGNvbG9yOiBULnRleHRNdXRlZCwgcGFkZGluZzogXCIwLjVyZW0gMS4yNXJlbVwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfX0+U2V0dGluZ3M8L3NwYW4+XG4gICAgICAgICAgICB7bmF2SXRlbXMubWFwKChpdGVtLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxidXR0b24ga2V5PXtpfSBjbGFzc05hbWU9e2BkYS1uYXYtYnRuJHtpdGVtLmFjdGl2ZSA/IFwiIGRhLWFjdGl2ZVwiIDogXCJcIn1gfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2l0ZW0ub25DbGlja31cbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLCBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwibGVmdFwiLCBwYWRkaW5nOiBcIjAuNTVyZW0gMS4yNXJlbVwiLFxuICAgICAgICAgICAgICAgICAgZm9udFNpemU6IFwiMC43OHJlbVwiLCBmb250V2VpZ2h0OiBpdGVtLmFjdGl2ZSA/IDQwMCA6IDMwMCxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBpdGVtLmFjdGl2ZSA/IFQudGV4dCA6IFQudGV4dFNlYyxcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsIGRpc3BsYXk6IFwiZmxleFwiLCBhbGlnbkl0ZW1zOiBcImZsZXgtc3RhcnRcIiwgZ2FwOiBcIjEwcHhcIixcbiAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFQuZm9udCwgdHJhbnNpdGlvbjogXCJhbGwgMC4xNXNcIiwgbGluZUhlaWdodDogMS40LFxuICAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdDogaXRlbS5hY3RpdmUgPyBgMnB4IHNvbGlkICR7VC5ib3JkZXJTdHJ9YCA6IFwiMnB4IHNvbGlkIHRyYW5zcGFyZW50XCIsXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZmxleFNocmluazogMCwgbWFyZ2luVG9wOiBcIjJweFwiIH19PntpdGVtLmljb259PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPntpdGVtLmxhYmVsfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L25hdj5cblxuICAgICAgICAgIHsvKiBsb2dvdXQgKi99XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiBcIjFyZW0gMS4yNXJlbVwiLCBib3JkZXJUb3A6IGAxcHggc29saWQgJHtULmJvcmRlcn1gLCBmbGV4U2hyaW5rOiAwIH19PlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJkYS1idG4tb3V0bGluZVwiIHN0eWxlPXt7IC4uLlMuYnRuT3V0bGluZSwgd2lkdGg6IFwiMTAwJVwiLCBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIiB9fSBvbkNsaWNrPXtoYW5kbGVMb2dvdXR9PlxuICAgICAgICAgICAgICA8TG9nT3V0IHNpemU9ezEzfSAvPiBMb2dvdXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgIHsvKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgTUFJTiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi99XG4gICAgICAgIDxtYWluIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IFNJREVCQVJfVywgZmxleDogMSwgbWluV2lkdGg6IDAsIGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiIH19PlxuXG4gICAgICAgICAgey8qIHRvcCBiYXIgKi99XG4gICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246IFwic3RpY2t5XCIsIHRvcDogMCwgekluZGV4OiA1MCxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IFQuYmcsIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke1QuYm9yZGVyfWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjAuODc1cmVtIDJyZW1cIixcbiAgICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgfX0+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17Uy5zZWNMYWJlbH0+Q2xpbmljYWwgQ29uZmlndXJhdGlvbjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGgxIHN0eWxlPXt7IGZvbnRTaXplOiBcIjFyZW1cIiwgZm9udFdlaWdodDogNDAwLCBsZXR0ZXJTcGFjaW5nOiBcIi0wLjAxZW1cIiwgY29sb3I6IFQudGV4dCwgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICAgIE1lZGljYWwgQ3VycmVudCBDb250ZXh0IEluc3RydWN0aW9uc1xuICAgICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImRhLWJ0bi1wcmltYXJ5XCIgc3R5bGU9e1MuYnRuUHJpbWFyeX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGUoYC9yZWdpc3Rlci1wYXRpZW50P2RvY3Rvcl9pZD0ke2RvY3RvcklkfWApfT5cbiAgICAgICAgICAgICAgPFVzZXJQbHVzIHNpemU9ezEzfSAvPiBSZWdpc3RlciBQYXRpZW50IOKGklxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogYm9keSAqL31cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6IFwiMS41cmVtIDJyZW1cIiwgZmxleDogMSB9fT5cblxuICAgICAgICAgICAgey8qIHNwZWNpYWx0eSArIHN0YXQgc3RyaXAgKi99XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGJvcmRlcjogYDFweCBzb2xpZCAke1QuYm9yZGVyfWAsIGJhY2tncm91bmQ6IFQuYmdBbHQsIHBhZGRpbmc6IFwiMXJlbSAxLjI1cmVtXCIsIG1hcmdpbkJvdHRvbTogXCIxLjVyZW1cIiwgZGlzcGxheTogXCJmbGV4XCIsIGdhcDogXCIxcHhcIiwgZmxleFdyYXA6IFwid3JhcFwiIH19PlxuICAgICAgICAgICAgICB7W1xuICAgICAgICAgICAgICAgI
1136HsgbGFiZWw6IFwiU3BlY2lhbHR5XCIsICAgICAgICAgIHZhbDogZG9jdG9yU3BlY2lhbGl0eSB8fCBcIk5vdCBTZXRcIiB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IFwiTWVkaWNhbCBDYXRlZ29yaWVzXCIsIHZhbDogZm9ybURhdGEubWVkaWNhbE91dHB1dENhdGVnb3JpZXMubGVuZ3RoIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogXCJDdXJyZW50IENhdGVnb3JpZXNcIiwgdmFsOiBmb3JtRGF0YS5jdXJyZW50T3V0cHV0Q2F0ZWdvcmllcy5sZW5ndGggfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBcIlN0YXR1c1wiLCAgICAgICAgICAgICB2YWw6IGZvcm1EYXRhLmlzQWN0aXZlID8gXCJBY3RpdmVcIiA6IFwiSW5hY3RpdmVcIiB9LFxuICAgICAgICAgICAgICBdLm1hcCgoeyBsYWJlbCwgdmFsIH0pID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17bGFiZWx9IHN0eWxlPXt7IGJhY2tncm91bmQ6IFQuYmcsIHBhZGRpbmc6IFwiMC44NzVyZW0gMS4yNXJlbVwiLCBmbGV4OiBcIjEgMSAxNDBweFwiLCBtaW5XaWR0aDogMTMwIH19PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e1Muc2VjTGFiZWx9PntsYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIwLjk1cmVtXCIsIGZvbnRXZWlnaHQ6IDQwMCwgY29sb3I6IFQudGV4dCwgbWFyZ2luOiAwIH19Pnt2YWx9PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogdGFiIGJhciAqL31cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke1QuYm9yZGVyfWAsIG1hcmdpbkJvdHRvbTogXCIxLjVyZW1cIiB9fT5cbiAgICAgICAgICAgICAge1tcbiAgICAgICAgICAgICAgICB7IGtleTogXCJtZWRpY2FsXCIsICBsYWJlbDogXCJNZWRpY2FsIENvbnRleHRcIiwgIEljb246IEJyYWluICB9LFxuICAgICAgICAgICAgICAgIHsga2V5OiBcImN1cnJlbnRcIiwgIGxhYmVsOiBcIkN1cnJlbnQgQ29udGV4dFwiLCAgSWNvbjogVGFyZ2V0IH0sXG4gICAgICAgICAgICAgIF0ubWFwKCh7IGtleSwgbGFiZWwsIEljb24gfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxidXR0b24ga2V5PXtrZXl9IGNsYXNzTmFtZT1cImRhLXRhYi1idG5cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0QWN0aXZlVGFiKGtleSl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjAuNzVyZW0gMS4yNXJlbVwiLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBhY3RpdmVUYWIgPT09IGtleSA/IFQuYmcgOiBULmJnQWx0LFxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206IGFjdGl2ZVRhYiA9PT0ga2V5ID8gYDJweCBzb2xpZCAke1QuYm9yZGVyU3RyfWAgOiBcIjJweCBzb2xpZCB0cmFuc3BhcmVudFwiLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogXCIwLjc4cmVtXCIsIGZvbnRXZWlnaHQ6IGFjdGl2ZVRhYiA9PT0ga2V5ID8gNDAwIDogMzAwLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogYWN0aXZlVGFiID09PSBrZXkgPyBULnRleHQgOiBULnRleHRNdXRlZCxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBnYXA6IFwiNnB4XCIsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFQuZm9udCwgY3Vyc29yOiBcInBvaW50ZXJcIiwgbWFyZ2luQm90dG9tOiBcIi0xcHhcIixcbiAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgPEljb24gc2l6ZT17MTR9IC8+IHtsYWJlbH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIGZvcm0gKi99XG4gICAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cblxuICAgICAgICAgICAgICB7YWN0aXZlVGFiID09PSBcIm1lZGljYWxcIiAmJiByZW5kZXJDYXRlZ29yeVNlY3Rpb24oXCJtZWRpY2FsXCIpfVxuICAgICAgICAgICAgICB7YWN0aXZlVGFiID09PSBcImN1cnJlbnRcIiAmJiByZW5kZXJDYXRlZ29yeVNlY3Rpb24oXCJjdXJyZW50XCIpfVxuXG4gICAgICAgICAgICAgIHsvKiBhY3Rpb24gYmFyICovfVxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGJvcmRlcjogYDFweCBzb2xpZCAke1QuYm9yZGVyfWAsIGJhY2tncm91bmQ6IFQuYmdBbHQsIHBhZGRpbmc6IFwiMXJlbSAxLjI1cmVtXCIsIGRpc3BsYXk6IFwiZmxleFwiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGZsZXhXcmFwOiBcIndyYXBcIiwgZ2FwOiBcIjAuODc1cmVtXCIgfX0+XG5cbiAgICAgICAgICAgICAgICB7LyogbGVmdDogdG9nZ2xlICsgY291bnRzICovfVxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGdhcDogXCIxLjVyZW1cIiwgZmxleFdyYXA6IFwid3JhcFwiIH19PlxuXG4gICAgICAgICAgICAgICAgICB7Lyogc3RhdHVzIHRvZ2dsZSAqL31cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGdhcDogXCIwLjc1cmVtXCIgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiBcIjAuNzVyZW1cIiwgY29sb3I6IFQudGV4dFNlYywgZm9udFdlaWdodDogMzAwIH19PlJ1bGUgU3RhdHVzOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCB3aWR0aDogNDQsIGhlaWdodDogMjQsIGN1cnNvcjogXCJwb2ludGVyXCIgfX0gb25DbGljaz17KCkgPT4gc2V0Rm9ybURhdGEocCA9PiAoeyAuLi5wLCBpc0FjdGl2ZTogIXAuaXNBY3RpdmUgfSkpfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCBpbnNldDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGZvcm1EYXRhLmlzQWN0aXZlID8gVC50ZXh0IDogVC5ib3JkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBcImJhY2tncm91bmQgMC4yc1wiLFxuICAgICAgICAgICAgICAgICAgICAgI
1136H19IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCB0b3A6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBmb3JtRGF0YS5pc0FjdGl2ZSA/IDIzIDogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFQuYmcsIHRyYW5zaXRpb246IFwibGVmdCAwLjJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgfX0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiBcIjAuN3JlbVwiLCB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMWVtXCIsIGNvbG9yOiBULnRleHRNdXRlZCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7Zm9ybURhdGEuaXNBY3RpdmUgPyBcIkFjdGl2ZVwiIDogXCJJbmFjdGl2ZVwifVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgey8qIGNvdW50cyAqL31cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGdhcDogXCIxLjI1cmVtXCIsIHBhZGRpbmdMZWZ0OiBcIjEuMjVyZW1cIiwgYm9yZGVyTGVmdDogYDFweCBzb2xpZCAke1QuYm9yZGVyfWAgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtbXG4gICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogXCJNZWRpY2FsXCIsIHZhbDogZm9ybURhdGEubWVkaWNhbE91dHB1dENhdGVnb3JpZXMubGVuZ3RoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogXCJDdXJyZW50XCIsIHZhbDogZm9ybURhdGEuY3VycmVudE91dHB1dENhdGVnb3JpZXMubGVuZ3RoIH0sXG4gICAgICAgICAgICAgICAgICAgIF0ubWFwKCh7IGxhYmVsLCB2YWwgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtsYWJlbH0gc3R5bGU9e3sgdGV4dEFsaWduOiBcImNlbnRlclwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6IFwiMC42cmVtXCIsIGNvbG9yOiBULnRleHRNdXRlZCwgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiwgbGV0dGVyU3BhY2luZzogXCIwLjFlbVwiLCBtYXJnaW46IFwiMCAwIDJweFwiIH19PntsYWJlbH08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIxLjFyZW1cIiwgZm9udFdlaWdodDogMzAwLCBsZXR0ZXJTcGFjaW5nOiBcIi0wLjAzZW1cIiwgY29sb3I6IFQudGV4dCwgbWFyZ2luOiAwIH19Pnt2YWx9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgey8qIHJpZ2h0OiBuYXYgYnV0dG9ucyAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBnYXA6IFwiMC42MjVyZW1cIiB9fT5cbiAgICAgICAgICAgICAgICAgIHthY3RpdmVUYWIgPT09IFwiY3VycmVudFwiICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiZGEtYnRuLW91dGxpbmVcIiBzdHlsZT17Uy5idG5PdXRsaW5lfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFjdGl2ZVRhYihcIm1lZGljYWxcIil9PlxuICAgICAgICAgICAgICAgICAgICAgIOKGkCBCYWNrXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHthY3RpdmVUYWIgPT09IFwibWVkaWNhbFwiICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiZGEtYnRuLXByaW1hcnlcIiBzdHlsZT17Uy5idG5QcmltYXJ5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFjdGl2ZVRhYihcImN1cnJlbnRcIil9PlxuICAgICAgICAgICAgICAgICAgICAgIE5leHQg4oaSXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHthY3RpdmVUYWIgPT09IFwiY3VycmVudFwiICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3NOYW1lPVwiZGEtYnRuLXByaW1hcnlcIiBzdHlsZT17Uy5idG5QcmltYXJ5fT5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tDaXJjbGUgc2l6ZT17MTN9IC8+IFNhdmUgQ29uZmlndXJhdGlvblxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWFpbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWVkaWNhbEN1cnJlbnRDb250ZXh0UnVsZTsiXSwiZmlsZSI6Ii9hcHAvc3JjL2Rhc2hib2FyZC9NZWRpY2FsQ3VycmVudENvbnRleHRSdWxlLmpzeCJ9
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.