.text-accent {
  color: #1f6fb3;
}

.theme-switcher {
  margin-left: 10px;
}

/**
* Template Name: Strategy
* Template URL: https://bootstrapmade.com/strategy-bootstrap-agency-template/
* Updated: Jun 06 2025 with Bootstrap v5.3.6
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
*/

/*--------------------------------------------------------------
# Font & Color Variables
# Help: https://bootstrapmade.com/color-system/
--------------------------------------------------------------*/
/* Fonts */
:root {
  --default-font:
    'Roboto', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans',
    'Liberation Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
    'Noto Color Emoji';
  --heading-font: 'Nunito Sans', sans-serif;
  --nav-font: 'Raleway', sans-serif;
}

/* Global Colors - Light Theme (Default) */
:root {
  --background-color: #ffffff;
  --default-color: #333333;
  --heading-color: #000000;
  --accent-color: #3396d3;
  --surface-color: #f8f9fa;
  --contrast-color: #ffffff;
}

/* Dark Theme */
body.dark-mode {
  --background-color: #031119;
  --default-color: rgba(255, 255, 255, 0.8);
  --heading-color: #e0e9f2;
  --accent-color: #3396d3;
  --surface-color: #1b262c;
  --contrast-color: #ffffff;
}

/* Dark Mode Text Color Overrides - Fix hardcoded light text colors */
body.dark-mode {
  color: #e0e0e0 !important;
}

body.dark-mode h1,
body.dark-mode h2,
body.dark-mode h3,
body.dark-mode h4,
body.dark-mode h5,
body.dark-mode h6,
body.dark-mode .h1,
body.dark-mode .h2,
body.dark-mode .h3,
body.dark-mode .h4,
body.dark-mode .h5,
body.dark-mode .h6 {
  color: #e0e9f2 !important;
}

body.dark-mode p,
body.dark-mode span,
body.dark-mode
  div:not(.navbar):not(.nav):not(.menu):not(.dropdown):not(.btn):not(.badge):not(.card):not(
    .modal
  ):not(.toast):not([class*='icon']):not([class*='bi-']):not([class*='fa-']):not([style*='color']) {
  color: #e0e0e0 !important;
}

body.dark-mode a:not(.btn):not(.navbar-brand):not(.nav-link):not(.dropdown-item) {
  color: #6db3f2 !important;
}

body.dark-mode [style*='color: #1a1a1a'],
body.dark-mode [style*='color:#1a1a1a'],
body.dark-mode [style*='color: #333'],
body.dark-mode [style*='color:#333'],
body.dark-mode [style*='color: #666'],
body.dark-mode [style*='color:#666'] {
  color: #e0e0e0 !important;
}

/* Dark Mode Element Overrides */
body.dark-mode section.about,
body.dark-mode .about.section,
body.dark-mode section[class*='about'] {
  background-color: var(--background-color) !important;
}

body.dark-mode .about-card,
body.dark-mode div.about-card {
  background-color: var(--surface-color) !important;
  color: var(--default-color) !important;
}

body.dark-mode .service-card,
body.dark-mode div.service-card,
body.dark-mode .services .service-card,
body.dark-mode .services div.service-card {
  background-color: var(--surface-color) !important;
  border-color: rgba(255, 255, 255, 0.1) !important;
}

body.dark-mode .service-card h3 a,
body.dark-mode .services .service-card h3 a {
  color: var(--heading-color) !important;
}

body.dark-mode .service-card p,
body.dark-mode .services .service-card p {
  color: var(--default-color) !important;
}

body.dark-mode .portfolio,
body.dark-mode .portfolio-section,
body.dark-mode section.portfolio {
  background-color: var(--background-color) !important;
}

body.dark-mode .portfolio-card,
body.dark-mode .portfolio-card .card,
body.dark-mode .portfolio-card.card {
  background-color: var(--surface-color) !important;
  color: var(--default-color) !important;
}

body.dark-mode .portfolio-card h3 a,
body.dark-mode .portfolio-card h3 a span {
  color: var(--heading-color) !important;
}

body.dark-mode .portfolio-card p {
  color: var(--default-color) !important;
}

body.dark-mode .market-product-card,
body.dark-mode .market-product-card .card,
body.dark-mode .market-product-card.card {
  background-color: var(--surface-color) !important;
  color: var(--default-color) !important;
}

body.dark-mode .market-product-card h3 a,
body.dark-mode .market-product-card h5 a {
  color: var(--heading-color) !important;
}

body.dark-mode .market-product-card p {
  color: var(--default-color) !important;
}

body.dark-mode .section,
body.dark-mode section,
body.dark-mode [class*='section'] {
  background-color: var(--background-color) !important;
}

body.dark-mode .section.bg-light,
body.dark-mode section.bg-light,
body.dark-mode .light-background {
  background-color: var(--surface-color) !important;
}

body.dark-mode .card {
  background-color: var(--surface-color) !important;
  color: var(--default-color) !important;
  border-color: rgba(255, 255, 255, 0.1) !important;
}

body.dark-mode .btn-outline-primary {
  border-color: var(--accent-color);
  color: var(--accent-color);
}

body.dark-mode .btn-outline-primary:hover {
  background-color: var(--accent-color);
  color: var(--contrast-color);
}

body.dark-mode .form-control {
  background-color: var(--surface-color);
  border-color: rgba(255, 255, 255, 0.2);
  color: var(--default-color);
}

body.dark-mode .form-control:focus {
  background-color: var(--surface-color);
  border-color: var(--accent-color);
  color: var(--default-color);
}

body.dark-mode input::placeholder,
body.dark-mode textarea::placeholder {
  color: rgba(255, 255, 255, 0.5);
}

body.dark-mode .modal-content {
  background-color: var(--surface-color);
  color: var(--default-color);
}

body.dark-mode .modal-header {
  border-bottom-color: rgba(255, 255, 255, 0.1);
}

body.dark-mode .modal-footer {
  border-top-color: rgba(255, 255, 255, 0.1);
}

body.dark-mode .table {
  color: var(--default-color);
}

body.dark-mode .table-striped > tbody > tr:nth-of-type(odd) {
  --bs-table-accent-bg: rgba(255, 255, 255, 0.05);
}

body.dark-mode .footer {
  background-color: #060606;
  color: rgba(255, 255, 255, 0.8);
}

/* Nav Menu Colors - The following color variables are used specifically for the navigation menu. They are separate from the global colors to allow for more customization options */
:root {
  --nav-color: rgba(255, 255, 255, 0.8);
  --nav-hover-color: #3396d3;
  --nav-mobile-background-color: #29343a;
  --nav-dropdown-background-color: #29343a;
  --nav-dropdown-color: rgba(255, 255, 255, 0.8);
  --nav-dropdown-hover-color: #3396d3;
}

/* Color Presets - These classes override global colors when applied to any section or element, providing reuse of the sam color scheme. */

.light-background {
  --background-color: #0d1d26;
  --surface-color: #16262f;
}

.dark-background {
  --background-color: #060606;
  --default-color: #ffffff;
  --heading-color: #ffffff;
  --surface-color: #252525;
  --contrast-color: #ffffff;
}

/* Smooth scroll */
:root {
  scroll-behavior: smooth;
}

/*--------------------------------------------------------------
# General Styling & Shared Classes
--------------------------------------------------------------*/
body {
  color: var(--default-color);
  background-color: var(--background-color);
  font-family: var(--default-font);
}

a {
  color: var(--accent-color);
  text-decoration: none;
  transition: 0.3s;
}

a:hover {
  color: color-mix(in srgb, var(--accent-color), transparent 25%);
  text-decoration: none;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  color: var(--heading-color);
  font-family: var(--heading-font);
}

/* PHP Email Form Messages
------------------------------*/
.php-email-form .error-message {
  display: none;
  background: #df1529;
  color: #ffffff;
  text-align: left;
  padding: 15px;
  margin-bottom: 24px;
  font-weight: 600;
}

.php-email-form .sent-message {
  display: none;
  color: #ffffff;
  background: #059652;
  text-align: center;
  padding: 15px;
  margin-bottom: 24px;
  font-weight: 600;
}

.php-email-form .loading {
  display: none;
  background: var(--surface-color);
  text-align: center;
  padding: 15px;
  margin-bottom: 24px;
}

.php-email-form .loading:before {
  content: '';
  display: inline-block;
  border-radius: 50%;
  width: 24px;
  height: 24px;
  margin: 0 10px -6px 0;
  border: 3px solid var(--accent-color);
  border-top-color: var(--surface-color);
  animation: php-email-form-loading 1s linear infinite;
}

@keyframes php-email-form-loading {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

/*--------------------------------------------------------------
# Global Header
--------------------------------------------------------------*/
.header {
  background: #000; /* black background like your logo */
  padding: 10px 0;
  z-index: 1000;
}

.logo {
  color: #fff;
  font-family: Georgia, 'Times New Roman', serif;
}

.logo-square {
  width: 40px;
  height: 40px;
  margin-right: 6px;
}

.brand-text {
  font-size: 26px;
  font-family: Georgia, 'Times New Roman', serif;
  color: #fff;
  letter-spacing: 0.5px;
}

/* Optional hover effect */
.logo:hover .brand-text {
  color: #1f6fb3;
}

/* Make nav links white and tidy */
.navmenu ul {
  list-style: none;
  display: flex;
  gap: 20px;
  margin: 0;
  padding: 0;
}

.navmenu a {
  color: #fff;
  text-decoration: none;
  font-weight: 500;
}

.navmenu a:hover,
.navmenu a.active {
  color: #1f6fb3;
}

/* Responsive: hide nav links for small screens */
@media (max-width: 991px) {
  .navmenu ul {
    display: none;
  }
  .mobile-nav-toggle {
    display: block;
    color: #fff;
    font-size: 28px;
  }
}
/*--------------------------------------------------------------
# Navigation Menu
--------------------------------------------------------------*/
/* Navmenu - Desktop */
@media (min-width: 1200px) {
  .navmenu {
    padding: 0;
  }

  .navmenu ul {
    margin: 0;
    padding: 0;
    display: flex;
    list-style: none;
    align-items: center;
  }

  .navmenu li {
    position: relative;
  }

  .navmenu a,
  .navmenu a:focus {
    color: var(--nav-color);
    padding: 18px 15px;
    font-size: 16px;
    font-family: var(--nav-font);
    font-weight: 400;
    display: flex;
    align-items: center;
    justify-content: space-between;
    white-space: nowrap;
    transition: 0.3s;
  }

  .navmenu a i,
  .navmenu a:focus i {
    font-size: 12px;
    line-height: 0;
    margin-left: 5px;
    transition: 0.3s;
  }

  .navmenu li:last-child a {
    padding-right: 0;
  }

  .navmenu li:hover > a,
  .navmenu .active,
  .navmenu .active:focus {
    color: var(--nav-hover-color);
  }

  .navmenu .dropdown ul {
    margin: 0;
    padding: 10px 0;
    background: var(--nav-dropdown-background-color);
    display: block;
    position: absolute;
    visibility: hidden;
    left: 14px;
    top: 130%;
    opacity: 0;
    transition: 0.3s;
    border-radius: 4px;
    z-index: 99;
    box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.1);
  }

  .navmenu .dropdown ul li {
    min-width: 200px;
  }

  .navmenu .dropdown ul a {
    padding: 10px 20px;
    font-size: 15px;
    text-transform: none;
    color: var(--nav-dropdown-color);
  }

  .navmenu .dropdown ul a i {
    font-size: 12px;
  }

  .navmenu .dropdown ul a:hover,
  .navmenu .dropdown ul .active:hover,
  .navmenu .dropdown ul li:hover > a {
    color: var(--nav-dropdown-hover-color);
  }

  .navmenu .dropdown:hover > ul {
    opacity: 1;
    top: 100%;
    visibility: visible;
  }

  .navmenu .dropdown .dropdown ul {
    top: 0;
    left: -90%;
    visibility: hidden;
  }

  .navmenu .dropdown .dropdown:hover > ul {
    opacity: 1;
    top: 0;
    left: -100%;
    visibility: visible;
  }
}

/* Navmenu - Mobile */
@media (max-width: 1199px) {
  .mobile-nav-toggle {
    color: var(--nav-color);
    font-size: 28px;
    line-height: 0;
    margin-right: 10px;
    cursor: pointer;
    transition: color 0.3s;
  }

  .navmenu {
    padding: 0;
    z-index: 9997;
  }

  .navmenu ul {
    display: none;
    list-style: none;
    position: absolute;
    inset: 60px 20px 20px 20px;
    padding: 10px 0;
    margin: 0;
    border-radius: 6px;
    background-color: var(--nav-mobile-background-color);
    overflow-y: auto;
    transition: 0.3s;
    z-index: 9998;
    box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.1);
  }

  .navmenu a,
  .navmenu a:focus {
    color: var(--nav-dropdown-color);
    padding: 10px 20px;
    font-family: var(--nav-font);
    font-size: 17px;
    font-weight: 500;
    display: flex;
    align-items: center;
    justify-content: space-between;
    white-space: nowrap;
    transition: 0.3s;
  }

  .navmenu a i,
  .navmenu a:focus i {
    font-size: 12px;
    line-height: 0;
    margin-left: 5px;
    width: 30px;
    height: 30px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    transition: 0.3s;
    background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
  }

  .navmenu a i:hover,
  .navmenu a:focus i:hover {
    background-color: var(--accent-color);
    color: var(--contrast-color);
  }

  .navmenu a:hover,
  .navmenu .active,
  .navmenu .active:focus {
    color: var(--nav-dropdown-hover-color);
  }

  .navmenu .active i,
  .navmenu .active:focus i {
    background-color: var(--accent-color);
    color: var(--contrast-color);
    transform: rotate(180deg);
  }

  .navmenu .dropdown ul {
    position: static;
    display: none;
    z-index: 99;
    padding: 10px 0;
    margin: 10px 20px;
    background-color: var(--nav-dropdown-background-color);
    border: 1px solid color-mix(in srgb, var(--default-color), transparent 90%);
    box-shadow: none;
    transition: all 0.5s ease-in-out;
  }

  .navmenu .dropdown ul ul {
    background-color: rgba(33, 37, 41, 0.1);
  }

  .navmenu .dropdown > .dropdown-active {
    display: block;
    background-color: rgba(33, 37, 41, 0.03);
  }

  .mobile-nav-active {
    overflow: hidden;
  }

  .mobile-nav-active .mobile-nav-toggle {
    color: #fff;
    position: absolute;
    font-size: 32px;
    top: 15px;
    right: 15px;
    margin-right: 0;
    z-index: 9999;
  }

  .mobile-nav-active .navmenu {
    position: fixed;
    overflow: hidden;
    inset: 0;
    background: rgba(33, 37, 41, 0.8);
    transition: 0.3s;
  }

  .mobile-nav-active .navmenu > ul {
    display: block;
  }

  .mobile-nav-active .navmenu .btn {
    display: inline-block;
    margin: 10px 20px;
  }

  .mobile-nav-active .navmenu .theme-switcher {
    display: inline-block;
    margin: 10px 20px;
  }
}

/*--------------------------------------------------------------
# Global Footer
--------------------------------------------------------------*/
.footer {
  color: #fff;
  background-color: #1a1a1a;
  font-size: 14px;
  padding-bottom: 50px;
  position: relative;
}

.footer .footer-top {
  padding-top: 50px;
  border-top: 1px solid color-mix(in srgb, var(--default-color), transparent 90%);
}

.footer .footer-about .logo {
  line-height: 1;
  margin-bottom: 25px;
}

.footer .footer-about .logo img {
  max-height: 40px;
  margin-right: 6px;
}

.footer .footer-about .logo span {
  color: var(--heading-color);
  font-size: 30px;
  font-weight: 700;
  letter-spacing: 1px;
  font-family: var(--heading-font);
}

.footer .footer-about p {
  font-size: 14px;
  font-family: var(--heading-font);
}

.footer .social-links a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--default-color), transparent 50%);
  font-size: 16px;
  color: color-mix(in srgb, var(--default-color), transparent 50%);
  margin-right: 10px;
  transition: 0.3s;
}

.footer .social-links a:hover {
  color: var(--accent-color);
  border-color: var(--accent-color);
}

.footer h4 {
  font-size: 16px;
  font-weight: bold;
  position: relative;
  padding-bottom: 12px;
}

.footer .footer-links {
  margin-bottom: 30px;
}

.footer .footer-links ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.footer .footer-links ul i {
  padding-right: 2px;
  font-size: 12px;
  line-height: 0;
}

.footer .footer-links ul li {
  padding: 10px 0;
  display: flex;
  align-items: center;
}

.footer .footer-links ul li:first-child {
  padding-top: 0;
}

.footer .footer-links ul a {
  color: color-mix(in srgb, var(--default-color), transparent 20%);
  display: inline-block;
  line-height: 1;
}

.footer .footer-links ul a:hover {
  color: var(--accent-color);
}

.footer .footer-contact p {
  margin-bottom: 5px;
}

.footer .copyright {
  padding-top: 25px;
  padding-bottom: 25px;
  background-color: color-mix(in srgb, var(--default-color), transparent 95%);
}

.footer .copyright p {
  margin-bottom: 0;
}

.footer .credits {
  margin-top: 6px;
  font-size: 13px;
}

/*--------------------------------------------------------------
# Preloader
--------------------------------------------------------------*/
#preloader {
  position: fixed;
  inset: 0;
  z-index: 999999;
  overflow: hidden;
  background: var(--background-color);
  transition: all 0.6s ease-out;
}

#preloader:before {
  content: '';
  position: fixed;
  top: calc(50% - 30px);
  left: calc(50% - 30px);
  border: 6px solid #ffffff;
  border-color: var(--accent-color) transparent var(--accent-color) transparent;
  border-radius: 50%;
  width: 60px;
  height: 60px;
  animation: animate-preloader 1.5s linear infinite;
}

@keyframes animate-preloader {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

/*--------------------------------------------------------------
# Scroll Top Button
--------------------------------------------------------------*/
.scroll-top {
  position: fixed;
  visibility: hidden;
  opacity: 0;
  right: 15px;
  bottom: -15px;
  z-index: 99999;
  background-color: var(--accent-color);
  width: 44px;
  height: 44px;
  border-radius: 50px;
  transition: all 0.4s;
}

.scroll-top i {
  font-size: 24px;
  color: var(--contrast-color);
  line-height: 0;
}

.scroll-top:hover {
  background-color: color-mix(in srgb, var(--accent-color), transparent 20%);
  color: var(--contrast-color);
}

.scroll-top.active {
  visibility: visible;
  opacity: 1;
  bottom: 15px;
}

/*--------------------------------------------------------------
# Disable aos animation delay on mobile devices
--------------------------------------------------------------*/
@media screen and (max-width: 768px) {
  [data-aos-delay] {
    transition-delay: 0 !important;
  }
}

/*--------------------------------------------------------------
# Global Page Titles & Breadcrumbs
--------------------------------------------------------------*/
.page-title {
  color: var(--default-color);
  background-color: var(--background-color);
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  padding: 160px 0 80px 0;
  text-align: center;
  position: relative;
}

.page-title::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-image: repeating-linear-gradient(
    45deg,
    rgba(255, 255, 255, 0.02) 0px,
    rgba(255, 255, 255, 0.05) 1px,
    transparent 1px,
    transparent 10px
  );
  z-index: 1;
}

.page-title h1 {
  font-size: 42px;
  font-weight: 700;
  margin-bottom: 10px;
}

.page-title .breadcrumbs ol {
  display: flex;
  flex-wrap: wrap;
  list-style: none;
  justify-content: center;
  padding: 0;
  margin: 0;
  font-size: 16px;
  font-weight: 400;
}

.page-title .breadcrumbs ol li + li {
  padding-left: 10px;
}

.page-title .breadcrumbs ol li + li::before {
  content: '/';
  display: inline-block;
  padding-right: 10px;
  color: color-mix(in srgb, var(--default-color), transparent 50%);
}

/*--------------------------------------------------------------
# Global Sections
--------------------------------------------------------------*/
section,
.section {
  color: var(--default-color);
  background-color: var(--background-color);
  padding: 60px 0;
  scroll-margin-top: 90px;
  overflow: clip;
}

@media (max-width: 1199px) {
  section,
  .section {
    scroll-margin-top: 66px;
  }
}

/*--------------------------------------------------------------
# Global Section Titles
--------------------------------------------------------------*/
.section-title {
  padding-bottom: 60px;
  position: relative;
}

.section-title h2 {
  font-size: 14px;
  font-weight: 500;
  padding: 0;
  line-height: 1px;
  margin: 0;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  color: color-mix(in srgb, var(--default-color), transparent 50%);
  position: relative;
}

.section-title h2::after {
  content: '';
  width: 120px;
  height: 1px;
  display: inline-block;
  background: var(--accent-color);
  margin: 4px 10px;
}

.section-title div {
  color: var(--heading-color);
  margin: 0;
  margin: 0;
  font-size: 28px;
  font-weight: 700;
  text-transform: uppercase;
  font-family: var(--heading-font);
}

/*--------------------------------------------------------------
# Hero Section
--------------------------------------------------------------*/
.hero {
  position: relative;
  min-height: 100vh;
  width: 100%;
  display: flex;
  align-items: center;
  overflow: hidden;
  padding: 100px 0;
}

.hero h1 {
  color: var(--heading-color);
}

.hero p {
  color: var(--default-color);
}

.dark-mode .hero h1 {
  color: var(--contrast-color);
}

.dark-mode .hero p {
  color: var(--default-color);
}

.hero::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-image: repeating-linear-gradient(
    45deg,
    rgba(255, 255, 255, 0.02) 0px,
    rgba(255, 255, 255, 0.05) 1px,
    transparent 1px,
    transparent 10px
  );
  z-index: 1;
}

.hero .container,
.hero .container-fluid {
  position: relative;
  z-index: 2;
}

.hero .content-col {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding-right: 3rem;
}

@media (max-width: 991px) {
  .hero .content-col {
    padding-right: 15px;
    margin-bottom: 3rem;
  }
}

.hero .agency-name {
  margin-bottom: 1.5rem;
}

.hero .agency-name h5 {
  font-size: 1.25rem;
  font-weight: 600;
  letter-spacing: 1px;
  color: var(--contrast-color);
  margin: 0;
}

.hero .main-heading {
  margin-bottom: 2rem;
}

.hero .main-heading h1 {
  font-size: 5rem;
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -1px;
  margin: 0;
}

@media (max-width: 1200px) {
  .hero .main-heading h1 {
    font-size: 4rem;
  }
}

@media (max-width: 767px) {
  .hero .main-heading h1 {
    font-size: 3rem;
  }
}

@media (max-width: 480px) {
  .hero .main-heading h1 {
    font-size: 2.5rem;
  }
}

.hero .divider {
  width: 60%;
  height: 1px;
  background-color: color-mix(in srgb, var(--default-color), transparent 85%);
  margin-bottom: 2rem;
}

@media (max-width: 767px) {
  .hero .divider {
    width: 100%;
  }
}

.hero .description {
  margin-bottom: 2.5rem;
}

.hero .description p {
  font-size: 1rem;
  line-height: 1.7;
  color: color-mix(in srgb, var(--default-color), transparent 20%);
  margin: 0;
}

.hero .cta-button .btn {
  display: inline-flex;
  align-items: center;
  background-color: transparent;
  border: 1px solid color-mix(in srgb, var(--default-color), transparent 40%);
  color: var(--default-color);
  padding: 0.75rem 1.5rem;
  border-radius: 50px;
  font-size: 0.9rem;
  font-weight: 600;
  letter-spacing: 1px;
  transition: all 0.3s ease;
}

.hero .cta-button .btn span {
  margin-right: 0.5rem;
}

.hero .cta-button .btn i {
  font-size: 1.2rem;
  transition: transform 0.3s ease;
}

.hero .cta-button .btn:hover {
  background-color: var(--accent-color);
  border-color: var(--accent-color);
  color: var(--contrast-color);
}

.hero .cta-button .btn:hover i {
  transform: translateX(5px);
}

.hero .visual-content {
  position: relative;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

@media (max-width: 991px) {
  .hero .visual-content {
    flex-direction: column;
  }
}

.hero .fluid-shape {
  position: relative;
  width: 100%;
  margin: 0 auto;
}

.hero .fluid-shape .fluid-img {
  width: 100%;
  height: auto;
  animation: float 6s ease-in-out infinite;
}

@keyframes float {
  0% {
    transform: translateY(0px);
  }

  50% {
    transform: translateY(-15px);
  }

  100% {
    transform: translateY(0px);
  }
}

.hero .stats-card {
  position: absolute;
  bottom: 10%;
  right: 0;
  background-color: color-mix(in srgb, var(--surface-color), transparent 50%);
  backdrop-filter: blur(10px);
  border: 1px solid color-mix(in srgb, var(--default-color), transparent 90%);
  border-radius: 10px;
  padding: 1.5rem;
  width: 200px;
  display: flex;
  flex-direction: column;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
}

@media (max-width: 991px) {
  .hero .stats-card {
    position: relative;
    bottom: auto;
    right: auto;
    margin-top: 2rem;
    width: 90%;
  }
}

.hero .stats-card .stats-number h2 {
  font-size: 3rem;
  font-weight: 700;
  margin: 0;
  line-height: 1;
}

.hero .stats-card .stats-label {
  margin-top: 0.5rem;
}

.hero .stats-card .stats-label p {
  font-size: 0.9rem;
  margin: 0;
}

.hero .stats-card .stats-arrow {
  position: absolute;
  top: 1.5rem;
  right: 1.5rem;
}

.hero .stats-card .stats-arrow a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  background-color: var(--accent-color);
  border-radius: 50%;
  color: var(--contrast-color);
  font-size: 1rem;
  transition: all 0.3s ease;
}

.hero .stats-card .stats-arrow a:hover {
  transform: translateY(-3px);
  background-color: color-mix(in srgb, var(--accent-color), transparent 20%);
}

/*--------------------------------------------------------------
# About Section
--------------------------------------------------------------*/
.about {
  padding-top: 60px;
  padding-bottom: 60px;
}

.about .about-image {
  border-radius: 8px;
  overflow: hidden;
}

.about .about-image .experience-badge {
  position: absolute;
  bottom: 30px;
  right: -30px;
  background: var(--accent-color);
  color: var(--contrast-color);
  padding: 1.5rem;
  border-radius: 8px;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
  text-align: center;
  min-width: 140px;
}

.about .about-image .experience-badge .years {
  font-size: 2.5rem;
  font-weight: 700;
  line-height: 1;
  display: block;
  margin-bottom: 5px;
}

.about .about-image .experience-badge .text {
  font-size: 0.9rem;
  text-transform: uppercase;
  letter-spacing: 1px;
}

@media (max-width: 768px) {
  .about .about-image .experience-badge {
    right: 0;
    bottom: 20px;
    padding: 1rem;
    min-width: 120px;
  }

  .about .about-image .experience-badge .years {
    font-size: 2rem;
  }
}

.about .about-content h2 {
  font-size: 2.2rem;
  margin-bottom: 1.25rem;
  font-weight: 700;
}

@media (max-width: 768px) {
  .about .about-content h2 {
    font-size: 1.8rem;
  }
}

.about .about-content .lead {
  font-size: 1.15rem;
  margin-bottom: 1.25rem;
  color: color-mix(in srgb, var(--heading-color), transparent 30%);
}

