Rewrite of website using Lume
at main 1057 lines 79 kB view raw
1@charset "UTF-8"; 2/* 3* The variables/tokens (or whatever you 4* wish to call them) that power the rest of your styles 5*/ 6/* 7Google fonts with subsetting via Google Webfonts Helper 8 9@link https://gwfh.mranftl.com/fonts/inter?subsets=latin 10*/ 11@font-face { 12font-family: 'KukulkanSans'; 13src: url("./KukulkanSansVar.woff2") format("woff2"); 14font-weight: 100 1000; 15font-stretch: 25% 151%; 16/* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */ } 17 18/* 19Utopia fluid space 20 21@link https://utopia.fyi/space/calculator?c=320,16,1.2,1240,20,1.25,5,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l&g=s,l,xl,12 22*/ 23:root { 24 --space-3xs: clamp(0.25rem, calc(0.23rem + 0.11vw), 0.31rem); 25 --space-2xs: clamp(0.50rem, calc(0.46rem + 0.22vw), 0.63rem); 26 --space-xs: clamp(0.75rem, calc(0.68rem + 0.33vw), 0.94rem); 27 --space-s: clamp(1.00rem, calc(0.91rem + 0.43vw), 1.25rem); 28 --space-m: clamp(1.50rem, calc(1.37rem + 0.65vw), 1.88rem); 29 --space-l: clamp(2.00rem, calc(1.83rem + 0.87vw), 2.50rem); 30 --space-xl: clamp(3.00rem, calc(2.74rem + 1.30vw), 3.75rem); 31 --space-2xl: clamp(4.00rem, calc(3.65rem + 1.74vw), 5.00rem); 32 --space-3xl: clamp(6.00rem, calc(5.48rem + 2.61vw), 7.50rem); 33 /* One-up pairs */ 34 --space-3xs-2xs: clamp(0.25rem, calc(0.12rem + 0.65vw), 0.63rem); 35 --space-2xs-xs: clamp(0.50rem, calc(0.35rem + 0.76vw), 0.94rem); 36 --space-xs-s: clamp(0.75rem, calc(0.58rem + 0.87vw), 1.25rem); 37 --space-s-m: clamp(1.00rem, calc(0.70rem + 1.52vw), 1.88rem); 38 --space-m-l: clamp(1.50rem, calc(1.15rem + 1.74vw), 2.50rem); 39 --space-l-xl: clamp(2.00rem, calc(1.39rem + 3.04vw), 3.75rem); 40 --space-xl-2xl: clamp(3.00rem, calc(2.30rem + 3.48vw), 5.00rem); 41 --space-2xl-3xl: clamp(4.00rem, calc(2.78rem + 6.09vw), 7.50rem); 42 /* Custom pairs */ 43 --space-s-l: clamp(1.00rem, calc(0.48rem + 2.61vw), 2.50rem); } 44 45/* 46Global theme tokens 47*/ 48:root { 49 /* Typography */ 50 --font-base: 'KukulkanSans', -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 51 --font-display: var(--font-base); 52 --font-accent: 'KukulkanSans', 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', 'Courier New', monospace; 53 --font-weight-regular: 400; 54 --font-weight-bold: 700; 55 --line-height-compact: 1.2; 56 --line-height-base: 1.5; 57 --line-height-loose: 1.7; 58 --width-compact: 35ch; 59 --width-longform: 65ch; 60 --tracking: -0.05ch; 61 --tracking-s: -0.05ch; 62 /* 63 Colors created with Utopia Kickstarter project 64 @link https://www.figma.com/community/file/1122903924123950023 65 */ 66 --color-text: #1D1D1D; 67 --color-text-mod-1: #494949; 68 --color-text-mod-2: #616161; 69 --color-bg: #ffffff; 70 --color-bg-mod-1:#F8F8F8; 71 --color-bg-mod-2: #EDEDED; 72 --color-border: #1D1D1D; 73 --color-brand: #73c2fb; 74 --color-accent: #fb737e; 75 --color-highlight: #fbf073; 76 /* Grid */ 77 --gutter: var(--space-s-m); 78 /* Effects */ 79 --border-radius: 0; 80 --shadow: 0px 3px 7px rgba(0, 0, 0, 0.08), 0px 0px 1px rgba(0, 0, 0, 0.025); } 81 @media (prefers-color-scheme: dark) { 82 :root { 83 /* 84 If theme doesn’t require a dark mode then remove this media query altogether 85 */ 86 --color-text: #CED3E8; 87 --color-text-mod-1: #C4CAE3; 88 --color-text-mod-2: #8995C8; 89 --color-bg: #0D101A; 90 --color-bg-mod-1:#121626; 91 --color-bg-mod-2: #212845; 92 --color-border: #CED3E8; 93 --color-brand: #73c2fb; 94 --color-accent: #FF70AE; } } 95/* 96Utopia fluid type 97 98@link https://utopia.fyi/type/calculator?c=320,16,1.2,1240,20,1.25,4,1,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l&g=s,l,xl,NaN 99*/ 100:root { 101 --step--1: clamp(0.83rem, calc(0.78rem + 0.29vw), 1.00rem); 102 --step-0: clamp(1.00rem, calc(0.91rem + 0.43vw), 1.25rem); 103 --step-1: clamp(1.20rem, calc(1.07rem + 0.63vw), 1.56rem); 104 --step-2: clamp(1.44rem, calc(1.26rem + 0.89vw), 1.95rem); 105 --step-3: clamp(1.73rem, calc(1.48rem + 1.24vw), 2.44rem); 106 --step-4: clamp(2.07rem, calc(1.73rem + 1.70vw), 3.05rem); } 107 108/* 109* Embrace the cascade and inheritance to 110* style as much as possible at a global level 111*/ 112/* 113A modern reset 114 115@link: https://piccalil.li/blog/a-modern-css-reset/ 116*/ 117/* Box sizing rules */ 118*, 119*::before, 120*::after { 121 box-sizing: border-box; } 122 123/* Remove default margin */ 124body, 125h1, 126h2, 127h3, 128h4, 129p, 130figure, 131blockquote, 132dl, 133dd { 134 margin: 0; } 135 136/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */ 137ul[role='list'], 138ol[role='list'] { 139 list-style: none; } 140 141/* Prevent zooming when orientation changes on some iOS devices */ 142html { 143 -moz-text-size-adjust: none; 144 text-size-adjust: none; 145 -webkit-text-size-adjust: none; } 146 147/* Set core root defaults */ 148html:focus-within { 149 scroll-behavior: smooth; } 150 151/* Set core body defaults */ 152body { 153 min-height: 100vh; 154 text-rendering: optimizeSpeed; 155 line-height: 1.5; } 156 157/* A elements that don't have a class get default styles */ 158a:not([class]) { 159 -webkit-text-decoration-skip: ink; 160 text-decoration-skip-ink: auto; } 161 162/* Make images easier to work with */ 163img, 164picture { 165 max-width: 100%; 166 display: block; } 167 168/* Inherit fonts for inputs and buttons */ 169input, 170button, 171textarea, 172select { 173 font: inherit; } 174 175/* Remove all animations and transitions for people that prefer not to see them */ 176@media (prefers-reduced-motion: reduce) { 177 * { 178 animation-duration: 0.01s !important; 179 animation-iteration-count: 1 !important; 180 transition-duration: 0.01s !important; 181 scroll-behavior: auto !important; } } 182 183/* 184Global styles 185 186Low-specificity, global styles that apply to the whole 187project: https://cube.fyi/css.html 188*/ 189body { 190 color: var(--color-text); 191 background: var(--color-bg); 192 font-size: var(--step-0); 193 font-family: var(--font-base); 194 letter-spacing: var(--tracking); } 195 196/* Base typesetting */ 197h1, 198h2, 199h3 { 200 font-family: var(--font-display); 201 line-height: 1; 202 letter-spacing: var(--tracking-s); } 203 204h1, 205.h1 { 206 font-size: var(--step-4); 207 font-feature-settings: "smcp", "swsh" } 208 209h2, 210.h2 { 211 font-size: var(--step-3); 212 font-feature-settings: "smcp", "swsh" } 213 214h3, 215.h3 { 216 font-size: var(--step-2); } 217 218h4, 219.h4 { 220 font-size: var(--step-1); } 221 222h5, 223.h5 { 224 font-size: var(--step-0); } 225 226h6, 227.h6 { 228 font-size: var(--step--1); } 229 230/* Set line lengths */ 231p, 232li, 233blockquote:not([class]) { 234 max-width: var(--width-longform); } 235 236h1, 237h2, 238h3 { 239 max-width: var(--width-compact); } 240 241hr { 242 border: none; 243 border-top: 2px dotted; } 244 245kbd { 246 background-color: var(--color-bg-mod-1); 247 border: solid 1px var(--color-bg-mod-2); 248 border-radius: var(--border-radius-sm); 249 font-family: var(--font-accent); 250 font-size: 1rem; 251 padding: .115rem .25rem; } 252 253figcaption { 254 font-size: var(--step--1); 255 -webkit-margin-before: .5rem; 256 margin-block-start: .5rem; 257 text-align: center; } 258 259small { 260 font-size: var(--step--1); } 261 262/* More generic elements */ 263blockquote:not([class]) { 264 border-left: solid 3px var(--color-text); 265 -webkit-padding-start: var(--space-s); 266 padding-inline-start: var(--space-s); 267 font-family: var(--font-display); 268 font-size: var(--step-2); 269 line-height: var(--line-height-base); } 270 271/* Markdown blockquuote:not([class])s aren't ideal, so we're presuming the person quoted is the last p */ 272blockquote:not([class]) p:last-of-type, 273blockquote:not([class]) cite { 274 font-family: var(--font-base); 275 font-size: var(--step-1); 276 font-weight: normal; 277 -webkit-margin-before: var(--space-2xs); 278 margin-block-start: var(--space-2xs); } 279 280svg { 281 height: 2ex; 282 width: auto; 283 flex: none; } 284 svg path { 285 fill: var(--color-text); } 286 287/* Remove padding and margin on ul, ol elements with a list role */ 288[role='list'] { 289 padding: 0; 290 margin: 0; } 291 292/* Base interactive elements */ 293a { 294 color: currentcolor; 295 color: var(--color-brand); } 296 297a:hover { 298 background-color: var(--color-brand); 299 color: var(--color-bg); 300 text-decoration: none; } 301 302/* Use naked variant to style links as text*/ 303a[data-variant="naked"] { 304 color: var(--color-text); 305 text-decoration: none; } 306 307a[data-variant="naked"]:hover { 308 background-color: unset; 309 text-decoration: underline; } 310 311/* Hide focus styles if they're not needed, for example, 312 when an element receives focus via the mouse. */ 313:focus:not(:focus-visible) { 314 outline: 0; } 315 316/* Show focus styles on keyboard focus. */ 317:focus-visible { 318 outline: dotted 2px var(--color-text); 319 outline-offset: 3px; } 320 321/* Add scroll margin to all target elements 322 * See https://piccalil.li/quick-tip/add-scroll-margin-to-all-elements-which-can-be-targeted/ 323 */ 324:target { 325 scroll-margin-top: 2ex; } 326 327main:focus { 328 outline: none; } 329 330/* Add highlight styles */ 331::-moz-selection { 332 color: var(--color-text); 333 background-color: var(--color-highlight); 334 /* Reverse text colour in dark mode */ } 335mark, 336::selection { 337 color: var(--color-text); 338 background-color: var(--color-highlight); 339 /* Reverse text colour in dark mode */ } 340 @media (prefers-color-scheme: dark) { 341 ::-moz-selection { 342 color: var(--color-bg); } 343 mark, 344 ::selection { 345 color: var(--color-bg); } } 346/* Decrease the brightness and contrast of images in dark mode */ 347@media (prefers-color-scheme: dark) { 348 img, 349 picture { 350 filter: brightness(0.8) contrast(1.2); } } 351 352/* 353Form styles 354 355Ditch these styles altogether if not required for the website. 356*/ 357fieldset { 358 border: solid 0.1rem var(--color-border); } 359 360legend { 361 font-weight: var(--font-weight-bold); } 362 363label { 364 display: block; 365 margin-block: var(--space-3xs); } 366 367form button { 368 display: block; 369 -webkit-margin-before: var(--space-xs); 370 margin-block-start: var(--space-xs); } 371 372input[type="email"], 373input[type="number"], 374input[type="password"], 375input[type="search"], 376input[type="tel"], 377input[type="text"], 378input[type="url"], 379textarea, 380select { 381 background: var(--color-bg); 382 box-shadow: none; 383 letter-spacing: -.5px; 384 border: solid 0.1rem var(--color-border); 385 border-radius: var(--border-radius); 386 color: var(--color-text); 387 padding: var(--space-3xs) var(--space-2xs); } 388 389input[type="submit"], 390input[type="checkbox"], 391input[type="radio"], 392select { 393 appearance: none; 394 -moz-appearance: none; 395 -webkit-appearance: none; 396 position: relative; } 397 398/* Chevron for select */ 399select:not([multiple]) { 400 background-image: linear-gradient(45deg, transparent 49%, var(--color-text) 51%), linear-gradient(135deg, var(--color-text) 51%, transparent 49%); 401 background-position: calc(100% - 16px), calc(100% - 11px); 402 background-size: 5px 5px, 5px 5px; 403 background-repeat: no-repeat; 404 -webkit-padding-end: 2rem; 405 padding-inline-end: 2rem; } 406 407/* checkbox and radio button style */ 408input[type="checkbox"], 409input[type="radio"] { 410 border: solid 0.1rem var(--color-border); 411 padding: var(--space-2xs); 412 vertical-align: middle; 413 position: relative; 414 width: -moz-min-content; 415 width: min-content; 416 -webkit-margin-start: 0; 417 margin-inline-start: 0; 418 -webkit-margin-end: .25rem; 419 margin-inline-end: .25rem; 420 -webkit-margin-after: .3rem; 421 margin-block-end: .3rem; } 422 423input[type="checkbox"] { 424 border-radius: var(--border-radius); } 425 426input[type="radio"] { 427 border-radius: 100%; } 428 429input[type="checkbox"]:checked, 430input[type="radio"]:checked { 431 border: solid 0.1rem var(--color-brand); 432 background-color: var(--color-brand); } 433 434input[type="checkbox"]:checked::after { 435 /* Creates a rectangle with colored right and bottom borders which is rotated to look like a check mark */ 436 content: " "; 437 width: .17em; 438 height: .32em; 439 border-radius: 0; 440 position: absolute; 441 top: .06em; 442 left: .16em; 443 background-color: transparent; 444 border-right: solid var(--color-bg) 0.07em; 445 border-bottom: solid var(--color-bg) 0.07em; 446 font-size: 2em; 447 transform: rotate(45deg); } 448 449input[type="radio"]:checked::after { 450 /* creates a colored circle for the checked radio button */ 451 content: " "; 452 width: .25em; 453 height: .25em; 454 border-radius: 100%; 455 position: absolute; 456 top: .13em; 457 background-color: var(--color-bg); 458 left: .13em; 459 font-size: 2em; } 460 461/* 462Code styles 463 464Used for inline code and code blocks 465 466Ditch these styles altogether if not required for the website. 467*/ 468pre { 469 background: var(--color-bg-mod-1); 470 overflow: auto; 471 overflow-x: scroll; 472 overflow-wrap: normal; 473 padding: var(--space-xs-s); 474 margin: 0; } 475 476code { 477 background: var(--color-bg-mod-1); 478 color: var(--color-accent); 479 font-size: 93%; } 480 481pre code { 482 color: var(--color-text); } 483 484p code, 485li code { 486 padding: .125rem .35rem; } 487 488/* 489Details and summary styles 490 491Format the expanding box, a.k.a accordion. 492 493Ditch these styles altogether if not required for the website. 494*/ 495details { 496 background: var(--color-bg-mod-1); 497 border-radius: var(--border-radius); } 498 499summary { 500 cursor: pointer; 501 font-weight: var(--font-weight-bold); 502 padding: .5rem 1rem; } 503 504details[open] { 505 padding: .5rem 1rem .75rem 1rem; } 506 507details[open] summary { 508 margin-bottom: .5rem; 509 padding: 0; } 510 511details[open] > *:last-child { 512 margin-bottom: 0; } 513 514/* Variant to enhance the style of accordions with fancy arrows */ 515details[data-variant='fancy'] { 516 position: relative; } 517 details[data-variant='fancy'] summary::-webkit-details-marker, 518 details[data-variant='fancy'] summary::marker { 519 content: ""; } 520 details[data-variant='fancy'] summary:after { 521 content: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyIDE1LjM3NUw2IDkuMzc0OTlMNy4wNzUgOC4yOTk5OUwxMiAxMy4yNUwxNi45MjUgOC4zMjQ5OUwxOCA5LjM5OTk5TDEyIDE1LjM3NVoiIGZpbGw9IiMxRDFEMUQiLz4KPC9zdmc+Cg=="); 522 /* Use light chevron for darkmode */ 523 height: 1.2rem; 524 pointer-events: none; 525 position: absolute; 526 right: 1rem; 527 top: 1rem; 528 transform: rotate(180deg); } 529 @media (prefers-color-scheme: dark) { 530 details[data-variant='fancy'] summary:after { 531 content: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyIDE1LjM3NUw2IDkuMzc0OTlMNy4wNzUgOC4yOTk5OUwxMiAxMy4yNUwxNi45MjUgOC4zMjQ5OUwxOCA5LjM5OTk5TDEyIDE1LjM3NVoiIGZpbGw9IiNDRUQzRTgiLz4KPC9zdmc+Cg=="); } } 532details[open][data-variant='fancy'] summary:after { 533 top: 1rem; 534 transform: rotate(0deg); } 535 536/* 537Table styles 538 539Ditch these styles altogether if not required for the website. 540*/ 541table { 542 border-collapse: collapse; 543 width: 100%; 544 margin: 1.5rem 0; 545 overflow-x: scroll; } 546 547td, 548th { 549 border: 0.1rem solid var(--color-border); 550 text-align: left; 551 padding: 0.5rem; } 552 553th { 554 background: var(--color-bg-mod-1); 555 font-weight: bold; } 556 557tr:nth-child(even) { 558 background: var(--color-bg-mod-1); } 559 560table caption { 561 padding: .5rem; 562 caption-side: bottom; } 563 564/* 565Button styles 566 567Globally style the button element, submit, button and reset input. 568Include the .button class for styling <a> tags as buttons. 569*/ 570button, 571.button, 572input[type="submit"], 573input[type="reset"], 574input[type="button"] { 575 background-color: var(--color-brand); 576 border: solid 0.1rem var(--color-brand); 577 border-radius: var(--border-radius); 578 color: var(--color-bg); 579 cursor: pointer; 580 padding: var(--space-3xs) var(--space-2xs); 581 display: inline-block; 582 text-decoration: none; 583 text-align: center; } 584 585button:hover, 586button:focus, 587.button:hover, 588.button:focus, 589input[type="submit"]:hover, 590input[type="submit"]:focus, 591input[type="reset"]:hover, 592input[type="reset"]:focus, 593input[type="button"]:hover 594input[type="button"]:focus { 595 filter: brightness(1.2); 596 transform: translateY(-2px); } 597 598button:disabled, 599.button[aria-disabled="true"], 600input[type="submit"]:disabled, 601input[type="reset"]:disabled, 602input[type="button"]:disabled { 603 background-color: var(--color-bg-mod-2); 604 border: solid 0.1rem var(--color-bg-mod-2); 605 color: var(--color-text-mod-2); 606 cursor: not-allowed; 607 transform: none; 608 filter: none; } 609 610/* 611EXCEPTIONS 612 613Offer a variant button style 614 615@link https://cube.fyi/exception.html 616*/ 617button[data-variant='outline'], 618.button[data-variant='outline'], 619input[type="submit"][data-variant='outline'], 620input[type="reset"][data-variant='outline'], 621input[type="button"][data-variant='outline'] { 622 color: var(--color-brand); 623 background: var(--color-bg); 624 border: solid 0.1rem var(--color-brand); } 625 626button[data-variant='outline']:hover, 627.button[data-variant='outline']:hover, 628input[type="submit"][data-variant='outline']:hover, 629input[type="reset"][data-variant='outline']:hover, 630input[type="button"][data-variant='outline']:hover { 631 filter: brightness(1.2); 632 border: solid 0.1rem var(--color-brand); } 633 634nav[data-variant='main'] a[data-state='active'] { 635 text-decoration: underline; } 636 637nav[data-variant='main'] li a { 638 display: flex; } 639 640nav[data-variant='main'] li a span { 641 display: flex; 642 align-items: center; 643 margin-right: .5rem; } 644 645nav[data-variant='sidebar'] a[data-state='active'] { 646 text-decoration: line-through; } 647 648nav[data-variant='sidebar'] li { 649 max-width: unset; } 650 651nav[data-variant='sidebar'] li[data-children='true'] { 652 position: relative; } 653 654nav[data-variant='sidebar'] li[data-children='true']::before { 655 content: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyIDE1LjM3NUw2IDkuMzc0OTlMNy4wNzUgOC4yOTk5OUwxMiAxMy4yNUwxNi45MjUgOC4zMjQ5OUwxOCA5LjM5OTk5TDEyIDE1LjM3NVoiIGZpbGw9IiMxRDFEMUQiLz4KPC9zdmc+Cg=="); 656 /* Use light chevron for darkmode */ 657 height: 1.2rem; 658 pointer-events: none; 659 position: absolute; 660 right: 1rem; 661 top: .6rem; 662 transform: rotate(180deg); } 663 @media (prefers-color-scheme: dark) { 664 nav[data-variant='sidebar'] li[data-children='true']::before { 665 content: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyIDE1LjM3NUw2IDkuMzc0OTlMNy4wNzUgOC4yOTk5OUwxMiAxMy4yNUwxNi45MjUgOC4zMjQ5OUwxOCA5LjM5OTk5TDEyIDE1LjM3NVoiIGZpbGw9IiNDRUQzRTgiLz4KPC9zdmc+Cg=="); } } 666nav[data-variant='sidebar'] li[data-children='true'][data-state='active']::before { 667 top: .2rem; 668 transform: rotate(0deg); } 669 670nav[data-variant='sidebar'] li[data-state='active'] + ul, 671nav[data-variant='sidebar'] ul[data-state='visible'] { 672 display: block; 673 padding-inline: 1rem; 674 width: 100%; 675 height: auto; 676 clip: auto; } 677 678nav[data-variant='sidebar'] ul > li ul { 679 display: none; } 680 681/* 682* Skeletal components or organisational structures. 683*/ 684.skip-link { 685 clip: rect(1px, 1px, 1px, 1px); 686 display: block; 687 height: 1px; 688 overflow: hidden; 689 position: absolute; 690 width: 1px; 691 top: 1rem; 692 left: 1rem; 693 z-index: 999; } 694 695.skip-link:focus { 696 clip: auto; 697 height: auto; 698 overflow: visible; 699 width: auto; 700 background-color: var(--color-bg); 701 color: var(--color-text); 702 padding: var(--space-xs); 703 line-height: 1; } 704 705.skip-link:not(:focus) { 706 border: 0; 707 clip: rect(0 0 0 0); 708 height: auto; 709 margin: 0; 710 overflow: hidden; 711 padding: 0; 712 position: absolute; 713 width: 1px; 714 white-space: nowrap; } 715 716.prose { 717 --flow-space: var(--space-s-m); 718 line-height: var(--line-height-loose); } 719 720.prose :is(p, ul:not([class]), ol:not([class])) { 721 max-width: var(--width-longform); } 722 723.prose :is(pre,pre+*,figure,figure+*,h2,h3,h4) { 724 --flow-space: var(--space-l-xl); } 725 726.prose blockquote { 727 max-width: 40ch; } 728 729/* 730HERO 731*/ 732.hero { 733 --region-space: 8rem; 734 background-image: radial-gradient(var(--color-text) 7%, transparent 20%), radial-gradient(var(--color-bg) 20%, transparent 20%); 735 background-color: var(--color-bg); 736 background-position: 0 0, 50px 50px; 737 background-size: 3px 3px; 738 padding-inline: var(--space-s-m); 739 text-align: center; } 740 741/* 742Ensure direct decending elements maintain a consistent flow space when hero is used with .flow. 743Center align elements. 744*/ 745.hero > * { 746 --flow-space: 1rem; 747 margin-inline: auto; } 748 749/* 750CALLOUT 751*/ 752.callout { 753 padding: var(--space-xs-s); 754 border: dotted 2px var(--color-text-mod-2); 755 max-width: var(--width-longform); 756 border-radius: var(--border-radius); } 757 758.callout > * { 759 line-height: var(--line-height-base); } 760 761.callout[data-variant='brand'] { 762 color: var(--color-brand); 763 border: dotted 2px var(--color-brand); } 764 765.callout[data-variant='brand'] > * { 766 color: var(--color-brand); } 767 768/* 769CARD 770 771A block that styles content as a card. 772Largely based on: 773@link: https://inclusive-components.design/cards/ 774@link: https://portfolio.set.studio/design-system/component/cards/ 775*/ 776.card { 777 --img-ratio: 3/2; 778 display: flex; 779 flex-direction: column; 780 position: relative; 781 border: solid .1rem; 782 border-radius: var(--border-radius); } 783 784/* Ensure consistent heading size regardless of heading level */ 785.card :is(h2, h3, h4) { 786 font-size: var(--step-1); } 787 788/* Ensure consistent text size for all non-heading elements */ 789.card > :not(h2, h3, h4) { 790 font-size: var(--step--1); } 791 792/* 793 Use Heydon’s pseudo-content trick to make the whole card clickable 794 @link: https://inclusive-components.design/cards/#thepseudocontenttrick 795 See also Andy’s Breakout button 796 @link: https://piccalil.li/tutorial/create-a-semantic-break-out-button-to-make-an-entire-element-clickable/ 797*/ 798.card :is(h2, h3, h4) > a::after { 799 content: ''; 800 position: absolute; 801 left: 0; 802 top: 0; 803 right: 0; 804 bottom: 0; } 805 806/* Raise all other links above the pseudo-content, so they remain clickable */ 807.card p, 808.card button, 809.card .button { 810 position: relative; 811 z-index: 1; } 812 813/* Apply a basic focus style to the link so that users of older browsers that do not support :focus-within will still see a fallback focus style */ 814.card a:focus { 815 text-decoration: underline; } 816 817/* Use :focus-within to match the :hover style */ 818.card:focus-within { 819 box-shadow: 0 0 0 .1rem; } 820 821/* Remove the unnecessary basic :focus style only where :focus-within is supported */ 822.card:focus-within a:focus { 823 text-decoration: none; } 824 825/* Create consistent image behaviour and ratio */ 826.card > img { 827 aspect-ratio: var(--img-ratio); 828 -o-object-fit: cover; 829 object-fit: cover; 830 width: 100%; } 831 832/* Force the textual elements to take up all the available space and prevents line length for cards on large screens not supporting grid from becoming too long */ 833.card > div { 834 --flow-space: 1rem; 835 display: flex; 836 flex-direction: column; 837 flex-grow: 1; 838 padding: 1rem; 839 max-width: 60ch; } 840 841/* Push the last textual element to the bottom of the card, regardless of its height. */ 842.card > div :last-child { 843 margin-top: auto; } 844 845/* Add a bottom margin to the second last element, to ensure a minimum level of separation */ 846.card > div :nth-last-child(2) { 847 margin-bottom: var(--space-xs-s); } 848 849/* Optionally flip the card design 850 @link: https://cube.fyi/exception.html 851*/ 852.card[data-state='reversed'] { 853 display: flex; 854 flex-direction: column-reverse; } 855 856/* 857* High level, flexible layouts that provide a 858* skeleton to support any variant of a component 859*/ 860/* 861AUTO GRID 862Related Every Layout: https://every-layout.dev/layouts/grid/ 863More info on the flexible nature: https://piccalil.li/tutorial/create-a-responsive-grid-layout-with-no-media-queries-using-css-grid/ 864A flexible layout that will create an auto-fill grid with 865configurable grid item sizes. 866 867CUSTOM PROPERTIES AND CONFIGURATION 868--gutter (var(--space-s-m)): This defines the space 869between each item. 870 871--grid-min-item-size (14rem): How large each item should be 872ideally, as a minimum. 873 874--grid-placement (auto-fill): Set either auto-fit or auto-fill 875to change how empty grid tracks are handled. 876*/ 877.grid { 878 display: grid; 879 grid-template-columns: repeat(var(--grid-placement, auto-fill), minmax(var(--grid-min-item-size, 16rem), 1fr)); 880 gap: var(--gutter, var(--space-s-l)); } 881 882/* 883EXCEPTIONS 884 885@link https://cube.fyi/exception.html 886*/ 887/* Masonry layout (will work one day in all browsers) */ 888.grid[data-rows='masonry'] { 889 grid-template-rows: masonry; 890 align-items: start; } 891 892/* Two column when space permits */ 893.grid[data-layout='50-50'] { 894 --grid-placement: auto-fit; 895 --grid-min-item-size: clamp(16rem, 50vw, 26rem); } 896 897/* Three column when space permits */ 898.grid[data-layout='33x3'] { 899 --grid-placement: auto-fit; 900 --grid-min-item-size: clamp(16rem, 33%, 18rem); } 901 902/* 903REPEL 904A little layout that pushes items away from each other where 905there is space in the viewport and stacks on small viewports 906 907CUSTOM PROPERTIES AND CONFIGURATION 908--gutter (var(--space-s-m)): This defines the space 909between each item. 910--repel-vertical-alignment How items should align vertically. 911Can be any acceptable flexbox alignment value. 912*/ 913.repel { 914 display: flex; 915 flex-wrap: wrap; 916 justify-content: space-between; 917 align-items: var(--repel-vertical-alignment, center); 918 gap: var(--gutter, var(--space-s-l)); } 919 920.repel[data-nowrap] { 921 flex-wrap: nowrap; } 922 923/* 924CLUSTER 925More info: https://every-layout.dev/layouts/cluster/ 926A layout that lets you distribute items with consitent 927spacing, regardless of their size 928 929CUSTOM PROPERTIES AND CONFIGURATION 930--gutter ($global-gutter): This defines the space 931between each item. 932 933--cluster-horizontal-alignment (flex-start) How items should align 934horizontally. Can be any acceptable flexbox aligmnent value. 935 936--cluster-vertical-alignment How items should align vertically. 937Can be any acceptable flexbox alignment value. 938*/ 939.cluster { 940 display: flex; 941 flex-wrap: wrap; 942 gap: var(--gutter, var(--space-size-1)); 943 justify-content: var(--cluster-horizontal-alignment, flex-start); 944 align-items: var(--cluster-vertical-alignment, center); } 945 946/* 947SIDEBAR 948More info: https://every-layout.dev/layouts/sidebar/ 949A layout that allows you to have a flexible main content area 950and a "fixed" width sidebar that sits on the left or right. 951If there is not enough viewport space to fit both the sidebar 952width *and* the main content minimum width, they will stack 953on top of each other 954 955CUSTOM PROPERTIES AND CONFIGURATION 956--gutter (var(--space-size-1)): This defines the space 957between the sidebar and main content. 958 959--sidebar-target-width (20rem): How large the sidebar should be 960 961--sidebar-content-min-width(50%): The minimum size of the main content area 962 963EXCEPTIONS 964.sidebar[data-direction='rtl']: flips the sidebar to be on the right 965*/ 966.sidebar { 967 display: flex; 968 flex-wrap: wrap; 969 gap: var(--gutter, var(--space-s-l)); } 970 971.sidebar:not([data-direction]) > :first-child { 972 flex-basis: var(--sidebar-target-width, 20rem); 973 flex-grow: 1; } 974 975.sidebar:not([data-direction]) > :last-child { 976 flex-basis: 0; 977 flex-grow: 999; 978 min-width: var(--sidebar-content-min-width, 50%); } 979 980/* 981A flipped version where the sidebar is on the right 982*/ 983.sidebar[data-direction='rtl'] > :last-child { 984 flex-basis: var(--sidebar-target-width, 20rem); 985 flex-grow: 1; } 986 987.sidebar[data-direction='rtl'] > :first-child { 988 flex-basis: 0; 989 flex-grow: 999; 990 min-width: var(--sidebar-content-min-width, 50%); } 991 992@media screen and (min-width: 960px) { 993 .sidebar[data-variant='sticky'] > :first-child { 994 position: sticky; 995 top: 2rem; 996 overflow: auto; 997 height: 100vh; } } 998 999/* 1000* Classes that do one job and one job well 1001*/ 1002/* 1003VISUALLY HIDDEN 1004Info: https://piccalil.li/quick-tip/visually-hidden/ 1005*/ 1006.visually-hidden { 1007 border: 0; 1008 clip: rect(0 0 0 0); 1009 height: auto; 1010 margin: 0; 1011 overflow: hidden; 1012 padding: 0; 1013 position: absolute; 1014 width: 1px; 1015 white-space: nowrap; } 1016 1017/* 1018FLOW 1019Applies a margin to sibling elements based on a --flow-space custom property. 1020@link: See The Stack in Every Layout https://every-layout.dev/layouts/stack/ 1021@link: https://piccalil.li/tutorial/improve-the-readability-of-the-content-on-your-website#heading-the-flow-utility 1022@link: https://piccalil.li/quick-tip/flow-utility/ 1023*/ 1024.flow > * + * { 1025 margin-top: var(--flow-space, 1em); } 1026 1027/* 1028REGION 1029Add consistent vertical padding to create regions of content 1030Can either be configured by setting --region-space or use a default from the space scale 1031*/ 1032.region { 1033 padding-top: var(--region-space, var(--space-l-xl)); 1034 padding-bottom: var(--region-space, var(--space-l-xl)); } 1035 1036/* 1037WRAPPER 1038Sets a max width, adds a consistent gutter and horizontally 1039centers the contents 1040@link: https://piccalil.li/quick-tip/use-css-clamp-to-create-a-more-flexible-wrapper-utility/ 1041*/ 1042.wrapper { 1043 max-width: var(--wrapper-max-width, 90rem); 1044 margin-left: auto; 1045 margin-right: auto; 1046 padding-left: var(--gutter); 1047 padding-right: var(--gutter); 1048 position: relative; } 1049 1050.w-full { 1051 width: 100%; 1052 max-width: unset; } 1053 1054.text-center { 1055 text-align: center; } 1056 1057/*# sourceMappingURL=data:application/json;base64,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QVU7RUFDVixrQkFBa0I7RUFDbEIsVUFBVTtFQUNWLG1CQUFtQixFQUFFOztBQUV2Qjs7Ozs7O0NBTUM7QUFDRDtFQUNFLGtDQUFrQyxFQUFFOztBQUV0Qzs7OztDQUlDO0FBQ0Q7RUFDRSxtREFBbUQ7RUFDbkQsc0RBQXNELEVBQUU7O0FBRTFEOzs7OztDQUtDO0FBQ0Q7RUFDRSwwQ0FBMEM7RUFDMUMsaUJBQWlCO0VBQ2pCLGtCQUFrQjtFQUNsQiwyQkFBMkI7RUFDM0IsNEJBQTRCO0VBQzVCLGtCQUFrQixFQUFFOztBQUV0QjtFQUNFLFdBQVc7RUFDWCxnQkFBZ0IsRUFBRTs7QUFFcEI7RUFDRSxrQkFBa0IsRUFBRSIsImZpbGUiOiJzdGRpbiIsInNvdXJjZXNDb250ZW50IjpbIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qIFxuKiBUaGUgdmFyaWFibGVzL3Rva2VucyAob3Igd2hhdGV2ZXIgeW91IFxuKiB3aXNoIHRvIGNhbGwgdGhlbSkgdGhhdCBwb3dlciB0aGUgcmVzdCBvZiB5b3VyIHN0eWxlc1xuKi9cbi8qIFxuR29vZ2xlIGZvbnRzIHdpdGggc3Vic2V0dGluZyB2aWEgR29vZ2xlIFdlYmZvbnRzIEhlbHBlclxuXG5AbGluayBodHRwczovL2d3ZmgubXJhbmZ0bC5jb20vZm9udHMvaW50ZXI/c3Vic2V0cz1sYXRpbiBcbiovXG5AZm9udC1mYWNlIHtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICAvKiBDaGVjayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQGZvbnQtZmFjZS9mb250LWRpc3BsYXkgZm9yIG90aGVyIG9wdGlvbnMuICovXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHNyYzogdXJsKFwiLi4vZm9udHMvaW50ZXItdjEyLWxhdGluLXJlZ3VsYXIud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi4uL2ZvbnRzL2ludGVyLXYxMi1sYXRpbi1yZWd1bGFyLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTtcbiAgLyogQ2hyb21lIDUrLCBGaXJlZm94IDMuNissIElFIDkrLCBTYWZhcmkgNS4xKyAqLyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWRpc3BsYXk6IHN3YXA7XG4gIC8qIENoZWNrIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9AZm9udC1mYWNlL2ZvbnQtZGlzcGxheSBmb3Igb3RoZXIgb3B0aW9ucy4gKi9cbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9pbnRlci12MTItbGF0aW4tNzAwLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIuLi9mb250cy9pbnRlci12MTItbGF0aW4tNzAwLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTtcbiAgLyogQ2hyb21lIDUrLCBGaXJlZm94IDMuNissIElFIDkrLCBTYWZhcmkgNS4xKyAqLyB9XG5cbi8qIFxuVXRvcGlhIGZsdWlkIHNwYWNlXG5cbkBsaW5rIGh0dHBzOi8vdXRvcGlhLmZ5aS9zcGFjZS9jYWxjdWxhdG9yP2M9MzIwLDE2LDEuMiwxMjQwLDIwLDEuMjUsNSwyLCZzPTAuNzV8MC41fDAuMjUsMS41fDJ8M3w0fDYscy1sJmc9cyxsLHhsLDEyIFxuKi9cbjpyb290IHtcbiAgLS1zcGFjZS0zeHM6IGNsYW1wKDAuMjVyZW0sIGNhbGMoMC4yM3JlbSArIDAuMTF2dyksIDAuMzFyZW0pO1xuICAtLXNwYWNlLTJ4czogY2xhbXAoMC41MHJlbSwgY2FsYygwLjQ2cmVtICsgMC4yMnZ3KSwgMC42M3JlbSk7XG4gIC0tc3BhY2UteHM6IGNsYW1wKDAuNzVyZW0sIGNhbGMoMC42OHJlbSArIDAuMzN2dyksIDAuOTRyZW0pO1xuICAtLXNwYWNlLXM6IGNsYW1wKDEuMDByZW0sIGNhbGMoMC45MXJlbSArIDAuNDN2dyksIDEuMjVyZW0pO1xuICAtLXNwYWNlLW06IGNsYW1wKDEuNTByZW0sIGNhbGMoMS4zN3JlbSArIDAuNjV2dyksIDEuODhyZW0pO1xuICAtLXNwYWNlLWw6IGNsYW1wKDIuMDByZW0sIGNhbGMoMS44M3JlbSArIDAuODd2dyksIDIuNTByZW0pO1xuICAtLXNwYWNlLXhsOiBjbGFtcCgzLjAwcmVtLCBjYWxjKDIuNzRyZW0gKyAxLjMwdncpLCAzLjc1cmVtKTtcbiAgLS1zcGFjZS0yeGw6IGNsYW1wKDQuMDByZW0sIGNhbGMoMy42NXJlbSArIDEuNzR2dyksIDUuMDByZW0pO1xuICAtLXNwYWNlLTN4bDogY2xhbXAoNi4wMHJlbSwgY2FsYyg1LjQ4cmVtICsgMi42MXZ3KSwgNy41MHJlbSk7XG4gIC8qIE9uZS11cCBwYWlycyAqL1xuICAtLXNwYWNlLTN4cy0yeHM6IGNsYW1wKDAuMjVyZW0sIGNhbGMoMC4xMnJlbSArIDAuNjV2dyksIDAuNjNyZW0pO1xuICAtLXNwYWNlLTJ4cy14czogY2xhbXAoMC41MHJlbSwgY2FsYygwLjM1cmVtICsgMC43NnZ3KSwgMC45NHJlbSk7XG4gIC0tc3BhY2UteHMtczogY2xhbXAoMC43NXJlbSwgY2FsYygwLjU4cmVtICsgMC44N3Z3KSwgMS4yNXJlbSk7XG4gIC0tc3BhY2Utcy1tOiBjbGFtcCgxLjAwcmVtLCBjYWxjKDAuNzByZW0gKyAxLjUydncpLCAxLjg4cmVtKTtcbiAgLS1zcGFjZS1tLWw6IGNsYW1wKDEuNTByZW0sIGNhbGMoMS4xNXJlbSArIDEuNzR2dyksIDIuNTByZW0pO1xuICAtLXNwYWNlLWwteGw6IGNsYW1wKDIuMDByZW0sIGNhbGMoMS4zOXJlbSArIDMuMDR2dyksIDMuNzVyZW0pO1xuICAtLXNwYWNlLXhsLTJ4bDogY2xhbXAoMy4wMHJlbSwgY2FsYygyLjMwcmVtICsgMy40OHZ3KSwgNS4wMHJlbSk7XG4gIC0tc3BhY2UtMnhsLTN4bDogY2xhbXAoNC4wMHJlbSwgY2FsYygyLjc4cmVtICsgNi4wOXZ3KSwgNy41MHJlbSk7XG4gIC8qIEN1c3RvbSBwYWlycyAqL1xuICAtLXNwYWNlLXMtbDogY2xhbXAoMS4wMHJlbSwgY2FsYygwLjQ4cmVtICsgMi42MXZ3KSwgMi41MHJlbSk7IH1cblxuLyogXG5HbG9iYWwgdGhlbWUgdG9rZW5zXG4qL1xuOnJvb3Qge1xuICAvKiBUeXBvZ3JhcGh5ICovXG4gIC0tZm9udC1iYXNlOiAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFNlZ29lIFVJLCBSb2JvdG8sIE94eWdlbiwgVWJ1bnR1LCBDYW50YXJlbGwsIEZpcmEgU2FucywgRHJvaWQgU2FucywgSGVsdmV0aWNhIE5ldWUsIHNhbnMtc2VyaWY7XG4gIC0tZm9udC1kaXNwbGF5OiB2YXIoLS1mb250LWJhc2UpO1xuICAtLWZvbnQtYWNjZW50OiAnTWVubG8nLCAnU0YgTW9ubycsICdNb25hY28nLCAnSW5jb25zb2xhdGEnLCAnRmlyYSBNb25vJywgJ0Ryb2lkIFNhbnMgTW9ubycsICdTb3VyY2UgQ29kZSBQcm8nLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XG4gIC0tZm9udC13ZWlnaHQtcmVndWxhcjogNDAwO1xuICAtLWZvbnQtd2VpZ2h0LWJvbGQ6IDcwMDtcbiAgLS1saW5lLWhlaWdodC1jb21wYWN0OiAxLjI7XG4gIC0tbGluZS1oZWlnaHQtYmFzZTogMS41O1xuICAtLWxpbmUtaGVpZ2h0LWxvb3NlOiAxLjc7XG4gIC0td2lkdGgtY29tcGFjdDogMzVjaDtcbiAgLS13aWR0aC1sb25nZm9ybTogNjVjaDtcbiAgLS10cmFja2luZzogLTAuMDVjaDtcbiAgLS10cmFja2luZy1zOiAtMC4wNWNoO1xuICAvKiBcbiAgQ29sb3JzIGNyZWF0ZWQgd2l0aCBVdG9waWEgS2lja3N0YXJ0ZXIgcHJvamVjdCBcbiAgQGxpbmsgaHR0cHM6Ly93d3cuZmlnbWEuY29tL2NvbW11bml0eS9maWxlLzExMjI5MDM5MjQxMjM5NTAwMjNcbiAgKi9cbiAgLS1jb2xvci10ZXh0OiAjMUQxRDFEO1xuICAtLWNvbG9yLXRleHQtbW9kLTE6ICM0OTQ5NDk7XG4gIC0tY29sb3ItdGV4dC1tb2QtMjogIzYxNjE2MTtcbiAgLS1jb2xvci1iZzogI2ZmZmZmZjtcbiAgLS1jb2xvci1iZy1tb2QtMTojRjhGOEY4O1xuICAtLWNvbG9yLWJnLW1vZC0yOiAjRURFREVEO1xuICAtLWNvbG9yLWJvcmRlcjogIzFEMUQxRDtcbiAgLS1jb2xvci1icmFuZDogIzRmMjlmMDtcbiAgLS1jb2xvci1hY2NlbnQ6ICM5RjJDNUU7XG4gIC0tY29sb3ItaGlnaGxpZ2h0OiAjZWVmYmMxO1xuICAvKiBHcmlkICovXG4gIC0tZ3V0dGVyOiB2YXIoLS1zcGFjZS1zLW0pO1xuICAvKiBFZmZlY3RzICovXG4gIC0tYm9yZGVyLXJhZGl1czogMDtcbiAgLS1zaGFkb3c6IDBweCAzcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4wOCksIDBweCAwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wMjUpOyB9XG4gIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICA6cm9vdCB7XG4gICAgICAvKiBcbiAgICAgIElmIHRoZW1lIGRvZXNu4oCZdCByZXF1aXJlIGEgZGFyayBtb2RlIHRoZW4gcmVtb3ZlIHRoaXMgbWVkaWEgcXVlcnkgYWx0b2dldGhlclxuICAgICovXG4gICAgICAtLWNvbG9yLXRleHQ6ICNDRUQzRTg7XG4gICAgICAtLWNvbG9yLXRleHQtbW9kLTE6ICNDNENBRTM7XG4gICAgICAtLWNvbG9yLXRleHQtbW9kLTI6ICM4OTk1Qzg7XG4gICAgICAtLWNvbG9yLWJnOiAjMEQxMDFBO1xuICAgICAgLS1jb2xvci1iZy1tb2QtMTojMTIxNjI2O1xuICAgICAgLS1jb2xvci1iZy1tb2QtMjogIzIxMjg0NTtcbiAgICAgIC0tY29sb3ItYm9yZGVyOiAjQ0VEM0U4O1xuICAgICAgLS1jb2xvci1icmFuZDogI2EwOGFmZjtcbiAgICAgIC0tY29sb3ItYWNjZW50OiAjRkY3MEFFOyB9IH1cbi8qIFxuVXRvcGlhIGZsdWlkIHR5cGVcblxuQGxpbmsgaHR0cHM6Ly91dG9waWEuZnlpL3R5cGUvY2FsY3VsYXRvcj9jPTMyMCwxNiwxLjIsMTI0MCwyMCwxLjI1LDQsMSwmcz0wLjc1fDAuNXwwLjI1LDEuNXwyfDN8NHw2LHMtbCZnPXMsbCx4bCxOYU4gXG4qL1xuOnJvb3Qge1xuICAtLXN0ZXAtLTE6IGNsYW1wKDAuODNyZW0sIGNhbGMoMC43OHJlbSArIDAuMjl2dyksIDEuMDByZW0pO1xuICAtLXN0ZXAtMDogY2xhbXAoMS4wMHJlbSwgY2FsYygwLjkxcmVtICsgMC40M3Z3KSwgMS4yNXJlbSk7XG4gIC0tc3RlcC0xOiBjbGFtcCgxLjIwcmVtLCBjYWxjKDEuMDdyZW0gKyAwLjYzdncpLCAxLjU2cmVtKTtcbiAgLS1zdGVwLTI6IGNsYW1wKDEuNDRyZW0sIGNhbGMoMS4yNnJlbSArIDAuODl2dyksIDEuOTVyZW0pO1xuICAtLXN0ZXAtMzogY2xhbXAoMS43M3JlbSwgY2FsYygxLjQ4cmVtICsgMS4yNHZ3KSwgMi40NHJlbSk7XG4gIC0tc3RlcC00OiBjbGFtcCgyLjA3cmVtLCBjYWxjKDEuNzNyZW0gKyAxLjcwdncpLCAzLjA1cmVtKTsgfVxuXG4vKiBcbiogRW1icmFjZSB0aGUgY2FzY2FkZSBhbmQgaW5oZXJpdGFuY2UgdG8gXG4qIHN0eWxlIGFzIG11Y2ggYXMgcG9zc2libGUgYXQgYSBnbG9iYWwgbGV2ZWwgXG4qL1xuLyogXG5BIG1vZGVybiByZXNldFxuXG5AbGluazogaHR0cHM6Ly9waWNjYWxpbC5saS9ibG9nL2EtbW9kZXJuLWNzcy1yZXNldC8gXG4qL1xuLyogQm94IHNpemluZyBydWxlcyAqL1xuKixcbio6OmJlZm9yZSxcbio6OmFmdGVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuXG4vKiBSZW1vdmUgZGVmYXVsdCBtYXJnaW4gKi9cbmJvZHksXG5oMSxcbmgyLFxuaDMsXG5oNCxcbnAsXG5maWd1cmUsXG5ibG9ja3F1b3RlLFxuZGwsXG5kZCB7XG4gIG1hcmdpbjogMDsgfVxuXG4vKiBSZW1vdmUgbGlzdCBzdHlsZXMgb24gdWwsIG9sIGVsZW1lbnRzIHdpdGggYSBsaXN0IHJvbGUsIHdoaWNoIHN1Z2dlc3RzIGRlZmF1bHQgc3R5bGluZyB3aWxsIGJlIHJlbW92ZWQgKi9cbnVsW3JvbGU9J2xpc3QnXSxcbm9sW3JvbGU9J2xpc3QnXSB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7IH1cblxuLyogUHJldmVudCB6b29taW5nIHdoZW4gb3JpZW50YXRpb24gY2hhbmdlcyBvbiBzb21lIGlPUyBkZXZpY2VzICovXG5odG1sIHtcbiAgdGV4dC1zaXplLWFkanVzdDogbm9uZTtcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiBub25lOyB9XG5cbi8qIFNldCBjb3JlIHJvb3QgZGVmYXVsdHMgKi9cbmh0bWw6Zm9jdXMtd2l0aGluIHtcbiAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7IH1cblxuLyogU2V0IGNvcmUgYm9keSBkZWZhdWx0cyAqL1xuYm9keSB7XG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVTcGVlZDtcbiAgbGluZS1oZWlnaHQ6IDEuNTsgfVxuXG4vKiBBIGVsZW1lbnRzIHRoYXQgZG9uJ3QgaGF2ZSBhIGNsYXNzIGdldCBkZWZhdWx0IHN0eWxlcyAqL1xuYTpub3QoW2NsYXNzXSkge1xuICB0ZXh0LWRlY29yYXRpb24tc2tpcC1pbms6IGF1dG87IH1cblxuLyogTWFrZSBpbWFnZXMgZWFzaWVyIHRvIHdvcmsgd2l0aCAqL1xuaW1nLFxucGljdHVyZSB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7IH1cblxuLyogSW5oZXJpdCBmb250cyBmb3IgaW5wdXRzIGFuZCBidXR0b25zICovXG5pbnB1dCxcbmJ1dHRvbixcbnRleHRhcmVhLFxuc2VsZWN0IHtcbiAgZm9udDogaW5oZXJpdDsgfVxuXG4vKiBSZW1vdmUgYWxsIGFuaW1hdGlvbnMgYW5kIHRyYW5zaXRpb25zIGZvciBwZW9wbGUgdGhhdCBwcmVmZXIgbm90IHRvIHNlZSB0aGVtICovXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAqIHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMDFzICFpbXBvcnRhbnQ7XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMSAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFzICFpbXBvcnRhbnQ7XG4gICAgc2Nyb2xsLWJlaGF2aW9yOiBhdXRvICFpbXBvcnRhbnQ7IH0gfVxuXG4vKiBcbkdsb2JhbCBzdHlsZXMgXG5cbkxvdy1zcGVjaWZpY2l0eSwgZ2xvYmFsIHN0eWxlcyB0aGF0IGFwcGx5IHRvIHRoZSB3aG9sZSBcbnByb2plY3Q6IGh0dHBzOi8vY3ViZS5meWkvY3NzLmh0bWxcbiovXG5ib2R5IHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZyk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0wKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYmFzZSk7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS10cmFja2luZyk7IH1cblxuLyogQmFzZSB0eXBlc2V0dGluZyAqL1xuaDEsXG5oMixcbmgzIHtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tdHJhY2tpbmctcyk7IH1cblxuaDEsXG4uaDEge1xuICBmb250LXNpemU6IHZhcigtLXN0ZXAtNCk7IH1cblxuaDIsXG4uaDIge1xuICBmb250LXNpemU6IHZhcigtLXN0ZXAtMyk7IH1cblxuaDMsXG4uaDMge1xuICBmb250LXNpemU6IHZhcigtLXN0ZXAtMik7IH1cblxuaDQsXG4uaDQge1xuICBmb250LXNpemU6IHZhcigtLXN0ZXAtMSk7IH1cblxuaDUsXG4uaDUge1xuICBmb250LXNpemU6IHZhcigtLXN0ZXAtMCk7IH1cblxuaDYsXG4uaDYge1xuICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpOyB9XG5cbi8qIFNldCBsaW5lIGxlbmd0aHMgKi9cbnAsXG5saSxcbmJsb2NrcXVvdGU6bm90KFtjbGFzc10pIHtcbiAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aC1sb25nZm9ybSk7IH1cblxuaDEsXG5oMixcbmgzIHtcbiAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aC1jb21wYWN0KTsgfVxuXG5ociB7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXRvcDogMnB4IGRvdHRlZDsgfVxuXG5rYmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iZy1tb2QtMSk7XG4gIGJvcmRlcjogc29saWQgMXB4IHZhcigtLWNvbG9yLWJnLW1vZC0yKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbSk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWFjY2VudCk7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgcGFkZGluZzogLjExNXJlbSAuMjVyZW07IH1cblxuZmlnY2FwdGlvbiB7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7XG4gIG1hcmdpbi1ibG9jay1zdGFydDogLjVyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7IH1cblxuLyogTW9yZSBnZW5lcmljIGVsZW1lbnRzICovXG5ibG9ja3F1b3RlOm5vdChbY2xhc3NdKSB7XG4gIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggdmFyKC0tY29sb3ItdGV4dCk7XG4gIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1zcGFjZS1zKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0yKTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LWJhc2UpOyB9XG5cbi8qIE1hcmtkb3duIGJsb2NrcXV1b3RlOm5vdChbY2xhc3NdKXMgYXJlbid0IGlkZWFsLCBzbyB3ZSdyZSBwcmVzdW1pbmcgdGhlIHBlcnNvbiBxdW90ZWQgaXMgdGhlIGxhc3QgcCAqL1xuYmxvY2txdW90ZTpub3QoW2NsYXNzXSkgcDpsYXN0LW9mLXR5cGUsXG5ibG9ja3F1b3RlOm5vdChbY2xhc3NdKSBjaXRlIHtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYmFzZSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0xKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoLS1zcGFjZS0yeHMpOyB9XG5cbnN2ZyB7XG4gIGhlaWdodDogMmV4O1xuICB3aWR0aDogYXV0bztcbiAgZmxleDogbm9uZTsgfVxuICBzdmcgcGF0aCB7XG4gICAgZmlsbDogdmFyKC0tY29sb3ItdGV4dCk7IH1cblxuLyogUmVtb3ZlIHBhZGRpbmcgYW5kIG1hcmdpbiBvbiB1bCwgb2wgZWxlbWVudHMgd2l0aCBhIGxpc3Qgcm9sZSAqL1xuW3JvbGU9J2xpc3QnXSB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDsgfVxuXG4vKiBCYXNlIGludGVyYWN0aXZlIGVsZW1lbnRzICovXG5hIHtcbiAgY29sb3I6IGN1cnJlbnRjb2xvcjtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWJyYW5kKTsgfVxuXG5hOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYnJhbmQpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItYmcpO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cblxuLyogVXNlIG5ha2VkIHZhcmlhbnQgdG8gc3R5bGUgbGlua3MgYXMgdGV4dCovXG5hW2RhdGEtdmFyaWFudD1cIm5ha2VkXCJdIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cblxuYVtkYXRhLXZhcmlhbnQ9XCJuYWtlZFwiXTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHVuc2V0O1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfVxuXG4vKiBIaWRlIGZvY3VzIHN0eWxlcyBpZiB0aGV5J3JlIG5vdCBuZWVkZWQsIGZvciBleGFtcGxlLCBcbiB3aGVuIGFuIGVsZW1lbnQgcmVjZWl2ZXMgZm9jdXMgdmlhIHRoZSBtb3VzZS4gKi9cbjpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcbiAgb3V0bGluZTogMDsgfVxuXG4vKiBTaG93IGZvY3VzIHN0eWxlcyBvbiBrZXlib2FyZCBmb2N1cy4gKi9cbjpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogZG90dGVkIDJweCB2YXIoLS1jb2xvci10ZXh0KTtcbiAgb3V0bGluZS1vZmZzZXQ6IDNweDsgfVxuXG4vKiBBZGQgc2Nyb2xsIG1hcmdpbiB0byBhbGwgdGFyZ2V0IGVsZW1lbnRzIFxuICAqIFNlZSBodHRwczovL3BpY2NhbGlsLmxpL3F1aWNrLXRpcC9hZGQtc2Nyb2xsLW1hcmdpbi10by1hbGwtZWxlbWVudHMtd2hpY2gtY2FuLWJlLXRhcmdldGVkL1xuICovXG46dGFyZ2V0IHtcbiAgc2Nyb2xsLW1hcmdpbi10b3A6IDJleDsgfVxuXG5tYWluOmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTsgfVxuXG4vKiBBZGQgaGlnaGxpZ2h0IHN0eWxlcyAqL1xubWFyayxcbjo6c2VsZWN0aW9uIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1oaWdobGlnaHQpO1xuICAvKiBSZXZlcnNlIHRleHQgY29sb3VyIGluIGRhcmsgbW9kZSAqLyB9XG4gIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICBtYXJrLFxuICAgIDo6c2VsZWN0aW9uIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1iZyk7IH0gfVxuLyogRGVjcmVhc2UgdGhlIGJyaWdodG5lc3MgYW5kIGNvbnRyYXN0IG9mIGltYWdlcyBpbiBkYXJrIG1vZGUgKi9cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgaW1nLFxuICBwaWN0dXJlIHtcbiAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMC44KSBjb250cmFzdCgxLjIpOyB9IH1cblxuLyogXG5Gb3JtIHN0eWxlc1xuXG5EaXRjaCB0aGVzZSBzdHlsZXMgYWx0b2dldGhlciBpZiBub3QgcmVxdWlyZWQgZm9yIHRoZSB3ZWJzaXRlLlxuKi9cbmZpZWxkc2V0IHtcbiAgYm9yZGVyOiBzb2xpZCAwLjFyZW0gdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxuXG5sZWdlbmQge1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7IH1cblxubGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWJsb2NrOiB2YXIoLS1zcGFjZS0zeHMpOyB9XG5cbmZvcm0gYnV0dG9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ibG9jay1zdGFydDogdmFyKC0tc3BhY2UteHMpOyB9XG5cbmlucHV0W3R5cGU9XCJlbWFpbFwiXSxcbmlucHV0W3R5cGU9XCJudW1iZXJcIl0sXG5pbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0sXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdLFxuaW5wdXRbdHlwZT1cInRlbFwiXSxcbmlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxuaW5wdXRbdHlwZT1cInVybFwiXSxcbnRleHRhcmVhLFxuc2VsZWN0IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpO1xuICBib3gtc2hhZG93OiBub25lO1xuICBsZXR0ZXItc3BhY2luZzogLS41cHg7XG4gIGJvcmRlcjogc29saWQgMC4xcmVtIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLTN4cykgdmFyKC0tc3BhY2UtMnhzKTsgfVxuXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuc2VsZWN0IHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG4vKiBDaGV2cm9uIGZvciBzZWxlY3QgKi9cbnNlbGVjdDpub3QoW211bHRpcGxlXSkge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHRyYW5zcGFyZW50IDQ5JSwgdmFyKC0tY29sb3ItdGV4dCkgNTElKSwgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tY29sb3ItdGV4dCkgNTElLCB0cmFuc3BhcmVudCA0OSUpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKDEwMCUgLSAxNnB4KSwgY2FsYygxMDAlIC0gMTFweCk7XG4gIGJhY2tncm91bmQtc2l6ZTogNXB4IDVweCwgNXB4IDVweDtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgcGFkZGluZy1pbmxpbmUtZW5kOiAycmVtOyB9XG5cbi8qIGNoZWNrYm94IGFuZCByYWRpbyBidXR0b24gc3R5bGUgKi9cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gIGJvcmRlcjogc29saWQgMC4xcmVtIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLTJ4cyk7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IG1pbi1jb250ZW50O1xuICBtYXJnaW4taW5saW5lLXN0YXJ0OiAwO1xuICBtYXJnaW4taW5saW5lLWVuZDogLjI1cmVtO1xuICBtYXJnaW4tYmxvY2stZW5kOiAuM3JlbTsgfVxuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTsgfVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBib3JkZXItcmFkaXVzOiAxMDAlOyB9XG5cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmNoZWNrZWQge1xuICBib3JkZXI6IHNvbGlkIDAuMXJlbSB2YXIoLS1jb2xvci1icmFuZCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJyYW5kKTsgfVxuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZDo6YWZ0ZXIge1xuICAvKiBDcmVhdGVzIGEgcmVjdGFuZ2xlIHdpdGggY29sb3JlZCByaWdodCBhbmQgYm90dG9tIGJvcmRlcnMgd2hpY2ggaXMgcm90YXRlZCB0byBsb29rIGxpa2UgYSBjaGVjayBtYXJrICovXG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB3aWR0aDogLjE3ZW07XG4gIGhlaWdodDogLjMyZW07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAuMDZlbTtcbiAgbGVmdDogLjE2ZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IHNvbGlkIHZhcigtLWNvbG9yLWJnKSAwLjA3ZW07XG4gIGJvcmRlci1ib3R0b206IHNvbGlkIHZhcigtLWNvbG9yLWJnKSAwLjA3ZW07XG4gIGZvbnQtc2l6ZTogMmVtO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7IH1cblxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmNoZWNrZWQ6OmFmdGVyIHtcbiAgLyogY3JlYXRlcyBhIGNvbG9yZWQgY2lyY2xlIGZvciB0aGUgY2hlY2tlZCByYWRpbyBidXR0b24gICovXG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB3aWR0aDogLjI1ZW07XG4gIGhlaWdodDogLjI1ZW07XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAuMTNlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmcpO1xuICBsZWZ0OiAuMTNlbTtcbiAgZm9udC1zaXplOiAyZW07IH1cblxuLyogXG5Db2RlIHN0eWxlc1xuXG5Vc2VkIGZvciBpbmxpbmUgY29kZSBhbmQgY29kZSBibG9ja3NcblxuRGl0Y2ggdGhlc2Ugc3R5bGVzIGFsdG9nZXRoZXIgaWYgbm90IHJlcXVpcmVkIGZvciB0aGUgd2Vic2l0ZS5cbiovXG5wcmUge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZy1tb2QtMSk7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gIG92ZXJmbG93LXdyYXA6IG5vcm1hbDtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2UteHMtcyk7XG4gIG1hcmdpbjogMDsgfVxuXG5jb2RlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctbW9kLTEpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgZm9udC1zaXplOiA5MyU7IH1cblxucHJlIGNvZGUge1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7IH1cblxucCBjb2RlLFxubGkgY29kZSB7XG4gIHBhZGRpbmc6IC4xMjVyZW0gLjM1cmVtOyB9XG5cbi8qIFxuRGV0YWlscyBhbmQgc3VtbWFyeSBzdHlsZXNcblxuRm9ybWF0IHRoZSBleHBhbmRpbmcgYm94LCBhLmsuYSBhY2NvcmRpb24uXG5cbkRpdGNoIHRoZXNlIHN0eWxlcyBhbHRvZ2V0aGVyIGlmIG5vdCByZXF1aXJlZCBmb3IgdGhlIHdlYnNpdGUuXG4qL1xuZGV0YWlscyB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLW1vZC0xKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7IH1cblxuc3VtbWFyeSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICBwYWRkaW5nOiAuNXJlbSAxcmVtOyB9XG5cbmRldGFpbHNbb3Blbl0ge1xuICBwYWRkaW5nOiAuNXJlbSAxcmVtIC43NXJlbSAxcmVtOyB9XG5cbmRldGFpbHNbb3Blbl0gc3VtbWFyeSB7XG4gIG1hcmdpbi1ib3R0b206IC41cmVtO1xuICBwYWRkaW5nOiAwOyB9XG5cbmRldGFpbHNbb3Blbl0gPiAqOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwOyB9XG5cbi8qIFZhcmlhbnQgdG8gZW5oYW5jZSB0aGUgc3R5bGUgb2YgYWNjb3JkaW9ucyB3aXRoIGZhbmN5IGFycm93cyAqL1xuZGV0YWlsc1tkYXRhLXZhcmlhbnQ9J2ZhbmN5J10ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgZGV0YWlsc1tkYXRhLXZhcmlhbnQ9J2ZhbmN5J10gc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcixcbiAgZGV0YWlsc1tkYXRhLXZhcmlhbnQ9J2ZhbmN5J10gc3VtbWFyeTo6bWFya2VyIHtcbiAgICBjb250ZW50OiBcIlwiOyB9XG4gIGRldGFpbHNbZGF0YS12YXJpYW50PSdmYW5jeSddIHN1bW1hcnk6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1qUWlJR2hsYVdkb2REMGlNalFpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEJoZEdnZ1pEMGlUVEV5SURFMUxqTTNOVXcySURrdU16YzBPVGxNTnk0d056VWdPQzR5T1RrNU9Vd3hNaUF4TXk0eU5Vd3hOaTQ1TWpVZ09DNHpNalE1T1V3eE9DQTVMak01T1RrNVRERXlJREUxTGpNM05Wb2lJR1pwYkd3OUlpTXhSREZFTVVRaUx6NEtQQzl6ZG1jK0NnPT1cIik7XG4gICAgLyogVXNlIGxpZ2h0IGNoZXZyb24gZm9yIGRhcmttb2RlICovXG4gICAgaGVpZ2h0OiAxLjJyZW07XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAxcmVtO1xuICAgIHRvcDogMXJlbTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG4gICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgZGV0YWlsc1tkYXRhLXZhcmlhbnQ9J2ZhbmN5J10gc3VtbWFyeTphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1qUWlJR2hsYVdkb2REMGlNalFpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEJoZEdnZ1pEMGlUVEV5SURFMUxqTTNOVXcySURrdU16YzBPVGxNTnk0d056VWdPQzR5T1RrNU9Vd3hNaUF4TXk0eU5Vd3hOaTQ1TWpVZ09DNHpNalE1T1V3eE9DQTVMak01T1RrNVRERXlJREUxTGpNM05Wb2lJR1pwYkd3OUlpTkRSVVF6UlRnaUx6NEtQQzl6ZG1jK0NnPT1cIik7IH0gfVxuZGV0YWlsc1tvcGVuXVtkYXRhLXZhcmlhbnQ9J2ZhbmN5J10gc3VtbWFyeTphZnRlciB7XG4gIHRvcDogMXJlbTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cblxuLyogXG5UYWJsZSBzdHlsZXNcblxuRGl0Y2ggdGhlc2Ugc3R5bGVzIGFsdG9nZXRoZXIgaWYgbm90IHJlcXVpcmVkIGZvciB0aGUgd2Vic2l0ZS5cbiovXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDEuNXJlbSAwO1xuICBvdmVyZmxvdy14OiBzY3JvbGw7IH1cblxudGQsXG50aCB7XG4gIGJvcmRlcjogMC4xcmVtIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHBhZGRpbmc6IDAuNXJlbTsgfVxuXG50aCB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLW1vZC0xKTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxudHI6bnRoLWNoaWxkKGV2ZW4pIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctbW9kLTEpOyB9XG5cbnRhYmxlIGNhcHRpb24ge1xuICBwYWRkaW5nOiAuNXJlbTtcbiAgY2FwdGlvbi1zaWRlOiBib3R0b207IH1cblxuLypcbkJ1dHRvbiBzdHlsZXNcblxuR2xvYmFsbHkgc3R5bGUgdGhlIGJ1dHRvbiBlbGVtZW50LCBzdWJtaXQsIGJ1dHRvbiBhbmQgcmVzZXQgaW5wdXQuXG5JbmNsdWRlIHRoZSAuYnV0dG9uIGNsYXNzIGZvciBzdHlsaW5nIDxhPiB0YWdzIGFzIGJ1dHRvbnMuIFxuKi9cbmJ1dHRvbixcbi5idXR0b24sXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cImJ1dHRvblwiXSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJyYW5kKTtcbiAgYm9yZGVyOiBzb2xpZCAwLjFyZW0gdmFyKC0tY29sb3ItYnJhbmQpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWJnKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zeHMpIHZhcigtLXNwYWNlLTJ4cyk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cblxuYnV0dG9uOmhvdmVyLFxuYnV0dG9uOmZvY3VzLFxuLmJ1dHRvbjpob3Zlcixcbi5idXR0b246Zm9jdXMsXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdOmhvdmVyLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJyZXNldFwiXTpob3ZlcixcbmlucHV0W3R5cGU9XCJyZXNldFwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJidXR0b25cIl06aG92ZXJcbmlucHV0W3R5cGU9XCJidXR0b25cIl06Zm9jdXMge1xuICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4yKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOyB9XG5cbmJ1dHRvbjpkaXNhYmxlZCxcbi5idXR0b25bYXJpYS1kaXNhYmxlZD1cInRydWVcIl0sXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdOmRpc2FibGVkLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdOmRpc2FibGVkLFxuaW5wdXRbdHlwZT1cImJ1dHRvblwiXTpkaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJnLW1vZC0yKTtcbiAgYm9yZGVyOiBzb2xpZCAwLjFyZW0gdmFyKC0tY29sb3ItYmctbW9kLTIpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tb2QtMik7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIHRyYW5zZm9ybTogbm9uZTtcbiAgZmlsdGVyOiBub25lOyB9XG5cbi8qIFxuRVhDRVBUSU9OU1xuXG5PZmZlciBhIHZhcmlhbnQgYnV0dG9uIHN0eWxlXG5cbkBsaW5rIGh0dHBzOi8vY3ViZS5meWkvZXhjZXB0aW9uLmh0bWwgXG4qL1xuYnV0dG9uW2RhdGEtdmFyaWFudD0nb3V0bGluZSddLFxuLmJ1dHRvbltkYXRhLXZhcmlhbnQ9J291dGxpbmUnXSxcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl1bZGF0YS12YXJpYW50PSdvdXRsaW5lJ10sXG5pbnB1dFt0eXBlPVwicmVzZXRcIl1bZGF0YS12YXJpYW50PSdvdXRsaW5lJ10sXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCJdW2RhdGEtdmFyaWFudD0nb3V0bGluZSddIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWJyYW5kKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpO1xuICBib3JkZXI6IHNvbGlkIDAuMXJlbSB2YXIoLS1jb2xvci1icmFuZCk7IH1cblxuYnV0dG9uW2RhdGEtdmFyaWFudD0nb3V0bGluZSddOmhvdmVyLFxuLmJ1dHRvbltkYXRhLXZhcmlhbnQ9J291dGxpbmUnXTpob3ZlcixcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl1bZGF0YS12YXJpYW50PSdvdXRsaW5lJ106aG92ZXIsXG5pbnB1dFt0eXBlPVwicmVzZXRcIl1bZGF0YS12YXJpYW50PSdvdXRsaW5lJ106aG92ZXIsXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCJdW2RhdGEtdmFyaWFudD0nb3V0bGluZSddOmhvdmVyIHtcbiAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMik7XG4gIGJvcmRlcjogc29saWQgMC4xcmVtIHZhcigtLWNvbG9yLWJyYW5kKTsgfVxuXG5uYXZbZGF0YS12YXJpYW50PSdtYWluJ10gYVtkYXRhLXN0YXRlPSdhY3RpdmUnXSB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9XG5cbm5hdltkYXRhLXZhcmlhbnQ9J21haW4nXSBsaSBhIHtcbiAgZGlzcGxheTogZmxleDsgfVxuXG5uYXZbZGF0YS12YXJpYW50PSdtYWluJ10gbGkgYSBzcGFuIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLXJpZ2h0OiAuNXJlbTsgfVxuXG5uYXZbZGF0YS12YXJpYW50PSdzaWRlYmFyJ10gYVtkYXRhLXN0YXRlPSdhY3RpdmUnXSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyB9XG5cbm5hdltkYXRhLXZhcmlhbnQ9J3NpZGViYXInXSBsaSB7XG4gIG1heC13aWR0aDogdW5zZXQ7IH1cblxubmF2W2RhdGEtdmFyaWFudD0nc2lkZWJhciddIGxpW2RhdGEtY2hpbGRyZW49J3RydWUnXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG5uYXZbZGF0YS12YXJpYW50PSdzaWRlYmFyJ10gbGlbZGF0YS1jaGlsZHJlbj0ndHJ1ZSddOjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNalFpSUdobGFXZG9kRDBpTWpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2daRDBpVFRFeUlERTFMak0zTlV3MklEa3VNemMwT1RsTU55NHdOelVnT0M0eU9UazVPVXd4TWlBeE15NHlOVXd4Tmk0NU1qVWdPQzR6TWpRNU9Vd3hPQ0E1TGpNNU9UazVUREV5SURFMUxqTTNOVm9pSUdacGJHdzlJaU14UkRGRU1VUWlMejRLUEM5emRtYytDZz09XCIpO1xuICAvKiBVc2UgbGlnaHQgY2hldnJvbiBmb3IgZGFya21vZGUgKi9cbiAgaGVpZ2h0OiAxLjJyZW07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAxcmVtO1xuICB0b3A6IC42cmVtO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG4gIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICBuYXZbZGF0YS12YXJpYW50PSdzaWRlYmFyJ10gbGlbZGF0YS1jaGlsZHJlbj0ndHJ1ZSddOjpiZWZvcmUge1xuICAgICAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTWpRaUlHaGxhV2RvZEQwaU1qUWlJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnWkQwaVRURXlJREUxTGpNM05VdzJJRGt1TXpjME9UbE1OeTR3TnpVZ09DNHlPVGs1T1V3eE1pQXhNeTR5TlV3eE5pNDVNalVnT0M0ek1qUTVPVXd4T0NBNUxqTTVPVGs1VERFeUlERTFMak0zTlZvaUlHWnBiR3c5SWlORFJVUXpSVGdpTHo0S1BDOXpkbWMrQ2c9PVwiKTsgfSB9XG5uYXZbZGF0YS12YXJpYW50PSdzaWRlYmFyJ10gbGlbZGF0YS1jaGlsZHJlbj0ndHJ1ZSddW2RhdGEtc3RhdGU9J2FjdGl2ZSddOjpiZWZvcmUge1xuICB0b3A6IC4ycmVtO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuXG5uYXZbZGF0YS12YXJpYW50PSdzaWRlYmFyJ10gbGlbZGF0YS1zdGF0ZT0nYWN0aXZlJ10gKyB1bCxcbm5hdltkYXRhLXZhcmlhbnQ9J3NpZGViYXInXSB1bFtkYXRhLXN0YXRlPSd2aXNpYmxlJ10ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy1pbmxpbmU6IDFyZW07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG4gIGNsaXA6IGF1dG87IH1cblxubmF2W2RhdGEtdmFyaWFudD0nc2lkZWJhciddIHVsID4gbGkgdWwge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbi8qIFxuKiBTa2VsZXRhbCBjb21wb25lbnRzIG9yIG9yZ2FuaXNhdGlvbmFsIHN0cnVjdHVyZXMuXG4qL1xuLnNraXAtbGluayB7XG4gIGNsaXA6IHJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogMXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcHg7XG4gIHRvcDogMXJlbTtcbiAgbGVmdDogMXJlbTtcbiAgei1pbmRleDogOTk5OyB9XG5cbi5za2lwLWxpbms6Zm9jdXMge1xuICBjbGlwOiBhdXRvO1xuICBoZWlnaHQ6IGF1dG87XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICB3aWR0aDogYXV0bztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmcpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLXhzKTtcbiAgbGluZS1oZWlnaHQ6IDE7IH1cblxuLnNraXAtbGluazpub3QoOmZvY3VzKSB7XG4gIGJvcmRlcjogMDtcbiAgY2xpcDogcmVjdCgwIDAgMCAwKTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxuXG4ucHJvc2Uge1xuICAtLWZsb3ctc3BhY2U6IHZhcigtLXNwYWNlLXMtbSk7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1sb29zZSk7IH1cblxuLnByb3NlIDppcyhwLCB1bDpub3QoW2NsYXNzXSksIG9sOm5vdChbY2xhc3NdKSkge1xuICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLWxvbmdmb3JtKTsgfVxuXG4ucHJvc2UgOmlzKHByZSxwcmUrKixmaWd1cmUsZmlndXJlKyosaDIsaDMsaDQpIHtcbiAgLS1mbG93LXNwYWNlOiB2YXIoLS1zcGFjZS1sLXhsKTsgfVxuXG4ucHJvc2UgYmxvY2txdW90ZSB7XG4gIG1heC13aWR0aDogNDBjaDsgfVxuXG4vKlxuSEVST1xuKi9cbi5oZXJvIHtcbiAgLS1yZWdpb24tc3BhY2U6IDhyZW07XG4gIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudCh2YXIoLS1jb2xvci10ZXh0KSA3JSwgdHJhbnNwYXJlbnQgMjAlKSwgcmFkaWFsLWdyYWRpZW50KHZhcigtLWNvbG9yLWJnKSAyMCUsIHRyYW5zcGFyZW50IDIwJSk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJnKTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwLCA1MHB4IDUwcHg7XG4gIGJhY2tncm91bmQtc2l6ZTogM3B4IDNweDtcbiAgcGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLXMtbSk7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG4vKiBcbkVuc3VyZSBkaXJlY3QgZGVjZW5kaW5nIGVsZW1lbnRzIG1haW50YWluIGEgY29uc2lzdGVudCBmbG93IHNwYWNlIHdoZW4gaGVybyBpcyB1c2VkIHdpdGggLmZsb3cuIFxuQ2VudGVyIGFsaWduIGVsZW1lbnRzLlxuKi9cbi5oZXJvID4gKiB7XG4gIC0tZmxvdy1zcGFjZTogMXJlbTtcbiAgbWFyZ2luLWlubGluZTogYXV0bzsgfVxuXG4vKiBcbkNBTExPVVRcbiovXG4uY2FsbG91dCB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLXhzLXMpO1xuICBib3JkZXI6IGRvdHRlZCAycHggdmFyKC0tY29sb3ItdGV4dC1tb2QtMik7XG4gIG1heC13aWR0aDogdmFyKC0td2lkdGgtbG9uZ2Zvcm0pO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTsgfVxuXG4uY2FsbG91dCA+ICoge1xuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtYmFzZSk7IH1cblxuLmNhbGxvdXRbZGF0YS12YXJpYW50PSdicmFuZCddIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWJyYW5kKTtcbiAgYm9yZGVyOiBkb3R0ZWQgMnB4IHZhcigtLWNvbG9yLWJyYW5kKTsgfVxuXG4uY2FsbG91dFtkYXRhLXZhcmlhbnQ9J2JyYW5kJ10gPiAqIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWJyYW5kKTsgfVxuXG4vKlxuQ0FSRFxuXG5BIGJsb2NrIHRoYXQgc3R5bGVzIGNvbnRlbnQgYXMgYSBjYXJkLlxuTGFyZ2VseSBiYXNlZCBvbjpcbkBsaW5rOiBodHRwczovL2luY2x1c2l2ZS1jb21wb25lbnRzLmRlc2lnbi9jYXJkcy9cbkBsaW5rOiBodHRwczovL3BvcnRmb2xpby5zZXQuc3R1ZGlvL2Rlc2lnbi1zeXN0ZW0vY29tcG9uZW50L2NhcmRzL1xuKi9cbi5jYXJkIHtcbiAgLS1pbWctcmF0aW86IDMvMjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBib3JkZXI6IHNvbGlkIC4xcmVtO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTsgfVxuXG4vKiBFbnN1cmUgY29uc2lzdGVudCBoZWFkaW5nIHNpemUgcmVnYXJkbGVzcyBvZiBoZWFkaW5nIGxldmVsICovXG4uY2FyZCA6aXMoaDIsIGgzLCBoNCkge1xuICBmb250LXNpemU6IHZhcigtLXN0ZXAtMSk7IH1cblxuLyogRW5zdXJlIGNvbnNpc3RlbnQgdGV4dCBzaXplIGZvciBhbGwgbm9uLWhlYWRpbmcgZWxlbWVudHMgKi9cbi5jYXJkID4gOm5vdChoMiwgaDMsIGg0KSB7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7IH1cblxuLyogXG4gIFVzZSBIZXlkb27igJlzIHBzZXVkby1jb250ZW50IHRyaWNrIHRvIG1ha2UgdGhlIHdob2xlIGNhcmQgY2xpY2thYmxlXG4gIEBsaW5rOiBodHRwczovL2luY2x1c2l2ZS1jb21wb25lbnRzLmRlc2lnbi9jYXJkcy8jdGhlcHNldWRvY29udGVudHRyaWNrXG4gIFNlZSBhbHNvIEFuZHnigJlzIEJyZWFrb3V0IGJ1dHRvbiBcbiAgQGxpbms6IGh0dHBzOi8vcGljY2FsaWwubGkvdHV0b3JpYWwvY3JlYXRlLWEtc2VtYW50aWMtYnJlYWstb3V0LWJ1dHRvbi10by1tYWtlLWFuLWVudGlyZS1lbGVtZW50LWNsaWNrYWJsZS9cbiovXG4uY2FyZCA6aXMoaDIsIGgzLCBoNCkgPiBhOjphZnRlciB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDsgfVxuXG4vKiBSYWlzZSBhbGwgb3RoZXIgbGlua3MgYWJvdmUgdGhlIHBzZXVkby1jb250ZW50LCBzbyB0aGV5IHJlbWFpbiBjbGlja2FibGUgKi9cbi5jYXJkIHAsXG4uY2FyZCBidXR0b24sXG4uY2FyZCAuYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxOyB9XG5cbi8qIEFwcGx5IGEgYmFzaWMgZm9jdXMgc3R5bGUgdG8gdGhlIGxpbmsgc28gdGhhdCB1c2VycyBvZiBvbGRlciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IDpmb2N1cy13aXRoaW4gd2lsbCBzdGlsbCBzZWUgYSBmYWxsYmFjayBmb2N1cyBzdHlsZSAqL1xuLmNhcmQgYTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9XG5cbi8qIFVzZSA6Zm9jdXMtd2l0aGluIHRvIG1hdGNoIHRoZSA6aG92ZXIgc3R5bGUgKi9cbi5jYXJkOmZvY3VzLXdpdGhpbiB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtOyB9XG5cbi8qIFJlbW92ZSB0aGUgdW5uZWNlc3NhcnkgYmFzaWMgOmZvY3VzIHN0eWxlIG9ubHkgd2hlcmUgOmZvY3VzLXdpdGhpbiBpcyBzdXBwb3J0ZWQgKi9cbi5jYXJkOmZvY3VzLXdpdGhpbiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG5cbi8qIENyZWF0ZSBjb25zaXN0ZW50IGltYWdlIGJlaGF2aW91ciBhbmQgcmF0aW8gKi9cbi5jYXJkID4gaW1nIHtcbiAgYXNwZWN0LXJhdGlvOiB2YXIoLS1pbWctcmF0aW8pO1xuICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgd2lkdGg6IDEwMCU7IH1cblxuLyogRm9yY2UgdGhlIHRleHR1YWwgZWxlbWVudHMgdG8gdGFrZSB1cCBhbGwgdGhlIGF2YWlsYWJsZSBzcGFjZSBhbmQgcHJldmVudHMgbGluZSBsZW5ndGggZm9yIGNhcmRzIG9uIGxhcmdlIHNjcmVlbnMgbm90IHN1cHBvcnRpbmcgZ3JpZCBmcm9tIGJlY29taW5nIHRvbyBsb25nICovXG4uY2FyZCA+IGRpdiB7XG4gIC0tZmxvdy1zcGFjZTogMXJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1ncm93OiAxO1xuICBwYWRkaW5nOiAxcmVtO1xuICBtYXgtd2lkdGg6IDYwY2g7IH1cblxuLyogUHVzaCB0aGUgbGFzdCB0ZXh0dWFsIGVsZW1lbnQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgY2FyZCwgcmVnYXJkbGVzcyBvZiBpdHMgaGVpZ2h0LiAqL1xuLmNhcmQgPiBkaXYgOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiBhdXRvOyB9XG5cbi8qIEFkZCBhIGJvdHRvbSBtYXJnaW4gdG8gdGhlIHNlY29uZCBsYXN0IGVsZW1lbnQsIHRvIGVuc3VyZSBhIG1pbmltdW0gbGV2ZWwgb2Ygc2VwYXJhdGlvbiAqL1xuLmNhcmQgPiBkaXYgOm50aC1sYXN0LWNoaWxkKDIpIHtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UteHMtcyk7IH1cblxuLyogT3B0aW9uYWxseSBmbGlwIHRoZSBjYXJkIGRlc2lnblxuIEBsaW5rOiBodHRwczovL2N1YmUuZnlpL2V4Y2VwdGlvbi5odG1sIFxuKi9cbi5jYXJkW2RhdGEtc3RhdGU9J3JldmVyc2VkJ10ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7IH1cblxuLyogXG4qIEhpZ2ggbGV2ZWwsIGZsZXhpYmxlIGxheW91dHMgdGhhdCBwcm92aWRlIGEgXG4qIHNrZWxldG9uIHRvIHN1cHBvcnQgYW55IHZhcmlhbnQgb2YgYSBjb21wb25lbnRcbiovXG4vKiBcbkFVVE8gR1JJRFxuUmVsYXRlZCBFdmVyeSBMYXlvdXQ6IGh0dHBzOi8vZXZlcnktbGF5b3V0LmRldi9sYXlvdXRzL2dyaWQvXG5Nb3JlIGluZm8gb24gdGhlIGZsZXhpYmxlIG5hdHVyZTogaHR0cHM6Ly9waWNjYWxpbC5saS90dXRvcmlhbC9jcmVhdGUtYS1yZXNwb25zaXZlLWdyaWQtbGF5b3V0LXdpdGgtbm8tbWVkaWEtcXVlcmllcy11c2luZy1jc3MtZ3JpZC9cbkEgZmxleGlibGUgbGF5b3V0IHRoYXQgd2lsbCBjcmVhdGUgYW4gYXV0by1maWxsIGdyaWQgd2l0aFxuY29uZmlndXJhYmxlIGdyaWQgaXRlbSBzaXplcy5cblxuQ1VTVE9NIFBST1BFUlRJRVMgQU5EIENPTkZJR1VSQVRJT05cbi0tZ3V0dGVyICh2YXIoLS1zcGFjZS1zLW0pKTogVGhpcyBkZWZpbmVzIHRoZSBzcGFjZVxuYmV0d2VlbiBlYWNoIGl0ZW0uXG5cbi0tZ3JpZC1taW4taXRlbS1zaXplICgxNHJlbSk6IEhvdyBsYXJnZSBlYWNoIGl0ZW0gc2hvdWxkIGJlXG5pZGVhbGx5LCBhcyBhIG1pbmltdW0uXG5cbi0tZ3JpZC1wbGFjZW1lbnQgKGF1dG8tZmlsbCk6IFNldCBlaXRoZXIgYXV0by1maXQgb3IgYXV0by1maWxsXG50byBjaGFuZ2UgaG93IGVtcHR5IGdyaWQgdHJhY2tzIGFyZSBoYW5kbGVkLiBcbiovXG4uZ3JpZCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KHZhcigtLWdyaWQtcGxhY2VtZW50LCBhdXRvLWZpbGwpLCBtaW5tYXgodmFyKC0tZ3JpZC1taW4taXRlbS1zaXplLCAxNnJlbSksIDFmcikpO1xuICBnYXA6IHZhcigtLWd1dHRlciwgdmFyKC0tc3BhY2Utcy1sKSk7IH1cblxuLyogXG5FWENFUFRJT05TXG4gIFxuQGxpbmsgaHR0cHM6Ly9jdWJlLmZ5aS9leGNlcHRpb24uaHRtbCBcbiovXG4vKiBNYXNvbnJ5IGxheW91dCAod2lsbCB3b3JrIG9uZSBkYXkgaW4gYWxsIGJyb3dzZXJzKSAqL1xuLmdyaWRbZGF0YS1yb3dzPSdtYXNvbnJ5J10ge1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IG1hc29ucnk7XG4gIGFsaWduLWl0ZW1zOiBzdGFydDsgfVxuXG4vKiBUd28gY29sdW1uIHdoZW4gc3BhY2UgcGVybWl0cyAqL1xuLmdyaWRbZGF0YS1sYXlvdXQ9JzUwLTUwJ10ge1xuICAtLWdyaWQtcGxhY2VtZW50OiBhdXRvLWZpdDtcbiAgLS1ncmlkLW1pbi1pdGVtLXNpemU6IGNsYW1wKDE2cmVtLCA1MHZ3LCAyNnJlbSk7IH1cblxuLyogVGhyZWUgY29sdW1uIHdoZW4gc3BhY2UgcGVybWl0cyAqL1xuLmdyaWRbZGF0YS1sYXlvdXQ9JzMzeDMnXSB7XG4gIC0tZ3JpZC1wbGFjZW1lbnQ6IGF1dG8tZml0O1xuICAtLWdyaWQtbWluLWl0ZW0tc2l6ZTogY2xhbXAoMTZyZW0sIDMzJSwgMThyZW0pOyB9XG5cbi8qXG5SRVBFTFxuQSBsaXR0bGUgbGF5b3V0IHRoYXQgcHVzaGVzIGl0ZW1zIGF3YXkgZnJvbSBlYWNoIG90aGVyIHdoZXJlXG50aGVyZSBpcyBzcGFjZSBpbiB0aGUgdmlld3BvcnQgYW5kIHN0YWNrcyBvbiBzbWFsbCB2aWV3cG9ydHNcblxuQ1VTVE9NIFBST1BFUlRJRVMgQU5EIENPTkZJR1VSQVRJT05cbi0tZ3V0dGVyICh2YXIoLS1zcGFjZS1zLW0pKTogVGhpcyBkZWZpbmVzIHRoZSBzcGFjZVxuYmV0d2VlbiBlYWNoIGl0ZW0uXG4tLXJlcGVsLXZlcnRpY2FsLWFsaWdubWVudCBIb3cgaXRlbXMgc2hvdWxkIGFsaWduIHZlcnRpY2FsbHkuXG5DYW4gYmUgYW55IGFjY2VwdGFibGUgZmxleGJveCBhbGlnbm1lbnQgdmFsdWUuXG4qL1xuLnJlcGVsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiB2YXIoLS1yZXBlbC12ZXJ0aWNhbC1hbGlnbm1lbnQsIGNlbnRlcik7XG4gIGdhcDogdmFyKC0tZ3V0dGVyLCB2YXIoLS1zcGFjZS1zLWwpKTsgfVxuXG4ucmVwZWxbZGF0YS1ub3dyYXBdIHtcbiAgZmxleC13cmFwOiBub3dyYXA7IH1cblxuLypcbkNMVVNURVJcbk1vcmUgaW5mbzogaHR0cHM6Ly9ldmVyeS1sYXlvdXQuZGV2L2xheW91dHMvY2x1c3Rlci9cbkEgbGF5b3V0IHRoYXQgbGV0cyB5b3UgZGlzdHJpYnV0ZSBpdGVtcyB3aXRoIGNvbnNpdGVudFxuc3BhY2luZywgcmVnYXJkbGVzcyBvZiB0aGVpciBzaXplXG5cbkNVU1RPTSBQUk9QRVJUSUVTIEFORCBDT05GSUdVUkFUSU9OXG4tLWd1dHRlciAoJGdsb2JhbC1ndXR0ZXIpOiBUaGlzIGRlZmluZXMgdGhlIHNwYWNlXG5iZXR3ZWVuIGVhY2ggaXRlbS5cblxuLS1jbHVzdGVyLWhvcml6b250YWwtYWxpZ25tZW50IChmbGV4LXN0YXJ0KSBIb3cgaXRlbXMgc2hvdWxkIGFsaWduXG5ob3Jpem9udGFsbHkuIENhbiBiZSBhbnkgYWNjZXB0YWJsZSBmbGV4Ym94IGFsaWdtbmVudCB2YWx1ZS5cblxuLS1jbHVzdGVyLXZlcnRpY2FsLWFsaWdubWVudCBIb3cgaXRlbXMgc2hvdWxkIGFsaWduIHZlcnRpY2FsbHkuXG5DYW4gYmUgYW55IGFjY2VwdGFibGUgZmxleGJveCBhbGlnbm1lbnQgdmFsdWUuXG4qL1xuLmNsdXN0ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogdmFyKC0tZ3V0dGVyLCB2YXIoLS1zcGFjZS1zaXplLTEpKTtcbiAganVzdGlmeS1jb250ZW50OiB2YXIoLS1jbHVzdGVyLWhvcml6b250YWwtYWxpZ25tZW50LCBmbGV4LXN0YXJ0KTtcbiAgYWxpZ24taXRlbXM6IHZhcigtLWNsdXN0ZXItdmVydGljYWwtYWxpZ25tZW50LCBjZW50ZXIpOyB9XG5cbi8qIFxuU0lERUJBUlxuTW9yZSBpbmZvOiBodHRwczovL2V2ZXJ5LWxheW91dC5kZXYvbGF5b3V0cy9zaWRlYmFyL1xuQSBsYXlvdXQgdGhhdCBhbGxvd3MgeW91IHRvIGhhdmUgYSBmbGV4aWJsZSBtYWluIGNvbnRlbnQgYXJlYVxuYW5kIGEgXCJmaXhlZFwiIHdpZHRoIHNpZGViYXIgdGhhdCBzaXRzIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LlxuSWYgdGhlcmUgaXMgbm90IGVub3VnaCB2aWV3cG9ydCBzcGFjZSB0byBmaXQgYm90aCB0aGUgc2lkZWJhclxud2lkdGggKmFuZCogdGhlIG1haW4gY29udGVudCBtaW5pbXVtIHdpZHRoLCB0aGV5IHdpbGwgc3RhY2tcbm9uIHRvcCBvZiBlYWNoIG90aGVyXG5cbkNVU1RPTSBQUk9QRVJUSUVTIEFORCBDT05GSUdVUkFUSU9OXG4tLWd1dHRlciAodmFyKC0tc3BhY2Utc2l6ZS0xKSk6IFRoaXMgZGVmaW5lcyB0aGUgc3BhY2VcbmJldHdlZW4gdGhlIHNpZGViYXIgYW5kIG1haW4gY29udGVudC5cblxuLS1zaWRlYmFyLXRhcmdldC13aWR0aCAoMjByZW0pOiBIb3cgbGFyZ2UgdGhlIHNpZGViYXIgc2hvdWxkIGJlXG5cbi0tc2lkZWJhci1jb250ZW50LW1pbi13aWR0aCg1MCUpOiBUaGUgbWluaW11bSBzaXplIG9mIHRoZSBtYWluIGNvbnRlbnQgYXJlYVxuXG5FWENFUFRJT05TXG4uc2lkZWJhcltkYXRhLWRpcmVjdGlvbj0ncnRsJ106IGZsaXBzIHRoZSBzaWRlYmFyIHRvIGJlIG9uIHRoZSByaWdodCBcbiovXG4uc2lkZWJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgZ2FwOiB2YXIoLS1ndXR0ZXIsIHZhcigtLXNwYWNlLXMtbCkpOyB9XG5cbi5zaWRlYmFyOm5vdChbZGF0YS1kaXJlY3Rpb25dKSA+IDpmaXJzdC1jaGlsZCB7XG4gIGZsZXgtYmFzaXM6IHZhcigtLXNpZGViYXItdGFyZ2V0LXdpZHRoLCAyMHJlbSk7XG4gIGZsZXgtZ3JvdzogMTsgfVxuXG4uc2lkZWJhcjpub3QoW2RhdGEtZGlyZWN0aW9uXSkgPiA6bGFzdC1jaGlsZCB7XG4gIGZsZXgtYmFzaXM6IDA7XG4gIGZsZXgtZ3JvdzogOTk5O1xuICBtaW4td2lkdGg6IHZhcigtLXNpZGViYXItY29udGVudC1taW4td2lkdGgsIDUwJSk7IH1cblxuLyogXG5BIGZsaXBwZWQgdmVyc2lvbiB3aGVyZSB0aGUgc2lkZWJhciBpcyBvbiB0aGUgcmlnaHRcbiovXG4uc2lkZWJhcltkYXRhLWRpcmVjdGlvbj0ncnRsJ10gPiA6bGFzdC1jaGlsZCB7XG4gIGZsZXgtYmFzaXM6IHZhcigtLXNpZGViYXItdGFyZ2V0LXdpZHRoLCAyMHJlbSk7XG4gIGZsZXgtZ3JvdzogMTsgfVxuXG4uc2lkZWJhcltkYXRhLWRpcmVjdGlvbj0ncnRsJ10gPiA6Zmlyc3QtY2hpbGQge1xuICBmbGV4LWJhc2lzOiAwO1xuICBmbGV4LWdyb3c6IDk5OTtcbiAgbWluLXdpZHRoOiB2YXIoLS1zaWRlYmFyLWNvbnRlbnQtbWluLXdpZHRoLCA1MCUpOyB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDk2MHB4KSB7XG4gIC5zaWRlYmFyW2RhdGEtdmFyaWFudD0nc3RpY2t5J10gPiA6Zmlyc3QtY2hpbGQge1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgdG9wOiAycmVtO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIGhlaWdodDogMTAwdmg7IH0gfVxuXG4vKiBcbiogQ2xhc3NlcyB0aGF0IGRvIG9uZSBqb2IgYW5kIG9uZSBqb2Igd2VsbCBcbiovXG4vKiBcblZJU1VBTExZIEhJRERFTlxuSW5mbzogaHR0cHM6Ly9waWNjYWxpbC5saS9xdWljay10aXAvdmlzdWFsbHktaGlkZGVuLyBcbiovXG4udmlzdWFsbHktaGlkZGVuIHtcbiAgYm9yZGVyOiAwO1xuICBjbGlwOiByZWN0KDAgMCAwIDApO1xuICBoZWlnaHQ6IGF1dG87XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwOyB9XG5cbi8qXG5GTE9XXG5BcHBsaWVzIGEgbWFyZ2luIHRvIHNpYmxpbmcgZWxlbWVudHMgYmFzZWQgb24gYSAtLWZsb3ctc3BhY2UgY3VzdG9tIHByb3BlcnR5LlxuQGxpbms6IFNlZSBUaGUgU3RhY2sgaW4gRXZlcnkgTGF5b3V0IGh0dHBzOi8vZXZlcnktbGF5b3V0LmRldi9sYXlvdXRzL3N0YWNrL1xuQGxpbms6IGh0dHBzOi8vcGljY2FsaWwubGkvdHV0b3JpYWwvaW1wcm92ZS10aGUtcmVhZGFiaWxpdHktb2YtdGhlLWNvbnRlbnQtb24teW91ci13ZWJzaXRlI2hlYWRpbmctdGhlLWZsb3ctdXRpbGl0eVxuQGxpbms6IGh0dHBzOi8vcGljY2FsaWwubGkvcXVpY2stdGlwL2Zsb3ctdXRpbGl0eS9cbiovXG4uZmxvdyA+ICogKyAqIHtcbiAgbWFyZ2luLXRvcDogdmFyKC0tZmxvdy1zcGFjZSwgMWVtKTsgfVxuXG4vKlxuUkVHSU9OIFxuQWRkIGNvbnNpc3RlbnQgdmVydGljYWwgcGFkZGluZyB0byBjcmVhdGUgcmVnaW9ucyBvZiBjb250ZW50IFxuQ2FuIGVpdGhlciBiZSBjb25maWd1cmVkIGJ5IHNldHRpbmcgLS1yZWdpb24tc3BhY2Ugb3IgdXNlIGEgZGVmYXVsdCBmcm9tIHRoZSBzcGFjZSBzY2FsZVxuKi9cbi5yZWdpb24ge1xuICBwYWRkaW5nLXRvcDogdmFyKC0tcmVnaW9uLXNwYWNlLCB2YXIoLS1zcGFjZS1sLXhsKSk7XG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1yZWdpb24tc3BhY2UsIHZhcigtLXNwYWNlLWwteGwpKTsgfVxuXG4vKlxuV1JBUFBFUlxuU2V0cyBhIG1heCB3aWR0aCwgYWRkcyBhIGNvbnNpc3RlbnQgZ3V0dGVyIGFuZCBob3Jpem9udGFsbHlcbmNlbnRlcnMgdGhlIGNvbnRlbnRzXG5AbGluazogaHR0cHM6Ly9waWNjYWxpbC5saS9xdWljay10aXAvdXNlLWNzcy1jbGFtcC10by1jcmVhdGUtYS1tb3JlLWZsZXhpYmxlLXdyYXBwZXItdXRpbGl0eS9cbiovXG4ud3JhcHBlciB7XG4gIG1heC13aWR0aDogdmFyKC0td3JhcHBlci1tYXgtd2lkdGgsIDkwcmVtKTtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1ndXR0ZXIpO1xuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1ndXR0ZXIpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cblxuLnctZnVsbCB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IHVuc2V0OyB9XG5cbi50ZXh0LWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuIl19 */