1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/components/CustomerReviewsSection.tsx");import __vite__cjsImport0_react_jsxDevRuntime from "/@fs/home/runner/workspace/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=9ce4103e"; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"]; 2import RefreshRuntime from "/@react-refresh"; 3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope; 4let prevRefreshReg; 5let prevRefreshSig; 6if (import.meta.hot && !inWebWorker) { 7 if (!window.__vite_plugin_react_preamble_installed__) { 8 throw new Error("@vitejs/plugin-react can't detect preamble. Something is wrong. See https://github.com/vitejs/vite-plugin-react/pull/11#discussion_r430879201"); 9 } 10 prevRefreshReg = window.$RefreshReg$; 11 prevRefreshSig = window.$RefreshSig$; 12 window.$RefreshReg$ = (type, id) => { 13 RefreshRuntime.register(type, "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx " + id); 14 }; 15 window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform; 16} 17var _s = $RefreshSig$(); 18import __vite__cjsImport3_react from "/@fs/home/runner/workspace/node_modules/.vite/deps/react.js?v=9ce4103e"; const useState = __vite__cjsImport3_react["useState"]; const useRef = __vite__cjsImport3_react["useRef"]; const useEffect = __vite__cjsImport3_react["useEffect"]; const useCallback = __vite__cjsImport3_react["useCallback"]; 19import { useLanguage } from "/src/lib/LanguageContext.tsx"; 20import { ChevronLeft, ChevronRight } from "/@fs/home/runner/workspace/node_modules/.vite/deps/lucide-react.js?v=9ce4103e"; 21const reviews = [ 22 { 23 id: 1, 24 nameFr: "Yasmine K.", 25 nameEn: "Yasmine K.", 26 textFr: "Le Savon SAM a littéralement sauvé ma peau. Mes boutons ont disparu en 3 semaines et zéro sécheresse.", 27 textEn: "The SAM Soap literally saved my skin. My breakouts cleared in 3 weeks and zero dryness." 28 }, 29 { 30 id: 2, 31 nameFr: "Nyla M.", 32 nameEn: "Nyla M.", 33 textFr: "Le Beurre ONANY, c'est fou. Je l'applique le soir et le matin ma peau est encore hydratée. Game changer.", 34 textEn: "The ONANY Butter is insane. I put it on at night and my skin is still hydrated in the morning. Game changer." 35 }, 36 { 37 id: 3, 38 nameFr: "Sira A.", 39 nameEn: "Sira A.", 40 textFr: "Le Gommage LELA sent incroyablement bon et laisse ma peau tellement douce. J'en suis obsédée.", 41 textEn: "The LELA Scrub smells incredible and leaves my skin so soft. I'm obsessed." 42 }, 43 { 44 id: 4, 45 nameFr: "Amara D.", 46 nameEn: "Amara D.", 47 textFr: "J'ai tout essayé pour mon acné. Le Savon SAM est le seul qui a marché sans agresser ma peau.", 48 textEn: "I've tried everything for my acne. The SAM Soap is the only thing that worked without irritating my skin." 49 }, 50 { 51 id: 5, 52 nameFr: "Kofi B.", 53 nameEn: "Kofi B.", 54 textFr: "Ma copine m'a forcé à l'essayer. 2 mois plus tard, mon teint est uniforme pour la première fois.", 55 textEn: "My girlfriend made me try it. 2 months later, my skin tone is even for the first time." 56 }, 57 { 58 id: 6, 59 nameFr: "Zola T.", 60 nameEn: "Zola T.", 61 textFr: "Pas de produits chimiques bizarres, juste du savon qui fait son travail. Ma peau respire enfin.", 62 textEn: "No weird chemicals, just soap that actually works. My skin can finally breathe." 63 }, 64 { 65 id: 7, 66 nameFr: "Malik J.", 67 nameEn: "Malik J.", 68 textFr: "Le Savon SAM dure super longtemps et l'odeur est subtile. Toute ma famille l'utilise maintenant.", 69 textEn: "The SAM Soap lasts forever and the scent is subtle. My whole family uses it now." 70 }, 71 { 72 id: 8, 73 nameFr: "Imani R.", 74 nameEn: "Imani R.", 75 textFr: "Mes taches brunes s'estompent vraiment. Je ne m'y attendais pas avec un simple savon.", 76 textEn: "My dark spots are actually fading. Didn't expect that from a soap." 77 }, 78 { 79 id: 9, 80 nameFr: "Adaora C.", 81 nameEn: "Adaora C.", 82 textFr: "Le Beurre ONANY pénètre instantanément. Pas de film gras sur mes draps. Enfin !", 83 textEn: "The ONANY Butter absorbs instantly. No greasy film on my sheets. Finally!" 84 }, 85 { 86 id: 10, 87 nameFr: "Thierno S.", 88 nameEn: "Thierno S.", 89 textFr: "Ma peau était sèche depuis des années. Un mois avec ONANY et c'est transformé.", 90 textEn: "My skin has been dry for years. One month with ONANY and it's completely transformed." 91 }, 92 { 93 id: 11, 94 nameFr: "Leila F.", 95 nameEn: "Leila F.", 96 textFr: "L'odeur n'est pas entêtante du tout. Et l'hydratation dure vraiment toute la journée.", 97 textEn: "The scent isn't overpowering at all. And the moisture actually lasts all day." 98 }, 99 { 100 id: 12, 101 nameFr: "Fatima N.", 102 nameEn: "Fatima N.", 103 textFr: "J'ai testé beaucoup de beurres corporels. Celui-ci est le premier qui ne laisse pas ma peau collante.", 104 textEn: "I've tried so many body butters. This is the first one that doesn't leave my skin sticky." 105 }, 106 { 107 id: 13, 108 nameFr: "Djeneba L.",
109 nameEn: "Djeneba L.", 110 textFr: "Mes coudes et genoux ne sont plus secs pour la première fois en 10 ans. Je n'exagère pas.", 111 textEn: "My elbows and knees aren't dry for the first time in 10 years. Not exaggerating." 112 }, 113 { 114 id: 14, 115 nameFr: "Aisha W.", 116 nameEn: "Aisha W.", 117 textFr: "Le Gommage KATE est doux mais efficace. Ma peau brille sans être irritée.", 118 textEn: "The KATE Scrub is gentle but actually works. My skin glows without any irritation." 119 }, 120 { 121 id: 15, 122 nameFr: "Yves O.", 123 nameEn: "Yves O.", 124 textFr: "Je l'utilise avant le rasage. Plus de poils incarnés. C'est aussi simple que ça.", 125 textEn: "I use it before shaving. No more ingrown hairs. It's that simple." 126 }, 127 { 128 id: 16, 129 nameFr: "Sade B.", 130 nameEn: "Sade B.", 131 textFr: "La mousse est super crémeuse et ma peau reste lisse pendant des jours après.", 132 textEn: "The foam is super creamy and my skin stays smooth for days after." 133 }, 134 { 135 id: 17, 136 nameFr: "Bakary N.", 137 nameEn: "Bakary N.", 138 textFr: "Parfait juste avant de sortir. Peau lisse instantanément sans effort.", 139 textEn: "Perfect right before going out. Instantly smooth skin with zero effort." 140 }, 141 { 142 id: 18, 143 nameFr: "Ines M.", 144 nameEn: "Ines M.", 145 textFr: "Mes jambes n'ont jamais été aussi douces. Honnêtement, je suis accro.", 146 textEn: "My legs have never been this smooth. Honestly, I'm addicted." 147 }, 148 { 149 id: 19, 150 nameFr: "Kenza P.", 151 nameEn: "Kenza P.", 152 textFr: "Le Gommage LELA c'est une vraie expérience spa à la maison. L'odeur café-cacao est divine.", 153 textEn: "The LELA Scrub is a real spa experience at home. The coffee-cocoa scent is divine." 154 }, 155 { 156 id: 20, 157 nameFr: "Chidi R.", 158 nameEn: "Chidi R.", 159 textFr: "Exfoliation douce mais efficace. Ma peau est incroyablement lisse après chaque utilisation.", 160 textEn: "Gentle but effective exfoliation. My skin is incredibly smooth after every use." 161 }, 162 { 163 id: 21, 164 nameFr: "Rokia E.", 165 nameEn: "Rokia E.", 166 textFr: "C'est devenu mon rituel du dimanche. Ma peau me remercie chaque semaine.", 167 textEn: "It's become my Sunday ritual. My skin thanks me every week." 168 }, 169 { 170 id: 22, 171 nameFr: "Olivier K.", 172 nameEn: "Olivier K.", 173 textFr: "Je ne savais pas qu'un gommage pouvait être aussi agréable. Converti.", 174 textEn: "Didn't know a scrub could feel this good. I'm converted." 175 }, 176 { 177 id: 23, 178 nameFr: "Kadi S.", 179 nameEn: "Kadi S.", 180 textFr: "Cellules mortes disparues, peau qui brille. Simple et efficace.", 181 textEn: "Dead skin gone, glowing skin. Simple and effective." 182 }, 183 { 184 id: 24, 185 nameFr: "Salim D.", 186 nameEn: "Salim D.", 187 textFr: "Mes taches de soleil ont diminué en 4 semaines. J'ai les photos pour le prouver.", 188 textEn: "My sun spots faded in 4 weeks. I have the photos to prove it." 189 }, 190 { 191 id: 25, 192 nameFr: "Aicha B.", 193 nameEn: "Aicha B.", 194 textFr: "Le Sérum RAÃNA unifie mon teint sans blanchir. Exactement ce que je cherchais.", 195 textEn: "The RAÃNA Serum evens my tone without bleaching. Exactly what I was looking for." 196 }, 197 { 198 id: 26, 199 nameFr: "Bintu L.", 200 nameEn: "Bintu L.", 201 textFr: "3 gouttes suffisent. Le flacon dure longtemps et les résultats sont visibles.", 202 textEn: "3 drops is all you need. The bottle lasts forever and results are visible." 203 }, 204 { 205 id: 27, 206 nameFr: "Marcus E.", 207 nameEn: "Marcus E.", 208 textFr: "Ma cicatrice d'acné s'est vraiment atténuée. Je ne pensais pas que c'était possible.", 209 textEn: "My acne scar actually faded. Didn't think that was possible." 210 }, 211 { 212 id: 28, 213 nameFr: "Nafi G.", 214 nameEn: "Nafi G.", 215 textFr: "C'est le seul sérum qui n'irrite pas ma peau sensible. Et ça marche vraiment.", 216 textEn: "It's the only serum that doesn't irritate my sensitive skin. And it actually works." 217 } 218]; 219export function CustomerReviewsSection() { 220 _s(); 221 const { language } = useLanguage(); 222 const sectionRef = useRef(null); 223 const carouselRef = useRef(null); 224 const [currentIndex, setCurrentIndex] = useState(0); 225 const [isAutoScrollPaused, setIsAutoScrollPaused] = useState(false); 226 const [touchStartX, setTouchStartX] = useState(0); 227 const totalSlides = reviews.length; 228 const scrollToIndex = useCallback((index) => { 229 setCurrentIndex(Math.max(0, Math.min(index, totalSlides - 1))); 230 }, [totalSlides]); 231 const handleNext = useCallback(() => { 232 const nextIndex = (currentIndex + 1) % totalSlides; 233 scrollToIndex(nextIndex); 234 }, [currentIndex, totalSlides, scrollToIndex]); 235 const handlePrev = useCallback(() => { 236 const prevIndex = currentIndex === 0 ? totalSlides - 1 : currentIndex - 1; 237 scrollToIndex(prevIndex); 238 }, [currentIndex, totalSlides, scrollToIndex]); 239 useEffect(() => { 240 if (isAutoScrollPaused) return; 241 const autoScrollInterval = setInterval(() => { 242 handleNext(); 243 }, 5e3); 244 return () => clearInterval(autoScrollInterval); 245 }, [handleNext, isAutoScrollPaused]); 246 const handleTouchStart = (e) => { 247 setIsAutoScrollPaused(true); 248 setTouchStartX(e.touches[0].clientX); 249 }; 250 const handleTouchEnd = (e) => { 251 const touchEndX = e.changedTouches[0].clientX; 252 const diff = touchStartX - touchEndX; 253 const threshold = 50; 254 if (Math.abs(diff) > threshold) { 255 if (diff > 0) { 256 handleNext(); 257 } else { 258 handlePrev(); 259 } 260 } 261 setTimeout(() => setIsAutoScrollPaused(false), 3e3); 262 }; 263 const sectionTitle = language === "fr" ? "ILS EN PARLENT" : "WHAT THEY SAID"; 264 return /* @__PURE__ */ jsxDEV("div", { ref: sectionRef, id: "reviews-section", className: "relative py-10 md:py-12 mt-8 md:mt-12 overflow-hidden", "data-testid": "section-customer-reviews", children: [
265 /* @__PURE__ */ jsxDEV("div", { className: "absolute inset-0", style: { backgroundColor: "#F5F5F5" } }, void 0, false, { 266 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 267 lineNumber: 270, 268 columnNumber: 7 269 }, this), 270 /* @__PURE__ */ jsxDEV("div", { className: "relative text-center mb-6 md:mb-8 px-4", children: /* @__PURE__ */ jsxDEV( 271 "h2", 272 { 273 className: "text-[16px] md:text-[18px] uppercase tracking-[2px]", 274 style: { 275 color: "#1A1A1A", 276 fontFamily: "Helvetica, Arial, sans-serif", 277 fontWeight: 400, 278 letterSpacing: "2px" 279 }, 280 "data-testid": "text-reviews-title", 281 children: sectionTitle 282 }, 283 void 0, 284 false, 285 { 286 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 287 lineNumber: 273, 288 columnNumber: 9 289 }, 290 this 291 ) }, void 0, false, { 292 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 293 lineNumber: 272, 294 columnNumber: 7 295 }, this), 296 /* @__PURE__ */ jsxDEV("div", { className: "relative w-full max-w-[750px] mx-auto px-4 md:px-6", children: [
297 /* @__PURE__ */ jsxDEV("div", { className: "relative", children: [ 298 /* @__PURE__ */ jsxDEV( 299 "button", 300 { 301 onClick: () => { 302 handlePrev(); 303 setIsAutoScrollPaused(true); 304 setTimeout(() => setIsAutoScrollPaused(false), 5e3); 305 }, 306 className: "absolute left-0 md:-left-10 top-1/2 -translate-y-1/2 z-10 w-8 h-8 flex items-center justify-center transition-opacity hover:opacity-70", 307 "aria-label": "Previous testimonials", 308 "data-testid": "button-carousel-prev", 309 children: /* @__PURE__ */ jsxDEV(ChevronLeft, { size: 20, strokeWidth: 1.5, color: "#1A1A1A" }, void 0, false, { 310 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 311 lineNumber: 295, 312 columnNumber: 13 313 }, this) 314 }, 315 void 0, 316 false, 317 { 318 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 319 lineNumber: 289, 320 columnNumber: 11 321 }, 322 this 323 ),
324 /* @__PURE__ */ jsxDEV( 325 "div", 326 { 327 ref: carouselRef, 328 className: "overflow-hidden mx-8 md:mx-0", 329 onTouchStart: handleTouchStart, 330 onTouchEnd: handleTouchEnd, 331 children: /* @__PURE__ */ jsxDEV( 332 "div", 333 { 334 className: "flex transition-transform duration-500 ease-out", 335 style: { transform: `translateX(-${currentIndex * 100}%)` }, 336 children: reviews.map( 337 (review) => /* @__PURE__ */ jsxDEV( 338 "div", 339 { 340 className: "w-full flex-shrink-0 text-center px-2 md:px-8", 341 "data-testid": `card-review-${review.id}`, 342 children: [ 343 /* @__PURE__ */ jsxDEV( 344 "p", 345 { 346 className: "text-[14px] md:text-[15px] leading-relaxed mb-3", 347 style: { 348 lineHeight: 1.7, 349 fontFamily: "Helvetica, Arial, sans-serif", 350 fontWeight: 300, 351 color: "#1A1A1A" 352 }, 353 children: [ 354 '"', 355 language === "fr" ? review.textFr : review.textEn, 356 '"' 357 ] 358 }, 359 void 0, 360 true, 361 { 362 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 363 lineNumber: 314, 364 columnNumber: 19 365 }, 366 this 367 ),
368 /* @__PURE__ */ jsxDEV( 369 "p", 370 { 371 className: "text-[10px] uppercase tracking-[1.5px]", 372 style: { 373 fontWeight: 500, 374 letterSpacing: "1.5px", 375 fontFamily: "Helvetica, Arial, sans-serif", 376 color: "#666666" 377 }, 378 children: [ 379 "- ", 380 language === "fr" ? review.nameFr : review.nameEn 381 ] 382 }, 383 void 0, 384 true, 385 { 386 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 387 lineNumber: 325, 388 columnNumber: 19 389 }, 390 this 391 ) 392 ] 393 }, 394 review.id, 395 true, 396 { 397 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 398 lineNumber: 309, 399 columnNumber: 15 400 }, 401 this 402 ) 403 ) 404 }, 405 void 0, 406 false, 407 { 408 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 409 lineNumber: 304, 410 columnNumber: 13 411 }, 412 this 413 ) 414 }, 415 void 0, 416 false, 417 { 418 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 419 lineNumber: 298, 420 columnNumber: 11 421 }, 422 this 423 ),
424 /* @__PURE__ */ jsxDEV( 425 "button", 426 { 427 onClick: () => { 428 handleNext(); 429 setIsAutoScrollPaused(true); 430 setTimeout(() => setIsAutoScrollPaused(false), 5e3); 431 }, 432 className: "absolute right-0 md:-right-10 top-1/2 -translate-y-1/2 z-10 w-8 h-8 flex items-center justify-center transition-opacity hover:opacity-70", 433 "aria-label": "Next testimonials", 434 "data-testid": "button-carousel-next", 435 children: /* @__PURE__ */ jsxDEV(ChevronRight, { size: 20, strokeWidth: 1.5, color: "#1A1A1A" }, void 0, false, { 436 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 437 lineNumber: 347, 438 columnNumber: 13 439 }, this) 440 }, 441 void 0, 442 false, 443 { 444 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 445 lineNumber: 341, 446 columnNumber: 11 447 }, 448 this 449 ) 450 ] }, void 0, true, { 451 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 452 lineNumber: 288, 453 columnNumber: 9 454 }, this),
455 /* @__PURE__ */ jsxDEV("div", { className: "hidden md:flex justify-center items-center gap-1 mt-5", "data-testid": "carousel-indicators", children: reviews.map( 456 (_, index) => /* @__PURE__ */ jsxDEV( 457 "button", 458 { 459 onClick: () => { 460 scrollToIndex(index); 461 setIsAutoScrollPaused(true); 462 setTimeout(() => setIsAutoScrollPaused(false), 5e3); 463 }, 464 className: "w-1 h-1 rounded-full transition-all duration-300", 465 style: { 466 backgroundColor: currentIndex === index ? "#1A1A1A" : "#CCCCCC" 467 }, 468 "aria-label": `Go to review ${index + 1}`, 469 "data-testid": `button-indicator-${index}` 470 }, 471 index, 472 false, 473 { 474 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 475 lineNumber: 353, 476 columnNumber: 11 477 }, 478 this 479 ) 480 ) }, void 0, false, { 481 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 482 lineNumber: 351, 483 columnNumber: 9 484 }, this) 485 ] }, void 0, true, { 486 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 487 lineNumber: 287, 488 columnNumber: 7 489 }, this) 490 ] }, void 0, true, { 491 fileName: "/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", 492 lineNumber: 269, 493 columnNumber: 5 494 }, this); 495} 496_s(CustomerReviewsSection, "q5VYQ1Z3OY9lh7cWst4mGZoL1Hk=", false, function() { 497 return [useLanguage]; 498}); 499_c = CustomerReviewsSection; 500var _c; 501$RefreshReg$(_c, "CustomerReviewsSection"); 502if (import.meta.hot && !inWebWorker) { 503 window.$RefreshReg$ = prevRefreshReg; 504 window.$RefreshSig$ = prevRefreshSig; 505} 506if (import.meta.hot && !inWebWorker) { 507 RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => { 508 RefreshRuntime.registerExportsForReactRefresh("/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", currentExports); 509 import.meta.hot.accept((nextExports) => { 510 if (!nextExports) return; 511 const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/home/runner/workspace/client/src/components/CustomerReviewsSection.tsx", currentExports, nextExports); 512 if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); 513 }); 514 }); 515} 516 517//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBNlFNOzJCQTdRTjtBQUFtQkEsTUFBUUMsY0FBV0MsNkJBQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ2hFLFNBQVNDLG1CQUFtQjtBQUM1QixTQUFTQyxhQUFhQyxvQkFBb0I7QUFVMUMsTUFBTUMsVUFBb0I7QUFBQSxFQUN4QjtBQUFBLElBQ0VDLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFF
517BQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0E7QUFBQSxJQUNFSixJQUFJO0FBQUEsSUFDSkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsSUFDRUosSUFBSTtBQUFBLElBQ0pDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLElBQ0VKLElBQUk7QUFBQSxJQUNKQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxRQUFRO0FBQUEsRUFDVjtBQUFDO0FBR0ksZ0JBQVNDLHlCQUF5QjtBQUFBQyxLQUFBO0FBQ3ZDLFFBQU0sRUFBRUMs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UFZO0FBQUEsWUFDeEQ7QUFBQSxZQUNBLGNBQVksZ0JBQWdCQSxRQUFRLENBQUM7QUFBQSxZQUNyQyxlQUFhLG9CQUFvQkEsS0FBSztBQUFBO0FBQUEsVUFQakNBO0FBQUFBLFVBRFA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVEyQztBQUFBLE1BRTVDLEtBWkg7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQWFBO0FBQUEsU0E3RUY7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQThFQTtBQUFBLE9BaEdGO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FpR0E7QUFFSjtBQUFDZCxHQTVKZUQsd0JBQXNCO0FBQUEsVUFDZlQsV0FBVztBQUFBO0FBQUF5RCxLQURsQmhEO0FBQXNCLElBQUFnRDtBQUFBQyxhQUFBRCxJQUFBIiwibmFtZXMiOlsidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlQ2FsbGJhY2siLCJ1c2VMYW5ndWFnZSIsIkNoZXZyb25MZWZ0IiwiQ2hldnJvblJpZ2h0IiwicmV2aWV3cyIsImlkIiwibmFtZUZyIiwibmFtZUVuIiwidGV4dEZyIiwidGV4dEVuIiwiQ3VzdG9tZXJSZXZpZXdzU2VjdGlvbiIsIl9zIiwibGFuZ3VhZ2UiLCJzZWN0aW9uUmVmIiwiY2Fyb3VzZWxSZWYiLCJjdXJyZW50SW5kZXgiLCJzZXRDdXJyZW50SW5kZXgiLCJ1c2VTdGF0ZSIsImlzQXV0b1Njcm9sbFBhdXNlZCIsInNldElzQXV0b1Njcm9sbFBhdXNlZCIsInRvdWNoU3RhcnRYIiwic2V0VG91Y2hTdGFydFgiLCJ0b3RhbFNsaWRlcyIsImxlbmd0aCIsInNjcm9sbFRvSW5kZXgiLCJpbmRleCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJoYW5kbGVOZXh0IiwibmV4dEluZGV4IiwiaGFuZGxlUHJldiIsInByZXZJbmRleCIsImF1dG9TY3JvbGxJbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsImhhbmRsZVRvdWNoU3RhcnQiLCJlIiwidG91Y2hlcyIsImNsaWVudFgiLCJoYW5kbGVUb3VjaEVuZCIsInRvdWNoRW5kWCIsImNoYW5nZWRUb3VjaGVzIiwiZGlmZiIsInRocmVzaG9sZCIsImFicyIsInNldFRpbWVvdXQiLCJzZWN0aW9uVGl0bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJjb2xvciIsImZvbnRGYW1pbHkiLCJmb250V2VpZ2h0IiwibGV0dGVyU3BhY2luZyIsInRyYW5zZm9ybSIsIm1hcCIsInJldmlldyIsImxpbmVIZWlnaHQiLCJfIiwiX2MiLCIkUmVmcmVzaFJlZyQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiQ3VzdG9tZXJSZXZpZXdzU2VjdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUxhbmd1YWdlIH0gZnJvbSAnQC9saWIvTGFuZ3VhZ2VDb250ZXh0JztcbmltcG9ydCB7
517IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuXG5pbnRlcmZhY2UgUmV2aWV3IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZUZyOiBzdHJpbmc7XG4gIG5hbWVFbjogc3RyaW5nO1xuICB0ZXh0RnI6IHN0cmluZztcbiAgdGV4dEVuOiBzdHJpbmc7XG59XG5cbmNvbnN0IHJldmlld3M6IFJldmlld1tdID0gW1xuICB7XG4gICAgaWQ6IDEsXG4gICAgbmFtZUZyOiBcIllhc21pbmUgSy5cIixcbiAgICBuYW1lRW46IFwiWWFzbWluZSBLLlwiLFxuICAgIHRleHRGcjogXCJMZSBTYXZvbiBTQU0gYSBsaXR0w6lyYWxlbWVudCBzYXV2w6kgbWEgcGVhdS4gTWVzIGJvdXRvbnMgb250IGRpc3BhcnUgZW4gMyBzZW1haW5lcyBldCB6w6lybyBzw6ljaGVyZXNzZS5cIixcbiAgICB0ZXh0RW46IFwiVGhlIFNBTSBTb2FwIGxpdGVyYWxseSBzYXZlZCBteSBza2luLiBNeSBicmVha291dHMgY2xlYXJlZCBpbiAzIHdlZWtzIGFuZCB6ZXJvIGRyeW5lc3MuXCJcbiAgfSxcbiAge1xuICAgIGlkOiAyLFxuICAgIG5hbWVGcjogXCJOeWxhIE0uXCIsXG4gICAgbmFtZUVuOiBcIk55bGEgTS5cIixcbiAgICB0ZXh0RnI6IFwiTGUgQmV1cnJlIE9OQU5ZLCBjJ2VzdCBmb3UuIEplIGwnYXBwbGlxdWUgbGUgc29pciBldCBsZSBtYXRpbiBtYSBwZWF1IGVzdCBlbmNvcmUgaHlkcmF0w6llLiBHYW1lIGNoYW5nZXIuXCIsXG4gICAgdGV4dEVuOiBcIlRoZSBPTkFOWSBCdXR0ZXIgaXMgaW5zYW5lLiBJIHB1dCBpdCBvbiBhdCBuaWdodCBhbmQgbXkgc2tpbiBpcyBzdGlsbCB
517oeWRyYXRlZCBpbiB0aGUgbW9ybmluZy4gR2FtZSBjaGFuZ2VyLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMyxcbiAgICBuYW1lRnI6IFwiU2lyYSBBLlwiLFxuICAgIG5hbWVFbjogXCJTaXJhIEEuXCIsXG4gICAgdGV4dEZyOiBcIkxlIEdvbW1hZ2UgTEVMQSBzZW50IGluY3JveWFibGVtZW50IGJvbiBldCBsYWlzc2UgbWEgcGVhdSB0ZWxsZW1lbnQgZG91Y2UuIEonZW4gc3VpcyBvYnPDqWTDqWUuXCIsXG4gICAgdGV4dEVuOiBcIlRoZSBMRUxBIFNjcnViIHNtZWxscyBpbmNyZWRpYmxlIGFuZCBsZWF2ZXMgbXkgc2tpbiBzbyBzb2Z0LiBJJ20gb2JzZXNzZWQuXCJcbiAgfSxcbiAge1xuICAgIGlkOiA0LFxuICAgIG5hbWVGcjogXCJBbWFyYSBELlwiLFxuICAgIG5hbWVFbjogXCJBbWFyYSBELlwiLFxuICAgIHRleHRGcjogXCJKJ2FpIHRvdXQgZXNzYXnDqSBwb3VyIG1vbiBhY27DqS4gTGUgU2F2b24gU0FNIGVzdCBsZSBzZXVsIHF1aSBhIG1hcmNow6kgc2FucyBhZ3Jlc3NlciBtYSBwZWF1LlwiLFxuICAgIHRleHRFbjogXCJJJ3ZlIHRyaWVkIGV2ZXJ5dGhpbmcgZm9yIG15IGFjbmUuIFRoZSBTQU0gU29hcCBpcyB0aGUgb25seSB0aGluZyB0aGF0IHdvcmtlZCB3aXRob3V0IGlycml0YXRpbmcgbXkgc2tpbi5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDUsXG4gICAgbmFtZUZyOiBcIktvZmkgQi5cIixcbiAgICBuYW1lRW46IFwiS29maSBCLlwiLFxuICAgIHRleHRGcjogXCJNYSBjb3BpbmUgbSdhIGZvcmPDqSDDoCBsJ2Vzc2F5ZXIuIDIgbW9pcyBwbHVzIHRhcmQsIG1vbiB0ZWludCBlc3QgdW5pZm9ybWUgcG91ciBsYSBwcmVtacOocmUgZm9pcy5cIixcbiAgICB0ZXh0RW46IFwiTXkgZ2lybGZyaWVuZCBtYWRlIG1lIHRyeSBpdC4gMiBtb250aHMgbGF0ZXIsIG15IHNraW4gdG9uZSBpcyBldmVuIGZvciB0aGUgZmlyc3QgdGltZS5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDYsXG4gICAgbmFtZUZyOiBcIlpvbGEgVC5cIixcbiAgICBuYW1lRW46IFwiWm9sYSBULlwiLFxuICAgIHRleHRGcjogXCJQYXMgZGUgcHJvZHVpdHMgY2hpbWlxdWVzIGJpemFycmVzLCBqdXN0ZSBkdSBzYXZvbiBxdWkgZmFpdCBzb24gdHJhdmFpbC4gTWEgcGVhdSByZXNwaXJlIGVuZmluLlwiLFxuICAgIHRleHRFbjogXCJObyB3ZWlyZCBjaGVtaWNhbHMsIGp1c3Qgc29hcCB0aGF0IGFjdHVhbGx5IHdvcmtzLiBNeSBza2luIGNhbiBmaW5hbGx5IGJyZWF0aGUuXCJcbiAgfSxcbiAge1xuICAgIGlkOiA3LFxuICAgIG5hbWVGcjogXCJNYWxpayBKLlwiLFxuICAgIG5hbWVFbjogXCJNYWxpayBKLlwiLFxuICAgIHRleHRGcjogXCJMZSBTYXZvbiBTQU0gZHVyZSBzdXBlciBsb25ndGVtcHMgZXQgbCdvZGV1ciBlc3Qgc3VidGlsZS4gVG91dGUgbWEgZmFtaWxsZSBsJ3V0aWxpc2UgbWFpbnRlbmFudC5cIixcbiAgICB0ZXh0RW46IFwiVGhlIFNBTSBTb2FwIGxhc3RzIGZvcmV2ZXIgYW5kIHRoZSBzY2VudCBpcyBzdWJ0bGUuIE15IHdob2xlIGZhbWlseSB1c2VzIGl0IG5vdy5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDgsXG4gICAgbmFtZUZyOiBcIkltYW5pIFIuXCIsXG4gICAgbmFtZUVuOiBcIkltYW5pIFIuXCIsXG4gICAgdGV4dEZyOiBcIk1lcyB0YWNoZXMgYnJ1bmVzIHMnZXN0b21wZW50IHZyYWltZW50LiBKZSBuZSBtJ3kgYXR0ZW5kYWlzIHBhcyBhdmVjIHVuIHNpbXBsZSBzYXZvbi5cIixcbiAgICB0ZXh0RW46IFwiTXkgZGFyayBzcG90cyBhcmUgYWN0dWFsbHkgZmFkaW5nLiBEaWRuJ3QgZXhwZWN0IHRoYXQgZnJvbSBhIHNvYXAuXCJcbiAgfSxcbiAge1xuICAgIGlkOiA5LFxuICAgIG5hbWVGcjogXCJBZGFvcmEgQy5cIixcbiAgICBuYW1lRW46IFwiQWRhb3JhIEMuXCIsXG4gICAgdGV4dEZyOiBcIkxlIEJldXJyZSBPTkFOWSBww6luw6h0cmUgaW5zdGFudGFuw6ltZW50LiBQYXMgZGUgZmlsbSBncmFzIHN1ciBtZXMgZHJhcHMuIEVuZmluICFcIixcbiAgICB0ZXh0RW46IFwiVGhlIE9OQU5ZIEJ1dHRlciBhYnNvcmJzIGluc3RhbnRseS4gTm8gZ3JlYXN5IGZpbG0gb24gbXkgc2hlZXRzLiBGaW5hbGx5IVwiXG4gIH0sXG4gIHtcbiAgICBpZDogMTAsXG4gICAgbmFtZUZyOiBcIlRoaWVybm8gUy5cIixcbiAgICBuYW1lRW46IFwiVGhpZXJubyBTLlwiLFxuICAgIHRleHRGcjogXCJNYSBwZWF1IMOpdGFpdCBzw6hjaGUgZGVwdWlzIGRlcyBhbm7DqWVzLiBVbiBtb2lzIGF2ZWMgT05BTlkgZXQgYydlc3QgdHJhbnNmb3Jtw6kuXCIsXG4gICAgdGV4dEVuOiBcIk15IHNraW4gaGFzIGJlZW4gZHJ5IGZvciB5ZWFycy4gT25lIG1vbnRoIHdpdGggT05BTlkgYW5kIGl0J3MgY29tcGxldGVseSB0cmFuc2Zvcm1lZC5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDExLFxuICAgIG5hbWVGcjogXCJMZWlsYSBGLlwiLFxuICAgIG5hbWVFbjogXCJMZWlsYSBGLlwiLFxuICAgIHRleHRGcjogXCJMJ29kZXVyIG4nZXN0IHBhcyBlbnTDqnRhbnRlIGR1IHRvdXQuIEV0IGwnaHlkcmF0YXRpb24gZHVyZSB2cmFpbWVudCB0b3V0ZSBsYSBqb3VybsOpZS5cIixcbiAgICB0ZXh0RW46IFwiVGhlIHNjZW50IGlzbid0IG92ZXJwb3dlcmluZyBhdCBhbGwuIEFuZCB0aGUgbW9pc3R1cmUgYWN0dWFsbHkgbGFzdHMgYWxsIGRheS5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDEyLFxuICAgIG5hbWVGcjogXCJGYXRpbWEgTi5cIixcbiAgICBuYW1lRW46IFwiRmF0aW1hIE4uXCIsXG4gICAgdGV4dEZyOiBcIkonYWkgdGVzdMOpIGJlYXVjb3VwIGRlIGJldXJyZXMgY29ycG9yZWxzLiBDZWx1aS1jaSBlc3QgbGUgcHJlbWllciBxdWkgbmUgbGFpc3NlIHBhcyBtYSBwZWF1IGNvbGxhbnRlLlwiLFxuICAgIHRleHRFbjogXCJJJ3ZlIHRyaWVkIHNvIG1hbnkgYm9keSBidXR0ZXJzLiBUaGlzIGlzIHRoZSBmaXJzdCBvbmUgdGhhdCBkb2Vzbid0IGxlYXZlIG15IHNraW4gc3RpY2t5LlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMTMsXG4gICAgbmFtZUZyOiBcIkRqZW5lYmEgTC5cIixcbiAgICBuYW1lRW46IFwiRGplbmViYSBMLlwiLFxuICAgIHRleHRGcjogXCJNZXMgY291ZGVzIGV0IGdlbm91eCBuZSBzb250IHBsdXMgc2VjcyBwb3VyIGxhIHByZW1pw6hyZSBmb2lzIGVuIDEwIGFucy4gSmUgbidleGFnw6hyZSBwYXMuXCIsXG4gICAgdGV4dEVuOiBcIk15IGVsYm93cyBhbmQga25lZXMgYXJlbid0IGRyeSBmb3IgdGhlIGZpcnN0IHRpbWUgaW4gMTAgeWVhcnMuIE5vdCBleGFnZ2VyYXRpbmcuXCJcbiAgfSxcbiAge1xuICAgIGl
517kOiAxNCxcbiAgICBuYW1lRnI6IFwiQWlzaGEgVy5cIixcbiAgICBuYW1lRW46IFwiQWlzaGEgVy5cIixcbiAgICB0ZXh0RnI6IFwiTGUgR29tbWFnZSBLQVRFIGVzdCBkb3V4IG1haXMgZWZmaWNhY2UuIE1hIHBlYXUgYnJpbGxlIHNhbnMgw6p0cmUgaXJyaXTDqWUuXCIsXG4gICAgdGV4dEVuOiBcIlRoZSBLQVRFIFNjcnViIGlzIGdlbnRsZSBidXQgYWN0dWFsbHkgd29ya3MuIE15IHNraW4gZ2xvd3Mgd2l0aG91dCBhbnkgaXJyaXRhdGlvbi5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDE1LFxuICAgIG5hbWVGcjogXCJZdmVzIE8uXCIsXG4gICAgbmFtZUVuOiBcIll2ZXMgTy5cIixcbiAgICB0ZXh0RnI6IFwiSmUgbCd1dGlsaXNlIGF2YW50IGxlIHJhc2FnZS4gUGx1cyBkZSBwb2lscyBpbmNhcm7DqXMuIEMnZXN0IGF1c3NpIHNpbXBsZSBxdWUgw6dhLlwiLFxuICAgIHRleHRFbjogXCJJIHVzZSBpdCBiZWZvcmUgc2hhdmluZy4gTm8gbW9yZSBpbmdyb3duIGhhaXJzLiBJdCdzIHRoYXQgc2ltcGxlLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMTYsXG4gICAgbmFtZUZyOiBcIlNhZGUgQi5cIixcbiAgICBuYW1lRW46IFwiU2FkZSBCLlwiLFxuICAgIHRleHRGcjogXCJMYSBtb3Vzc2UgZXN0IHN1cGVyIGNyw6ltZXVzZSBldCBtYSBwZWF1IHJlc3RlIGxpc3NlIHBlbmRhbnQgZGVzIGpvdXJzIGFwcsOocy5cIixcbiAgICB0ZXh0RW46IFwiVGhlIGZvYW0gaXMgc3VwZXIgY3JlYW15IGFuZCBteSBza2luIHN0YXlzIHNtb290aCBmb3IgZGF5cyBhZnRlci5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDE3LFxuICAgIG5hbWVGcjogXCJCYWthcnkgTi5cIixcbiAgICBuYW1lRW46IFwiQmFrYXJ5IE4uXCIsXG4gICAgdGV4dEZyOiBcIlBhcmZhaXQganVzdGUgYXZhbnQgZGUgc29ydGlyLiBQZWF1IGxpc3NlIGluc3RhbnRhbsOpbWVudCBzYW5zIGVmZm9ydC5cIixcbiAgICB0ZXh0RW46IFwiUGVyZmVjdCByaWdodCBiZWZvcmUgZ29pbmcgb3V0LiBJbnN0YW50bHkgc21vb3RoIHNraW4gd2l0aCB6ZXJvIGVmZm9ydC5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDE4LFxuICAgIG5hbWVGcjogXCJJbmVzIE0uXCIsXG4gICAgbmFtZUVuOiBcIkluZXMgTS5cIixcbiAgICB0ZXh0RnI6IFwiTWVzIGphbWJlcyBuJ29udCBqYW1haXMgw6l0w6kgYXVzc2kgZG91Y2VzLiBIb25uw6p0ZW1lbnQsIGplIHN1aXMgYWNjcm8uXCIsXG4gICAgdGV4dEVuOiBcIk15IGxlZ3MgaGF2ZSBuZXZlciBiZWVuIHRoaXMgc21vb3RoLiBIb25lc3RseSwgSSdtIGFkZGljdGVkLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMTksXG4gICAgbmFtZUZyOiBcIktlbnphIFAuXCIsXG4gICAgbmFtZUVuOiBcIktlbnphIFAuXCIsXG4gICAgdGV4dEZyOiBcIkxlIEdvbW1hZ2UgTEVMQSBjJ2VzdCB1bmUgdnJhaWUgZXhww6lyaWVuY2Ugc3BhIMOgIGxhIG1haXNvbi4gTCdvZGV1ciBjYWbDqS1jYWNhbyBlc3QgZGl2aW5lLlwiLFxuICAgIHRleHRFbjogXCJUaGUgTEVMQSBTY3J1YiBpcyBhIHJlYWwgc3BhIGV4cGVyaWVuY2UgYXQgaG9tZS4gVGhlIGNvZmZlZS1jb2NvYSBzY2VudCBpcyBkaXZpbmUuXCJcbiAgfSxcbiAge1xuICAgIGlkOiAyMCxcbiAgICBuYW1lRnI6IFwiQ2hpZGkgUi5cIixcbiAgICBuYW1lRW46IFwiQ2hpZGkgUi5cIixcbiAgICB0ZXh0RnI6IFwiRXhmb2xpYXRpb24gZG91Y2UgbWFpcyBlZmZpY2FjZS4gTWEgcGVhdSBlc3QgaW5jcm95YWJsZW1lbnQgbGlzc2UgYXByw6hzIGNoYXF1ZSB1dGlsaXNhdGlvbi5cIixcbiAgICB0ZXh0RW46IFwiR2VudGxlIGJ1dCBlZmZlY3RpdmUgZXhmb2xpYXRpb24uIE15IHNraW4gaXMgaW5jcmVkaWJseSBzbW9vdGggYWZ0ZXIgZXZlcnkgdXNlLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMjEsXG4gICAgbmFtZUZyOiBcIlJva2lhIEUuXCIsXG4gICAgbmFtZUVuOiBcIlJva2lhIEUuXCIsXG4gICAgdGV4dEZyOiBcIkMnZXN0IGRldmVudSBtb24gcml0dWVsIGR1IGRpbWFuY2hlLiBNYSBwZWF1IG1lIHJlbWVyY2llIGNoYXF1ZSBzZW1haW5lLlwiLFxuICAgIHRleHRFbjogXCJJdCdzIGJlY29tZSBteSBTdW5kYXkgcml0dWFsLiBNeSBza2luIHRoYW5rcyBtZSBldmVyeSB3ZWVrLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMjIsXG4gICAgbmFtZUZyOiBcIk9saXZpZXIgSy5cIixcbiAgICBuYW1lRW46IFwiT2xpdmllciBLLlwiLFxuICAgIHRleHRGcjogXCJKZSBuZSBzYXZhaXMgcGFzIHF1J3VuIGdvbW1hZ2UgcG91dmFpdCDDqnRyZSBhdXNzaSBhZ3LDqWFibGUuIENvbnZlcnRpLlwiLFxuICAgIHRleHRFbjogXCJEaWRuJ3Qga25vdyBhIHNjcnViIGNvdWxkIGZlZWwgdGhpcyBnb29kLiBJJ20gY29udmVydGVkLlwiXG4gIH0sXG4gIHtcbiAgICBpZDogMjMsXG4gICAgbmFtZUZyOiBcIkthZGkgUy5cIixcbiAgICBuYW1lRW46IFwiS2FkaSBTLlwiLFxuICAgIHRleHRGcjogXCJDZWxsdWxlcyBtb3J0ZXMgZGlzcGFydWVzLCBwZWF1IHF1aSBicmlsbGUuIFNpbXBsZSBldCBlZmZpY2FjZS5cIixcbiAgICB0ZXh0RW46IFwiRGVhZCBza2luIGdvbmUsIGdsb3dpbmcgc2tpbi4gU2ltcGxlIGFuZCBlZmZlY3RpdmUuXCJcbiAgfSxcbiAge1xuICAgIGlkOiAyNCxcbiAgICBuYW1lRnI6IFwiU2FsaW0gRC5cIixcbiAgICBuYW1lRW46IFwiU2FsaW0gRC5cIixcbiAgICB0ZXh0RnI6IFwiTWVzIHRhY2hlcyBkZSBzb2xlaWwgb250IGRpbWludcOpIGVuIDQgc2VtYWluZXMuIEonYWkgbGVzIHBob3RvcyBwb3VyIGxlIHByb3V2ZXIuXCIsXG4gICAgdGV4dEVuOiBcIk15IHN1biBzcG90cyBmYWRlZCBpbiA0IHdlZWtzLiBJIGhhdmUgdGhlIHBob3RvcyB0byBwcm92ZSBpdC5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDI1LFxuICAgIG5hbWVGcjogXCJBaWNoYSBCLlwiLFxuICAgIG5hbWVFbjogXCJBaWNoYSBCLlwiLFxuICAgIHRleHRGcjogXCJMZSBTw6lydW0gUkHDj05BIHVuaWZpZSBtb24gdGVpbnQgc2FucyBibGFuY2hpci4gRXhhY3RlbWVudCBjZSBxdWUgamUgY2hlcmNoYWlzLlwiLFxuICAgIHRleHRFbjogXCJUaGUgUkHDj05BIFNlcnVtIGV2ZW5zIG15IHRvbmUgd2l0aG91dCBibGVhY2hpbmcuIEV4YWN0bHkgd2hhdCBJIHdhcyBsb29raW5nIGZvci5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDI2LFxuICAgIG5hbWVGcjogXCJCaW50dSBMLlwiLFxuICAgIG5hbWVFbjogXCJCaW50dSBMLlwiLFxuICAgIHRleHRGcjogXCIzIGdvdXR0ZXMgc3VmZmlzZW50LiBMZSBmbGFjb24gZHVyZSBsb25ndGVtcHMgZXQgbGVzIHLDqXN1bHRhdHMgc29udCB2aXN
517pYmxlcy5cIixcbiAgICB0ZXh0RW46IFwiMyBkcm9wcyBpcyBhbGwgeW91IG5lZWQuIFRoZSBib3R0bGUgbGFzdHMgZm9yZXZlciBhbmQgcmVzdWx0cyBhcmUgdmlzaWJsZS5cIlxuICB9LFxuICB7XG4gICAgaWQ6IDI3LFxuICAgIG5hbWVGcjogXCJNYXJjdXMgRS5cIixcbiAgICBuYW1lRW46IFwiTWFyY3VzIEUuXCIsXG4gICAgdGV4dEZyOiBcIk1hIGNpY2F0cmljZSBkJ2FjbsOpIHMnZXN0IHZyYWltZW50IGF0dMOpbnXDqWUuIEplIG5lIHBlbnNhaXMgcGFzIHF1ZSBjJ8OpdGFpdCBwb3NzaWJsZS5cIixcbiAgICB0ZXh0RW46IFwiTXkgYWNuZSBzY2FyIGFjdHVhbGx5IGZhZGVkLiBEaWRuJ3QgdGhpbmsgdGhhdCB3YXMgcG9zc2libGUuXCJcbiAgfSxcbiAge1xuICAgIGlkOiAyOCxcbiAgICBuYW1lRnI6IFwiTmFmaSBHLlwiLFxuICAgIG5hbWVFbjogXCJOYWZpIEcuXCIsXG4gICAgdGV4dEZyOiBcIkMnZXN0IGxlIHNldWwgc8OpcnVtIHF1aSBuJ2lycml0ZSBwYXMgbWEgcGVhdSBzZW5zaWJsZS4gRXQgw6dhIG1hcmNoZSB2cmFpbWVudC5cIixcbiAgICB0ZXh0RW46IFwiSXQncyB0aGUgb25seSBzZXJ1bSB0aGF0IGRvZXNuJ3QgaXJyaXRhdGUgbXkgc2Vuc2l0aXZlIHNraW4uIEFuZCBpdCBhY3R1YWxseSB3b3Jrcy5cIlxuICB9XG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gQ3VzdG9tZXJSZXZpZXdzU2VjdGlvbigpIHtcbiAgY29uc3QgeyBsYW5ndWFnZSB9ID0gdXNlTGFuZ3VhZ2UoKTtcbiAgY29uc3Qgc2VjdGlvblJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGNhcm91c2VsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2N1cnJlbnRJbmRleCwgc2V0Q3VycmVudEluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbaXNBdXRvU2Nyb2xsUGF1c2VkLCBzZXRJc0F1dG9TY3JvbGxQYXVzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdG91Y2hTdGFydFgsIHNldFRvdWNoU3RhcnRYXSA9IHVzZVN0YXRlKDApO1xuICBcbiAgY29uc3QgdG90YWxTbGlkZXMgPSByZXZpZXdzLmxlbmd0aDtcblxuICBjb25zdCBzY3JvbGxUb0luZGV4ID0gdXNlQ2FsbGJhY2soKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBzZXRDdXJyZW50SW5kZXgoTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIHRvdGFsU2xpZGVzIC0gMSkpKTtcbiAgfSwgW3RvdGFsU2xpZGVzXSk7XG5cbiAgY29uc3QgaGFuZGxlTmV4dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgMSkgJSB0b3RhbFNsaWRlcztcbiAgICBzY3JvbGxUb0luZGV4KG5leHRJbmRleCk7XG4gIH0sIFtjdXJyZW50SW5kZXgsIHRvdGFsU2xpZGVzLCBzY3JvbGxUb0luZGV4XSk7XG5cbiAgY29uc3QgaGFuZGxlUHJldiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwcmV2SW5kZXggPSBjdXJyZW50SW5kZXggPT09IDAgPyB0b3RhbFNsaWRlcyAtIDEgOiBjdXJyZW50SW5kZXggLSAxO1xuICAgIHNjcm9sbFRvSW5kZXgocHJldkluZGV4KTtcbiAgfSwgW2N1cnJlbnRJbmRleCwgdG90YWxTbGlkZXMsIHNjcm9sbFRvSW5kZXhdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0F1dG9TY3JvbGxQYXVzZWQpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBhdXRvU2Nyb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBoYW5kbGVOZXh0KCk7XG4gICAgfSwgNTAwMCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbChhdXRvU2Nyb2xsSW50ZXJ2YWwpO1xuICB9LCBbaGFuZGxlTmV4dCwgaXNBdXRvU2Nyb2xsUGF1c2VkXSk7XG5cbiAgY29uc3QgaGFuZGxlVG91Y2hTdGFydCA9IChlOiBSZWFjdC5Ub3VjaEV2ZW50KSA9PiB7XG4gICAgc2V0SXNBdXRvU2Nyb2xsUGF1c2VkKHRydWUpO1xuICAgIHNldFRvdWNoU3RhcnRYKGUudG91Y2hlc1swXS5jbGllbnRYKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVUb3VjaEVuZCA9IChlOiBSZWFjdC5Ub3VjaEV2ZW50KSA9PiB7XG4gICAgY29uc3QgdG91Y2hFbmRYID0gZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICAgIGNvbnN0IGRpZmYgPSB0b3VjaFN0YXJ0WCAtIHRvdWNoRW5kWDtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSA1MDtcbiAgICBcbiAgICBpZiAoTWF0aC5hYnMoZGlmZikgPiB0aHJlc2hvbGQpIHtcbiAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICBoYW5kbGVOZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVQcmV2KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0SXNBdXRvU2Nyb2xsUGF1c2VkKGZhbHNlKSwgMzAwMCk7XG4gIH07XG5cbiAgY29uc3Qgc2VjdGlvblRpdGxlID0gbGFuZ3VhZ2UgPT09ICdmcicgPyAnSUxTIEVOIFBBUkxFTlQnIDogJ1dIQVQgVEhFWSBTQUlEJztcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtzZWN0aW9uUmVmfSBpZD1cInJldmlld3Mtc2VjdGlvblwiIGNsYXNzTmFtZT1cInJlbGF0aXZlIHB5LTEwIG1kOnB5LTEyIG10LTggbWQ6bXQtMTIgb3ZlcmZsb3ctaGlkZGVuXCIgZGF0YS10ZXN0aWQ9XCJzZWN0aW9uLWN1c3RvbWVyLXJldmlld3NcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMFwiIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogJyNGNUY1RjUnIH19IC8+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdGV4dC1jZW50ZXIgbWItNiBtZDptYi04IHB4LTRcIj5cbiAgICAgICAgPGgyIFxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtWzE2cHhdIG1kOnRleHQtWzE4cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMnB4XVwiXG4gICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICBjb2xvcjogJyMxQTFBMUEnLCBcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICAgICAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJzJweCdcbiAgICAgICAgICB9fVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwidGV4dC1yZXZpZXdzLXRpdGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgI
517HtzZWN0aW9uVGl0bGV9XG4gICAgICAgIDwvaDI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgbWF4LXctWzc1MHB4XSBteC1hdXRvIHB4LTQgbWQ6cHgtNlwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4geyBoYW5kbGVQcmV2KCk7IHNldElzQXV0b1Njcm9sbFBhdXNlZCh0cnVlKTsgc2V0VGltZW91dCgoKSA9PiBzZXRJc0F1dG9TY3JvbGxQYXVzZWQoZmFsc2UpLCA1MDAwKTsgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCBtZDotbGVmdC0xMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgei0xMCB3LTggaC04IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTcwXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyB0ZXN0aW1vbmlhbHNcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tY2Fyb3VzZWwtcHJldlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENoZXZyb25MZWZ0IHNpemU9ezIwfSBzdHJva2VXaWR0aD17MS41fSBjb2xvcj1cIiMxQTFBMUFcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgIHJlZj17Y2Fyb3VzZWxSZWZ9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJvdmVyZmxvdy1oaWRkZW4gbXgtOCBtZDpteC0wXCJcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydD17aGFuZGxlVG91Y2hTdGFydH1cbiAgICAgICAgICAgIG9uVG91Y2hFbmQ9e2hhbmRsZVRvdWNoRW5kfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tNTAwIGVhc2Utb3V0XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWCgtJHtjdXJyZW50SW5kZXggKiAxMDB9JSlgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtyZXZpZXdzLm1hcCgocmV2aWV3KSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtyZXZpZXcuaWR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgZmxleC1zaHJpbmstMCB0ZXh0LWNlbnRlciBweC0yIG1kOnB4LThcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2BjYXJkLXJldmlldy0ke3Jldmlldy5pZH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxwIFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxNHB4XSBtZDp0ZXh0LVsxNXB4XSBsZWFkaW5nLXJlbGF4ZWQgbWItM1wiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IFxuICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNywgXG4gICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogMzAwLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzFBMUExQSdcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgXCJ7bGFuZ3VhZ2UgPT09ICdmcicgPyByZXZpZXcudGV4dEZyIDogcmV2aWV3LnRleHRFbn1cIlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgPHAgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtWzEwcHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMS41cHhdXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLCBcbiAgICAgICAgICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NjY2NidcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgLSB7bGFuZ3VhZ2UgPT09ICdmcicgPyByZXZpZXcubmFtZUZyIDogcmV2aWV3Lm5hbWVFbn1cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHsgaGFuZGxlTmV4dCgpOyBzZXRJc0F1dG9TY3JvbGxQYXVzZWQodHJ1ZSk7IHNldFRpbWVvdXQoKCkgPT4gc2V0SXNBdXRvU2Nyb2xsUGF1c2VkKGZhbHNlKSwgNTAwMCk7IH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIG1kOi1yaWdodC0xMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgei0xMCB3LTggaC04IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTcwXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOZXh0IHRlc3RpbW9uaWFsc1wiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1jYXJvdXNlbC1uZXh0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hldnJvblJpZ2h0IHNpemU9ezIwfSBzdHJva2VXaWR0aD17MS41fSBjb2xvcj1cIiMxQTFBMUFcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBnYXAtMSBtdC01XCIgZGF0YS10ZXN0aWQ9XCJjYXJvdXNlbC1pbmRpY2F0b3JzXCI+XG4gICAgICAgICAge3Jldmlld3MubWFwKChfLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7IHNjcm9sbFRvSW5kZXgoaW5kZXgpOyBzZXRJc0F1dG9TY3JvbGxQYXVzZWQodHJ1ZSk7IHNldFRpbWVvdXQoKCkgPT4gc2V0SXNBdXRvU2Nyb2xsUGF1c2VkKGZhbHNlKSwgNTAwMCk7IH19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctMSBoLTEgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMFwiXG4gICAgICAgICAgICAgI
517HN0eWxlPXt7IFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogY3VycmVudEluZGV4ID09PSBpbmRleCA/ICcjMUExQTFBJyA6ICcjQ0NDQ0NDJ1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgR28gdG8gcmV2aWV3ICR7aW5kZXggKyAxfWB9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgYnV0dG9uLWluZGljYXRvci0ke2luZGV4fWB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIl0sImZpbGUiOiIvaG9tZS9ydW5uZXIvd29ya3NwYWNlL2NsaWVudC9zcmMvY29tcG9uZW50cy9DdXN0b21lclJldmlld3NTZWN0aW9uLnRzeCJ9
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.