.about .about-content p {
  margin-bottom: 1rem;
}

.about .about-content .feature-item {
  padding: 1.25rem;
  background-color: var(--surface-color);
  border-radius: 8px;
  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
  height: 100%;
  transition: all 0.3s ease;
}

.about .about-content .feature-item:hover {
  transform: translateY(-5px);
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
}

.about .about-content .feature-item i {
  font-size: 1.75rem;
  color: var(--accent-color);
  margin-bottom: 0.75rem;
  display: block;
}

.about .about-content .feature-item h5 {
  font-size: 1.15rem;
  margin-bottom: 0.75rem;
  font-weight: 600;
}

.about .about-content .feature-item p {
  font-size: 0.9rem;
  margin-bottom: 0;
}

.about .about-content .btn-primary {
  background-color: var(--accent-color);
  border-color: var(--accent-color);
  padding: 0.5rem 1.5rem;
  border-radius: 50px;
  font-weight: 500;
  color: var(--contrast-color);
}

.about .about-content .btn-primary:hover {
  background-color: color-mix(in srgb, var(--accent-color), black 10%);
  border-color: color-mix(in srgb, var(--accent-color), black 10%);
}

.about .testimonial-section {
  border-top: 1px solid rgba(0, 0, 0, 0.08);
}

.about .testimonial-section .testimonial-intro h3 {
  font-size: 1.75rem;
  margin-bottom: 1.25rem;
  font-weight: 700;
}

.about .testimonial-section .testimonial-intro p {
  margin-bottom: 1.5rem;
}

.about .testimonial-section .testimonial-intro .swiper-nav-buttons {
  display: flex;
  gap: 10px;
}

.about .testimonial-section .testimonial-intro .swiper-nav-buttons button {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background-color: var(--surface-color);
  border: 1px solid rgba(0, 0, 0, 0.08);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all 0.3s ease;
}

.about .testimonial-section .testimonial-intro .swiper-nav-buttons button:hover {
  background-color: var(--accent-color);
  border-color: var(--accent-color);
  color: var(--contrast-color);
}

.about .testimonial-section .testimonial-intro .swiper-nav-buttons button i {
  font-size: 1.25rem;
}

.about .testimonial-section .testimonial-slider {
  overflow: hidden;
}

.about .testimonial-section .testimonial-slider .swiper-wrapper {
  height: auto !important;
}

.about .testimonial-section .testimonial-item {
  background-color: var(--surface-color);
  border-radius: 10px;
  padding: 2rem;
  box-shadow: 0 5px 30px rgba(0, 0, 0, 0.05);
  height: 100%;
}

.about .testimonial-section .testimonial-item .rating {
  color: #ffc107;
  font-size: 1rem;
}

.about .testimonial-section .testimonial-item p {
  font-style: italic;
  margin-bottom: 0;
  font-size: 1rem;
  line-height: 1.6;
}

.about .testimonial-section .testimonial-item .client-info .client-img {
  width: 50px;
  height: 50px;
  border-radius: 50%;
  margin-right: 15px;
  object-fit: cover;
}

.about .testimonial-section .testimonial-item .client-info h6 {
  font-weight: 600;
}

.about .testimonial-section .testimonial-item .client-info span {
  font-size: 0.85rem;
  color: color-mix(in srgb, var(--default-color), transparent 40%);
}

/*--------------------------------------------------------------
# Services Section
--------------------------------------------------------------*/
.services .service-header {
  margin-bottom: 60px;
}

.services .service-header .service-intro .service-heading {
  font-size: 48px;
  margin-bottom: 0;
  font-weight: 700;
  line-height: 1.2;
  color: var(--heading-color);
}

.services .service-header .service-intro .service-heading div {
  display: block;
  position: relative;
}

.services .service-header .service-intro .service-heading span {
  display: block;
  color: var(--accent-color);
}

@media (max-width: 992px) {
  .services .service-header .service-intro .service-heading {
    font-size: 36px;
  }
}

@media (max-width: 768px) {
  .services .service-header .service-intro .service-heading {
    font-size: 30px;
    margin-bottom: 20px;
  }
}

.services .service-header .service-summary p {
  margin-bottom: 25px;
  color: var(--default-color);
}

.services .service-header .service-summary .service-btn {
  display: inline-flex;
  align-items: center;
  padding: 12px 30px;
  background-color: var(--accent-color);
  color: var(--contrast-color);
  border-radius: 4px;
  font-weight: 500;
  transition: all 0.3s ease;
}

.services .service-header .service-summary .service-btn i {
  margin-left: 10px;
  transition: transform 0.3s ease;
}

.services .service-header .service-summary .service-btn:hover {
  background-color: color-mix(in srgb, var(--accent-color), transparent 15%);
  color: var(--contrast-color);
}

.services .service-header .service-summary .service-btn:hover i {
  transform: translateX(5px);
}

@media (max-width: 992px) {
  .services .service-header .service-summary {
    margin-top: 30px;
  }
}

.services .service-card {
  padding: 40px 40px 40px 40px;
  margin-bottom: 30px;
  border: 2px solid color-mix(in srgb, var(--default-color), transparent 90%);
  transition: all 0.3s ease;
}

.services .service-card .service-icon {
  margin-bottom: 25px;
  background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 10px;
  width: 64px;
  height: 64px;
}

.services .service-card .service-icon i {
  font-size: 32px;
  color: var(--accent-color);
  transition: all 0.3s ease;
}

.services .service-card h3 {
  font-size: 28px;
  margin-bottom: 15px;
  font-weight: 700;
}

.services .service-card h3 a {
  color: var(--heading-color);
  transition: color 0.3s ease;
}

.services .service-card h3 a span {
  display: block;
}

.services .service-card h3 a:hover {
  color: var(--accent-color);
}

.services .service-card p {
  color: var(--default-color);
  transition: color 0.3s ease;
  margin-bottom: 0;
}

.services .service-card .card-action {
  position: absolute;
  top: 0;
  right: 0;
  width: 80px;
  height: 80px;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: var(--accent-color);
  opacity: 0;
  visibility: hidden;
  transform: translateY(20px);
  transition: all 0.3s ease;
}

.services .service-card .card-action i {
  font-size: 24px;
  color: var(--contrast-color);
  transition: transform 0.3s ease;
}

.services .service-card .card-action:hover i {
  transform: rotate(45deg);
}

.services .service-card::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: var(--surface-color);
  clip-path: polygon(70% 0, 100% 30%, 100% 100%, 0 100%, 0 0);
  z-index: -1;
  opacity: 0;
  visibility: hidden;
  transition: all 0.3s ease;
}

.services .service-card:hover {
  border-color: transparent;
}

.services .service-card:hover::before {
  opacity: 1;
  visibility: visible;
  background-color: var(--surface-color);
}

.services .service-card:hover h3 a {
  color: var(--accent-color);
}

.services .service-card:hover h3 a:hover {
  color: var(--accent-color);
}

.services .service-card:hover p {
  color: color-mix(in srgb, var(--default-color), transparent 20%);
}

.services .service-card:hover .card-action {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

.services .service-card:hover .service-icon i {
  transform: scale(1.1);
}

@media (max-width: 768px) {
  .services .service-card {
    padding: 150px 25px 25px;
  }

  .services .service-card h3 {
    font-size: 24px;
  }

  .services .service-card .service-icon {
    position: absolute;
    top: 40px;
    left: 25px;
  }
}

@media (max-width: 768px) {
  .services {
    padding: 70px 0 50px;
  }
}

/*--------------------------------------------------------------
# Steps Section
--------------------------------------------------------------*/
.steps .steps-wrapper {
  position: relative;
  padding: 20px 0;
}

.steps .steps-wrapper::before {
  content: '';
  position: absolute;
  width: 2px;
  background-color: color-mix(in srgb, var(--accent-color), transparent 85%);
  top: 0;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
}

.steps .step-item {
  margin-bottom: 50px;
  width: 100%;
  position: relative;
}

.steps .step-item:last-child {
  margin-bottom: 0;
}

.steps .step-item:nth-child(even) .step-content {
  flex-direction: row-reverse;
}

.steps .step-content {
  display: flex;
  align-items: center;
  gap: 30px;
}

.steps .step-icon {
  flex-shrink: 0;
  width: 80px;
  height: 80px;
  background-color: var(--surface-color);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  z-index: 1;
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
  border: 2px solid color-mix(in srgb, var(--accent-color), transparent 85%);
  transition: all 0.3s ease-in-out;
}

.steps .step-icon i {
  font-size: 32px;
  color: var(--accent-color);
  transition: transform 0.3s ease-in-out;
}

.steps .step-info {
  flex: 1;
  background-color: var(--surface-color);
  padding: 30px;
  border-radius: 8px;
  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.05);
  transition: transform 0.3s ease-in-out;
}

.steps .step-info:hover {
  transform: translateY(-5px);
}

.steps .step-number {
  display: inline-block;
  font-family: var(--heading-font);
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--accent-color);
  text-transform: uppercase;
  letter-spacing: 1px;
  margin-bottom: 10px;
}

.steps h3 {
  font-size: 1.3rem;
  margin-bottom: 15px;
  font-weight: 600;
  color: var(--heading-color);
}

.steps p {
  color: color-mix(in srgb, var(--default-color), transparent 20%);
  font-size: 1rem;
  line-height: 1.6;
  margin-bottom: 0;
}

@media (max-width: 991px) {
  .steps .steps-wrapper::before {
    left: 25px;
  }

  .steps .step-item .step-content {
    flex-direction: row !important;
  }

  .steps .step-icon {
    width: 60px;
    height: 60px;
  }

  .steps .step-icon i {
    font-size: 24px;
  }

  .steps .step-info {
    padding: 20px;
  }

  .steps h3 {
    font-size: 1.3rem;
  }
}

@media (max-width: 767px) {
  .steps .step-content {
    gap: 20px;
  }

  .steps .step-icon {
    width: 50px;
    height: 50px;
  }

  .steps .step-icon i {
    font-size: 20px;
  }

  .steps .step-info {
    padding: 15px;
  }

  .steps h3 {
    font-size: 1.2rem;
  }

  .steps p {
    font-size: 0.95rem;
  }
}

/*--------------------------------------------------------------
# Call To Action Section
--------------------------------------------------------------*/
.call-to-action {
  padding-top: 80px;
  position: relative;
  background-color: color-mix(in srgb, var(--accent-color), transparent 97%);
  border-radius: 1rem;
  overflow: hidden;
  padding-bottom: 80px;
}

.call-to-action .badge {
  background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
  color: var(--accent-color);
  padding: 0.5rem 1rem;
  font-size: 0.875rem;
  font-weight: 500;
  border-radius: 2rem;
}

.call-to-action h2 {
  font-size: clamp(1.75rem, 3vw, 2.5rem);
  font-weight: 700;
  line-height: 1.2;
  margin: 0;
}

.call-to-action p {
  font-size: 1.125rem;
  line-height: 1.6;
  opacity: 0.9;
}

.call-to-action .features .feature-item {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.5rem 1rem;
  background-color: var(--surface-color);
  border-radius: 0.5rem;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
  transition: transform 0.3s ease;
}

.call-to-action .features .feature-item:hover {
  transform: translateY(-2px);
}

.call-to-action .features .feature-item i {
  color: var(--accent-color);
  font-size: 1.25rem;
}

.call-to-action .features .feature-item span {
  font-weight: 500;
}

.call-to-action .cta-buttons .btn {
  padding: 0.75rem 1.5rem;
  font-weight: 500;
  border-radius: 0.5rem;
  transition: all 0.3s ease;
}

.call-to-action .cta-buttons .btn.btn-primary {
  background-color: var(--accent-color);
  border-color: var(--accent-color);
  color: var(--contrast-color);
}

.call-to-action .cta-buttons .btn.btn-primary:hover {
  background-color: color-mix(in srgb, var(--accent-color), transparent 15%);
  border-color: color-mix(in srgb, var(--accent-color), transparent 15%);
  transform: translateY(-2px);
}

.call-to-action .cta-buttons .btn.btn-outline {
  border: 2px solid color-mix(in srgb, var(--accent-color), transparent 70%);
  color: var(--accent-color);
}

.call-to-action .cta-buttons .btn.btn-outline:hover {
  background-color: var(--accent-color);
  border-color: var(--accent-color);
  color: var(--contrast-color);
  transform: translateY(-2px);
}

.call-to-action .content-right {
  flex-shrink: 0;
  max-width: 100%;
  width: 450px;
}

.call-to-action .content-right img {
  width: 100%;
  height: auto;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
}

.call-to-action .content-right .floating-card {
  position: absolute;
  bottom: 2rem;
  right: -1rem;
  background: var(--surface-color);
  padding: 1rem;
  border-radius: 1rem;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
  display: flex;
  align-items: center;
  gap: 1rem;
  animation: float 3s ease-in-out infinite;
}

.call-to-action .content-right .floating-card .card-icon {
  width: 3rem;
  height: 3rem;
  background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
  border-radius: 0.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
}

.call-to-action .content-right .floating-card .card-icon i {
  color: var(--accent-color);
  font-size: 1.5rem;
}

.call-to-action .content-right .floating-card .card-content {
  display: flex;
  flex-direction: column;
}

.call-to-action .content-right .floating-card .card-content .stats-number {
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--accent-color);
}

.call-to-action .content-right .floating-card .card-content .stats-text {
  font-size: 0.875rem;
  opacity: 0.8;
}

.call-to-action .decoration {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 0;
}

.call-to-action .decoration .circle-1,
.call-to-action .decoration .circle-2 {
  position: absolute;
  border-radius: 50%;
  background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
}

.call-to-action .decoration .circle-1 {
  width: 300px;
  height: 300px;
  top: -150px;
  right: -150px;
  opacity: 0.5;
}

.call-to-action .decoration .circle-2 {
  width: 200px;
  height: 200px;
  bottom: -100px;
  left: -100px;
  opacity: 0.3;
}

@media (max-width: 991.98px) {
  .call-to-action {
    padding: 2rem;
  }

  .call-to-action .content-right {
    width: 100%;
    margin-top: 2rem;
  }

  .call-to-action .content-right .floating-card {
    position: relative;
    bottom: auto;
    right: auto;
    margin-top: -3rem;
    margin-right: 1rem;
    z-index: 1;
  }
}

@keyframes float {
  0%,
  100% {
    transform: translateY(0);
  }

  50% {
    transform: translateY(-10px);
  }
}

/*--------------------------------------------------------------
# Testimonials Section
--------------------------------------------------------------*/
.testimonials .testimonials-slider {
  width: 100%;
  position: relative;
  padding-bottom: 60px;
}

.testimonials .swiper-wrapper {
  height: auto;
}

.testimonials .testimonial-item {
  background-color: var(--surface-color);
  padding: 40px;
  border-radius: 20px;
}

@media (max-width: 575px) {
  .testimonials .testimonial-item {
    padding: 20px;
  }
}

.testimonials .testimonial-item h2 {
  font-size: 24px;
  font-weight: 600;
  margin-bottom: 20px;
}

.testimonials .testimonial-item p {
  font-size: 16px;
  line-height: 1.8;
  margin-bottom: 30px;
  font-style: italic;
}

.testimonials .testimonial-item .profile {
  gap: 15px;
}

.testimonials .testimonial-item .profile .profile-img {
  width: 60px;
  height: 60px;
  border-radius: 50%;
  object-fit: cover;
}

.testimonials .testimonial-item .profile .profile-info h3 {
  font-size: 18px;
  margin: 0;
  font-weight: 600;
}

.testimonials .testimonial-item .profile .profile-info span {
  font-size: 14px;
  color: color-mix(in srgb, var(--default-color) 70%, transparent);
}

.testimonials .testimonial-item .featured-img-wrapper {
  min-height: 400px;
  position: relative;
  overflow: hidden;
  border-radius: 16px;
}

.testimonials .testimonial-item .featured-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  position: absolute;
  top: 0;
  left: 0;
}

.testimonials .swiper-navigation {
  position: absolute;
  bottom: 0;
  gap: 10px;
}

.testimonials .swiper-button-prev,
.testimonials .swiper-button-next {
  position: relative;
  left: auto;
  right: auto;
  top: auto;
  margin: 0;
  width: 44px;
  height: 44px;
  background-color: var(--surface-color);
  border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--default-color) 10%, transparent);
  transition: 0.3s;
}

.testimonials .swiper-button-prev::after,
.testimonials .swiper-button-next::after {
  font-size: 20px;
  color: var(--default-color);
}

.testimonials .swiper-button-prev:hover,
.testimonials .swiper-button-next:hover {
  background-color: var(--accent-color);
  border-color: var(--accent-color);
}

.testimonials .swiper-button-prev:hover::after,
.testimonials .swiper-button-next:hover::after {
  color: var(--contrast-color);
}

/*--------------------------------------------------------------
# Portfolio Section
--------------------------------------------------------------*/
.portfolio .portfolio-filters {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 15px;
  padding: 0;
  margin: 0 0 40px;
  list-style: none;
}

.portfolio .portfolio-filters li {
  font-size: 15px;
  font-weight: 500;
  padding: 12px 25px;
  cursor: pointer;
  background: var(--surface-color);
  color: var(--default-color);
  border-radius: 30px;
  display: flex;
  align-items: center;
  gap: 8px;
  transition: all 0.3s ease;
}

.portfolio .portfolio-filters li i {
  font-size: 1.1em;
  transition: transform 0.3s ease;
}

.portfolio .portfolio-filters li:hover {
  color: var(--accent-color);
  transform: translateY(-2px);
  background: color-mix(in srgb, var(--accent-color), transparent 92%);
}

.portfolio .portfolio-filters li:hover i {
  transform: scale(1.1);
}

.portfolio .portfolio-filters li.filter-active {
  background: var(--accent-color);
  color: var(--contrast-color);
}

@media (max-width: 768px) {
  .portfolio .portfolio-filters {
    gap: 10px;
  }

  .portfolio .portfolio-filters li {
    padding: 8px 20px;
    font-size: 14px;
  }
}

@media (max-width: 767px) {
  .portfolio .portfolio-filters {
    flex-wrap: nowrap;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    -ms-overflow-style: none;
    scrollbar-width: none;
  }

  .portfolio .portfolio-filters::-webkit-scrollbar {
    display: none;
  }
}

.portfolio .portfolio-entry {
  position: relative;
  border-radius: 16px;
  overflow: hidden;
  background: var(--surface-color);
  box-shadow: 0 4px 30px rgba(0, 0, 0, 0.05);
}

.portfolio .portfolio-entry .entry-image {
  position: relative;
  margin: 0;
  overflow: hidden;
  aspect-ratio: 16/9;
}

.portfolio .portfolio-entry .entry-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}

.portfolio .portfolio-entry .entry-image .entry-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 0%, rgba(0, 0, 0, 0.8) 100%);
  display: flex;
  align-items: flex-end;
  padding: 30px;
  opacity: 0;
  transform: translateY(20px);
  transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.portfolio .portfolio-entry .entry-image .overlay-content {
  width: 100%;
  transform: translateY(20px);
  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.portfolio .portfolio-entry .entry-image .entry-overlay .entry-meta {
  color: var(--accent-color);
  font-size: 14px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 1px;
  margin-bottom: 10px;
}

.portfolio .portfolio-entry .entry-image .entry-overlay .entry-title {
  color: var(--contrast-color);
  font-size: 24px;
  font-weight: 600;
  margin: 0 0 20px;
}

.portfolio .portfolio-entry .entry-image .entry-overlay .entry-links {
  display: flex;
  gap: 15px;
}

.portfolio .portfolio-entry .entry-image .entry-overlay .entry-links a {
  width: 46px;
  height: 46px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--surface-color);
  color: var(--accent-color);
  border-radius: 12px;
  font-size: 20px;
  transition: all 0.3s ease;
  opacity: 0;
  transform: translateY(20px);
}

.portfolio .portfolio-entry .entry-image .entry-overlay .entry-links a:hover {
  background: var(--accent-color);
  color: var(--contrast-color);
  transform: translateY(-2px);
}

.portfolio .portfolio-entry .entry-image .entry-overlay .entry-links a:nth-child(1) {
  transition-delay: 0.1s;
}

.portfolio .portfolio-entry .entry-image .entry-overlay .entry-links a:nth-child(2) {
  transition-delay: 0.2s;
}

.portfolio .portfolio-entry:hover .entry-image img {
  transform: scale(1.05);
}

.portfolio .portfolio-entry:hover .entry-image .entry-overlay {
  opacity: 1;
  transform: translateY(0);
}

.portfolio .portfolio-entry:hover .entry-image .overlay-content {
  transform: translateY(0);
}

.portfolio .portfolio-entry:hover .entry-image .entry-overlay .entry-links a {
  opacity: 1;
  transform: translateY(0);
}

@media (max-width: 768px) {
  .portfolio .portfolio-entry .entry-image .entry-overlay {
    padding: 20px;
  }

  .portfolio .portfolio-entry .entry-image .entry-overlay .entry-title {
    font-size: 20px;
    margin-bottom: 15px;
  }

  .portfolio .portfolio-entry .entry-image .entry-overlay .entry-links a {
    width: 40px;
    height: 40px;
    font-size: 18px;
  }
}

.portfolio .portfolio-item .entry-image {
  aspect-ratio: 4/3;
}

@media (min-width: 1200px) {
  .portfolio .portfolio-item .entry-title {
    font-size: 20px;
  }
}

@media (min-width: 768px) {
  .portfolio .row {
    margin-left: -10px;
    margin-right: -10px;
  }

  .portfolio .row .portfolio-item {
    padding-left: 10px;
    padding-right: 10px;
  }
}

@media (min-width: 992px) {
  .portfolio .row {
    margin-left: -12px;
    margin-right: -12px;
  }

  .portfolio .row .portfolio-item {
    padding-left: 12px;
    padding-right: 12px;
  }
}

@media (min-width: 1200px) {
  .portfolio .row {
    margin-left: -15px;
    margin-right: -15px;
  }

  .portfolio .row .portfolio-item {
    padding-left: 15px;
    padding-right: 15px;
  }
}

@media (min-width: 1200px) {
  .portfolio .entry-overlay {
    padding: 25px;
  }
}

@media (min-width: 992px) and (max-width: 1199px) {
  .portfolio .entry-overlay {
    padding: 20px;
  }
}

@media (max-width: 991px) {
  .portfolio .entry-overlay {
    padding: 20px;
  }
}

/*--------------------------------------------------------------
# Team Section
--------------------------------------------------------------*/
.team .team-member {
  position: relative;
  background-color: var(--surface-color);
  border: 1px solid color-mix(in srgb, var(--default-color), transparent 90%);
  border-radius: 8px;
  transition: 0.3s;
}

.team .team-member:hover {
  border-color: color-mix(in srgb, var(--accent-color), transparent 70%);
}

.team .team-member .member-img {
  flex: 0 0 200px;
  overflow: hidden;
}

.team .team-member .member-img img {
  width: 200px;
  height: 100%;
  object-fit: cover;
  border-top-left-radius: 8px;
  border-bottom-left-radius: 8px;
}

.team .team-member .member-info {
  padding: 25px;
  text-align: left;
}

.team .team-member .member-info h4 {
  font-size: 1.2rem;
  font-weight: 700;
  margin-bottom: 5px;
  color: var(--heading-color);
}

.team .team-member .member-info span {
  font-size: 0.9rem;
  font-weight: 400;
  color: color-mix(in srgb, var(--heading-color), transparent 30%);
  display: block;
  margin-bottom: 15px;
}

.team .team-member .member-info p {
  font-size: 0.9rem;
  margin-bottom: 20px;
  color: color-mix(in srgb, var(--default-color), transparent 20%);
}

.team .team-member .member-info .social {
  display: flex;
  gap: 10px;
}

.team .team-member .member-info .social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  font-size: 1rem;
  color: var(--heading-color);
  transition: 0.3s;
  border-radius: 4px;
  border: 1px solid color-mix(in srgb, var(--default-color), transparent 90%);
}

.team .team-member .member-info .social a:hover {
  color: var(--accent-color);
  border-color: var(--accent-color);
  background: color-mix(in srgb, var(--accent-color), transparent 95%);
}

@media (max-width: 767px) {
  .team .team-member {
    flex-direction: column;
  }

  .team .team-member .member-img {
    flex: auto;
  }

  .team .team-member .member-img img {
    width: 100%;
    border-radius: 8px 8px 0 0;
  }

  .team .team-member .member-info {
    text-align: center;
  }

  .team .team-member .member-info .social {
    justify-content: center;
  }
}

/*--------------------------------------------------------------
# Pricing Section
--------------------------------------------------------------*/
.pricing {
  --card-border-radius: 20px;
}

.pricing .row {
  justify-content: center;
}

.pricing .pricing-card {
  height: 100%;
  background: var(--surface-color);
  border-radius: var(--card-border-radius);
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);
  overflow: hidden;
  position: relative;
  transition: all 0.4s;
  margin-bottom: 30px;
  display: flex;
  flex-direction: column;
  border: 1px solid color-mix(in srgb, var(--default-color), transparent 90%);
}

.pricing .pricing-card:hover {
  transform: translateY(-10px);
  box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);
}

.pricing .pricing-card.popular {
  border: 2px solid var(--accent-color);
}

.pricing .pricing-card.popular .plan-cta .btn-plan {
  background-color: var(--accent-color);
  color: var(--contrast-color);
}

.pricing .pricing-card.popular .plan-cta .btn-plan:hover {
  background-color: color-mix(in srgb, var(--accent-color), transparent 20%);
}

.pricing .pricing-card .popular-tag {
  position: absolute;
  top: 20px;
  right: -35px;
  background-color: var(--accent-color);
  color: var(--contrast-color);
  font-size: 13px;
  font-weight: 600;
  padding: 8px 40px;
  transform: rotate(45deg);
}

.pricing .plan-header {
  padding: 30px 30px 20px;
  text-align: center;
}

.pricing .plan-header .plan-icon {
  width: 70px;
  height: 70px;
  margin: 0 auto 20px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
}

.pricing .plan-header .plan-icon i {
  font-size: 28px;
  color: var(--accent-color);
}

.pricing .plan-header h3 {
  font-size: 24px;
  font-weight: 700;
  margin-bottom: 10px;
}

.pricing .plan-header p {
  font-size: 15px;
  color: color-mix(in srgb, var(--default-color), transparent 30%);
}

.pricing .plan-pricing {
  text-align: center;
  padding: 10px 30px 20px;
  position: relative;
}

.pricing .plan-pricing .currency {
  font-size: 24px;
  vertical-align: top;
  line-height: 1;
  color: var(--heading-color);
  font-weight: 600;
}

.pricing .plan-pricing .amount {
  font-size: 60px;
  font-weight: 700;
  color: var(--heading-color);
  line-height: 1;
}

.pricing .plan-pricing .period {
  font-size: 16px;
  color: color-mix(in srgb, var(--default-color), transparent 40%);
}

.pricing .plan-features {
  padding: 20px 30px;
  flex: 1;
}

.pricing .plan-features ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.pricing .plan-features ul li {
  padding: 12px 0;
  font-size: 15px;
  display: flex;
  align-items: center;
  gap: 10px;
  color: color-mix(in srgb, var(--default-color), transparent 20%);
}

.pricing .plan-features ul li.disabled {
  color: color-mix(in srgb, var(--default-color), transparent 60%);
}

.pricing .plan-features ul li i {
  font-size: 18px;
}

.pricing .plan-features ul li i.bi-check-circle-fill {
  color: var(--accent-color);
}

.pricing .plan-features ul li i.bi-x-circle-fill {
  color: color-mix(in srgb, var(--default-color), transparent 60%);
}

.pricing .plan-cta {
  padding: 10px 30px 30px;
  text-align: center;
}

.pricing .plan-cta .btn-plan {
  display: inline-block;
  width: 100%;
  padding: 14px 32px;
  background-color: color-mix(in srgb, var(--default-color), transparent 95%);
  color: var(--default-color);
  border-radius: 50px;
  font-size: 16px;
  font-weight: 600;
  transition: all 0.3s;
}

.pricing .plan-cta .btn-plan:hover {
  background-color: color-mix(in srgb, var(--default-color), transparent 80%);
}

@media (max-width: 992px) {
  .pricing .pricing-card {
    max-width: 400px;
    margin-left: auto;
    margin-right: auto;
  }
}

@media (max-width: 768px) {
  .pricing .plan-pricing .amount {
    font-size: 48px;
  }

  .pricing .plan-header {
    padding: 25px 20px 15px;
  }

  .pricing .plan-features,
  .pricing .plan-pricing,
  .pricing .plan-cta {
    padding-left: 20px;
    padding-right: 20px;
  }
}

/*--------------------------------------------------------------
# Faq Section
--------------------------------------------------------------*/
.faq .faq-title {
  font-size: 2.5rem;
  font-weight: 700;
  margin-bottom: 1rem;
  color: var(--heading-color);
}

.faq .faq-description {
  font-size: 1rem;
  color: var(--default-color);
  margin-bottom: 2rem;
}

.faq .faq-arrow {
  color: var(--accent-color);
}

.faq .faq-container .faq-item {
  background-color: var(--surface-color);
  position: relative;
  padding: 20px;
  margin-bottom: 15px;
  border-radius: 10px;
  overflow: hidden;
}

.faq .faq-container .faq-item:last-child {
  margin-bottom: 0;
}

.faq .faq-container .faq-item h3 {
  font-weight: 600;
  font-size: 16px;
  line-height: 24px;
  margin: 0 30px 0 0;
  transition: 0.3s;
  cursor: pointer;
  display: flex;
  align-items: center;
}

.faq .faq-container .faq-item h3 .num {
  color: var(--accent-color);
  padding-right: 5px;
}

.faq .faq-container .faq-item h3:hover {
  color: var(--accent-color);
}

.faq .faq-container .faq-item .faq-content {
  display: grid;
  grid-template-rows: 0fr;
  transition: 0.3s ease-in-out;
  visibility: hidden;
  opacity: 0;
}

.faq .faq-container .faq-item .faq-content p {
  margin-bottom: 0;
  overflow: hidden;
}

.faq .faq-container .faq-item .faq-toggle {
  position: absolute;
  top: 20px;
  right: 20px;
  font-size: 16px;
  line-height: 0;
  transition: 0.3s;
  cursor: pointer;
}

.faq .faq-container .faq-item .faq-toggle:hover {
  color: var(--accent-color);
}

.faq .faq-container .faq-active h3 {
  color: var(--accent-color);
}

.faq .faq-container .faq-active .faq-content {
  grid-template-rows: 1fr;
  visibility: visible;
  opacity: 1;
  padding-top: 10px;
}

.faq .faq-container .faq-active .faq-toggle {
  transform: rotate(90deg);
  color: var(--accent-color);
}

/*--------------------------------------------------------------
# Contact Section
--------------------------------------------------------------*/
.contact .contact-info-box {
  background-color: var(--surface-color);
  border-radius: 10px;
  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.05);
  padding: 25px;
  height: 100%;
  transition:
    transform 0.3s ease,
    box-shadow 0.3s ease;
  display: flex;
  align-items: flex-start;
  gap: 15px;
}

.contact .contact-info-box:hover {
  transform: translateY(-5px);
  box-shadow: 0 8px 30px rgba(0, 0, 0, 0.1);
}

.contact .contact-info-box .icon-box {
  background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
  color: var(--accent-color);
  width: 50px;
  height: 50px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.contact .contact-info-box .icon-box i {
  font-size: 24px;
}

.contact .contact-info-box .info-content h4 {
  font-size: 18px;
  font-weight: 600;
  margin-bottom: 10px;
}

.contact .contact-info-box .info-content p {
  margin-bottom: 5px;
  color: color-mix(in srgb, var(--default-color), transparent 20%);
  font-size: 15px;
  line-height: 1.5;
}

.contact .contact-info-box .info-content p:last-child {
  margin-bottom: 0;
}

.contact .map-section {
  position: relative;
  width: 100%;
  height: 500px;
  overflow: hidden;
}

.contact .map-section iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}

.contact .form-container-overlap {
  position: relative;
  margin-top: -150px;
  margin-bottom: 60px;
  z-index: 10;
}

.contact .contact-form-wrapper {
  background-color: var(--surface-color);
  border-radius: 12px;
  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.05);
  padding: 40px;
}

.contact .contact-form-wrapper h2 {
  font-size: 28px;
  font-weight: 700;
  margin-bottom: 30px;
  position: relative;
}

.contact .contact-form-wrapper h2:after {
  content: '';
  position: absolute;
  left: 50%;
  bottom: -10px;
  transform: translateX(-50%);
  width: 50px;
  height: 3px;
  background-color: var(--accent-color);
}

.contact .contact-form-wrapper .form-group {
  margin-bottom: 20px;
}

.contact .contact-form-wrapper .form-group .input-with-icon {
  position: relative;
}

.contact .contact-form-wrapper .form-group .input-with-icon i {
  position: absolute;
  left: 15px;
  top: 50%;
  transform: translateY(-50%);
  color: color-mix(in srgb, var(--default-color), transparent 40%);
  font-size: 18px;
  z-index: 10;
}

.contact .contact-form-wrapper .form-group .input-with-icon i.message-icon {
  top: 28px;
}

.contact .contact-form-wrapper .form-group .input-with-icon textarea + i {
  top: 25px;
  transform: none;
}

.contact .contact-form-wrapper .form-group .input-with-icon .form-control {
  border-radius: 8px;
  padding: 12px 15px 12px 45px;
  height: 3.5rem;
  color: var(--default-color);
  background-color: var(--surface-color);
  font-size: 15px;
  border: 1px solid color-mix(in srgb, var(--default-color), transparent 80%);
}

.contact .contact-form-wrapper .form-group .input-with-icon .form-control:focus {
  border-color: var(--accent-color);
  box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--accent-color), transparent 90%);
}

.contact .contact-form-wrapper .form-group .input-with-icon .form-control::placeholder {
  color: color-mix(in srgb, var(--default-color), transparent 40%);
}

.contact .contact-form-wrapper .form-group .input-with-icon textarea.form-control {
  height: 180px;
  resize: none;
  padding-top: 15px;
}

.contact .contact-form-wrapper .btn-submit {
  background-color: var(--accent-color);
  border: none;
  color: var(--contrast-color);
  padding: 12px 30px;
  font-size: 16px;
  font-weight: 600;
  letter-spacing: 1px;
  border-radius: 8px;
  transition: all 0.3s ease;
  box-shadow: 0 5px 15px color-mix(in srgb, var(--accent-color), transparent 70%);
}

.contact .contact-form-wrapper .btn-submit:hover {
  background-color: color-mix(in srgb, var(--accent-color), transparent 15%);
  transform: translateY(-3px);
  box-shadow: 0 8px 20px color-mix(in srgb, var(--accent-color), transparent 60%);
}

.contact .contact-form-wrapper .btn-submit:active {
  transform: translateY(0);
  box-shadow: 0 3px 10px color-mix(in srgb, var(--accent-color), transparent 70%);
}

.contact .contact-form-wrapper .loading,
.contact .contact-form-wrapper .error-message,
.contact .contact-form-wrapper .sent-message {
  margin-top: 10px;
  margin-bottom: 20px;
}

@media (max-width: 992px) {
  .contact .form-container-overlap {
    margin-top: -120px;
  }

  .contact .contact-form-wrapper {
    padding: 30px;
  }
}

@media (max-width: 768px) {
  .contact .contact-info-box {
    margin-bottom: 20px;
  }

  .contact .form-container-overlap {
    margin-top: -100px;
  }

  .contact .contact-form-wrapper {
    padding: 25px;
  }

  .contact .contact-form-wrapper h2 {
    font-size: 24px;
  }

  .contact .map-section {
    height: 450px;
  }
}

@media (max-width: 576px) {
  .contact .form-container-overlap {
    margin-top: -80px;
  }

  .contact .contact-form-wrapper {
    padding: 20px;
  }

  .contact .btn-submit {
    width: 100%;
  }

  .contact .map-section {
    height: 400px;
  }
}

/*--------------------------------------------------------------
# Portfolio Details Section
--------------------------------------------------------------*/
.portfolio-details {
  --section-spacing: 2.5rem;
}

.portfolio-details .portfolio-details-media {
  position: relative;
}

.portfolio-details .portfolio-details-media .main-image {
  margin-bottom: 1rem;
  border-radius: 20px;
  overflow: hidden;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);
}

.portfolio-details .portfolio-details-media .main-image .portfolio-details-slider {
  position: relative;
}

.portfolio-details .portfolio-details-media .main-image .portfolio-details-slider .swiper-wrapper {
  height: auto !important;
}

.portfolio-details
  .portfolio-details-media
  .main-image
  .portfolio-details-slider
  .swiper-slide
  img {
  aspect-ratio: 3/2;
  object-fit: cover;
  width: 100%;
}

.portfolio-details
  .portfolio-details-media
  .main-image
  .portfolio-details-slider
  .swiper-button-next,
.portfolio-details
  .portfolio-details-media
  .main-image
  .portfolio-details-slider
  .swiper-button-prev {
  background-color: var(--contrast-color);
  width: 40px;
  height: 40px;
  border-radius: 50%;
  transition: all 0.3s ease;
}

.portfolio-details
  .portfolio-details-media
  .main-image
  .portfolio-details-slider
  .swiper-button-next:after,
.portfolio-details
  .portfolio-details-media
  .main-image
  .portfolio-details-slider
  .swiper-button-prev:after {
  font-size: 16px;
  color: var(--accent-color);
  font-weight: bold;
}

.portfolio-details
  .portfolio-details-media
  .main-image
  .portfolio-details-slider
  .swiper-button-next:hover,
.portfolio-details
  .portfolio-details-media
  .main-image
  .portfolio-details-slider
  .swiper-button-prev:hover {
  background-color: var(--accent-color);
}

.portfolio-details
  .portfolio-details-media
  .main-image
  .portfolio-details-slider
  .swiper-button-next:hover:after,
.portfolio-details
  .portfolio-details-media
  .main-image
  .portfolio-details-slider
  .swiper-button-prev:hover:after {
  color: var(--contrast-color);
}

.portfolio-details .portfolio-details-media .thumbnail-grid img {
  height: 80px;
  object-fit: cover;
  border-radius: 8px;
  cursor: pointer;
  transition: all 0.3s ease;
  box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05);
}

.portfolio-details .portfolio-details-media .thumbnail-grid img:hover {
  transform: translateY(-5px);
  box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);
}

.portfolio-details .portfolio-details-media .tech-stack-badges {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 1.5rem;
}

.portfolio-details .portfolio-details-media .tech-stack-badges span {
  display: inline-block;
  padding: 6px 12px;
  font-size: 13px;
  font-weight: 500;
  border-radius: 20px;
  background-color: color-mix(in srgb, var(--heading-color), transparent 85%);
  color: var(--heading-color);
  transition: all 0.3s ease;
}

.portfolio-details .portfolio-details-media .tech-stack-badges span:hover {
  background-color: color-mix(in srgb, var(--heading-color), transparent 70%);
  transform: translateY(-2px);
}

.portfolio-details .portfolio-details-content {
  padding: 0 0 0 2rem;
  height: 100%;
  display: flex;
  flex-direction: column;
}

.portfolio-details .portfolio-details-content .project-meta {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  margin-bottom: 1.5rem;
}

.portfolio-details .portfolio-details-content .project-meta .badge-wrapper .project-badge {
  display: inline-block;
  padding: 8px 16px;
  background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
  color: var(--accent-color);
  border-radius: 30px;
  font-weight: 600;
  font-size: 14px;
}

.portfolio-details .portfolio-details-content .project-meta .date-client {
  display: flex;
  gap: 1.5rem;
}

.portfolio-details .portfolio-details-content .project-meta .date-client .meta-item {
  display: flex;
  align-items: center;
  font-size: 14px;
  color: color-mix(in srgb, var(--default-color), transparent 30%);
}

.portfolio-details .portfolio-details-content .project-meta .date-client .meta-item i {
  margin-right: 6px;
  color: var(--accent-color);
}

.portfolio-details .portfolio-details-content .project-title {
  font-size: 2.2rem;
  margin-bottom: 1rem;
  font-weight: 700;
  line-height: 1.2;
  color: var(--heading-color);
}

.portfolio-details .portfolio-details-content .project-website {
  display: flex;
  align-items: center;
  margin-bottom: 1.5rem;
}

.portfolio-details .portfolio-details-content .project-website i {
  font-size: 22px;
  color: var(--accent-color);
  margin-right: 8px;
}

.portfolio-details .portfolio-details-content .project-website a {
  font-weight: 500;
  transition: all 0.3s;
}

.portfolio-details .portfolio-details-content .project-website a:hover {
  letter-spacing: 0.5px;
}

.portfolio-details .portfolio-details-content .project-overview {
  margin-bottom: var(--section-spacing);
}

.portfolio-details .portfolio-details-content .project-overview .lead {
  font-size: 1.1rem;
  line-height: 1.7;
  color: color-mix(in srgb, var(--default-color), transparent 15%);
  margin-bottom: 1.5rem;
}

.portfolio-details .portfolio-details-content .project-overview .project-accordion .accordion-item {
  border: none;
  background: none;
  margin-bottom: 10px;
}

.portfolio-details
  .portfolio-details-content
  .project-overview
  .project-accordion
  .accordion-item
  .accordion-header
  .accordion-button {
  padding: 1rem;
  font-weight: 600;
  font-size: 1rem;
  color: var(--heading-color);
  background-color: color-mix(in srgb, var(--surface-color), transparent 70%);
  border-radius: 8px !important;
  box-shadow: none;
}

.portfolio-details
  .portfolio-details-content
  .project-overview
  .project-accordion
  .accordion-item
  .accordion-header
  .accordion-button:not(.collapsed) {
  background-color: var(--surface-color);
  color: var(--accent-color);
  border-bottom-left-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
  box-shadow: 0 4px 10px rgba(0, 0, 0, 0.03);
}

.portfolio-details
  .portfolio-details-content
  .project-overview
  .project-accordion
  .accordion-item
  .accordion-header
  .accordion-button:not(.collapsed)
  i {
  color: var(--accent-color);
}

.portfolio-details
  .portfolio-details-content
  .project-overview
  .project-accordion
  .accordion-item
  .accordion-header
  .accordion-button::after {
  background-size: 14px;
  width: 14px;
  height: 14px;
}

.portfolio-details
  .portfolio-details-content
  .project-overview
  .project-accordion
  .accordion-item
  .accordion-header
  .accordion-button
  i {
  font-size: 1.1rem;
}

.portfolio-details
  .portfolio-details-content
  .project-overview
  .project-accordion
  .accordion-item
  .accordion-body {
  padding: 1rem;
  background-color: var(--surface-color);
  border-bottom-left-radius: 8px;
  border-bottom-right-radius: 8px;
}

.portfolio-details
  .portfolio-details-content
  .project-overview
  .project-accordion
  .accordion-item
  .accordion-body
  p {
  margin-bottom: 0;
  color: color-mix(in srgb, var(--default-color), transparent 25%);
  line-height: 1.6;
}

.portfolio-details .portfolio-details-content .project-features {
  margin-bottom: var(--section-spacing);
}

.portfolio-details .portfolio-details-content .project-features h3 {
  display: flex;
  align-items: center;
  font-size: 1.25rem;
  margin-bottom: 1.2rem;
}

.portfolio-details .portfolio-details-content .project-features h3 i {
  margin-right: 10px;
  color: var(--accent-color);
  font-size: 1.1em;
}

.portfolio-details .portfolio-details-content .project-features .feature-list {
  list-style: none;
  padding-left: 0;
}

.portfolio-details .portfolio-details-content .project-features .feature-list li {
  display: flex;
  align-items: center;
  padding: 8px 0;
  font-size: 15px;
  color: color-mix(in srgb, var(--default-color), transparent 15%);
}

.portfolio-details .portfolio-details-content .project-features .feature-list li i {
  color: var(--accent-color);
  margin-right: 10px;
  font-size: 1.1em;
}

.portfolio-details .portfolio-details-content .cta-buttons {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  margin-top: auto;
}

.portfolio-details .portfolio-details-content .cta-buttons .btn-view-project {
  padding: 12px 28px;
  background-color: var(--accent-color);
  color: var(--contrast-color);
  border-radius: 30px;
  font-weight: 500;
  transition: all 0.3s ease;
}

.portfolio-details .portfolio-details-content .cta-buttons .btn-view-project:hover {
  background-color: color-mix(in srgb, var(--accent-color), black 15%);
  transform: translateY(-3px);
  box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);
}

.portfolio-details .portfolio-details-content .cta-buttons .btn-prev-project,
.portfolio-details .portfolio-details-content .cta-buttons .btn-next-project {
  padding: 12px 28px;
  background-color: var(--accent-color);
  color: var(--contrast-color);
  border-radius: 30px;
  font-weight: 500;
  transition: all 0.3s ease;
  display: flex;
  align-items: center;
  gap: 8px;
  box-shadow: 0 5px 15px color-mix(in srgb, var(--accent-color), transparent 70%);
}

.portfolio-details .portfolio-details-content .cta-buttons .btn-prev-project i,
.portfolio-details .portfolio-details-content .cta-buttons .btn-next-project i {
  transition: transform 0.3s ease;
}

.portfolio-details .portfolio-details-content .cta-buttons .btn-prev-project:hover,
.portfolio-details .portfolio-details-content .cta-buttons .btn-next-project:hover {
  background-color: color-mix(in srgb, var(--accent-color), black 15%);
  transform: translateY(-3px);
  box-shadow: 0 8px 20px color-mix(in srgb, var(--accent-color), transparent 60%);
}

.portfolio-details .portfolio-details-content .cta-buttons .btn-prev-project:hover i {
  transform: translateX(-3px);
}

.portfolio-details .portfolio-details-content .cta-buttons .btn-next-project:hover i {
  transform: translateX(3px);
}

@media (max-width: 1199.98px) {
  .portfolio-details .portfolio-details-content {
    padding-left: 1rem;
  }
}

@media (max-width: 991.98px) {
  .portfolio-details .portfolio-details-content {
    padding: 2rem 0 0 0;
  }

  .portfolio-details .portfolio-details-content .cta-buttons {
    margin-top: 2rem;
  }
}

@media (max-width: 767.98px) {
  .portfolio-details .project-meta {
    flex-direction: column;
    gap: 1rem;
  }

  .portfolio-details .project-meta .date-client {
    flex-direction: column;
    gap: 0.5rem;
  }

  .portfolio-details .cta-buttons {
    flex-direction: column;
    width: 100%;
  }

  .portfolio-details .cta-buttons a {
    width: 100%;
    text-align: center;
  }
}

/*--------------------------------------------------------------
# Service Details Section
--------------------------------------------------------------*/
.service-details .swiper-wrapper {
  height: auto !important;
}

.service-details .service-header {
  margin-bottom: 40px;
}

.service-details .service-header h1 {
  font-size: 36px;
  font-weight: 700;
  margin-bottom: 20px;
  position: relative;
}

.service-details .service-header h1:after {
  content: '';
  position: absolute;
  bottom: -12px;
  left: 0;
  width: 80px;
  height: 4px;
  background: var(--accent-color);
}

.service-details .service-header .service-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  margin-bottom: 20px;
  margin-top: 25px;
}

.service-details .service-header .service-meta span {
  display: flex;
  align-items: center;
  font-size: 15px;
  color: color-mix(in srgb, var(--default-color), transparent 30%);
}

.service-details .service-header .service-meta span i {
  color: var(--accent-color);
  margin-right: 8px;
  font-size: 16px;
}

.service-details .service-header .lead {
  font-size: 18px;
  line-height: 1.7;
  color: color-mix(in srgb, var(--default-color), transparent 15%);
}

.service-details .service-tabs {
  margin-bottom: 50px;
}

.service-details .service-tabs .nav-tabs {
  border-bottom: 2px solid color-mix(in srgb, var(--heading-color), transparent 90%);
  margin-bottom: 30px;
}

.service-details .service-tabs .nav-tabs .nav-item {
  margin-right: 5px;
}

.service-details .service-tabs .nav-tabs .nav-link {
  border: none;
  border-radius: 0;
  padding: 12px 20px;
  font-weight: 600;
  color: color-mix(in srgb, var(--heading-color), transparent 30%);
  position: relative;
  transition: all 0.3s;
  display: flex;
  align-items: center;
}

.service-details .service-tabs .nav-tabs .nav-link i {
  margin-right: 8px;
  font-size: 18px;
}

.service-details .service-tabs .nav-tabs .nav-link:after {
  content: '';
  position: absolute;
  bottom: -2px;
  left: 0;
  width: 0;
  height: 3px;
  background-color: var(--accent-color);
  transition: all 0.3s ease;
}

.service-details .service-tabs .nav-tabs .nav-link:hover {
  color: var(--heading-color);
  background-color: transparent;
}

.service-details .service-tabs .nav-tabs .nav-link:hover:after {
  width: 30%;
}

.service-details .service-tabs .nav-tabs .nav-link.active {
  color: var(--accent-color);
  background-color: transparent;
}

.service-details .service-tabs .nav-tabs .nav-link.active:after {
  width: 100%;
}

.service-details .service-tabs .tab-content .content-block h3 {
  font-size: 24px;
  margin-bottom: 20px;
  font-weight: 700;
}

.service-details .service-tabs .tab-content .content-block p {
  color: color-mix(in srgb, var(--default-color), transparent 20%);
  margin-bottom: 15px;
  line-height: 1.7;
}

.service-details .service-tabs .tab-content img {
  border-radius: 10px;
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
}

.service-details .service-tabs .tab-content .process-timeline {
  position: relative;
  padding-left: 30px;
}

.service-details .service-tabs .tab-content .process-timeline:before {
  content: '';
  position: absolute;
  top: 10px;
  bottom: 10px;
  left: 15px;
  width: 2px;
  background: color-mix(in srgb, var(--accent-color), transparent 80%);
}

.service-details .service-tabs .tab-content .process-timeline .timeline-item {
  position: relative;
  padding-bottom: 35px;
}

.service-details .service-tabs .tab-content .process-timeline .timeline-item:last-child {
  padding-bottom: 0;
}

.service-details .service-tabs .tab-content .process-timeline .timeline-item .timeline-marker {
  position: absolute;
  left: -30px;
  top: -5px;
  width: 32px;
  height: 32px;
  background-color: var(--accent-color);
  color: var(--contrast-color);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 14px;
  z-index: 2;
}

.service-details .service-tabs .tab-content .process-timeline .timeline-item .timeline-content {
  padding-left: 10px;
}

.service-details .service-tabs .tab-content .process-timeline .timeline-item .timeline-content h4 {
  font-size: 20px;
  font-weight: 700;
  margin-bottom: 10px;
}

.service-details .service-tabs .tab-content .process-timeline .timeline-item .timeline-content p {
  color: color-mix(in srgb, var(--default-color), transparent 20%);
  line-height: 1.6;
}

.service-details .service-tabs .tab-content .benefit-card {
  background-color: var(--surface-color);
  border-radius: 12px;
  padding: 30px;
  transition: all 0.3s ease;
  height: 100%;
  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.04);
  position: relative;
  overflow: hidden;
}

.service-details .service-tabs .tab-content .benefit-card:before {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 3px;
  background: var(--accent-color);
  transform: scaleX(0);
  transform-origin: right;
  transition: transform 0.5s ease;
}

.service-details .service-tabs .tab-content .benefit-card:hover {
  transform: translateY(-8px);
  box-shadow: 0 15px 30px rgba(0, 0, 0, 0.08);
}

.service-details .service-tabs .tab-content .benefit-card:hover:before {
  transform: scaleX(1);
  transform-origin: left;
}

.service-details .service-tabs .tab-content .benefit-card:hover .benefit-icon {
  transform: rotateY(180deg);
  background-color: var(--accent-color);
}

.service-details .service-tabs .tab-content .benefit-card:hover .benefit-icon i {
  color: var(--contrast-color);
}

.service-details .service-tabs .tab-content .benefit-card .benefit-icon {
  width: 60px;
  height: 60px;
  border-radius: 12px;
  background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 20px;
  transition: all 0.5s ease;
}

.service-details .service-tabs .tab-content .benefit-card .benefit-icon i {
  font-size: 28px;
  color: var(--accent-color);
  transition: all 0.5s ease;
}

.service-details .service-tabs .tab-content .benefit-card h4 {
  font-size: 18px;
  font-weight: 700;
  margin-bottom: 12px;
}

.service-details .service-tabs .tab-content .benefit-card p {
  color: color-mix(in srgb, var(--default-color), transparent 20%);
  margin-bottom: 0;
}

.service-details .service-gallery h3 {
  font-size: 26px;
  margin-bottom: 25px;
  font-weight: 700;
}

.service-details .service-gallery .service-details-slider {
  margin-bottom: 40px;
  padding-bottom: 40px;
}

.service-details .service-gallery .service-details-slider .portfolio-item {
  position: relative;
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 8px 25px rgba(0, 0, 0, 0.08);
}

.service-details .service-gallery .service-details-slider .portfolio-item:hover .portfolio-info {
  opacity: 1;
  transform: translateY(0);
}

.service-details .service-gallery .service-details-slider .portfolio-item img {
  border-radius: 12px;
  transition: all 0.4s ease;
}

.service-details .service-gallery .service-details-slider .portfolio-item .portfolio-info {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  background: linear-gradient(0deg, rgba(0, 0, 0, 0.7) 0%, rgba(0, 0, 0, 0) 100%);
  padding: 30px 20px 20px;
  opacity: 0;
  transform: translateY(20px);
  transition: all 0.3s ease;
  border-bottom-left-radius: 12px;
  border-bottom-right-radius: 12px;
}

.service-details .service-gallery .service-details-slider .portfolio-item .portfolio-info h5 {
  color: var(--contrast-color);
  font-weight: 700;
  margin-bottom: 5px;
}

.service-details .service-gallery .service-details-slider .portfolio-item .portfolio-info p {
  color: color-mix(in srgb, var(--contrast-color), transparent 20%);
  margin: 0;
  font-size: 14px;
}

.service-details .service-gallery .service-details-slider .swiper-pagination {
  padding-top: 5px;
  bottom: 0;
}

.service-details
  .service-gallery
  .service-details-slider
  .swiper-pagination
  .swiper-pagination-bullet {
  width: 10px;
  height: 10px;
  background-color: color-mix(in srgb, var(--accent-color), transparent 70%);
  opacity: 1;
}

.service-details
  .service-gallery
  .service-details-slider
  .swiper-pagination
  .swiper-pagination-bullet.swiper-pagination-bullet-active {
  width: 25px;
  border-radius: 5px;
  background-color: var(--accent-color);
}

.service-details .service-sidebar {
  position: sticky;
  top: 100px;
}

.service-details .service-sidebar .action-card {
  background: linear-gradient(
    135deg,
    var(--accent-color) 0%,
    color-mix(in srgb, var(--accent-color), black 20%) 100%
  );
  border-radius: 15px;
  padding: 35px 30px;
  color: var(--contrast-color);
  margin-bottom: 30px;
  position: relative;
  overflow: hidden;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
  text-align: center;
}

.service-details .service-sidebar .action-card:before {
  content: '';
  position: absolute;
  top: -50px;
  right: -50px;
  width: 100px;
  height: 100px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.1);
  z-index: 1;
}

.service-details .service-sidebar .action-card:after {
  content: '';
  position: absolute;
  bottom: -40px;
  left: -40px;
  width: 80px;
  height: 80px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.08);
  z-index: 1;
}

.service-details .service-sidebar .action-card h3 {
  color: var(--contrast-color);
  font-size: 24px;
  font-weight: 700;
  margin-bottom: 15px;
}

.service-details .service-sidebar .action-card p {
  margin-bottom: 25px;
  opacity: 0.9;
}

.service-details .service-sidebar .action-card .btn-primary {
  background-color: var(--contrast-color);
  color: var(--accent-color);
  border: none;
  border-radius: 8px;
  padding: 12px 25px;
  font-weight: 600;
  display: inline-block;
  transition: all 0.3s ease;
}

.service-details .service-sidebar .action-card .btn-primary:hover {
  transform: translateY(-3px);
  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.15);
}

.service-details .service-sidebar .action-card .guarantee {
  display: block;
  margin-top: 20px;
  font-size: 14px;
  opacity: 0.8;
}

.service-details .service-sidebar .action-card .guarantee i {
  margin-right: 5px;
}

.service-details .service-sidebar .service-features-list {
  background-color: var(--surface-color);
  border-radius: 15px;
  padding: 30px;
  margin-bottom: 30px;
  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.05);
}

.service-details .service-sidebar .service-features-list h4 {
  font-size: 20px;
  font-weight: 700;
  margin-bottom: 25px;
  padding-bottom: 15px;
  border-bottom: 2px solid color-mix(in srgb, var(--heading-color), transparent 90%);
}

.service-details .service-sidebar .service-features-list ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.service-details .service-sidebar .service-features-list ul li {
  display: flex;
  align-items: flex-start;
  margin-bottom: 25px;
}

.service-details .service-sidebar .service-features-list ul li:last-child {
  margin-bottom: 0;
}

.service-details .service-sidebar .service-features-list ul li i {
  flex-shrink: 0;
  background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
  color: var(--accent-color);
  width: 42px;
  height: 42px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  margin-right: 15px;
}

.service-details .service-sidebar .service-features-list ul li div {
  flex: 1;
}

.service-details .service-sidebar .service-features-list ul li div h5 {
  font-size: 16px;
  font-weight: 700;
  margin-bottom: 5px;
}

.service-details .service-sidebar .service-features-list ul li div p {
  color: color-mix(in srgb, var(--default-color), transparent 25%);
  margin: 0;
  font-size: 14px;
}

.service-details .service-sidebar .testimonial-card {
  background-color: var(--surface-color);
  border-radius: 15px;
  padding: 30px;
  margin-bottom: 30px;
  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.05);
}

.service-details .service-sidebar .testimonial-card .testimonial-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 20px;
}

.service-details .service-sidebar .testimonial-card .testimonial-header i {
  font-size: 36px;
  color: var(--accent-color);
  opacity: 0.3;
}

.service-details .service-sidebar .testimonial-card .testimonial-header .rating {
  display: flex;
}

.service-details .service-sidebar .testimonial-card .testimonial-header .rating i {
  color: #ffd700;
  font-size: 16px;
  opacity: 1;
  margin-left: 2px;
}

.service-details .service-sidebar .testimonial-card .testimonial-text {
  font-style: italic;
  line-height: 1.7;
  margin-bottom: 20px;
  color: color-mix(in srgb, var(--default-color), transparent 15%);
}

.service-details .service-sidebar .testimonial-card .client-info {
  display: flex;
  align-items: center;
}

.service-details .service-sidebar .testimonial-card .client-info .client-image {
  width: 50px;
  height: 50px;
  border-radius: 50%;
  object-fit: cover;
  margin-right: 15px;
}

.service-details .service-sidebar .testimonial-card .client-info .client-details h5 {
  font-size: 16px;
  font-weight: 700;
  margin: 0 0 5px;
}

.service-details .service-sidebar .testimonial-card .client-info .client-details span {
  font-size: 14px;
  color: color-mix(in srgb, var(--default-color), transparent 30%);
}

.service-details .service-sidebar .contact-info {
  background-color: var(--surface-color);
  border-radius: 15px;
  padding: 30px;
  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.05);
}

.service-details .service-sidebar .contact-info h4 {
  font-size: 20px;
  font-weight: 700;
  margin-bottom: 25px;
}

.service-details .service-sidebar .contact-info .contact-method {
  display: flex;
  align-items: flex-start;
  margin-bottom: 20px;
}

.service-details .service-sidebar .contact-info .contact-method:last-child {
  margin-bottom: 0;
}

.service-details .service-sidebar .contact-info .contact-method i {
  flex-shrink: 0;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background-color: color-mix(in srgb, var(--accent-color), transparent 90%);
  color: var(--accent-color);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  margin-right: 15px;
}

.service-details .service-sidebar .contact-info .contact-method div {
  flex: 1;
}

.service-details .service-sidebar .contact-info .contact-method div span {
  display: block;
  font-size: 14px;
  color: color-mix(in srgb, var(--default-color), transparent 30%);
  margin-bottom: 5px;
}

.service-details .service-sidebar .contact-info .contact-method div p {
  margin: 0;
  font-weight: 600;
  color: var(--heading-color);
}

@media (max-width: 991px) {
  .service-details .service-sidebar {
    position: relative;
    top: 0;
    margin-bottom: 40px;
  }

  .service-details .service-header h1 {
    font-size: 30px;
  }
}

@media (max-width: 767px) {
  .service-details .service-tabs .nav-tabs {
    flex-wrap: nowrap;
    overflow-x: auto;
  }

  .service-details .service-tabs .nav-tabs .nav-link {
    white-space: nowrap;
    padding: 10px 15px;
    font-size: 14px;
  }

  .service-details .service-tabs .nav-tabs .nav-link i {
    font-size: 16px;
  }

  .service-details .service-header h1 {
    font-size: 26px;
  }

  .service-details .service-header .service-meta {
    gap: 15px;
  }

  .service-details .service-header .service-meta span {
    font-size: 14px;
  }

  .service-details .service-header .lead {
    font-size: 16px;
  }
}

/*--------------------------------------------------------------
# Starter Section Section
--------------------------------------------------------------*/
.starter-section {
  /* Add your styles here */
}

#imageOnlyCarousel .carousel-item img {
  height: 300px;
  object-fit: cover;
  width: 100%;
}

/* Skip to content link for accessibility */
.skip-link {
  position: absolute;
  top: -40px;
  left: 0;
  background: #000;
  color: #fff;
  padding: 8px 16px;
  z-index: 10000;
  transition: top 0.3s;
}

.skip-link:focus {
  top: 0;
}

/* Product Cards */
.product-card {
  transition:
    transform 0.3s ease,
    box-shadow 0.3s ease;
}

.product-card:hover {
  transform: translateY(-5px);
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15) !important;
}

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6Im1haW4ubWluLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi50ZXh0LWFjY2VudCB7XG4gIGNvbG9yOiAjMWY2ZmIzO1xufVxuXG4udGhlbWUtc3dpdGNoZXIge1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLyoqXG4qIFRlbXBsYXRlIE5hbWU6IFN0cmF0ZWd5XG4qIFRlbXBsYXRlIFVSTDogaHR0cHM6Ly9ib290c3RyYXBtYWRlLmNvbS9zdHJhdGVneS1ib290c3RyYXAtYWdlbmN5LXRlbXBsYXRlL1xuKiBVcGRhdGVkOiBKdW4gMDYgMjAyNSB3aXRoIEJvb3RzdHJhcCB2NS4zLjZcbiogQXV0aG9yOiBCb290c3RyYXBNYWRlLmNvbVxuKiBMaWNlbnNlOiBodHRwczovL2Jvb3RzdHJhcG1hZGUuY29tL2xpY2Vuc2UvXG4qL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4jIEZvbnQgJiBDb2xvciBWYXJpYWJsZXNcbiMgSGVscDogaHR0cHM6Ly9ib290c3RyYXBtYWRlLmNvbS9jb2xvci1zeXN0ZW0vXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKiBGb250cyAqL1xuOnJvb3Qge1xuICAtLWRlZmF1bHQtZm9udDpcbiAgICAnUm9ib3RvJywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAnU2Vnb2UgVUknLCBSb2JvdG8sICdIZWx2ZXRpY2EgTmV1ZScsIEFyaWFsLCAnTm90byBTYW5zJyxcbiAgICAnTGliZXJhdGlvbiBTYW5zJywgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCcsXG4gICAgJ05vdG8gQ29sb3IgRW1vamknO1xuICAtLWhlYWRpbmctZm9udDogJ051bml0byBTYW5zJywgc2Fucy1zZXJpZjtcbiAgLS1uYXYtZm9udDogJ1JhbGV3YXknLCBzYW5zLXNlcmlmO1xufVxuXG4vKiBHbG9iYWwgQ29sb3JzIC0gTGlnaHQgVGhlbWUgKERlZmF1bHQpICovXG46cm9vdCB7XG4gIC0tYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgLS1kZWZhdWx0LWNvbG9yOiAjMzMzMzMzO1xuICAtLWhlYWRpbmctY29sb3I6ICMwMDAwMDA7XG4gIC0tYWNjZW50LWNvbG9yOiAjMzM5NmQzO1xuICAtLXN1cmZhY2UtY29sb3I6ICNmOGY5ZmE7XG4gIC0tY29udHJhc3QtY29sb3I6ICNmZmZmZmY7XG59XG5cbi8qIERhcmsgVGhlbWUgKi9cbmJvZHkuZGFyay1tb2RlIHtcbiAgLS1iYWNrZ3JvdW5kLWNvbG9yOiAjMDMxMTE5O1xuICAtLWRlZmF1bHQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgLS1oZWFkaW5nLWNvbG9yOiAjZTBlOWYyO1xuICAtLWFjY2VudC1jb2xvcjogIzMzOTZkMztcbiAgLS1zdXJmYWNlLWNvbG9yOiAjMWIyNjJjO1xuICAtLWNvbnRyYXN0LWNvbG9yOiAjZmZmZmZmO1xufVxuXG4vKiBEYXJrIE1vZGUgVGV4dCBDb2xvciBPdmVycmlkZXMgLSBGaXggaGFyZGNvZGVkIGxpZ2h0IHRleHQgY29sb3JzICovXG5ib2R5LmRhcmstbW9kZSB7XG4gIGNvbG9yOiAjZTBlMGUwICFpbXBvcnRhbnQ7XG59XG5cbmJvZHkuZGFyay1tb2RlIGgxLFxuYm9keS5kYXJrLW1vZGUgaDIsXG5ib2R5LmRhcmstbW9kZSBoMyxcbmJvZHkuZGFyay1tb2RlIGg0LFxuYm9keS5kYXJrLW1vZGUgaDUsXG5ib2R5LmRhcmstbW9kZSBoNixcbmJvZHkuZGFyay1tb2RlIC5oMSxcbmJvZHkuZGFyay1tb2RlIC5oMixcbmJvZHkuZGFyay1tb2RlIC5oMyxcbmJvZHkuZGFyay1tb2RlIC5oNCxcbmJvZHkuZGFyay1tb2RlIC5oNSxcbmJvZHkuZGFyay1tb2RlIC5oNiB7XG4gIGNvbG9yOiAjZTBlOWYyICFpbXBvcnRhbnQ7XG59XG5cbmJvZHkuZGFyay1tb2RlIHAsXG5ib2R5LmRhcmstbW9kZSBzcGFuLFxuYm9keS5kYXJrLW1vZGVcbiAgZGl2Om5vdCgubmF2YmFyKTpub3QoLm5hdik6bm90KC5tZW51KTpub3QoLmRyb3Bkb3duKTpub3QoLmJ0bik6bm90KC5iYWRnZSk6bm90KC5jYXJkKTpub3QoXG4gICAgLm1vZGFsXG4gICk6bm90KC50b2FzdCk6bm90KFtjbGFzcyo9J2ljb24nXSk6bm90KFtjbGFzcyo9J2JpLSddKTpub3QoW2NsYXNzKj0nZmEtJ10pOm5vdChbc3R5bGUqPSdjb2xvciddKSB7XG4gIGNvbG9yOiAjZTBlMGUwICFpbXBvcnRhbnQ7XG59XG5cbmJvZHkuZGFyay1tb2RlIGE6bm90KC5idG4pOm5vdCgubmF2YmFyLWJyYW5kKTpub3QoLm5hdi1saW5rKTpub3QoLmRyb3Bkb3duLWl0ZW0pIHtcbiAgY29sb3I6ICM2ZGIzZjIgIWltcG9ydGFudDtcbn1cblxuYm9keS5kYXJrLW1vZGUgW3N0eWxlKj0nY29sb3I6ICMxYTFhMWEnXSxcbmJvZHkuZGFyay1tb2RlIFtzdHlsZSo9J2NvbG9yOiMxYTFhMWEnXSxcbmJvZHkuZGFyay1tb2RlIFtzdHlsZSo9J2NvbG9yOiAjMzMzJ10sXG5ib2R5LmRhcmstbW9kZSBbc3R5bGUqPSdjb2xvcjojMzMzJ10sXG5ib2R5LmRhcmstbW9kZSBbc3R5bGUqPSdjb2xvcjogIzY2NiddLFxuYm9keS5kYXJrLW1vZGUgW3N0eWxlKj0nY29sb3I6IzY2NiddIHtcbiAgY29sb3I6ICNlMGUwZTAgIWltcG9ydGFudDtcbn1cblxuLyogRGFyayBNb2RlIEVsZW1lbnQgT3ZlcnJpZGVzICovXG5ib2R5LmRhcmstbW9kZSBzZWN0aW9uLmFib3V0LFxuYm9keS5kYXJrLW1vZGUgLmFib3V0LnNlY3Rpb24sXG5ib2R5LmRhcmstbW9kZSBzZWN0aW9uW2NsYXNzKj0nYWJvdXQnXSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQtY29sb3IpICFpbXBvcnRhbnQ7XG59XG5cbmJvZHkuZGFyay1tb2RlIC5hYm91dC1jYXJkLFxuYm9keS5kYXJrLW1vZGUgZGl2LmFib3V0LWNhcmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKSAhaW1wb3J0YW50O1xuICBjb2xvcjogdmFyKC0tZGVmYXVsdC1jb2xvcikgIWltcG9ydGFudDtcbn1cblxuYm9keS5kYXJrLW1vZGUgLnNlcnZpY2UtY2FyZCxcbmJvZHkuZGFyay1tb2RlIGRpdi5zZXJ2aWNlLWNhcmQsXG5ib2R5LmRhcmstbW9kZSAuc2VydmljZXMgLnNlcnZpY2UtY2FyZCxcbmJvZHkuZGFyay1tb2RlIC5zZXJ2aWNlcyBkaXYuc2VydmljZS1jYXJkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3VyZmFjZS1jb2xvcikgIWltcG9ydGFudDtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkgIWltcG9ydGFudDtcbn1cblxuYm9keS5kYXJrLW1vZGUgLnNlcnZpY2UtY2FyZCBoMyBhLFxuYm9keS5kYXJrLW1vZGUgLnNlcnZpY2VzIC5zZXJ2aWNlLWNhcmQgaDMgYSB7XG4gIGNvbG9yOiB2YXIoLS1oZWFkaW5nLWNvbG9yKSAhaW1wb3J0YW50O1xufVxuXG5ib2R5LmRhcmstbW9kZSAuc2VydmljZS1jYXJkIHAsXG5ib2R5LmRhcmstbW9kZSAuc2VydmljZXMgLnNlcnZpY2UtY2FyZCBwIHtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpICFpbXBvcnRhbnQ7XG59XG5cbmJvZHkuZGFyay1tb2RlIC5wb3J0Zm9saW8sXG5ib2R5LmRhcmstbW9kZSAucG9ydGZvbGlvLXNlY3Rpb24sXG5ib2R5LmRhcmstbW9kZSBzZWN0aW9uLnBvcnRmb2xpbyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQtY29sb3IpICFpbXBvcnRhbnQ7XG59XG5cbmJvZHkuZGFyay1tb2RlIC5wb3J0Zm9saW8tY2FyZCxcbmJvZHkuZGFyay1tb2RlIC5wb3J0Zm9saW8tY2FyZCAuY2FyZCxcbmJvZHkuZGFyay1tb2RlIC5wb3J0Zm9saW8tY2FyZC5jYXJkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3VyZmFjZS1jb2xvcikgIWltcG9ydGFudDtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpICFpbXBvcnRhbnQ7XG59XG5cbmJvZHkuZGFyay1tb2RlIC5wb3J0Zm9saW8tY2FyZCBoMyBhLFxuYm9keS5kYXJrLW1vZGUgLnBvcnRmb2xpby1jYXJkIGgzIGEgc3BhbiB7XG4gIGNvbG9yOiB2YXIoLS1oZWFkaW5nLWNvbG9yKSAhaW1wb3J0YW50O1xufVxuXG5ib2R5LmRhcmstbW9kZSAucG9ydGZvbGlvLWNhcmQgcCB7XG4gIGNvbG9yOiB2YXIoLS1kZWZhdWx0LWNvbG9yKSAhaW1wb3J0YW50O1xufVxuXG5ib2R5LmRhcmstbW9kZSAubWFya2V0LXByb2R1Y3QtY2FyZCxcbmJvZHkuZGFyay1tb2RlIC5tYXJrZXQtcHJvZHVjdC1jYXJkIC5jYXJkLFxuYm9keS5kYXJrLW1vZGUgLm1hcmtldC1wcm9kdWN0LWNhcmQuY2FyZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiB2YXIoLS1kZWZhdWx0LWNvbG9yKSAhaW1wb3J0YW50O1xufVxuXG5ib2R5LmRhcmstbW9kZSAubWFya2V0LXByb2R1Y3QtY2FyZCBoMyBhLFxuYm9keS5kYXJrLW1vZGUgLm1hcmtldC1wcm9kdWN0LWNhcmQgaDUgYSB7XG4gIGNvbG9yOiB2YXIoLS1oZWFkaW5nLWNvbG9yKSAhaW1wb3J0YW50O1xufVxuXG5ib2R5LmRhcmstbW9kZSAubWFya2V0LXByb2R1Y3QtY2FyZCBwIHtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpICFpbXBvcnRhbnQ7XG59XG5cbmJvZHkuZGFyay1tb2RlIC5zZWN0aW9uLFxuYm9keS5kYXJrLW1vZGUgc2VjdGlvbixcbmJvZHkuZGFyay1tb2RlIFtjbGFzcyo9J3NlY3Rpb24nXSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQtY29sb3IpICFpbXBvcnRhbnQ7XG59XG5cbmJvZHkuZGFyay1tb2RlIC5zZWN0aW9uLmJnLWxpZ2h0LFxuYm9keS5kYXJrLW1vZGUgc2VjdGlvbi5iZy1saWdodCxcbmJvZHkuZGFyay1tb2RlIC5saWdodC1iYWNrZ3JvdW5kIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3VyZmFjZS1jb2xvcikgIWltcG9ydGFudDtcbn1cblxuYm9keS5kYXJrLW1vZGUgLmNhcmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKSAhaW1wb3J0YW50O1xuICBjb2xvcjogdmFyKC0tZGVmYXVsdC1jb2xvcikgIWltcG9ydGFudDtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkgIWltcG9ydGFudDtcbn1cblxuYm9keS5kYXJrLW1vZGUgLmJ0bi1vdXRsaW5lLXByaW1hcnkge1xuICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xufVxuXG5ib2R5LmRhcmstbW9kZSAuYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1jb250cmFzdC1jb2xvcik7XG59XG5cbmJvZHkuZGFyay1tb2RlIC5mb3JtLWNvbnRyb2wge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gIGNvbG9yOiB2YXIoLS1kZWZhdWx0LWNvbG9yKTtcbn1cblxuYm9keS5kYXJrLW1vZGUgLmZvcm0tY29udHJvbDpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWZhdWx0LWNvbG9yKTtcbn1cblxuYm9keS5kYXJrLW1vZGUgaW5wdXQ6OnBsYWNlaG9sZGVyLFxuYm9keS5kYXJrLW1vZGUgdGV4dGFyZWE6OnBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbn1cblxuYm9keS5kYXJrLW1vZGUgLm1vZGFsLWNvbnRlbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpO1xufVxuXG5ib2R5LmRhcmstbW9kZSAubW9kYWwtaGVhZGVyIHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xufVxuXG5ib2R5LmRhcmstbW9kZSAubW9kYWwtZm9vdGVyIHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xufVxuXG5ib2R5LmRhcmstbW9kZSAudGFibGUge1xuICBjb2xvcjogdmFyKC0tZGVmYXVsdC1jb2xvcik7XG59XG5cbmJvZHkuZGFyay1tb2RlIC50YWJsZS1zdHJpcGVkID4gdGJvZHkgPiB0cjpudGgtb2YtdHlwZShvZGQpIHtcbiAgLS1icy10YWJsZS1hY2NlbnQtYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG59XG5cbmJvZHkuZGFyay1tb2RlIC5mb290ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDYwNjA2O1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xufVxuXG4vKiBOYXYgTWVudSBDb2xvcnMgLSBUaGUgZm9sbG93aW5nIGNvbG9yIHZhcmlhYmxlcyBhcmUgdXNlZCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBuYXZpZ2F0aW9uIG1lbnUuIFRoZXkgYXJlIHNlcGFyYXRlIGZyb20gdGhlIGdsb2JhbCBjb2xvcnMgdG8gYWxsb3cgZm9yIG1vcmUgY3VzdG9taXphdGlvbiBvcHRpb25zICovXG46cm9vdCB7XG4gIC0tbmF2LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG4gIC0tbmF2LWhvdmVyLWNvbG9yOiAjMzM5NmQzO1xuICAtLW5hdi1tb2JpbGUtYmFja2dyb3VuZC1jb2xvcjogIzI5MzQzYTtcbiAgLS1uYXYtZHJvcGRvd24tYmFja2dyb3VuZC1jb2xvcjogIzI5MzQzYTtcbiAgLS1uYXYtZHJvcGRvd24tY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgLS1uYXYtZHJvcGRvd24taG92ZXItY29sb3I6ICMzMzk2ZDM7XG59XG5cbi8qIENvbG9yIFByZXNldHMgLSBUaGVzZSBjbGFzc2VzIG92ZXJyaWRlIGdsb2JhbCBjb2xvcnMgd2hlbiBhcHBsaWVkIHRvIGFueSBzZWN0aW9uIG9yIGVsZW1lbnQsIHByb3ZpZGluZyByZXVzZSBvZiB0aGUgc2FtIGNvbG9yIHNjaGVtZS4gKi9cblxuLmxpZ2h0LWJhY2tncm91bmQge1xuICAtLWJhY2tncm91bmQtY29sb3I6ICMwZDFkMjY7XG4gIC0tc3VyZmFjZS1jb2xvcjogIzE2MjYyZjtcbn1cblxuLmRhcmstYmFja2dyb3VuZCB7XG4gIC0tYmFja2dyb3VuZC1jb2xvcjogIzA2MDYwNjtcbiAgLS1kZWZhdWx0LWNvbG9yOiAjZmZmZmZmO1xuICAtLWhlYWRpbmctY29sb3I6ICNmZmZmZmY7XG4gIC0tc3VyZmFjZS1jb2xvcjogIzI1MjUyNTtcbiAgLS1jb250cmFzdC1jb2xvcjogI2ZmZmZmZjtcbn1cblxuLyogU21vb3RoIHNjcm9sbCAqL1xuOnJvb3Qge1xuICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDtcbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIyBHZW5lcmFsIFN0eWxpbmcgJiBTaGFyZWQgQ2xhc3Nlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuYm9keSB7XG4gIGNvbG9yOiB2YXIoLS1kZWZhdWx0LWNvbG9yKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZC1jb2xvcik7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1kZWZhdWx0LWZvbnQpO1xufVxuXG5hIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogMC4zcztcbn1cblxuYTpob3ZlciB7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgdHJhbnNwYXJlbnQgMjUlKTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBjb2xvcjogdmFyKC0taGVhZGluZy1jb2xvcik7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1oZWFkaW5nLWZvbnQpO1xufVxuXG4vKiBQSFAgRW1haWwgRm9ybSBNZXNzYWdlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5waHAtZW1haWwtZm9ybSAuZXJyb3ItbWVzc2FnZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICNkZjE1Mjk7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBwYWRkaW5nOiAxNXB4O1xuICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICBmb250LXdlaWdodDogNjAwO1xufVxuXG4ucGhwLWVtYWlsLWZvcm0gLnNlbnQtbWVzc2FnZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kOiAjMDU5NjUyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5waHAtZW1haWwtZm9ybSAubG9hZGluZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UtY29sb3IpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IDI0cHg7XG59XG5cbi5waHAtZW1haWwtZm9ybSAubG9hZGluZzpiZWZvcmUge1xuICBjb250ZW50OiAnJztcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIG1hcmdpbjogMCAxMHB4IC02cHggMDtcbiAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tc3VyZmFjZS1jb2xvcik7XG4gIGFuaW1hdGlvbjogcGhwLWVtYWlsLWZvcm0tbG9hZGluZyAxcyBsaW5lYXIgaW5maW5pdGU7XG59XG5cbkBrZXlmcmFtZXMgcGhwLWVtYWlsLWZvcm0tbG9hZGluZyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIyBHbG9iYWwgSGVhZGVyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uaGVhZGVyIHtcbiAgYmFja2dyb3VuZDogIzAwMDsgLyogYmxhY2sgYmFja2dyb3VuZCBsaWtlIHlvdXIgbG9nbyAqL1xuICBwYWRkaW5nOiAxMHB4IDA7XG4gIHotaW5kZXg6IDEwMDA7XG59XG5cbi5sb2dvIHtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAnVGltZXMgTmV3IFJvbWFuJywgc2VyaWY7XG59XG5cbi5sb2dvLXNxdWFyZSB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIG1hcmdpbi1yaWdodDogNnB4O1xufVxuXG4uYnJhbmQtdGV4dCB7XG4gIGZvbnQtc2l6ZTogMjZweDtcbiAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICdUaW1lcyBOZXcgUm9tYW4nLCBzZXJpZjtcbiAgY29sb3I6ICNmZmY7XG4gIGxldHRlci1zcGFjaW5nOiAwLjVweDtcbn1cblxuLyogT3B0aW9uYWwgaG92ZXIgZWZmZWN0ICovXG4ubG9nbzpob3ZlciAuYnJhbmQtdGV4dCB7XG4gIGNvbG9yOiAjMWY2ZmIzO1xufVxuXG4vKiBNYWtlIG5hdiBsaW5rcyB3aGl0ZSBhbmQgdGlkeSAqL1xuLm5hdm1lbnUgdWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDIwcHg7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuLm5hdm1lbnUgYSB7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5uYXZtZW51IGE6aG92ZXIsXG4ubmF2bWVudSBhLmFjdGl2ZSB7XG4gIGNvbG9yOiAjMWY2ZmIzO1xufVxuXG4vKiBSZXNwb25zaXZlOiBoaWRlIG5hdiBsaW5rcyBmb3Igc21hbGwgc2NyZWVucyAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC5uYXZtZW51IHVsIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tb2JpbGUtbmF2LXRvZ2dsZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgZm9udC1zaXplOiAyOHB4O1xuICB9XG59XG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4jIE5hdmlnYXRpb24gTWVudVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyogTmF2bWVudSAtIERlc2t0b3AgKi9cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLm5hdm1lbnUge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAubmF2bWVudSB1bCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cblxuICAubmF2bWVudSBsaSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLm5hdm1lbnUgYSxcbiAgLm5hdm1lbnUgYTpmb2N1cyB7XG4gICAgY29sb3I6IHZhcigtLW5hdi1jb2xvcik7XG4gICAgcGFkZGluZzogMThweCAxNXB4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbmF2LWZvbnQpO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gIH1cblxuICAubmF2bWVudSBhIGksXG4gIC5uYXZtZW51IGE6Zm9jdXMgaSB7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgdHJhbnNpdGlvbjogMC4zcztcbiAgfVxuXG4gIC5uYXZtZW51IGxpOmxhc3QtY2hpbGQgYSB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxuXG4gIC5uYXZtZW51IGxpOmhvdmVyID4gYSxcbiAgLm5hdm1lbnUgLmFjdGl2ZSxcbiAgLm5hdm1lbnUgLmFjdGl2ZTpmb2N1cyB7XG4gICAgY29sb3I6IHZhcigtLW5hdi1ob3Zlci1jb2xvcik7XG4gIH1cblxuICAubmF2bWVudSAuZHJvcGRvd24gdWwge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tbmF2LWRyb3Bkb3duLWJhY2tncm91bmQtY29sb3IpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgbGVmdDogMTRweDtcbiAgICB0b3A6IDEzMCU7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2l0aW9uOiAwLjNzO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICB6LWluZGV4OiA5OTtcbiAgICBib3gtc2hhZG93OiAwcHggMHB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICB9XG5cbiAgLm5hdm1lbnUgLmRyb3Bkb3duIHVsIGxpIHtcbiAgICBtaW4td2lkdGg6IDIwMHB4O1xuICB9XG5cbiAgLm5hdm1lbnUgLmRyb3Bkb3duIHVsIGEge1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICBmb250LXNpemU6IDE1cHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgY29sb3I6IHZhcigtLW5hdi1kcm9wZG93bi1jb2xvcik7XG4gIH1cblxuICAubmF2bWVudSAuZHJvcGRvd24gdWwgYSBpIHtcbiAgICBmb250LXNpemU6IDEycHg7XG4gIH1cblxuICAubmF2bWVudSAuZHJvcGRvd24gdWwgYTpob3ZlcixcbiAgLm5hdm1lbnUgLmRyb3Bkb3duIHVsIC5hY3RpdmU6aG92ZXIsXG4gIC5uYXZtZW51IC5kcm9wZG93biB1bCBsaTpob3ZlciA+IGEge1xuICAgIGNvbG9yOiB2YXIoLS1uYXYtZHJvcGRvd24taG92ZXItY29sb3IpO1xuICB9XG5cbiAgLm5hdm1lbnUgLmRyb3Bkb3duOmhvdmVyID4gdWwge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdG9wOiAxMDAlO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIH1cblxuICAubmF2bWVudSAuZHJvcGRvd24gLmRyb3Bkb3duIHVsIHtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogLTkwJTtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cblxuICAubmF2bWVudSAuZHJvcGRvd24gLmRyb3Bkb3duOmhvdmVyID4gdWwge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IC0xMDAlO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIH1cbn1cblxuLyogTmF2bWVudSAtIE1vYmlsZSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAubW9iaWxlLW5hdi10b2dnbGUge1xuICAgIGNvbG9yOiB2YXIoLS1uYXYtY29sb3IpO1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICBsaW5lLWhlaWdodDogMDtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuM3M7XG4gIH1cblxuICAubmF2bWVudSB7XG4gICAgcGFkZGluZzogMDtcbiAgICB6LWluZGV4OiA5OTk3O1xuICB9XG5cbiAgLm5hdm1lbnUgdWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6IDYwcHggMjBweCAyMHB4IDIwcHg7XG4gICAgcGFkZGluZzogMTBweCAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbmF2LW1vYmlsZS1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgei1pbmRleDogOTk5ODtcbiAgICBib3gtc2hhZG93OiAwcHggMHB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICB9XG5cbiAgLm5hdm1lbnUgYSxcbiAgLm5hdm1lbnUgYTpmb2N1cyB7XG4gICAgY29sb3I6IHZhcigtLW5hdi1kcm9wZG93bi1jb2xvcik7XG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1uYXYtZm9udCk7XG4gICAgZm9udC1zaXplOiAxN3B4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gIH1cblxuICAubmF2bWVudSBhIGksXG4gIC5uYXZtZW51IGE6Zm9jdXMgaSB7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgd2lkdGg6IDMwcHg7XG4gICAgaGVpZ2h0OiAzMHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgdHJhbnNpdGlvbjogMC4zcztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgdHJhbnNwYXJlbnQgOTAlKTtcbiAgfVxuXG4gIC5uYXZtZW51IGEgaTpob3ZlcixcbiAgLm5hdm1lbnUgYTpmb2N1cyBpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICAgIGNvbG9yOiB2YXIoLS1jb250cmFzdC1jb2xvcik7XG4gIH1cblxuICAubmF2bWVudSBhOmhvdmVyLFxuICAubmF2bWVudSAuYWN0aXZlLFxuICAubmF2bWVudSAuYWN0aXZlOmZvY3VzIHtcbiAgICBjb2xvcjogdmFyKC0tbmF2LWRyb3Bkb3duLWhvdmVyLWNvbG9yKTtcbiAgfVxuXG4gIC5uYXZtZW51IC5hY3RpdmUgaSxcbiAgLm5hdm1lbnUgLmFjdGl2ZTpmb2N1cyBpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICAgIGNvbG9yOiB2YXIoLS1jb250cmFzdC1jb2xvcik7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgfVxuXG4gIC5uYXZtZW51IC5kcm9wZG93biB1bCB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHotaW5kZXg6IDk5O1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBtYXJnaW46IDEwcHggMjBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1uYXYtZHJvcGRvd24tYmFja2dyb3VuZC1jb2xvcik7XG4gICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRlZmF1bHQtY29sb3IpLCB0cmFuc3BhcmVudCA5MCUpO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZS1pbi1vdXQ7XG4gIH1cblxuICAubmF2bWVudSAuZHJvcGRvd24gdWwgdWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzMsIDM3LCA0MSwgMC4xKTtcbiAgfVxuXG4gIC5uYXZtZW51IC5kcm9wZG93biA+IC5kcm9wZG93bi1hY3RpdmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzMsIDM3LCA0MSwgMC4wMyk7XG4gIH1cblxuICAubW9iaWxlLW5hdi1hY3RpdmUge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAubW9iaWxlLW5hdi1hY3RpdmUgLm1vYmlsZS1uYXYtdG9nZ2xlIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgZm9udC1zaXplOiAzMnB4O1xuICAgIHRvcDogMTVweDtcbiAgICByaWdodDogMTVweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgei1pbmRleDogOTk5OTtcbiAgfVxuXG4gIC5tb2JpbGUtbmF2LWFjdGl2ZSAubmF2bWVudSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgaW5zZXQ6IDA7XG4gICAgYmFja2dyb3VuZDogcmdiYSgzMywgMzcsIDQxLCAwLjgpO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gIH1cblxuICAubW9iaWxlLW5hdi1hY3RpdmUgLm5hdm1lbnUgPiB1bCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAubW9iaWxlLW5hdi1hY3RpdmUgLm5hdm1lbnUgLmJ0biB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbjogMTBweCAyMHB4O1xuICB9XG5cbiAgLm1vYmlsZS1uYXYtYWN0aXZlIC5uYXZtZW51IC50aGVtZS1zd2l0Y2hlciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbjogMTBweCAyMHB4O1xuICB9XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiMgR2xvYmFsIEZvb3RlclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmZvb3RlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWExYTFhO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHBhZGRpbmctYm90dG9tOiA1MHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5mb290ZXIgLmZvb3Rlci10b3Age1xuICBwYWRkaW5nLXRvcDogNTBweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgOTAlKTtcbn1cblxuLmZvb3RlciAuZm9vdGVyLWFib3V0IC5sb2dvIHtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIG1hcmdpbi1ib3R0b206IDI1cHg7XG59XG5cbi5mb290ZXIgLmZvb3Rlci1hYm91dCAubG9nbyBpbWcge1xuICBtYXgtaGVpZ2h0OiA0MHB4O1xuICBtYXJnaW4tcmlnaHQ6IDZweDtcbn1cblxuLmZvb3RlciAuZm9vdGVyLWFib3V0IC5sb2dvIHNwYW4ge1xuICBjb2xvcjogdmFyKC0taGVhZGluZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMzBweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWhlYWRpbmctZm9udCk7XG59XG5cbi5mb290ZXIgLmZvb3Rlci1hYm91dCBwIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LWZhbWlseTogdmFyKC0taGVhZGluZy1mb250KTtcbn1cblxuLmZvb3RlciAuc29jaWFsLWxpbmtzIGEge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDUwJSk7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgNTAlKTtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB0cmFuc2l0aW9uOiAwLjNzO1xufVxuXG4uZm9vdGVyIC5zb2NpYWwtbGlua3MgYTpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG59XG5cbi5mb290ZXIgaDQge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctYm90dG9tOiAxMnB4O1xufVxuXG4uZm9vdGVyIC5mb290ZXItbGlua3Mge1xuICBtYXJnaW4tYm90dG9tOiAzMHB4O1xufVxuXG4uZm9vdGVyIC5mb290ZXItbGlua3MgdWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG59XG5cbi5mb290ZXIgLmZvb3Rlci1saW5rcyB1bCBpIHtcbiAgcGFkZGluZy1yaWdodDogMnB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAwO1xufVxuXG4uZm9vdGVyIC5mb290ZXItbGlua3MgdWwgbGkge1xuICBwYWRkaW5nOiAxMHB4IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5mb290ZXIgLmZvb3Rlci1saW5rcyB1bCBsaTpmaXJzdC1jaGlsZCB7XG4gIHBhZGRpbmctdG9wOiAwO1xufVxuXG4uZm9vdGVyIC5mb290ZXItbGlua3MgdWwgYSB7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDIwJSk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbGluZS1oZWlnaHQ6IDE7XG59XG5cbi5mb290ZXIgLmZvb3Rlci1saW5rcyB1bCBhOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG59XG5cbi5mb290ZXIgLmZvb3Rlci1jb250YWN0IHAge1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG5cbi5mb290ZXIgLmNvcHlyaWdodCB7XG4gIHBhZGRpbmctdG9wOiAyNXB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRlZmF1bHQtY29sb3IpLCB0cmFuc3BhcmVudCA5NSUpO1xufVxuXG4uZm9vdGVyIC5jb3B5cmlnaHQgcCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5mb290ZXIgLmNyZWRpdHMge1xuICBtYXJnaW4tdG9wOiA2cHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIyBQcmVsb2FkZXJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiNwcmVsb2FkZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiA5OTk5OTk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQtY29sb3IpO1xuICB0cmFuc2l0aW9uOiBhbGwgMC42cyBlYXNlLW91dDtcbn1cblxuI3ByZWxvYWRlcjpiZWZvcmUge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IGNhbGMoNTAlIC0gMzBweCk7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gMzBweCk7XG4gIGJvcmRlcjogNnB4IHNvbGlkICNmZmZmZmY7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKSB0cmFuc3BhcmVudCB2YXIoLS1hY2NlbnQtY29sb3IpIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIHdpZHRoOiA2MHB4O1xuICBoZWlnaHQ6IDYwcHg7XG4gIGFuaW1hdGlvbjogYW5pbWF0ZS1wcmVsb2FkZXIgMS41cyBsaW5lYXIgaW5maW5pdGU7XG59XG5cbkBrZXlmcmFtZXMgYW5pbWF0ZS1wcmVsb2FkZXIge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiMgU2Nyb2xsIFRvcCBCdXR0b25cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5zY3JvbGwtdG9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG9wYWNpdHk6IDA7XG4gIHJpZ2h0OiAxNXB4O1xuICBib3R0b206IC0xNXB4O1xuICB6LWluZGV4OiA5OTk5OTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgd2lkdGg6IDQ0cHg7XG4gIGhlaWdodDogNDRweDtcbiAgYm9yZGVyLXJhZGl1czogNTBweDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHM7XG59XG5cbi5zY3JvbGwtdG9wIGkge1xuICBmb250LXNpemU6IDI0cHg7XG4gIGNvbG9yOiB2YXIoLS1jb250cmFzdC1jb2xvcik7XG4gIGxpbmUtaGVpZ2h0OiAwO1xufVxuXG4uc2Nyb2xsLXRvcDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCAyMCUpO1xuICBjb2xvcjogdmFyKC0tY29udHJhc3QtY29sb3IpO1xufVxuXG4uc2Nyb2xsLXRvcC5hY3RpdmUge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xuICBib3R0b206IDE1cHg7XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiMgRGlzYWJsZSBhb3MgYW5pbWF0aW9uIGRlbGF5IG9uIG1vYmlsZSBkZXZpY2VzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICBbZGF0YS1hb3MtZGVsYXldIHtcbiAgICB0cmFuc2l0aW9uLWRlbGF5OiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIyBHbG9iYWwgUGFnZSBUaXRsZXMgJiBCcmVhZGNydW1ic1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnBhZ2UtdGl0bGUge1xuICBjb2xvcjogdmFyKC0tZGVmYXVsdC1jb2xvcik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQtY29sb3IpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIHBhZGRpbmc6IDE2MHB4IDAgODBweCAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnBhZ2UtdGl0bGU6OmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KFxuICAgIDQ1ZGVnLFxuICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikgMHB4LFxuICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkgMXB4LFxuICAgIHRyYW5zcGFyZW50IDFweCxcbiAgICB0cmFuc3BhcmVudCAxMHB4XG4gICk7XG4gIHotaW5kZXg6IDE7XG59XG5cbi5wYWdlLXRpdGxlIGgxIHtcbiAgZm9udC1zaXplOiA0MnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4ucGFnZS10aXRsZSAuYnJlYWRjcnVtYnMgb2wge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cblxuLnBhZ2UtdGl0bGUgLmJyZWFkY3J1bWJzIG9sIGxpICsgbGkge1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG5cbi5wYWdlLXRpdGxlIC5icmVhZGNydW1icyBvbCBsaSArIGxpOjpiZWZvcmUge1xuICBjb250ZW50OiAnLyc7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgNTAlKTtcbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIyBHbG9iYWwgU2VjdGlvbnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbnNlY3Rpb24sXG4uc2VjdGlvbiB7XG4gIGNvbG9yOiB2YXIoLS1kZWZhdWx0LWNvbG9yKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZC1jb2xvcik7XG4gIHBhZGRpbmc6IDYwcHggMDtcbiAgc2Nyb2xsLW1hcmdpbi10b3A6IDkwcHg7XG4gIG92ZXJmbG93OiBjbGlwO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIHNlY3Rpb24sXG4gIC5zZWN0aW9uIHtcbiAgICBzY3JvbGwtbWFyZ2luLXRvcDogNjZweDtcbiAgfVxufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4jIEdsb2JhbCBTZWN0aW9uIFRpdGxlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnNlY3Rpb24tdGl0bGUge1xuICBwYWRkaW5nLWJvdHRvbTogNjBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uc2VjdGlvbi10aXRsZSBoMiB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgcGFkZGluZzogMDtcbiAgbGluZS1oZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAwO1xuICBsZXR0ZXItc3BhY2luZzogMS41cHg7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDUwJSk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnNlY3Rpb24tdGl0bGUgaDI6OmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIHdpZHRoOiAxMjBweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgbWFyZ2luOiA0cHggMTBweDtcbn1cblxuLnNlY3Rpb24tdGl0bGUgZGl2IHtcbiAgY29sb3I6IHZhcigtLWhlYWRpbmctY29sb3IpO1xuICBtYXJnaW46IDA7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAyOHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBmb250LWZhbWlseTogdmFyKC0taGVhZGluZy1mb250KTtcbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIyBIZXJvIFNlY3Rpb25cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5oZXJvIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IDEwMHB4IDA7XG59XG5cbi5oZXJvIGgxIHtcbiAgY29sb3I6IHZhcigtLWhlYWRpbmctY29sb3IpO1xufVxuXG4uaGVybyBwIHtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpO1xufVxuXG4uZGFyay1tb2RlIC5oZXJvIGgxIHtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbn1cblxuLmRhcmstbW9kZSAuaGVybyBwIHtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpO1xufVxuXG4uaGVybzo6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoXG4gICAgNDVkZWcsXG4gICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSAwcHgsXG4gICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSAxcHgsXG4gICAgdHJhbnNwYXJlbnQgMXB4LFxuICAgIHRyYW5zcGFyZW50IDEwcHhcbiAgKTtcbiAgei1pbmRleDogMTtcbn1cblxuLmhlcm8gLmNvbnRhaW5lcixcbi5oZXJvIC5jb250YWluZXItZmx1aWQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDI7XG59XG5cbi5oZXJvIC5jb250ZW50LWNvbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nLXJpZ2h0OiAzcmVtO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLmhlcm8gLmNvbnRlbnQtY29sIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDNyZW07XG4gIH1cbn1cblxuLmhlcm8gLmFnZW5jeS1uYW1lIHtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xufVxuXG4uaGVybyAuYWdlbmN5LW5hbWUgaDUge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XG4gIGNvbG9yOiB2YXIoLS1jb250cmFzdC1jb2xvcik7XG4gIG1hcmdpbjogMDtcbn1cblxuLmhlcm8gLm1haW4taGVhZGluZyB7XG4gIG1hcmdpbi1ib3R0b206IDJyZW07XG59XG5cbi5oZXJvIC5tYWluLWhlYWRpbmcgaDEge1xuICBmb250LXNpemU6IDVyZW07XG4gIGZvbnQtd2VpZ2h0OiA4MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjE7XG4gIGxldHRlci1zcGFjaW5nOiAtMXB4O1xuICBtYXJnaW46IDA7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMjAwcHgpIHtcbiAgLmhlcm8gLm1haW4taGVhZGluZyBoMSB7XG4gICAgZm9udC1zaXplOiA0cmVtO1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAuaGVybyAubWFpbi1oZWFkaW5nIGgxIHtcbiAgICBmb250LXNpemU6IDNyZW07XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gIC5oZXJvIC5tYWluLWhlYWRpbmcgaDEge1xuICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICB9XG59XG5cbi5oZXJvIC5kaXZpZGVyIHtcbiAgd2lkdGg6IDYwJTtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgODUlKTtcbiAgbWFyZ2luLWJvdHRvbTogMnJlbTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5oZXJvIC5kaXZpZGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uaGVybyAuZGVzY3JpcHRpb24ge1xuICBtYXJnaW4tYm90dG9tOiAyLjVyZW07XG59XG5cbi5oZXJvIC5kZXNjcmlwdGlvbiBwIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS43O1xuICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRlZmF1bHQtY29sb3IpLCB0cmFuc3BhcmVudCAyMCUpO1xuICBtYXJnaW46IDA7XG59XG5cbi5oZXJvIC5jdGEtYnV0dG9uIC5idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgNDAlKTtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpO1xuICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogNTBweDtcbiAgZm9udC1zaXplOiAwLjlyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG5cbi5oZXJvIC5jdGEtYnV0dG9uIC5idG4gc3BhbiB7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xufVxuXG4uaGVybyAuY3RhLWJ1dHRvbiAuYnRuIGkge1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZTtcbn1cblxuLmhlcm8gLmN0YS1idXR0b24gLmJ0bjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbn1cblxuLmhlcm8gLmN0YS1idXR0b24gLmJ0bjpob3ZlciBpIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDVweCk7XG59XG5cbi5oZXJvIC52aXN1YWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAuaGVybyAudmlzdWFsLWNvbnRlbnQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIH1cbn1cblxuLmhlcm8gLmZsdWlkLXNoYXBlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbi5oZXJvIC5mbHVpZC1zaGFwZSAuZmx1aWQtaW1nIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbiAgYW5pbWF0aW9uOiBmbG9hdCA2cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBmbG9hdCB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTtcbiAgfVxuXG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNXB4KTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpO1xuICB9XG59XG5cbi5oZXJvIC5zdGF0cy1jYXJkIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDEwJTtcbiAgcmlnaHQ6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zdXJmYWNlLWNvbG9yKSwgdHJhbnNwYXJlbnQgNTAlKTtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xuICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDkwJSk7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIHBhZGRpbmc6IDEuNXJlbTtcbiAgd2lkdGg6IDIwMHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAuaGVybyAuc3RhdHMtY2FyZCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvdHRvbTogYXV0bztcbiAgICByaWdodDogYXV0bztcbiAgICBtYXJnaW4tdG9wOiAycmVtO1xuICAgIHdpZHRoOiA5MCU7XG4gIH1cbn1cblxuLmhlcm8gLnN0YXRzLWNhcmQgLnN0YXRzLW51bWJlciBoMiB7XG4gIGZvbnQtc2l6ZTogM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luOiAwO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLmhlcm8gLnN0YXRzLWNhcmQgLnN0YXRzLWxhYmVsIHtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xufVxuXG4uaGVybyAuc3RhdHMtY2FyZCAuc3RhdHMtbGFiZWwgcCB7XG4gIGZvbnQtc2l6ZTogMC45cmVtO1xuICBtYXJnaW46IDA7XG59XG5cbi5oZXJvIC5zdGF0cy1jYXJkIC5zdGF0cy1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxLjVyZW07XG4gIHJpZ2h0OiAxLjVyZW07XG59XG5cbi5oZXJvIC5zdGF0cy1jYXJkIC5zdGF0cy1hcnJvdyBhIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDMycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xufVxuXG4uaGVybyAuc3RhdHMtY2FyZCAuc3RhdHMtYXJyb3cgYTpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDIwJSk7XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiMgQWJvdXQgU2VjdGlvblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmFib3V0IHtcbiAgcGFkZGluZy10b3A6IDYwcHg7XG4gIHBhZGRpbmctYm90dG9tOiA2MHB4O1xufVxuXG4uYWJvdXQgLmFib3V0LWltYWdlIHtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uYWJvdXQgLmFib3V0LWltYWdlIC5leHBlcmllbmNlLWJhZGdlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDMwcHg7XG4gIHJpZ2h0OiAtMzBweDtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbiAgcGFkZGluZzogMS41cmVtO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtaW4td2lkdGg6IDE0MHB4O1xufVxuXG4uYWJvdXQgLmFib3V0LWltYWdlIC5leHBlcmllbmNlLWJhZGdlIC55ZWFycyB7XG4gIGZvbnQtc2l6ZTogMi41cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsaW5lLWhlaWdodDogMTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLmFib3V0IC5hYm91dC1pbWFnZSAuZXhwZXJpZW5jZS1iYWRnZSAudGV4dCB7XG4gIGZvbnQtc2l6ZTogMC45cmVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmFib3V0IC5hYm91dC1pbWFnZSAuZXhwZXJpZW5jZS1iYWRnZSB7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAyMHB4O1xuICAgIHBhZGRpbmc6IDFyZW07XG4gICAgbWluLXdpZHRoOiAxMjBweDtcbiAgfVxuXG4gIC5hYm91dCAuYWJvdXQtaW1hZ2UgLmV4cGVyaWVuY2UtYmFkZ2UgLnllYXJzIHtcbiAgICBmb250LXNpemU6IDJyZW07XG4gIH1cbn1cblxuLmFib3V0IC5hYm91dC1jb250ZW50IGgyIHtcbiAgZm9udC1zaXplOiAyLjJyZW07XG4gIG1hcmdpbi1ib3R0b206IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuYWJvdXQgLmFib3V0LWNvbnRlbnQgaDIge1xuICAgIGZvbnQtc2l6ZTogMS44cmVtO1xuICB9XG59XG5cbi5hYm91dCAuYWJvdXQtY29udGVudCAubGVhZCB7XG4gIGZvbnQtc2l6ZTogMS4xNXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4yNXJlbTtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1oZWFkaW5nLWNvbG9yKSwgdHJhbnNwYXJlbnQgMzAlKTtcbn1cblxuLmFib3V0IC5hYm91dC1jb250ZW50IHAge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuXG4uYWJvdXQgLmFib3V0LWNvbnRlbnQgLmZlYXR1cmUtaXRlbSB7XG4gIHBhZGRpbmc6IDEuMjVyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xufVxuXG4uYWJvdXQgLmFib3V0LWNvbnRlbnQgLmZlYXR1cmUtaXRlbTpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4uYWJvdXQgLmFib3V0LWNvbnRlbnQgLmZlYXR1cmUtaXRlbSBpIHtcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5hYm91dCAuYWJvdXQtY29udGVudCAuZmVhdHVyZS1pdGVtIGg1IHtcbiAgZm9udC1zaXplOiAxLjE1cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xufVxuXG4uYWJvdXQgLmFib3V0LWNvbnRlbnQgLmZlYXR1cmUtaXRlbSBwIHtcbiAgZm9udC1zaXplOiAwLjlyZW07XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5hYm91dCAuYWJvdXQtY29udGVudCAuYnRuLXByaW1hcnkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIHBhZGRpbmc6IDAuNXJlbSAxLjVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDUwcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiB2YXIoLS1jb250cmFzdC1jb2xvcik7XG59XG5cbi5hYm91dCAuYWJvdXQtY29udGVudCAuYnRuLXByaW1hcnk6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgYmxhY2sgMTAlKTtcbiAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgYmxhY2sgMTAlKTtcbn1cblxuLmFib3V0IC50ZXN0aW1vbmlhbC1zZWN0aW9uIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wOCk7XG59XG5cbi5hYm91dCAudGVzdGltb25pYWwtc2VjdGlvbiAudGVzdGltb25pYWwtaW50cm8gaDMge1xuICBmb250LXNpemU6IDEuNzVyZW07XG4gIG1hcmdpbi1ib3R0b206IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbi5hYm91dCAudGVzdGltb25pYWwtc2VjdGlvbiAudGVzdGltb25pYWwtaW50cm8gcCB7XG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbn1cblxuLmFib3V0IC50ZXN0aW1vbmlhbC1zZWN0aW9uIC50ZXN0aW1vbmlhbC1pbnRybyAuc3dpcGVyLW5hdi1idXR0b25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAxMHB4O1xufVxuXG4uYWJvdXQgLnRlc3RpbW9uaWFsLXNlY3Rpb24gLnRlc3RpbW9uaWFsLWludHJvIC5zd2lwZXItbmF2LWJ1dHRvbnMgYnV0dG9uIHtcbiAgd2lkdGg6IDQ0cHg7XG4gIGhlaWdodDogNDRweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA4KTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbn1cblxuLmFib3V0IC50ZXN0aW1vbmlhbC1zZWN0aW9uIC50ZXN0aW1vbmlhbC1pbnRybyAuc3dpcGVyLW5hdi1idXR0b25zIGJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbn1cblxuLmFib3V0IC50ZXN0aW1vbmlhbC1zZWN0aW9uIC50ZXN0aW1vbmlhbC1pbnRybyAuc3dpcGVyLW5hdi1idXR0b25zIGJ1dHRvbiBpIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xufVxuXG4uYWJvdXQgLnRlc3RpbW9uaWFsLXNlY3Rpb24gLnRlc3RpbW9uaWFsLXNsaWRlciB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5hYm91dCAudGVzdGltb25pYWwtc2VjdGlvbiAudGVzdGltb25pYWwtc2xpZGVyIC5zd2lwZXItd3JhcHBlciB7XG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xufVxuXG4uYWJvdXQgLnRlc3RpbW9uaWFsLXNlY3Rpb24gLnRlc3RpbW9uaWFsLWl0ZW0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgcGFkZGluZzogMnJlbTtcbiAgYm94LXNoYWRvdzogMCA1cHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5hYm91dCAudGVzdGltb25pYWwtc2VjdGlvbiAudGVzdGltb25pYWwtaXRlbSAucmF0aW5nIHtcbiAgY29sb3I6ICNmZmMxMDc7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbn1cblxuLmFib3V0IC50ZXN0aW1vbmlhbC1zZWN0aW9uIC50ZXN0aW1vbmlhbC1pdGVtIHAge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbn1cblxuLmFib3V0IC50ZXN0aW1vbmlhbC1zZWN0aW9uIC50ZXN0aW1vbmlhbC1pdGVtIC5jbGllbnQtaW5mbyAuY2xpZW50LWltZyB7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDUwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICBvYmplY3QtZml0OiBjb3Zlcjtcbn1cblxuLmFib3V0IC50ZXN0aW1vbmlhbC1zZWN0aW9uIC50ZXN0aW1vbmlhbC1pdGVtIC5jbGllbnQtaW5mbyBoNiB7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5hYm91dCAudGVzdGltb25pYWwtc2VjdGlvbiAudGVzdGltb25pYWwtaXRlbSAuY2xpZW50LWluZm8gc3BhbiB7XG4gIGZvbnQtc2l6ZTogMC44NXJlbTtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgNDAlKTtcbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIyBTZXJ2aWNlcyBTZWN0aW9uXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uc2VydmljZXMgLnNlcnZpY2UtaGVhZGVyIHtcbiAgbWFyZ2luLWJvdHRvbTogNjBweDtcbn1cblxuLnNlcnZpY2VzIC5zZXJ2aWNlLWhlYWRlciAuc2VydmljZS1pbnRybyAuc2VydmljZS1oZWFkaW5nIHtcbiAgZm9udC1zaXplOiA0OHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBjb2xvcjogdmFyKC0taGVhZGluZy1jb2xvcik7XG59XG5cbi5zZXJ2aWNlcyAuc2VydmljZS1oZWFkZXIgLnNlcnZpY2UtaW50cm8gLnNlcnZpY2UtaGVhZGluZyBkaXYge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtaGVhZGVyIC5zZXJ2aWNlLWludHJvIC5zZXJ2aWNlLWhlYWRpbmcgc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gIC5zZXJ2aWNlcyAuc2VydmljZS1oZWFkZXIgLnNlcnZpY2UtaW50cm8gLnNlcnZpY2UtaGVhZGluZyB7XG4gICAgZm9udC1zaXplOiAzNnB4O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuc2VydmljZXMgLnNlcnZpY2UtaGVhZGVyIC5zZXJ2aWNlLWludHJvIC5zZXJ2aWNlLWhlYWRpbmcge1xuICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICB9XG59XG5cbi5zZXJ2aWNlcyAuc2VydmljZS1oZWFkZXIgLnNlcnZpY2Utc3VtbWFyeSBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMjVweDtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpO1xufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtaGVhZGVyIC5zZXJ2aWNlLXN1bW1hcnkgLnNlcnZpY2UtYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDEycHggMzBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtaGVhZGVyIC5zZXJ2aWNlLXN1bW1hcnkgLnNlcnZpY2UtYnRuIGkge1xuICBtYXJnaW4tbGVmdDogMTBweDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZTtcbn1cblxuLnNlcnZpY2VzIC5zZXJ2aWNlLWhlYWRlciAuc2VydmljZS1zdW1tYXJ5IC5zZXJ2aWNlLWJ0bjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCAxNSUpO1xuICBjb2xvcjogdmFyKC0tY29udHJhc3QtY29sb3IpO1xufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtaGVhZGVyIC5zZXJ2aWNlLXN1bW1hcnkgLnNlcnZpY2UtYnRuOmhvdmVyIGkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNXB4KTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gIC5zZXJ2aWNlcyAuc2VydmljZS1oZWFkZXIgLnNlcnZpY2Utc3VtbWFyeSB7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbiAgfVxufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtY2FyZCB7XG4gIHBhZGRpbmc6IDQwcHggNDBweCA0MHB4IDQwcHg7XG4gIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgOTAlKTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbn1cblxuLnNlcnZpY2VzIC5zZXJ2aWNlLWNhcmQgLnNlcnZpY2UtaWNvbiB7XG4gIG1hcmdpbi1ib3R0b206IDI1cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA5MCUpO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIHdpZHRoOiA2NHB4O1xuICBoZWlnaHQ6IDY0cHg7XG59XG5cbi5zZXJ2aWNlcyAuc2VydmljZS1jYXJkIC5zZXJ2aWNlLWljb24gaSB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG5cbi5zZXJ2aWNlcyAuc2VydmljZS1jYXJkIGgzIHtcbiAgZm9udC1zaXplOiAyOHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICBmb250LXdlaWdodDogNzAwO1xufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtY2FyZCBoMyBhIHtcbiAgY29sb3I6IHZhcigtLWhlYWRpbmctY29sb3IpO1xuICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzIGVhc2U7XG59XG5cbi5zZXJ2aWNlcyAuc2VydmljZS1jYXJkIGgzIGEgc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtY2FyZCBoMyBhOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG59XG5cbi5zZXJ2aWNlcyAuc2VydmljZS1jYXJkIHAge1xuICBjb2xvcjogdmFyKC0tZGVmYXVsdC1jb2xvcik7XG4gIHRyYW5zaXRpb246IGNvbG9yIDAuM3MgZWFzZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLnNlcnZpY2VzIC5zZXJ2aWNlLWNhcmQgLmNhcmQtYWN0aW9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICB3aWR0aDogODBweDtcbiAgaGVpZ2h0OiA4MHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCk7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG5cbi5zZXJ2aWNlcyAuc2VydmljZS1jYXJkIC5jYXJkLWFjdGlvbiBpIHtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBjb2xvcjogdmFyKC0tY29udHJhc3QtY29sb3IpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlO1xufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtY2FyZCAuY2FyZC1hY3Rpb246aG92ZXIgaSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbn1cblxuLnNlcnZpY2VzIC5zZXJ2aWNlLWNhcmQ6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3VyZmFjZS1jb2xvcik7XG4gIGNsaXAtcGF0aDogcG9seWdvbig3MCUgMCwgMTAwJSAzMCUsIDEwMCUgMTAwJSwgMCAxMDAlLCAwIDApO1xuICB6LWluZGV4OiAtMTtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtY2FyZDpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5zZXJ2aWNlcyAuc2VydmljZS1jYXJkOmhvdmVyOjpiZWZvcmUge1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbn1cblxuLnNlcnZpY2VzIC5zZXJ2aWNlLWNhcmQ6aG92ZXIgaDMgYSB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtY2FyZDpob3ZlciBoMyBhOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG59XG5cbi5zZXJ2aWNlcyAuc2VydmljZS1jYXJkOmhvdmVyIHAge1xuICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRlZmF1bHQtY29sb3IpLCB0cmFuc3BhcmVudCAyMCUpO1xufVxuXG4uc2VydmljZXMgLnNlcnZpY2UtY2FyZDpob3ZlciAuY2FyZC1hY3Rpb24ge1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi5zZXJ2aWNlcyAuc2VydmljZS1jYXJkOmhvdmVyIC5zZXJ2aWNlLWljb24gaSB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5zZXJ2aWNlcyAuc2VydmljZS1jYXJkIHtcbiAgICBwYWRkaW5nOiAxNTBweCAyNXB4IDI1cHg7XG4gIH1cblxuICAuc2VydmljZXMgLnNlcnZpY2UtY2FyZCBoMyB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICB9XG5cbiAgLnNlcnZpY2VzIC5zZXJ2aWNlLWNhcmQgLnNlcnZpY2UtaWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNDBweDtcbiAgICBsZWZ0OiAyNXB4O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuc2VydmljZXMge1xuICAgIHBhZGRpbmc6IDcwcHggMCA1MHB4O1xuICB9XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiMgU3RlcHMgU2VjdGlvblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnN0ZXBzIC5zdGVwcy13cmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAyMHB4IDA7XG59XG5cbi5zdGVwcyAuc3RlcHMtd3JhcHBlcjo6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDg1JSk7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLnN0ZXBzIC5zdGVwLWl0ZW0ge1xuICBtYXJnaW4tYm90dG9tOiA1MHB4O1xuICB3aWR0aDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uc3RlcHMgLnN0ZXAtaXRlbTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLnN0ZXBzIC5zdGVwLWl0ZW06bnRoLWNoaWxkKGV2ZW4pIC5zdGVwLWNvbnRlbnQge1xuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG59XG5cbi5zdGVwcyAuc3RlcC1jb250ZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAzMHB4O1xufVxuXG4uc3RlcHMgLnN0ZXAtaWNvbiB7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICB3aWR0aDogODBweDtcbiAgaGVpZ2h0OiA4MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBib3gtc2hhZG93OiAwIDAgMjBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJvcmRlcjogMnB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA4NSUpO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLWluLW91dDtcbn1cblxuLnN0ZXBzIC5zdGVwLWljb24gaSB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2UtaW4tb3V0O1xufVxuXG4uc3RlcHMgLnN0ZXAtaW5mbyB7XG4gIGZsZXg6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpO1xuICBwYWRkaW5nOiAzMHB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgNXB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1pbi1vdXQ7XG59XG5cbi5zdGVwcyAuc3RlcC1pbmZvOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpO1xufVxuXG4uc3RlcHMgLnN0ZXAtbnVtYmVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LWZhbWlseTogdmFyKC0taGVhZGluZy1mb250KTtcbiAgZm9udC1zaXplOiAwLjlyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4uc3RlcHMgaDMge1xuICBmb250LXNpemU6IDEuM3JlbTtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6IHZhcigtLWhlYWRpbmctY29sb3IpO1xufVxuXG4uc3RlcHMgcCB7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDIwJSk7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC5zdGVwcyAuc3RlcHMtd3JhcHBlcjo6YmVmb3JlIHtcbiAgICBsZWZ0OiAyNXB4O1xuICB9XG5cbiAgLnN0ZXBzIC5zdGVwLWl0ZW0gLnN0ZXAtY29udGVudCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnN0ZXBzIC5zdGVwLWljb24ge1xuICAgIHdpZHRoOiA2MHB4O1xuICAgIGhlaWdodDogNjBweDtcbiAgfVxuXG4gIC5zdGVwcyAuc3RlcC1pY29uIGkge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgfVxuXG4gIC5zdGVwcyAuc3RlcC1pbmZvIHtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICB9XG5cbiAgLnN0ZXBzIGgzIHtcbiAgICBmb250LXNpemU6IDEuM3JlbTtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnN0ZXBzIC5zdGVwLWNvbnRlbnQge1xuICAgIGdhcDogMjBweDtcbiAgfVxuXG4gIC5zdGVwcyAuc3RlcC1pY29uIHtcbiAgICB3aWR0aDogNTBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cblxuICAuc3RlcHMgLnN0ZXAtaWNvbiBpIHtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gIH1cblxuICAuc3RlcHMgLnN0ZXAtaW5mbyB7XG4gICAgcGFkZGluZzogMTVweDtcbiAgfVxuXG4gIC5zdGVwcyBoMyB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gIH1cblxuICAuc3RlcHMgcCB7XG4gICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICB9XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiMgQ2FsbCBUbyBBY3Rpb24gU2VjdGlvblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmNhbGwtdG8tYWN0aW9uIHtcbiAgcGFkZGluZy10b3A6IDgwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDk3JSk7XG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmctYm90dG9tOiA4MHB4O1xufVxuXG4uY2FsbC10by1hY3Rpb24gLmJhZGdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDkwJSk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgYm9yZGVyLXJhZGl1czogMnJlbTtcbn1cblxuLmNhbGwtdG8tYWN0aW9uIGgyIHtcbiAgZm9udC1zaXplOiBjbGFtcCgxLjc1cmVtLCAzdncsIDIuNXJlbSk7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIG1hcmdpbjogMDtcbn1cblxuLmNhbGwtdG8tYWN0aW9uIHAge1xuICBmb250LXNpemU6IDEuMTI1cmVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICBvcGFjaXR5OiAwLjk7XG59XG5cbi5jYWxsLXRvLWFjdGlvbiAuZmVhdHVyZXMgLmZlYXR1cmUtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3VyZmFjZS1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2U7XG59XG5cbi5jYWxsLXRvLWFjdGlvbiAuZmVhdHVyZXMgLmZlYXR1cmUtaXRlbTpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLmNhbGwtdG8tYWN0aW9uIC5mZWF0dXJlcyAuZmVhdHVyZS1pdGVtIGkge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xufVxuXG4uY2FsbC10by1hY3Rpb24gLmZlYXR1cmVzIC5mZWF0dXJlLWl0ZW0gc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5jYWxsLXRvLWFjdGlvbiAuY3RhLWJ1dHRvbnMgLmJ0biB7XG4gIHBhZGRpbmc6IDAuNzVyZW0gMS41cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG5cbi5jYWxsLXRvLWFjdGlvbiAuY3RhLWJ1dHRvbnMgLmJ0bi5idG4tcHJpbWFyeSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbn1cblxuLmNhbGwtdG8tYWN0aW9uIC5jdGEtYnV0dG9ucyAuYnRuLmJ0bi1wcmltYXJ5OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDE1JSk7XG4gIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDE1JSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLmNhbGwtdG8tYWN0aW9uIC5jdGEtYnV0dG9ucyAuYnRuLmJ0bi1vdXRsaW5lIHtcbiAgYm9yZGVyOiAycHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDcwJSk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xufVxuXG4uY2FsbC10by1hY3Rpb24gLmN0YS1idXR0b25zIC5idG4uYnRuLW91dGxpbmU6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1jb250cmFzdC1jb2xvcik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLmNhbGwtdG8tYWN0aW9uIC5jb250ZW50LXJpZ2h0IHtcbiAgZmxleC1zaHJpbms6IDA7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgd2lkdGg6IDQ1MHB4O1xufVxuXG4uY2FsbC10by1hY3Rpb24gLmNvbnRlbnQtcmlnaHQgaW1nIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbiAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4uY2FsbC10by1hY3Rpb24gLmNvbnRlbnQtcmlnaHQgLmZsb2F0aW5nLWNhcmQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMnJlbTtcbiAgcmlnaHQ6IC0xcmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgcGFkZGluZzogMXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDFyZW07XG4gIGFuaW1hdGlvbjogZmxvYXQgM3MgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG59XG5cbi5jYWxsLXRvLWFjdGlvbiAuY29udGVudC1yaWdodCAuZmxvYXRpbmctY2FyZCAuY2FyZC1pY29uIHtcbiAgd2lkdGg6IDNyZW07XG4gIGhlaWdodDogM3JlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDkwJSk7XG4gIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uY2FsbC10by1hY3Rpb24gLmNvbnRlbnQtcmlnaHQgLmZsb2F0aW5nLWNhcmQgLmNhcmQtaWNvbiBpIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMS41cmVtO1xufVxuXG4uY2FsbC10by1hY3Rpb24gLmNvbnRlbnQtcmlnaHQgLmZsb2F0aW5nLWNhcmQgLmNhcmQtY29udGVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5cbi5jYWxsLXRvLWFjdGlvbiAuY29udGVudC1yaWdodCAuZmxvYXRpbmctY2FyZCAuY2FyZC1jb250ZW50IC5zdGF0cy1udW1iZXIge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xufVxuXG4uY2FsbC10by1hY3Rpb24gLmNvbnRlbnQtcmlnaHQgLmZsb2F0aW5nLWNhcmQgLmNhcmQtY29udGVudCAuc3RhdHMtdGV4dCB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIG9wYWNpdHk6IDAuODtcbn1cblxuLmNhbGwtdG8tYWN0aW9uIC5kZWNvcmF0aW9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHotaW5kZXg6IDA7XG59XG5cbi5jYWxsLXRvLWFjdGlvbiAuZGVjb3JhdGlvbiAuY2lyY2xlLTEsXG4uY2FsbC10by1hY3Rpb24gLmRlY29yYXRpb24gLmNpcmNsZS0yIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA5MCUpO1xufVxuXG4uY2FsbC10by1hY3Rpb24gLmRlY29yYXRpb24gLmNpcmNsZS0xIHtcbiAgd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IDMwMHB4O1xuICB0b3A6IC0xNTBweDtcbiAgcmlnaHQ6IC0xNTBweDtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4uY2FsbC10by1hY3Rpb24gLmRlY29yYXRpb24gLmNpcmNsZS0yIHtcbiAgd2lkdGg6IDIwMHB4O1xuICBoZWlnaHQ6IDIwMHB4O1xuICBib3R0b206IC0xMDBweDtcbiAgbGVmdDogLTEwMHB4O1xuICBvcGFjaXR5OiAwLjM7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTEuOThweCkge1xuICAuY2FsbC10by1hY3Rpb24ge1xuICAgIHBhZGRpbmc6IDJyZW07XG4gIH1cblxuICAuY2FsbC10by1hY3Rpb24gLmNvbnRlbnQtcmlnaHQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi10b3A6IDJyZW07XG4gIH1cblxuICAuY2FsbC10by1hY3Rpb24gLmNvbnRlbnQtcmlnaHQgLmZsb2F0aW5nLWNhcmQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3R0b206IGF1dG87XG4gICAgcmlnaHQ6IGF1dG87XG4gICAgbWFyZ2luLXRvcDogLTNyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICAgIHotaW5kZXg6IDE7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBmbG9hdCB7XG4gIDAlLFxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cblxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIyBUZXN0aW1vbmlhbHMgU2VjdGlvblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnRlc3RpbW9uaWFscyAudGVzdGltb25pYWxzLXNsaWRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctYm90dG9tOiA2MHB4O1xufVxuXG4udGVzdGltb25pYWxzIC5zd2lwZXItd3JhcHBlciB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLnRlc3RpbW9uaWFscyAudGVzdGltb25pYWwtaXRlbSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpO1xuICBwYWRkaW5nOiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiAyMHB4O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcbiAgLnRlc3RpbW9uaWFscyAudGVzdGltb25pYWwtaXRlbSB7XG4gICAgcGFkZGluZzogMjBweDtcbiAgfVxufVxuXG4udGVzdGltb25pYWxzIC50ZXN0aW1vbmlhbC1pdGVtIGgyIHtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4udGVzdGltb25pYWxzIC50ZXN0aW1vbmlhbC1pdGVtIHAge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjg7XG4gIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLnRlc3RpbW9uaWFscyAudGVzdGltb25pYWwtaXRlbSAucHJvZmlsZSB7XG4gIGdhcDogMTVweDtcbn1cblxuLnRlc3RpbW9uaWFscyAudGVzdGltb25pYWwtaXRlbSAucHJvZmlsZSAucHJvZmlsZS1pbWcge1xuICB3aWR0aDogNjBweDtcbiAgaGVpZ2h0OiA2MHB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xufVxuXG4udGVzdGltb25pYWxzIC50ZXN0aW1vbmlhbC1pdGVtIC5wcm9maWxlIC5wcm9maWxlLWluZm8gaDMge1xuICBmb250LXNpemU6IDE4cHg7XG4gIG1hcmdpbjogMDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLnRlc3RpbW9uaWFscyAudGVzdGltb25pYWwtaXRlbSAucHJvZmlsZSAucHJvZmlsZS1pbmZvIHNwYW4ge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvcikgNzAlLCB0cmFuc3BhcmVudCk7XG59XG5cbi50ZXN0aW1vbmlhbHMgLnRlc3RpbW9uaWFsLWl0ZW0gLmZlYXR1cmVkLWltZy13cmFwcGVyIHtcbiAgbWluLWhlaWdodDogNDAwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcbn1cblxuLnRlc3RpbW9uaWFscyAudGVzdGltb25pYWwtaXRlbSAuZmVhdHVyZWQtaW1nIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xufVxuXG4udGVzdGltb25pYWxzIC5zd2lwZXItbmF2aWdhdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBnYXA6IDEwcHg7XG59XG5cbi50ZXN0aW1vbmlhbHMgLnN3aXBlci1idXR0b24tcHJldixcbi50ZXN0aW1vbmlhbHMgLnN3aXBlci1idXR0b24tbmV4dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IGF1dG87XG4gIHRvcDogYXV0bztcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogNDRweDtcbiAgaGVpZ2h0OiA0NHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvcikgMTAlLCB0cmFuc3BhcmVudCk7XG4gIHRyYW5zaXRpb246IDAuM3M7XG59XG5cbi50ZXN0aW1vbmlhbHMgLnN3aXBlci1idXR0b24tcHJldjo6YWZ0ZXIsXG4udGVzdGltb25pYWxzIC5zd2lwZXItYnV0dG9uLW5leHQ6OmFmdGVyIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBjb2xvcjogdmFyKC0tZGVmYXVsdC1jb2xvcik7XG59XG5cbi50ZXN0aW1vbmlhbHMgLnN3aXBlci1idXR0b24tcHJldjpob3Zlcixcbi50ZXN0aW1vbmlhbHMgLnN3aXBlci1idXR0b24tbmV4dDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbn1cblxuLnRlc3RpbW9uaWFscyAuc3dpcGVyLWJ1dHRvbi1wcmV2OmhvdmVyOjphZnRlcixcbi50ZXN0aW1vbmlhbHMgLnN3aXBlci1idXR0b24tbmV4dDpob3Zlcjo6YWZ0ZXIge1xuICBjb2xvcjogdmFyKC0tY29udHJhc3QtY29sb3IpO1xufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4jIFBvcnRmb2xpbyBTZWN0aW9uXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4ucG9ydGZvbGlvIC5wb3J0Zm9saW8tZmlsdGVycyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogMTVweDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwIDAgNDBweDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLnBvcnRmb2xpbyAucG9ydGZvbGlvLWZpbHRlcnMgbGkge1xuICBmb250LXNpemU6IDE1cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHBhZGRpbmc6IDEycHggMjVweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiAzMHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbn1cblxuLnBvcnRmb2xpbyAucG9ydGZvbGlvLWZpbHRlcnMgbGkgaSB7XG4gIGZvbnQtc2l6ZTogMS4xZW07XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2U7XG59XG5cbi5wb3J0Zm9saW8gLnBvcnRmb2xpby1maWx0ZXJzIGxpOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDkyJSk7XG59XG5cbi5wb3J0Zm9saW8gLnBvcnRmb2xpby1maWx0ZXJzIGxpOmhvdmVyIGkge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG59XG5cbi5wb3J0Zm9saW8gLnBvcnRmb2xpby1maWx0ZXJzIGxpLmZpbHRlci1hY3RpdmUge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tY29udHJhc3QtY29sb3IpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLnBvcnRmb2xpbyAucG9ydGZvbGlvLWZpbHRlcnMge1xuICAgIGdhcDogMTBweDtcbiAgfVxuXG4gIC5wb3J0Zm9saW8gLnBvcnRmb2xpby1maWx0ZXJzIGxpIHtcbiAgICBwYWRkaW5nOiA4cHggMjBweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5wb3J0Zm9saW8gLnBvcnRmb2xpby1maWx0ZXJzIHtcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7XG4gICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lO1xuICB9XG5cbiAgLnBvcnRmb2xpbyAucG9ydGZvbGlvLWZpbHRlcnM6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5wb3J0Zm9saW8gLnBvcnRmb2xpby1lbnRyeSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS1jb2xvcik7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnBvcnRmb2xpbyAucG9ydGZvbGlvLWVudHJ5IC5lbnRyeS1pbWFnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBhc3BlY3QtcmF0aW86IDE2Lzk7XG59XG5cbi5wb3J0Zm9saW8gLnBvcnRmb2xpby1lbnRyeSAuZW50cnktaW1hZ2UgaW1nIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG59XG5cbi5wb3J0Zm9saW8gLnBvcnRmb2xpby1lbnRyeSAuZW50cnktaW1hZ2UgLmVudHJ5LW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCB0cmFuc3BhcmVudCAwJSwgcmdiYSgwLCAwLCAwLCAwLjgpIDEwMCUpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gIHBhZGRpbmc6IDMwcHg7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcbn1cblxuLnBvcnRmb2xpbyAucG9ydGZvbGlvLWVudHJ5IC5lbnRyeS1pbWFnZSAub3ZlcmxheS1jb250ZW50IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcbn1cblxuLnBvcnRmb2xpbyAucG9ydGZvbGlvLWVudHJ5IC5lbnRyeS1pbWFnZSAuZW50cnktb3ZlcmxheSAuZW50cnktbWV0YSB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi5wb3J0Zm9saW8gLnBvcnRmb2xpby1lbnRyeSAuZW50cnktaW1hZ2UgLmVudHJ5LW92ZXJsYXkgLmVudHJ5LXRpdGxlIHtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW46IDAgMCAyMHB4O1xufVxuXG4ucG9ydGZvbGlvIC5wb3J0Zm9saW8tZW50cnkgLmVudHJ5LWltYWdlIC5lbnRyeS1vdmVybGF5IC5lbnRyeS1saW5rcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogMTVweDtcbn1cblxuLnBvcnRmb2xpbyAucG9ydGZvbGlvLWVudHJ5IC5lbnRyeS1pbWFnZSAuZW50cnktb3ZlcmxheSAuZW50cnktbGlua3MgYSB7XG4gIHdpZHRoOiA0NnB4O1xuICBoZWlnaHQ6IDQ2cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwcHgpO1xufVxuXG4ucG9ydGZvbGlvIC5wb3J0Zm9saW8tZW50cnkgLmVudHJ5LWltYWdlIC5lbnRyeS1vdmVybGF5IC5lbnRyeS1saW5rcyBhOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xufVxuXG4ucG9ydGZvbGlvIC5wb3J0Zm9saW8tZW50cnkgLmVudHJ5LWltYWdlIC5lbnRyeS1vdmVybGF5IC5lbnRyeS1saW5rcyBhOm50aC1jaGlsZCgxKSB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDAuMXM7XG59XG5cbi5wb3J0Zm9saW8gLnBvcnRmb2xpby1lbnRyeSAuZW50cnktaW1hZ2UgLmVudHJ5LW92ZXJsYXkgLmVudHJ5LWxpbmtzIGE6bnRoLWNoaWxkKDIpIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogMC4ycztcbn1cblxuLnBvcnRmb2xpbyAucG9ydGZvbGlvLWVudHJ5OmhvdmVyIC5lbnRyeS1pbWFnZSBpbWcge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xufVxuXG4ucG9ydGZvbGlvIC5wb3J0Zm9saW8tZW50cnk6aG92ZXIgLmVudHJ5LWltYWdlIC5lbnRyeS1vdmVybGF5IHtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuXG4ucG9ydGZvbGlvIC5wb3J0Zm9saW8tZW50cnk6aG92ZXIgLmVudHJ5LWltYWdlIC5vdmVybGF5LWNvbnRlbnQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi5wb3J0Zm9saW8gLnBvcnRmb2xpby1lbnRyeTpob3ZlciAuZW50cnktaW1hZ2UgLmVudHJ5LW92ZXJsYXkgLmVudHJ5LWxpbmtzIGEge1xuICBvcGFjaXR5OiAxO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAucG9ydGZvbGlvIC5wb3J0Zm9saW8tZW50cnkgLmVudHJ5LWltYWdlIC5lbnRyeS1vdmVybGF5IHtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICB9XG5cbiAgLnBvcnRmb2xpbyAucG9ydGZvbGlvLWVudHJ5IC5lbnRyeS1pbWFnZSAuZW50cnktb3ZlcmxheSAuZW50cnktdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICB9XG5cbiAgLnBvcnRmb2xpbyAucG9ydGZvbGlvLWVudHJ5IC5lbnRyeS1pbWFnZSAuZW50cnktb3ZlcmxheSAuZW50cnktbGlua3MgYSB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgfVxufVxuXG4ucG9ydGZvbGlvIC5wb3J0Zm9saW8taXRlbSAuZW50cnktaW1hZ2Uge1xuICBhc3BlY3QtcmF0aW86IDQvMztcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAucG9ydGZvbGlvIC5wb3J0Zm9saW8taXRlbSAuZW50cnktdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnBvcnRmb2xpbyAucm93IHtcbiAgICBtYXJnaW4tbGVmdDogLTEwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTBweDtcbiAgfVxuXG4gIC5wb3J0Zm9saW8gLnJvdyAucG9ydGZvbGlvLWl0ZW0ge1xuICAgIHBhZGRpbmctbGVmdDogMTBweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAucG9ydGZvbGlvIC5yb3cge1xuICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4O1xuICB9XG5cbiAgLnBvcnRmb2xpbyAucm93IC5wb3J0Zm9saW8taXRlbSB7XG4gICAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDEycHg7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAucG9ydGZvbGlvIC5yb3cge1xuICAgIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xuICB9XG5cbiAgLnBvcnRmb2xpbyAucm93IC5wb3J0Zm9saW8taXRlbSB7XG4gICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAucG9ydGZvbGlvIC5lbnRyeS1vdmVybGF5IHtcbiAgICBwYWRkaW5nOiAyNXB4O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAucG9ydGZvbGlvIC5lbnRyeS1vdmVybGF5IHtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAucG9ydGZvbGlvIC5lbnRyeS1vdmVybGF5IHtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICB9XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiMgVGVhbSBTZWN0aW9uXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4udGVhbSAudGVhbS1tZW1iZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpO1xuICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDkwJSk7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgdHJhbnNpdGlvbjogMC4zcztcbn1cblxuLnRlYW0gLnRlYW0tbWVtYmVyOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgdHJhbnNwYXJlbnQgNzAlKTtcbn1cblxuLnRlYW0gLnRlYW0tbWVtYmVyIC5tZW1iZXItaW1nIHtcbiAgZmxleDogMCAwIDIwMHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udGVhbSAudGVhbS1tZW1iZXIgLm1lbWJlci1pbWcgaW1nIHtcbiAgd2lkdGg6IDIwMHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDhweDtcbn1cblxuLnRlYW0gLnRlYW0tbWVtYmVyIC5tZW1iZXItaW5mbyB7XG4gIHBhZGRpbmc6IDI1cHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi50ZWFtIC50ZWFtLW1lbWJlciAubWVtYmVyLWluZm8gaDQge1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICBjb2xvcjogdmFyKC0taGVhZGluZy1jb2xvcik7XG59XG5cbi50ZWFtIC50ZWFtLW1lbWJlciAubWVtYmVyLWluZm8gc3BhbiB7XG4gIGZvbnQtc2l6ZTogMC45cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWhlYWRpbmctY29sb3IpLCB0cmFuc3BhcmVudCAzMCUpO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuLnRlYW0gLnRlYW0tbWVtYmVyIC5tZW1iZXItaW5mbyBwIHtcbiAgZm9udC1zaXplOiAwLjlyZW07XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDIwJSk7XG59XG5cbi50ZWFtIC50ZWFtLW1lbWJlciAubWVtYmVyLWluZm8gLnNvY2lhbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogMTBweDtcbn1cblxuLnRlYW0gLnRlYW0tbWVtYmVyIC5tZW1iZXItaW5mbyAuc29jaWFsIGEge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDMycHg7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6IHZhcigtLWhlYWRpbmctY29sb3IpO1xuICB0cmFuc2l0aW9uOiAwLjNzO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgOTAlKTtcbn1cblxuLnRlYW0gLnRlYW0tbWVtYmVyIC5tZW1iZXItaW5mbyAuc29jaWFsIGE6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgdHJhbnNwYXJlbnQgOTUlKTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC50ZWFtIC50ZWFtLW1lbWJlciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgfVxuXG4gIC50ZWFtIC50ZWFtLW1lbWJlciAubWVtYmVyLWltZyB7XG4gICAgZmxleDogYXV0bztcbiAgfVxuXG4gIC50ZWFtIC50ZWFtLW1lbWJlciAubWVtYmVyLWltZyBpbWcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweCA4cHggMCAwO1xuICB9XG5cbiAgLnRlYW0gLnRlYW0tbWVtYmVyIC5tZW1iZXItaW5mbyB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLnRlYW0gLnRlYW0tbWVtYmVyIC5tZW1iZXItaW5mbyAuc29jaWFsIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgfVxufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4jIFByaWNpbmcgU2VjdGlvblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnByaWNpbmcge1xuICAtLWNhcmQtYm9yZGVyLXJhZGl1czogMjBweDtcbn1cblxuLnByaWNpbmcgLnJvdyB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ucHJpY2luZyAucHJpY2luZy1jYXJkIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2FyZC1ib3JkZXItcmFkaXVzKTtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0cmFuc2l0aW9uOiBhbGwgMC40cztcbiAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRlZmF1bHQtY29sb3IpLCB0cmFuc3BhcmVudCA5MCUpO1xufVxuXG4ucHJpY2luZyAucHJpY2luZy1jYXJkOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTtcbiAgYm94LXNoYWRvdzogMCAxNXB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4ucHJpY2luZyAucHJpY2luZy1jYXJkLnBvcHVsYXIge1xuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hY2NlbnQtY29sb3IpO1xufVxuXG4ucHJpY2luZyAucHJpY2luZy1jYXJkLnBvcHVsYXIgLnBsYW4tY3RhIC5idG4tcGxhbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1jb250cmFzdC1jb2xvcik7XG59XG5cbi5wcmljaW5nIC5wcmljaW5nLWNhcmQucG9wdWxhciAucGxhbi1jdGEgLmJ0bi1wbGFuOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDIwJSk7XG59XG5cbi5wcmljaW5nIC5wcmljaW5nLWNhcmQgLnBvcHVsYXItdGFnIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDIwcHg7XG4gIHJpZ2h0OiAtMzVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBwYWRkaW5nOiA4cHggNDBweDtcbiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xufVxuXG4ucHJpY2luZyAucGxhbi1oZWFkZXIge1xuICBwYWRkaW5nOiAzMHB4IDMwcHggMjBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ucHJpY2luZyAucGxhbi1oZWFkZXIgLnBsYW4taWNvbiB7XG4gIHdpZHRoOiA3MHB4O1xuICBoZWlnaHQ6IDcwcHg7XG4gIG1hcmdpbjogMCBhdXRvIDIwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA5MCUpO1xufVxuXG4ucHJpY2luZyAucGxhbi1oZWFkZXIgLnBsYW4taWNvbiBpIHtcbiAgZm9udC1zaXplOiAyOHB4O1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbn1cblxuLnByaWNpbmcgLnBsYW4taGVhZGVyIGgzIHtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4ucHJpY2luZyAucGxhbi1oZWFkZXIgcCB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgMzAlKTtcbn1cblxuLnByaWNpbmcgLnBsYW4tcHJpY2luZyB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogMTBweCAzMHB4IDIwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnByaWNpbmcgLnBsYW4tcHJpY2luZyAuY3VycmVuY3kge1xuICBmb250LXNpemU6IDI0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogdmFyKC0taGVhZGluZy1jb2xvcik7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5wcmljaW5nIC5wbGFuLXByaWNpbmcgLmFtb3VudCB7XG4gIGZvbnQtc2l6ZTogNjBweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6IHZhcigtLWhlYWRpbmctY29sb3IpO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLnByaWNpbmcgLnBsYW4tcHJpY2luZyAucGVyaW9kIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRlZmF1bHQtY29sb3IpLCB0cmFuc3BhcmVudCA0MCUpO1xufVxuXG4ucHJpY2luZyAucGxhbi1mZWF0dXJlcyB7XG4gIHBhZGRpbmc6IDIwcHggMzBweDtcbiAgZmxleDogMTtcbn1cblxuLnByaWNpbmcgLnBsYW4tZmVhdHVyZXMgdWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG59XG5cbi5wcmljaW5nIC5wbGFuLWZlYXR1cmVzIHVsIGxpIHtcbiAgcGFkZGluZzogMTJweCAwO1xuICBmb250LXNpemU6IDE1cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTBweDtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgMjAlKTtcbn1cblxuLnByaWNpbmcgLnBsYW4tZmVhdHVyZXMgdWwgbGkuZGlzYWJsZWQge1xuICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRlZmF1bHQtY29sb3IpLCB0cmFuc3BhcmVudCA2MCUpO1xufVxuXG4ucHJpY2luZyAucGxhbi1mZWF0dXJlcyB1bCBsaSBpIHtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuXG4ucHJpY2luZyAucGxhbi1mZWF0dXJlcyB1bCBsaSBpLmJpLWNoZWNrLWNpcmNsZS1maWxsIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG59XG5cbi5wcmljaW5nIC5wbGFuLWZlYXR1cmVzIHVsIGxpIGkuYmkteC1jaXJjbGUtZmlsbCB7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDYwJSk7XG59XG5cbi5wcmljaW5nIC5wbGFuLWN0YSB7XG4gIHBhZGRpbmc6IDEwcHggMzBweCAzMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5wcmljaW5nIC5wbGFuLWN0YSAuYnRuLXBsYW4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAxNHB4IDMycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgOTUlKTtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiA1MHB4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xufVxuXG4ucHJpY2luZyAucGxhbi1jdGEgLmJ0bi1wbGFuOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRlZmF1bHQtY29sb3IpLCB0cmFuc3BhcmVudCA4MCUpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgLnByaWNpbmcgLnByaWNpbmctY2FyZCB7XG4gICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5wcmljaW5nIC5wbGFuLXByaWNpbmcgLmFtb3VudCB7XG4gICAgZm9udC1zaXplOiA0OHB4O1xuICB9XG5cbiAgLnByaWNpbmcgLnBsYW4taGVhZGVyIHtcbiAgICBwYWRkaW5nOiAyNXB4IDIwcHggMTVweDtcbiAgfVxuXG4gIC5wcmljaW5nIC5wbGFuLWZlYXR1cmVzLFxuICAucHJpY2luZyAucGxhbi1wcmljaW5nLFxuICAucHJpY2luZyAucGxhbi1jdGEge1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuICB9XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiMgRmFxIFNlY3Rpb25cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5mYXEgLmZhcS10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMi41cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBjb2xvcjogdmFyKC0taGVhZGluZy1jb2xvcik7XG59XG5cbi5mYXEgLmZhcS1kZXNjcmlwdGlvbiB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpO1xuICBtYXJnaW4tYm90dG9tOiAycmVtO1xufVxuXG4uZmFxIC5mYXEtYXJyb3cge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbn1cblxuLmZhcSAuZmFxLWNvbnRhaW5lciAuZmFxLWl0ZW0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZmFxIC5mYXEtY29udGFpbmVyIC5mYXEtaXRlbTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmZhcSAuZmFxLWNvbnRhaW5lciAuZmFxLWl0ZW0gaDMge1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBtYXJnaW46IDAgMzBweCAwIDA7XG4gIHRyYW5zaXRpb246IDAuM3M7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZhcSAuZmFxLWNvbnRhaW5lciAuZmFxLWl0ZW0gaDMgLm51bSB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG59XG5cbi5mYXEgLmZhcS1jb250YWluZXIgLmZhcS1pdGVtIGgzOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG59XG5cbi5mYXEgLmZhcS1jb250YWluZXIgLmZhcS1pdGVtIC5mYXEtY29udGVudCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtcm93czogMGZyO1xuICB0cmFuc2l0aW9uOiAwLjNzIGVhc2UtaW4tb3V0O1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG9wYWNpdHk6IDA7XG59XG5cbi5mYXEgLmZhcS1jb250YWluZXIgLmZhcS1pdGVtIC5mYXEtY29udGVudCBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmZhcSAuZmFxLWNvbnRhaW5lciAuZmFxLWl0ZW0gLmZhcS10b2dnbGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjBweDtcbiAgcmlnaHQ6IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHRyYW5zaXRpb246IDAuM3M7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmZhcSAuZmFxLWNvbnRhaW5lciAuZmFxLWl0ZW0gLmZhcS10b2dnbGU6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbn1cblxuLmZhcSAuZmFxLWNvbnRhaW5lciAuZmFxLWFjdGl2ZSBoMyB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xufVxuXG4uZmFxIC5mYXEtY29udGFpbmVyIC5mYXEtYWN0aXZlIC5mYXEtY29udGVudCB7XG4gIGdyaWQtdGVtcGxhdGUtcm93czogMWZyO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xuICBwYWRkaW5nLXRvcDogMTBweDtcbn1cblxuLmZhcSAuZmFxLWNvbnRhaW5lciAuZmFxLWFjdGl2ZSAuZmFxLXRvZ2dsZSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiMgQ29udGFjdCBTZWN0aW9uXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uY29udGFjdCAuY29udGFjdC1pbmZvLWJveCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBib3gtc2hhZG93OiAwIDVweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIHBhZGRpbmc6IDI1cHg7XG4gIGhlaWdodDogMTAwJTtcbiAgdHJhbnNpdGlvbjpcbiAgICB0cmFuc2Zvcm0gMC4zcyBlYXNlLFxuICAgIGJveC1zaGFkb3cgMC4zcyBlYXNlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZ2FwOiAxNXB4O1xufVxuXG4uY29udGFjdCAuY29udGFjdC1pbmZvLWJveDpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTtcbiAgYm94LXNoYWRvdzogMCA4cHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG5cbi5jb250YWN0IC5jb250YWN0LWluZm8tYm94IC5pY29uLWJveCB7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA5MCUpO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgd2lkdGg6IDUwcHg7XG4gIGhlaWdodDogNTBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5jb250YWN0IC5jb250YWN0LWluZm8tYm94IC5pY29uLWJveCBpIHtcbiAgZm9udC1zaXplOiAyNHB4O1xufVxuXG4uY29udGFjdCAuY29udGFjdC1pbmZvLWJveCAuaW5mby1jb250ZW50IGg0IHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4uY29udGFjdCAuY29udGFjdC1pbmZvLWJveCAuaW5mby1jb250ZW50IHAge1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDIwJSk7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbn1cblxuLmNvbnRhY3QgLmNvbnRhY3QtaW5mby1ib3ggLmluZm8tY29udGVudCBwOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4uY29udGFjdCAubWFwLXNlY3Rpb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDUwMHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uY29udGFjdCAubWFwLXNlY3Rpb24gaWZyYW1lIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogMDtcbn1cblxuLmNvbnRhY3QgLmZvcm0tY29udGFpbmVyLW92ZXJsYXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6IC0xNTBweDtcbiAgbWFyZ2luLWJvdHRvbTogNjBweDtcbiAgei1pbmRleDogMTA7XG59XG5cbi5jb250YWN0IC5jb250YWN0LWZvcm0td3JhcHBlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBib3gtc2hhZG93OiAwIDVweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIHBhZGRpbmc6IDQwcHg7XG59XG5cbi5jb250YWN0IC5jb250YWN0LWZvcm0td3JhcHBlciBoMiB7XG4gIGZvbnQtc2l6ZTogMjhweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIgaDI6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIGJvdHRvbTogLTEwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgd2lkdGg6IDUwcHg7XG4gIGhlaWdodDogM3B4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xufVxuXG4uY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIgLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4uY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIgLmZvcm0tZ3JvdXAgLmlucHV0LXdpdGgtaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmNvbnRhY3QgLmNvbnRhY3QtZm9ybS13cmFwcGVyIC5mb3JtLWdyb3VwIC5pbnB1dC13aXRoLWljb24gaSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMTVweDtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgNDAlKTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICB6LWluZGV4OiAxMDtcbn1cblxuLmNvbnRhY3QgLmNvbnRhY3QtZm9ybS13cmFwcGVyIC5mb3JtLWdyb3VwIC5pbnB1dC13aXRoLWljb24gaS5tZXNzYWdlLWljb24ge1xuICB0b3A6IDI4cHg7XG59XG5cbi5jb250YWN0IC5jb250YWN0LWZvcm0td3JhcHBlciAuZm9ybS1ncm91cCAuaW5wdXQtd2l0aC1pY29uIHRleHRhcmVhICsgaSB7XG4gIHRvcDogMjVweDtcbiAgdHJhbnNmb3JtOiBub25lO1xufVxuXG4uY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIgLmZvcm0tZ3JvdXAgLmlucHV0LXdpdGgtaWNvbiAuZm9ybS1jb250cm9sIHtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBwYWRkaW5nOiAxMnB4IDE1cHggMTJweCA0NXB4O1xuICBoZWlnaHQ6IDMuNXJlbTtcbiAgY29sb3I6IHZhcigtLWRlZmF1bHQtY29sb3IpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDgwJSk7XG59XG5cbi5jb250YWN0IC5jb250YWN0LWZvcm0td3JhcHBlciAuZm9ybS1ncm91cCAuaW5wdXQtd2l0aC1pY29uIC5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMjVyZW0gY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDkwJSk7XG59XG5cbi5jb250YWN0IC5jb250YWN0LWZvcm0td3JhcHBlciAuZm9ybS1ncm91cCAuaW5wdXQtd2l0aC1pY29uIC5mb3JtLWNvbnRyb2w6OnBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgNDAlKTtcbn1cblxuLmNvbnRhY3QgLmNvbnRhY3QtZm9ybS13cmFwcGVyIC5mb3JtLWdyb3VwIC5pbnB1dC13aXRoLWljb24gdGV4dGFyZWEuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiAxODBweDtcbiAgcmVzaXplOiBub25lO1xuICBwYWRkaW5nLXRvcDogMTVweDtcbn1cblxuLmNvbnRhY3QgLmNvbnRhY3QtZm9ybS13cmFwcGVyIC5idG4tc3VibWl0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogdmFyKC0tY29udHJhc3QtY29sb3IpO1xuICBwYWRkaW5nOiAxMnB4IDMwcHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xuICBib3gtc2hhZG93OiAwIDVweCAxNXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA3MCUpO1xufVxuXG4uY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIgLmJ0bi1zdWJtaXQ6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgdHJhbnNwYXJlbnQgMTUlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zcHgpO1xuICBib3gtc2hhZG93OiAwIDhweCAyMHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA2MCUpO1xufVxuXG4uY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIgLmJ0bi1zdWJtaXQ6YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICBib3gtc2hhZG93OiAwIDNweCAxMHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA3MCUpO1xufVxuXG4uY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIgLmxvYWRpbmcsXG4uY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIgLmVycm9yLW1lc3NhZ2UsXG4uY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIgLnNlbnQtbWVzc2FnZSB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAuY29udGFjdCAuZm9ybS1jb250YWluZXItb3ZlcmxhcCB7XG4gICAgbWFyZ2luLXRvcDogLTEyMHB4O1xuICB9XG5cbiAgLmNvbnRhY3QgLmNvbnRhY3QtZm9ybS13cmFwcGVyIHtcbiAgICBwYWRkaW5nOiAzMHB4O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuY29udGFjdCAuY29udGFjdC1pbmZvLWJveCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgfVxuXG4gIC5jb250YWN0IC5mb3JtLWNvbnRhaW5lci1vdmVybGFwIHtcbiAgICBtYXJnaW4tdG9wOiAtMTAwcHg7XG4gIH1cblxuICAuY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIge1xuICAgIHBhZGRpbmc6IDI1cHg7XG4gIH1cblxuICAuY29udGFjdCAuY29udGFjdC1mb3JtLXdyYXBwZXIgaDIge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgfVxuXG4gIC5jb250YWN0IC5tYXAtc2VjdGlvbiB7XG4gICAgaGVpZ2h0OiA0NTBweDtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNTc2cHgpIHtcbiAgLmNvbnRhY3QgLmZvcm0tY29udGFpbmVyLW92ZXJsYXAge1xuICAgIG1hcmdpbi10b3A6IC04MHB4O1xuICB9XG5cbiAgLmNvbnRhY3QgLmNvbnRhY3QtZm9ybS13cmFwcGVyIHtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICB9XG5cbiAgLmNvbnRhY3QgLmJ0bi1zdWJtaXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLmNvbnRhY3QgLm1hcC1zZWN0aW9uIHtcbiAgICBoZWlnaHQ6IDQwMHB4O1xuICB9XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiMgUG9ydGZvbGlvIERldGFpbHMgU2VjdGlvblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnBvcnRmb2xpby1kZXRhaWxzIHtcbiAgLS1zZWN0aW9uLXNwYWNpbmc6IDIuNXJlbTtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1tZWRpYSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1tZWRpYSAubWFpbi1pbWFnZSB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtbWVkaWEgLm1haW4taW1hZ2UgLnBvcnRmb2xpby1kZXRhaWxzLXNsaWRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1tZWRpYSAubWFpbi1pbWFnZSAucG9ydGZvbGlvLWRldGFpbHMtc2xpZGVyIC5zd2lwZXItd3JhcHBlciB7XG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHNcbiAgLnBvcnRmb2xpby1kZXRhaWxzLW1lZGlhXG4gIC5tYWluLWltYWdlXG4gIC5wb3J0Zm9saW8tZGV0YWlscy1zbGlkZXJcbiAgLnN3aXBlci1zbGlkZVxuICBpbWcge1xuICBhc3BlY3QtcmF0aW86IDMvMjtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHNcbiAgLnBvcnRmb2xpby1kZXRhaWxzLW1lZGlhXG4gIC5tYWluLWltYWdlXG4gIC5wb3J0Zm9saW8tZGV0YWlscy1zbGlkZXJcbiAgLnN3aXBlci1idXR0b24tbmV4dCxcbi5wb3J0Zm9saW8tZGV0YWlsc1xuICAucG9ydGZvbGlvLWRldGFpbHMtbWVkaWFcbiAgLm1haW4taW1hZ2VcbiAgLnBvcnRmb2xpby1kZXRhaWxzLXNsaWRlclxuICAuc3dpcGVyLWJ1dHRvbi1wcmV2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29udHJhc3QtY29sb3IpO1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlsc1xuICAucG9ydGZvbGlvLWRldGFpbHMtbWVkaWFcbiAgLm1haW4taW1hZ2VcbiAgLnBvcnRmb2xpby1kZXRhaWxzLXNsaWRlclxuICAuc3dpcGVyLWJ1dHRvbi1uZXh0OmFmdGVyLFxuLnBvcnRmb2xpby1kZXRhaWxzXG4gIC5wb3J0Zm9saW8tZGV0YWlscy1tZWRpYVxuICAubWFpbi1pbWFnZVxuICAucG9ydGZvbGlvLWRldGFpbHMtc2xpZGVyXG4gIC5zd2lwZXItYnV0dG9uLXByZXY6YWZ0ZXIge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzXG4gIC5wb3J0Zm9saW8tZGV0YWlscy1tZWRpYVxuICAubWFpbi1pbWFnZVxuICAucG9ydGZvbGlvLWRldGFpbHMtc2xpZGVyXG4gIC5zd2lwZXItYnV0dG9uLW5leHQ6aG92ZXIsXG4ucG9ydGZvbGlvLWRldGFpbHNcbiAgLnBvcnRmb2xpby1kZXRhaWxzLW1lZGlhXG4gIC5tYWluLWltYWdlXG4gIC5wb3J0Zm9saW8tZGV0YWlscy1zbGlkZXJcbiAgLnN3aXBlci1idXR0b24tcHJldjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlsc1xuICAucG9ydGZvbGlvLWRldGFpbHMtbWVkaWFcbiAgLm1haW4taW1hZ2VcbiAgLnBvcnRmb2xpby1kZXRhaWxzLXNsaWRlclxuICAuc3dpcGVyLWJ1dHRvbi1uZXh0OmhvdmVyOmFmdGVyLFxuLnBvcnRmb2xpby1kZXRhaWxzXG4gIC5wb3J0Zm9saW8tZGV0YWlscy1tZWRpYVxuICAubWFpbi1pbWFnZVxuICAucG9ydGZvbGlvLWRldGFpbHMtc2xpZGVyXG4gIC5zd2lwZXItYnV0dG9uLXByZXY6aG92ZXI6YWZ0ZXIge1xuICBjb2xvcjogdmFyKC0tY29udHJhc3QtY29sb3IpO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLW1lZGlhIC50aHVtYm5haWwtZ3JpZCBpbWcge1xuICBoZWlnaHQ6IDgwcHg7XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLW1lZGlhIC50aHVtYm5haWwtZ3JpZCBpbWc6aG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCk7XG4gIGJveC1zaGFkb3c6IDAgOHB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLW1lZGlhIC50ZWNoLXN0YWNrLWJhZGdlcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgZ2FwOiAxMHB4O1xuICBtYXJnaW4tdG9wOiAxLjVyZW07XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtbWVkaWEgLnRlY2gtc3RhY2stYmFkZ2VzIHNwYW4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1oZWFkaW5nLWNvbG9yKSwgdHJhbnNwYXJlbnQgODUlKTtcbiAgY29sb3I6IHZhcigtLWhlYWRpbmctY29sb3IpO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLW1lZGlhIC50ZWNoLXN0YWNrLWJhZGdlcyBzcGFuOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWhlYWRpbmctY29sb3IpLCB0cmFuc3BhcmVudCA3MCUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCB7XG4gIHBhZGRpbmc6IDAgMCAwIDJyZW07XG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50IC5wcm9qZWN0LW1ldGEge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnQgLnByb2plY3QtbWV0YSAuYmFkZ2Utd3JhcHBlciAucHJvamVjdC1iYWRnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogOHB4IDE2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA5MCUpO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogMzBweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZm9udC1zaXplOiAxNHB4O1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnQgLnByb2plY3QtbWV0YSAuZGF0ZS1jbGllbnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDEuNXJlbTtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50IC5wcm9qZWN0LW1ldGEgLmRhdGUtY2xpZW50IC5tZXRhLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDMwJSk7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAucHJvamVjdC1tZXRhIC5kYXRlLWNsaWVudCAubWV0YS1pdGVtIGkge1xuICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAucHJvamVjdC10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMi4ycmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBjb2xvcjogdmFyKC0taGVhZGluZy1jb2xvcik7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAucHJvamVjdC13ZWJzaXRlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnQgLnByb2plY3Qtd2Vic2l0ZSBpIHtcbiAgZm9udC1zaXplOiAyMnB4O1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAucHJvamVjdC13ZWJzaXRlIGEge1xuICBmb250LXdlaWdodDogNTAwO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50IC5wcm9qZWN0LXdlYnNpdGUgYTpob3ZlciB7XG4gIGxldHRlci1zcGFjaW5nOiAwLjVweDtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50IC5wcm9qZWN0LW92ZXJ2aWV3IHtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2VjdGlvbi1zcGFjaW5nKTtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50IC5wcm9qZWN0LW92ZXJ2aWV3IC5sZWFkIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjc7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDE1JSk7XG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50IC5wcm9qZWN0LW92ZXJ2aWV3IC5wcm9qZWN0LWFjY29yZGlvbiAuYWNjb3JkaW9uLWl0ZW0ge1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlsc1xuICAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudFxuICAucHJvamVjdC1vdmVydmlld1xuICAucHJvamVjdC1hY2NvcmRpb25cbiAgLmFjY29yZGlvbi1pdGVtXG4gIC5hY2NvcmRpb24taGVhZGVyXG4gIC5hY2NvcmRpb24tYnV0dG9uIHtcbiAgcGFkZGluZzogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogdmFyKC0taGVhZGluZy1jb2xvcik7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zdXJmYWNlLWNvbG9yKSwgdHJhbnNwYXJlbnQgNzAlKTtcbiAgYm9yZGVyLXJhZGl1czogOHB4ICFpbXBvcnRhbnQ7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlsc1xuICAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudFxuICAucHJvamVjdC1vdmVydmlld1xuICAucHJvamVjdC1hY2NvcmRpb25cbiAgLmFjY29yZGlvbi1pdGVtXG4gIC5hY2NvcmRpb24taGVhZGVyXG4gIC5hY2NvcmRpb24tYnV0dG9uOm5vdCguY29sbGFwc2VkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMCAhaW1wb3J0YW50O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMCAhaW1wb3J0YW50O1xuICBib3gtc2hhZG93OiAwIDRweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4wMyk7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlsc1xuICAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudFxuICAucHJvamVjdC1vdmVydmlld1xuICAucHJvamVjdC1hY2NvcmRpb25cbiAgLmFjY29yZGlvbi1pdGVtXG4gIC5hY2NvcmRpb24taGVhZGVyXG4gIC5hY2NvcmRpb24tYnV0dG9uOm5vdCguY29sbGFwc2VkKVxuICBpIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlsc1xuICAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudFxuICAucHJvamVjdC1vdmVydmlld1xuICAucHJvamVjdC1hY2NvcmRpb25cbiAgLmFjY29yZGlvbi1pdGVtXG4gIC5hY2NvcmRpb24taGVhZGVyXG4gIC5hY2NvcmRpb24tYnV0dG9uOjphZnRlciB7XG4gIGJhY2tncm91bmQtc2l6ZTogMTRweDtcbiAgd2lkdGg6IDE0cHg7XG4gIGhlaWdodDogMTRweDtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzXG4gIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50XG4gIC5wcm9qZWN0LW92ZXJ2aWV3XG4gIC5wcm9qZWN0LWFjY29yZGlvblxuICAuYWNjb3JkaW9uLWl0ZW1cbiAgLmFjY29yZGlvbi1oZWFkZXJcbiAgLmFjY29yZGlvbi1idXR0b25cbiAgaSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHNcbiAgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnRcbiAgLnByb2plY3Qtb3ZlcnZpZXdcbiAgLnByb2plY3QtYWNjb3JkaW9uXG4gIC5hY2NvcmRpb24taXRlbVxuICAuYWNjb3JkaW9uLWJvZHkge1xuICBwYWRkaW5nOiAxcmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogOHB4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogOHB4O1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHNcbiAgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnRcbiAgLnByb2plY3Qtb3ZlcnZpZXdcbiAgLnByb2plY3QtYWNjb3JkaW9uXG4gIC5hY2NvcmRpb24taXRlbVxuICAuYWNjb3JkaW9uLWJvZHlcbiAgcCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDI1JSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAucHJvamVjdC1mZWF0dXJlcyB7XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNlY3Rpb24tc3BhY2luZyk7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAucHJvamVjdC1mZWF0dXJlcyBoMyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4ycmVtO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnQgLnByb2plY3QtZmVhdHVyZXMgaDMgaSB7XG4gIG1hcmdpbi1yaWdodDogMTBweDtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMS4xZW07XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAucHJvamVjdC1mZWF0dXJlcyAuZmVhdHVyZS1saXN0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnQgLnByb2plY3QtZmVhdHVyZXMgLmZlYXR1cmUtbGlzdCBsaSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDhweCAwO1xuICBmb250LXNpemU6IDE1cHg7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDE1JSk7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAucHJvamVjdC1mZWF0dXJlcyAuZmVhdHVyZS1saXN0IGxpIGkge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICBmb250LXNpemU6IDEuMWVtO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnQgLmN0YS1idXR0b25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6IDFyZW07XG4gIG1hcmdpbi10b3A6IGF1dG87XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAuY3RhLWJ1dHRvbnMgLmJ0bi12aWV3LXByb2plY3Qge1xuICBwYWRkaW5nOiAxMnB4IDI4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1jb250cmFzdC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAuY3RhLWJ1dHRvbnMgLmJ0bi12aWV3LXByb2plY3Q6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgYmxhY2sgMTUlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zcHgpO1xuICBib3gtc2hhZG93OiAwIDhweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50IC5jdGEtYnV0dG9ucyAuYnRuLXByZXYtcHJvamVjdCxcbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAuY3RhLWJ1dHRvbnMgLmJ0bi1uZXh0LXByb2plY3Qge1xuICBwYWRkaW5nOiAxMnB4IDI4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1jb250cmFzdC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuICBib3gtc2hhZG93OiAwIDVweCAxNXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA3MCUpO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnQgLmN0YS1idXR0b25zIC5idG4tcHJldi1wcm9qZWN0IGksXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnQgLmN0YS1idXR0b25zIC5idG4tbmV4dC1wcm9qZWN0IGkge1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlO1xufVxuXG4ucG9ydGZvbGlvLWRldGFpbHMgLnBvcnRmb2xpby1kZXRhaWxzLWNvbnRlbnQgLmN0YS1idXR0b25zIC5idG4tcHJldi1wcm9qZWN0OmhvdmVyLFxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50IC5jdGEtYnV0dG9ucyAuYnRuLW5leHQtcHJvamVjdDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCBibGFjayAxNSUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTNweCk7XG4gIGJveC1zaGFkb3c6IDAgOHB4IDIwcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWFjY2VudC1jb2xvciksIHRyYW5zcGFyZW50IDYwJSk7XG59XG5cbi5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAuY3RhLWJ1dHRvbnMgLmJ0bi1wcmV2LXByb2plY3Q6aG92ZXIgaSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtM3B4KTtcbn1cblxuLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50IC5jdGEtYnV0dG9ucyAuYnRuLW5leHQtcHJvamVjdDpob3ZlciBpIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDNweCk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMTk5Ljk4cHgpIHtcbiAgLnBvcnRmb2xpby1kZXRhaWxzIC5wb3J0Zm9saW8tZGV0YWlscy1jb250ZW50IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MS45OHB4KSB7XG4gIC5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCB7XG4gICAgcGFkZGluZzogMnJlbSAwIDAgMDtcbiAgfVxuXG4gIC5wb3J0Zm9saW8tZGV0YWlscyAucG9ydGZvbGlvLWRldGFpbHMtY29udGVudCAuY3RhLWJ1dHRvbnMge1xuICAgIG1hcmdpbi10b3A6IDJyZW07XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XG4gIC5wb3J0Zm9saW8tZGV0YWlscyAucHJvamVjdC1tZXRhIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMXJlbTtcbiAgfVxuXG4gIC5wb3J0Zm9saW8tZGV0YWlscyAucHJvamVjdC1tZXRhIC5kYXRlLWNsaWVudCB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDAuNXJlbTtcbiAgfVxuXG4gIC5wb3J0Zm9saW8tZGV0YWlscyAuY3RhLWJ1dHRvbnMge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAucG9ydGZvbGlvLWRldGFpbHMgLmN0YS1idXR0b25zIGEge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4jIFNlcnZpY2UgRGV0YWlscyBTZWN0aW9uXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uc2VydmljZS1kZXRhaWxzIC5zd2lwZXItd3JhcHBlciB7XG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLWhlYWRlciB7XG4gIG1hcmdpbi1ib3R0b206IDQwcHg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtaGVhZGVyIGgxIHtcbiAgZm9udC1zaXplOiAzNnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtaGVhZGVyIGgxOmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAtMTJweDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDgwcHg7XG4gIGhlaWdodDogNHB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLWhlYWRlciAuc2VydmljZS1tZXRhIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIG1hcmdpbi10b3A6IDI1cHg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtaGVhZGVyIC5zZXJ2aWNlLW1ldGEgc3BhbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgMzAlKTtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1oZWFkZXIgLnNlcnZpY2UtbWV0YSBzcGFuIGkge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1oZWFkZXIgLmxlYWQge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjc7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDE1JSk7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyB7XG4gIG1hcmdpbi1ib3R0b206IDUwcHg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAubmF2LXRhYnMge1xuICBib3JkZXItYm90dG9tOiAycHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWhlYWRpbmctY29sb3IpLCB0cmFuc3BhcmVudCA5MCUpO1xuICBtYXJnaW4tYm90dG9tOiAzMHB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLm5hdi10YWJzIC5uYXYtaXRlbSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLm5hdi10YWJzIC5uYXYtbGluayB7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgcGFkZGluZzogMTJweCAyMHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWhlYWRpbmctY29sb3IpLCB0cmFuc3BhcmVudCAzMCUpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLm5hdi10YWJzIC5uYXYtbGluayBpIHtcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS10YWJzIC5uYXYtdGFicyAubmF2LWxpbms6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IC0ycHg7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS10YWJzIC5uYXYtdGFicyAubmF2LWxpbms6aG92ZXIge1xuICBjb2xvcjogdmFyKC0taGVhZGluZy1jb2xvcik7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLm5hdi10YWJzIC5uYXYtbGluazpob3ZlcjphZnRlciB7XG4gIHdpZHRoOiAzMCU7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAubmF2LXRhYnMgLm5hdi1saW5rLmFjdGl2ZSB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS10YWJzIC5uYXYtdGFicyAubmF2LWxpbmsuYWN0aXZlOmFmdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAudGFiLWNvbnRlbnQgLmNvbnRlbnQtYmxvY2sgaDMge1xuICBmb250LXNpemU6IDI0cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAudGFiLWNvbnRlbnQgLmNvbnRlbnQtYmxvY2sgcCB7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDIwJSk7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjc7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAudGFiLWNvbnRlbnQgaW1nIHtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgYm94LXNoYWRvdzogMCA4cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLnRhYi1jb250ZW50IC5wcm9jZXNzLXRpbWVsaW5lIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWxlZnQ6IDMwcHg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAudGFiLWNvbnRlbnQgLnByb2Nlc3MtdGltZWxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMHB4O1xuICBib3R0b206IDEwcHg7XG4gIGxlZnQ6IDE1cHg7XG4gIHdpZHRoOiAycHg7XG4gIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA4MCUpO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLnRhYi1jb250ZW50IC5wcm9jZXNzLXRpbWVsaW5lIC50aW1lbGluZS1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWJvdHRvbTogMzVweDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS10YWJzIC50YWItY29udGVudCAucHJvY2Vzcy10aW1lbGluZSAudGltZWxpbmUtaXRlbTpsYXN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAudGFiLWNvbnRlbnQgLnByb2Nlc3MtdGltZWxpbmUgLnRpbWVsaW5lLWl0ZW0gLnRpbWVsaW5lLW1hcmtlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTMwcHg7XG4gIHRvcDogLTVweDtcbiAgd2lkdGg6IDMycHg7XG4gIGhlaWdodDogMzJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICB6LWluZGV4OiAyO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLnRhYi1jb250ZW50IC5wcm9jZXNzLXRpbWVsaW5lIC50aW1lbGluZS1pdGVtIC50aW1lbGluZS1jb250ZW50IHtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLnRhYi1jb250ZW50IC5wcm9jZXNzLXRpbWVsaW5lIC50aW1lbGluZS1pdGVtIC50aW1lbGluZS1jb250ZW50IGg0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLnRhYi1jb250ZW50IC5wcm9jZXNzLXRpbWVsaW5lIC50aW1lbGluZS1pdGVtIC50aW1lbGluZS1jb250ZW50IHAge1xuICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRlZmF1bHQtY29sb3IpLCB0cmFuc3BhcmVudCAyMCUpO1xuICBsaW5lLWhlaWdodDogMS42O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLnRhYi1jb250ZW50IC5iZW5lZml0LWNhcmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgcGFkZGluZzogMzBweDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS10YWJzIC50YWItY29udGVudCAuYmVuZWZpdC1jYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogM3B4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICB0cmFuc2Zvcm06IHNjYWxlWCgwKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAudGFiLWNvbnRlbnQgLmJlbmVmaXQtY2FyZDpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KTtcbiAgYm94LXNoYWRvdzogMCAxNXB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS10YWJzIC50YWItY29udGVudCAuYmVuZWZpdC1jYXJkOmhvdmVyOmJlZm9yZSB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKDEpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLnRhYi1jb250ZW50IC5iZW5lZml0LWNhcmQ6aG92ZXIgLmJlbmVmaXQtaWNvbiB7XG4gIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLnRhYi1jb250ZW50IC5iZW5lZml0LWNhcmQ6aG92ZXIgLmJlbmVmaXQtaWNvbiBpIHtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS10YWJzIC50YWItY29udGVudCAuYmVuZWZpdC1jYXJkIC5iZW5lZml0LWljb24ge1xuICB3aWR0aDogNjBweDtcbiAgaGVpZ2h0OiA2MHB4O1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgdHJhbnNwYXJlbnQgOTAlKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIHRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2U7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAudGFiLWNvbnRlbnQgLmJlbmVmaXQtY2FyZCAuYmVuZWZpdC1pY29uIGkge1xuICBmb250LXNpemU6IDI4cHg7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xuICB0cmFuc2l0aW9uOiBhbGwgMC41cyBlYXNlO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLnRhYi1jb250ZW50IC5iZW5lZml0LWNhcmQgaDQge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIG1hcmdpbi1ib3R0b206IDEycHg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAudGFiLWNvbnRlbnQgLmJlbmVmaXQtY2FyZCBwIHtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgMjAlKTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1nYWxsZXJ5IGgzIHtcbiAgZm9udC1zaXplOiAyNnB4O1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xuICBmb250LXdlaWdodDogNzAwO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLWdhbGxlcnkgLnNlcnZpY2UtZGV0YWlscy1zbGlkZXIge1xuICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1nYWxsZXJ5IC5zZXJ2aWNlLWRldGFpbHMtc2xpZGVyIC5wb3J0Zm9saW8taXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLWdhbGxlcnkgLnNlcnZpY2UtZGV0YWlscy1zbGlkZXIgLnBvcnRmb2xpby1pdGVtOmhvdmVyIC5wb3J0Zm9saW8taW5mbyB7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1nYWxsZXJ5IC5zZXJ2aWNlLWRldGFpbHMtc2xpZGVyIC5wb3J0Zm9saW8taXRlbSBpbWcge1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLWdhbGxlcnkgLnNlcnZpY2UtZGV0YWlscy1zbGlkZXIgLnBvcnRmb2xpby1pdGVtIC5wb3J0Zm9saW8taW5mbyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHJnYmEoMCwgMCwgMCwgMC43KSAwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKTtcbiAgcGFkZGluZzogMzBweCAyMHB4IDIwcHg7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMTJweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDEycHg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtZ2FsbGVyeSAuc2VydmljZS1kZXRhaWxzLXNsaWRlciAucG9ydGZvbGlvLWl0ZW0gLnBvcnRmb2xpby1pbmZvIGg1IHtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLWdhbGxlcnkgLnNlcnZpY2UtZGV0YWlscy1zbGlkZXIgLnBvcnRmb2xpby1pdGVtIC5wb3J0Zm9saW8taW5mbyBwIHtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250cmFzdC1jb2xvciksIHRyYW5zcGFyZW50IDIwJSk7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAxNHB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLWdhbGxlcnkgLnNlcnZpY2UtZGV0YWlscy1zbGlkZXIgLnN3aXBlci1wYWdpbmF0aW9uIHtcbiAgcGFkZGluZy10b3A6IDVweDtcbiAgYm90dG9tOiAwO1xufVxuXG4uc2VydmljZS1kZXRhaWxzXG4gIC5zZXJ2aWNlLWdhbGxlcnlcbiAgLnNlcnZpY2UtZGV0YWlscy1zbGlkZXJcbiAgLnN3aXBlci1wYWdpbmF0aW9uXG4gIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgdHJhbnNwYXJlbnQgNzAlKTtcbiAgb3BhY2l0eTogMTtcbn1cblxuLnNlcnZpY2UtZGV0YWlsc1xuICAuc2VydmljZS1nYWxsZXJ5XG4gIC5zZXJ2aWNlLWRldGFpbHMtc2xpZGVyXG4gIC5zd2lwZXItcGFnaW5hdGlvblxuICAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUge1xuICB3aWR0aDogMjVweDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB0b3A6IDEwMHB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLmFjdGlvbi1jYXJkIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxuICAgIDEzNWRlZyxcbiAgICB2YXIoLS1hY2NlbnQtY29sb3IpIDAlLFxuICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCBibGFjayAyMCUpIDEwMCVcbiAgKTtcbiAgYm9yZGVyLXJhZGl1czogMTVweDtcbiAgcGFkZGluZzogMzVweCAzMHB4O1xuICBjb2xvcjogdmFyKC0tY29udHJhc3QtY29sb3IpO1xuICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC5hY3Rpb24tY2FyZDpiZWZvcmUge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC01MHB4O1xuICByaWdodDogLTUwcHg7XG4gIHdpZHRoOiAxMDBweDtcbiAgaGVpZ2h0OiAxMDBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIHotaW5kZXg6IDE7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAuYWN0aW9uLWNhcmQ6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IC00MHB4O1xuICBsZWZ0OiAtNDBweDtcbiAgd2lkdGg6IDgwcHg7XG4gIGhlaWdodDogODBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpO1xuICB6LWluZGV4OiAxO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLmFjdGlvbi1jYXJkIGgzIHtcbiAgY29sb3I6IHZhcigtLWNvbnRyYXN0LWNvbG9yKTtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLmFjdGlvbi1jYXJkIHAge1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xuICBvcGFjaXR5OiAwLjk7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAuYWN0aW9uLWNhcmQgLmJ0bi1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29udHJhc3QtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHBhZGRpbmc6IDEycHggMjVweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLmFjdGlvbi1jYXJkIC5idG4tcHJpbWFyeTpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC5hY3Rpb24tY2FyZCAuZ3VhcmFudGVlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgb3BhY2l0eTogMC44O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLmFjdGlvbi1jYXJkIC5ndWFyYW50ZWUgaSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLnNlcnZpY2UtZmVhdHVyZXMtbGlzdCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiAxNXB4O1xuICBwYWRkaW5nOiAzMHB4O1xuICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICBib3gtc2hhZG93OiAwIDVweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAuc2VydmljZS1mZWF0dXJlcy1saXN0IGg0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1oZWFkaW5nLWNvbG9yKSwgdHJhbnNwYXJlbnQgOTAlKTtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC5zZXJ2aWNlLWZlYXR1cmVzLWxpc3QgdWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAuc2VydmljZS1mZWF0dXJlcy1saXN0IHVsIGxpIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206IDI1cHg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAuc2VydmljZS1mZWF0dXJlcy1saXN0IHVsIGxpOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLnNlcnZpY2UtZmVhdHVyZXMtbGlzdCB1bCBsaSBpIHtcbiAgZmxleC1zaHJpbms6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB0cmFuc3BhcmVudCA5MCUpO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcbiAgd2lkdGg6IDQycHg7XG4gIGhlaWdodDogNDJweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAuc2VydmljZS1mZWF0dXJlcy1saXN0IHVsIGxpIGRpdiB7XG4gIGZsZXg6IDE7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAuc2VydmljZS1mZWF0dXJlcy1saXN0IHVsIGxpIGRpdiBoNSB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLnNlcnZpY2UtZmVhdHVyZXMtbGlzdCB1bCBsaSBkaXYgcCB7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDI1JSk7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAxNHB4O1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLnRlc3RpbW9uaWFsLWNhcmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogMTVweDtcbiAgcGFkZGluZzogMzBweDtcbiAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgYm94LXNoYWRvdzogMCA1cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLnRlc3RpbW9uaWFsLWNhcmQgLnRlc3RpbW9uaWFsLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC50ZXN0aW1vbmlhbC1jYXJkIC50ZXN0aW1vbmlhbC1oZWFkZXIgaSB7XG4gIGZvbnQtc2l6ZTogMzZweDtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIG9wYWNpdHk6IDAuMztcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC50ZXN0aW1vbmlhbC1jYXJkIC50ZXN0aW1vbmlhbC1oZWFkZXIgLnJhdGluZyB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAudGVzdGltb25pYWwtY2FyZCAudGVzdGltb25pYWwtaGVhZGVyIC5yYXRpbmcgaSB7XG4gIGNvbG9yOiAjZmZkNzAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIG9wYWNpdHk6IDE7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAudGVzdGltb25pYWwtY2FyZCAudGVzdGltb25pYWwtdGV4dCB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgbGluZS1oZWlnaHQ6IDEuNztcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgMTUlKTtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC50ZXN0aW1vbmlhbC1jYXJkIC5jbGllbnQtaW5mbyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAudGVzdGltb25pYWwtY2FyZCAuY2xpZW50LWluZm8gLmNsaWVudC1pbWFnZSB7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDUwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIG1hcmdpbi1yaWdodDogMTVweDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC50ZXN0aW1vbmlhbC1jYXJkIC5jbGllbnQtaW5mbyAuY2xpZW50LWRldGFpbHMgaDUge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIG1hcmdpbjogMCAwIDVweDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC50ZXN0aW1vbmlhbC1jYXJkIC5jbGllbnQtaW5mbyAuY2xpZW50LWRldGFpbHMgc3BhbiB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZWZhdWx0LWNvbG9yKSwgdHJhbnNwYXJlbnQgMzAlKTtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC5jb250YWN0LWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogMTVweDtcbiAgcGFkZGluZzogMzBweDtcbiAgYm94LXNoYWRvdzogMCA1cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4uc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIgLmNvbnRhY3QtaW5mbyBoNCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luLWJvdHRvbTogMjVweDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC5jb250YWN0LWluZm8gLmNvbnRhY3QtbWV0aG9kIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAuY29udGFjdC1pbmZvIC5jb250YWN0LW1ldGhvZDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC5jb250YWN0LWluZm8gLmNvbnRhY3QtbWV0aG9kIGkge1xuICBmbGV4LXNocmluazogMDtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LWNvbG9yKSwgdHJhbnNwYXJlbnQgOTAlKTtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1jb2xvcik7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmb250LXNpemU6IDE4cHg7XG4gIG1hcmdpbi1yaWdodDogMTVweDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC5jb250YWN0LWluZm8gLmNvbnRhY3QtbWV0aG9kIGRpdiB7XG4gIGZsZXg6IDE7XG59XG5cbi5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2Utc2lkZWJhciAuY29udGFjdC1pbmZvIC5jb250YWN0LW1ldGhvZCBkaXYgc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZGVmYXVsdC1jb2xvciksIHRyYW5zcGFyZW50IDMwJSk7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1zaWRlYmFyIC5jb250YWN0LWluZm8gLmNvbnRhY3QtbWV0aG9kIGRpdiBwIHtcbiAgbWFyZ2luOiAwO1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0taGVhZGluZy1jb2xvcik7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAuc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXNpZGViYXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgfVxuXG4gIC5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtaGVhZGVyIGgxIHtcbiAgICBmb250LXNpemU6IDMwcHg7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtdGFicyAubmF2LXRhYnMge1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gIH1cblxuICAuc2VydmljZS1kZXRhaWxzIC5zZXJ2aWNlLXRhYnMgLm5hdi10YWJzIC5uYXYtbGluayB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICB9XG5cbiAgLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS10YWJzIC5uYXYtdGFicyAubmF2LWxpbmsgaSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG5cbiAgLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1oZWFkZXIgaDEge1xuICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgfVxuXG4gIC5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtaGVhZGVyIC5zZXJ2aWNlLW1ldGEge1xuICAgIGdhcDogMTVweDtcbiAgfVxuXG4gIC5zZXJ2aWNlLWRldGFpbHMgLnNlcnZpY2UtaGVhZGVyIC5zZXJ2aWNlLW1ldGEgc3BhbiB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICB9XG5cbiAgLnNlcnZpY2UtZGV0YWlscyAuc2VydmljZS1oZWFkZXIgLmxlYWQge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4jIFN0YXJ0ZXIgU2VjdGlvbiBTZWN0aW9uXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uc3RhcnRlci1zZWN0aW9uIHtcbiAgLyogQWRkIHlvdXIgc3R5bGVzIGhlcmUgKi9cbn1cblxuI2ltYWdlT25seUNhcm91c2VsIC5jYXJvdXNlbC1pdGVtIGltZyB7XG4gIGhlaWdodDogMzAwcHg7XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLyogU2tpcCB0byBjb250ZW50IGxpbmsgZm9yIGFjY2Vzc2liaWxpdHkgKi9cbi5za2lwLWxpbmsge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTQwcHg7XG4gIGxlZnQ6IDA7XG4gIGJhY2tncm91bmQ6ICMwMDA7XG4gIGNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiA4cHggMTZweDtcbiAgei1pbmRleDogMTAwMDA7XG4gIHRyYW5zaXRpb246IHRvcCAwLjNzO1xufVxuXG4uc2tpcC1saW5rOmZvY3VzIHtcbiAgdG9wOiAwO1xufVxuXG4vKiBQcm9kdWN0IENhcmRzICovXG4ucHJvZHVjdC1jYXJkIHtcbiAgdHJhbnNpdGlvbjpcbiAgICB0cmFuc2Zvcm0gMC4zcyBlYXNlLFxuICAgIGJveC1zaGFkb3cgMC4zcyBlYXNlO1xufVxuXG4ucHJvZHVjdC1jYXJkOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpO1xuICBib3gtc2hhZG93OiAwIDEwcHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMTUpICFpbXBvcnRhbnQ7XG59XG4iXX0= */