/**
 * Fluid Core
 * Reset & Normalize, Design Tokens, Base Typography, Layout Primitives,
 * and core responsive/print helpers.
 */

/* ============================================
   LAYER 1: RESET & NORMALIZE
   ============================================ */

*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  font-size: 16px;
}

body {
  min-height: 100vh;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

img, picture, video, canvas, svg {
  display: block;
  max-width: 100%;
  height: auto;
}

input, button, textarea, select {
  font: inherit;
  color: inherit;
}

button {
  cursor: pointer;
  background: none;
  border: none;
}

p, h1, h2, h3, h4, h5, h6 {
  overflow-wrap: break-word;
}

a {
  color: inherit;
  text-decoration: none;
}

/* ============================================
   LAYER 2: DESIGN TOKENS
   ============================================ */

:root {
  /* Core spacing scale - fluid and consistent */
  --fluid-space-unit: 1rem;
  --fluid-space-xs: calc(var(--fluid-space-unit) * 0.25);
  --fluid-space-sm: calc(var(--fluid-space-unit) * 0.5);
  --fluid-space-md: var(--fluid-space-unit);
  --fluid-space-lg: calc(var(--fluid-space-unit) * 1.5);
  --fluid-space-xl: calc(var(--fluid-space-unit) * 2);
  --fluid-space-2xl: calc(var(--fluid-space-unit) * 3);
  --fluid-space-3xl: calc(var(--fluid-space-unit) * 4);
  --fluid-space-4xl: calc(var(--fluid-space-unit) * 6);

  /* Default flow spacing */
  --fluid-flow-space: var(--fluid-space-lg);

  /* Brand colors */
  --fluid-brand: #5b63d3;
  --fluid-brand-dark: #4549a3;
  --fluid-brand-light: #8b93e3;

  /* Semantic colors */
  --fluid-color-primary: var(--fluid-brand);
  --fluid-color-primary-hover: var(--fluid-brand-dark);
  --fluid-color-success: #22c55e;
  --fluid-color-warning: #fb923c;
  --fluid-color-danger: #ef4444;
  --fluid-color-info: #3b82f6;

  /* Neutral colors */
  --fluid-color-text: #1a1a1a;
  --fluid-color-text-light: #6b7280;
  --fluid-color-bg: #ffffff;
  --fluid-color-bg-alt: #f9fafb;
  --fluid-color-surface: #ffffff;
  --fluid-color-border: #e5e7eb;
  --fluid-color-border-light: #f3f4f6;

  /* Typography */
  --fluid-font-sans: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;
  --fluid-font-mono: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', monospace;

  /* Font sizes - fluid scaling */
  --fluid-text-xs: clamp(0.75rem, 1.5vw, 0.875rem);
  --fluid-text-sm: clamp(0.875rem, 2vw, 1rem);
  --fluid-text-base: clamp(1rem, 2.5vw, 1.125rem);
  --fluid-text-lg: clamp(1.125rem, 3vw, 1.25rem);
  --fluid-text-xl: clamp(1.25rem, 3.5vw, 1.5rem);
  --fluid-text-2xl: clamp(1.5rem, 4vw, 2rem);
  --fluid-text-3xl: clamp(2rem, 5vw, 3rem);
  --fluid-text-4xl: clamp(2.5rem, 6vw, 4rem);

  /* Border radius */
  --fluid-radius-sm: 0.25rem;
  --fluid-radius-md: 0.5rem;
  --fluid-radius-lg: 0.75rem;
  --fluid-radius-xl: 1rem;
  --fluid-radius-2xl: 1.5rem;
  --fluid-radius-full: 9999px;

  /* Shadows - subtle and layered */
  --fluid-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --fluid-shadow-sm: 0 2px 4px -1px rgb(0 0 0 / 0.06);
  --fluid-shadow-md: 0 4px 6px -2px rgb(0 0 0 / 0.1);
  --fluid-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
  --fluid-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1);
  --fluid-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);

  /* Container */
  --fluid-container-max: 1200px;
  --fluid-container-padding: var(--fluid-space-lg);

  /* Transitions */
  --fluid-transition-fast: 150ms ease;
  --fluid-transition: 250ms ease;
  --fluid-transition-slow: 350ms ease;

  /* Motion timing functions */
  --fluid-ease-in: cubic-bezier(0.4, 0, 1, 1);
  --fluid-ease-out: cubic-bezier(0, 0, 0.2, 1);
  --fluid-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
  --fluid-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
}

/* Dark theme tokens */
[data-theme="dark"] {
  --fluid-color-text: #f3f4f6;
  --fluid-color-text-light: #9ca3af;
  --fluid-color-bg: #0a0a0a;
  --fluid-color-bg-alt: #18181b;
  --fluid-color-surface: #18181b;
  --fluid-color-border: #27272a;
  --fluid-color-border-light: #3f3f46;
}

/* ============================================
   LAYER 3: BASE TYPOGRAPHY
   ============================================ */

body {
  font-family: var(--fluid-font-sans);
  font-size: var(--fluid-text-base);
  color: var(--fluid-color-text);
  background: var(--fluid-color-bg);
}

/* Accessible focus styles */
:focus-visible {
  outline: 2px solid var(--fluid-color-primary);
  outline-offset: 2px;
}

a:focus-visible,
button:focus-visible,
.fluid-btn:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--fluid-color-primary) 30%, transparent);
  border-color: var(--fluid-color-primary);
}

/* Headings */
h1, h2, h3, h4, h5, h6 {
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: -0.02em;
  color: var(--fluid-color-text);
}

h1 { font-size: var(--fluid-text-4xl); font-weight: 700; }
h2 { font-size: var(--fluid-text-3xl); font-weight: 600; }
h3 { font-size: var(--fluid-text-2xl); }
h4 { font-size: var(--fluid-text-xl); }
h5 { font-size: var(--fluid-text-lg); }
h6 { font-size: var(--fluid-text-base); font-weight: 500; }

/* Paragraphs and text */
p { margin-bottom: var(--fluid-space-md); }
p:last-child { margin-bottom: 0; }
strong { font-weight: 600; }
small { font-size: var(--fluid-text-sm); }

/* Links */
a {
  color: var(--fluid-color-primary);
  text-decoration: none;
  transition: color var(--fluid-transition-fast);
}
a:hover { color: var(--fluid-color-primary-hover); text-decoration: underline; }

/* Lists */
ul, ol { padding-left: var(--fluid-space-lg); margin-bottom: var(--fluid-space-md); }
li { margin-bottom: var(--fluid-space-xs); }

/* Code */
code {
  font-family: var(--fluid-font-mono);
  font-size: 0.875em;
  background: var(--fluid-color-bg-alt);
  padding: 0.125em 0.25em;
  border-radius: var(--fluid-radius-sm);
}
pre {
  font-family: var(--fluid-font-mono);
  font-size: var(--fluid-text-sm);
  background: var(--fluid-color-bg-alt);
  padding: var(--fluid-space-md);
  border-radius: var(--fluid-radius-md);
  overflow-x: auto;
  margin-bottom: var(--fluid-space-md);
}
pre code { background: none; padding: 0; }

/* ============================================
   LAYER 4: LAYOUT PRIMITIVES
   ============================================ */

.fluid-container {
  width: 100%;
  max-width: var(--fluid-container-max);
  margin-inline: auto;
  padding-inline: var(--fluid-container-padding);
}

.fluid-flow > * + * { margin-top: var(--fluid-flow-space, var(--fluid-space-lg)); }

.fluid-stack { display: flex; flex-direction: column; gap: var(--gap, var(--fluid-space-lg)); }

.fluid-cluster { display: flex; flex-wrap: wrap; gap: var(--gap, var(--fluid-space-md)); align-items: center; }

.fluid-grid { display: grid; gap: var(--gap, var(--fluid-space-lg)); grid-template-columns: repeat(auto-fit, minmax(var(--min, 250px), 1fr)); }

.fluid-center { display: grid; place-items: center; min-height: var(--min-height, 100vh); }

.fluid-section { padding-block: var(--fluid-space-3xl); }

/* ============================================
   RESPONSIVE (Core)
   ============================================ */

@media (max-width: 768px) {
  :root { --fluid-container-padding: var(--fluid-space-md); }
  .fluid-section { padding-block: var(--fluid-space-2xl); }
}

/* Print (Core) */
@media print {
  .fluid-no-print { display: none !important; }
}

/**
 * Fluid Components
 * Buttons, Cards, Forms, Badges, Alerts, Tables
 */

/* Buttons */
.fluid-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--fluid-space-sm);
  padding: var(--fluid-space-sm) var(--fluid-space-lg);
  font-size: var(--fluid-text-sm);
  font-weight: 500;
  line-height: 1.5;
  border-radius: var(--fluid-radius-md);
  transition: all var(--fluid-transition-fast);
  cursor: pointer;
  white-space: nowrap;
  user-select: none;
  position: relative;
  overflow: hidden;
  isolation: isolate;
}

.fluid-btn::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at var(--x, 50%) var(--y, 50%), rgba(255,255,255,0.15), transparent 70%);
  opacity: 0;
  transition: opacity var(--fluid-transition);
  z-index: -1;
}
.fluid-btn:hover::before { opacity: 1; }

.fluid-btn-primary { background: var(--fluid-color-primary); color: white; box-shadow: var(--fluid-shadow-sm); }
.fluid-btn-primary:hover { background: var(--fluid-color-primary-hover); box-shadow: var(--fluid-shadow-md); transform: translateY(-1px); }

.fluid-btn-secondary { background: var(--fluid-color-bg-alt); color: var(--fluid-color-text); border: 1px solid var(--fluid-color-border); }
.fluid-btn-secondary:hover { background: var(--fluid-color-surface); border-color: var(--fluid-color-border); box-shadow: var(--fluid-shadow-sm); }

.fluid-btn-ghost { background: transparent; color: var(--fluid-color-text); }
.fluid-btn-ghost:hover { background: var(--fluid-color-bg-alt); }

.fluid-btn-danger { background: var(--fluid-color-danger); color: white; }
.fluid-btn-danger:hover { background: #dc2626; box-shadow: var(--fluid-shadow-md); }

.fluid-btn-sm { padding: var(--fluid-space-xs) var(--fluid-space-md); font-size: var(--fluid-text-xs); }
.fluid-btn-lg { padding: var(--fluid-space-md) var(--fluid-space-xl); font-size: var(--fluid-text-base); }

/* Cards */
.fluid-card {
  background: var(--fluid-color-surface);
  border: 1px solid var(--fluid-color-border);
  border-radius: var(--fluid-radius-lg);
  padding: var(--fluid-space-lg);
  box-shadow: var(--fluid-shadow-sm);
  transition: all var(--fluid-transition);
}
.fluid-card:hover { box-shadow: var(--fluid-shadow-md); transform: translateY(-2px); }
.fluid-card-header { margin-bottom: var(--fluid-space-md); padding-bottom: var(--fluid-space-md); border-bottom: 1px solid var(--fluid-color-border-light); }
.fluid-card-title { font-size: var(--fluid-text-lg); font-weight: 600; margin-bottom: var(--fluid-space-xs); }
.fluid-card-description { font-size: var(--fluid-text-sm); color: var(--fluid-color-text-light); }

/* Forms */
.fluid-form-group { margin-bottom: var(--fluid-space-md); }
.fluid-label { display: block; margin-bottom: var(--fluid-space-xs); font-weight: 500; }
.fluid-input, .fluid-textarea, .fluid-select {
  width: 100%;
  padding: var(--fluid-space-sm) var(--fluid-space-md);
  border: 1px solid var(--fluid-color-border);
  border-radius: var(--fluid-radius-md);
  background: var(--fluid-color-bg);
  color: var(--fluid-color-text);
  transition: border-color var(--fluid-transition-fast), box-shadow var(--fluid-transition-fast);
}
.fluid-input:focus, .fluid-textarea:focus, .fluid-select:focus {
  border-color: var(--fluid-color-primary);
  box-shadow: 0 0 0 3px rgba(91, 99, 211, 0.15);
  outline: none;
}
.fluid-textarea { min-height: 120px; resize: vertical; }
.fluid-checkbox, .fluid-radio { margin-right: var(--fluid-space-sm); }

/* Badges */
.fluid-badge {
  display: inline-flex; align-items: center;
  padding: var(--fluid-space-xs) var(--fluid-space-sm);
  font-size: var(--fluid-text-xs); font-weight: 500;
  border-radius: var(--fluid-radius-full);
  background: var(--fluid-color-bg-alt); color: var(--fluid-color-text);
  border: 1px solid var(--fluid-color-border);
}
.fluid-badge-primary { background: var(--fluid-color-primary); color: white; border-color: var(--fluid-color-primary); }
.fluid-badge-success { background: var(--fluid-color-success); color: white; border-color: var(--fluid-color-success); }
.fluid-badge-warning { background: var(--fluid-color-warning); color: white; border-color: var(--fluid-color-warning); }
.fluid-badge-danger { background: var(--fluid-color-danger); color: white; border-color: var(--fluid-color-danger); }

/* Alerts */
.fluid-alert { padding: var(--fluid-space-md); border-radius: var(--fluid-radius-md); margin-bottom: var(--fluid-space-md); border: 1px solid; }
.fluid-alert-info { background: rgba(59, 130, 246, 0.1); border-color: var(--fluid-color-info); color: var(--fluid-color-info); }
.fluid-alert-success { background: rgba(34, 197, 94, 0.1); border-color: var(--fluid-color-success); color: var(--fluid-color-success); }
.fluid-alert-warning { background: rgba(251, 146, 60, 0.1); border-color: var(--fluid-color-warning); color: var(--fluid-color-warning); }
.fluid-alert-danger { background: rgba(239, 68, 68, 0.1); border-color: var(--fluid-color-danger); color: var(--fluid-color-danger); }

/* Tables */
.fluid-table {
  width: 100%; border-collapse: collapse; background: var(--fluid-color-surface);
  border-radius: var(--fluid-radius-lg); overflow: hidden; box-shadow: var(--fluid-shadow-sm);
}
.fluid-table th { background: var(--fluid-color-bg-alt); padding: var(--fluid-space-md); text-align: left; font-weight: 600; font-size: var(--fluid-text-sm); color: var(--fluid-color-text); border-bottom: 1px solid var(--fluid-color-border); }
.fluid-table td { padding: var(--fluid-space-md); border-bottom: 1px solid var(--fluid-color-border-light); }
.fluid-table tbody tr:last-child td { border-bottom: none; }
.fluid-table tbody tr:hover { background: var(--fluid-color-bg-alt); }

/**
 * Fluid Business Components
 * Invoice, Service Card and related business UI
 */

/* Invoice */
.fluid-invoice {
  background: var(--fluid-color-surface);
  border-radius: var(--fluid-radius-lg);
  padding: var(--fluid-space-2xl);
  box-shadow: var(--fluid-shadow-lg);
}
.fluid-invoice-header { display: flex; justify-content: space-between; margin-bottom: var(--fluid-space-2xl); padding-bottom: var(--fluid-space-lg); border-bottom: 2px solid var(--fluid-color-border); }
.fluid-invoice-logo { font-size: var(--fluid-text-2xl); font-weight: 700; color: var(--fluid-color-primary); }
.fluid-invoice-number { font-size: var(--fluid-text-sm); color: var(--fluid-color-text-light); }
.fluid-invoice-details { display: grid; grid-template-columns: 1fr 1fr; gap: var(--fluid-space-xl); margin-bottom: var(--fluid-space-2xl); }
.fluid-invoice-from, .fluid-invoice-to { font-size: var(--fluid-text-sm); }
.fluid-invoice-from h3, .fluid-invoice-to h3 { font-size: var(--fluid-text-base); margin-bottom: var(--fluid-space-sm); color: var(--fluid-color-text); }
.fluid-invoice-items { margin-bottom: var(--fluid-space-xl); }
.fluid-invoice-total { text-align: right; padding-top: var(--fluid-space-lg); border-top: 2px solid var(--fluid-color-border); }
.fluid-invoice-total-amount { font-size: var(--fluid-text-2xl); font-weight: 700; color: var(--fluid-color-primary); }

/* Service Card */
.fluid-service-card {
  background: var(--fluid-color-surface);
  border: 1px solid var(--fluid-color-border);
  border-radius: var(--fluid-radius-lg);
  padding: var(--fluid-space-xl);
  transition: all var(--fluid-transition);
  cursor: pointer;
}
.fluid-service-card:hover { transform: translateY(-4px); box-shadow: var(--fluid-shadow-xl); border-color: var(--fluid-color-primary); }
.fluid-service-icon { width: 48px; height: 48px; margin-bottom: var(--fluid-space-md); color: var(--fluid-color-primary); }
.fluid-service-title { font-size: var(--fluid-text-lg); font-weight: 600; margin-bottom: var(--fluid-space-sm); }
.fluid-service-description { font-size: var(--fluid-text-sm); color: var(--fluid-color-text-light); margin-bottom: var(--fluid-space-md); }
.fluid-service-price { font-size: var(--fluid-text-2xl); font-weight: 700; color: var(--fluid-color-primary); }

/* Responsive (Business) */
@media (max-width: 768px) {
  .fluid-invoice-header { flex-direction: column; gap: var(--fluid-space-lg); }
  .fluid-invoice-details { grid-template-columns: 1fr; }
}

/* Print (Business) */
@media print {
  .fluid-invoice { box-shadow: none; page-break-inside: avoid; }
}

/**
 * Fluid Utilities
 * Text alignment/color, display, flex/grid helpers, spacing, sizing, borders,
 * and responsive-only visibility helpers.
 */

/* Text alignment */
.fluid-text-left { text-align: left; }
.fluid-text-center { text-align: center; }
.fluid-text-right { text-align: right; }

/* Text color */
.fluid-text-primary { color: var(--fluid-color-primary); }
.fluid-text-muted { color: var(--fluid-color-text-light); }
.fluid-text-success { color: var(--fluid-color-success); }
.fluid-text-danger { color: var(--fluid-color-danger); }

/* Font weight */
.fluid-font-normal { font-weight: 400; }
.fluid-font-medium { font-weight: 500; }
.fluid-font-semibold { font-weight: 600; }
.fluid-font-bold { font-weight: 700; }

/* Display */
.fluid-hidden { display: none; }
.fluid-block { display: block; }
.fluid-inline-block { display: inline-block; }
.fluid-flex { display: flex; }
.fluid-inline-flex { display: inline-flex; }

/* Flexbox */
.fluid-items-center { align-items: center; }
.fluid-items-start { align-items: flex-start; }
.fluid-items-end { align-items: flex-end; }
.fluid-justify-center { justify-content: center; }
.fluid-justify-between { justify-content: space-between; }
.fluid-justify-around { justify-content: space-around; }
.fluid-flex-1 { flex: 1; }
.fluid-flex-wrap { flex-wrap: wrap; }

/* Gaps */
.fluid-gap-xs { gap: var(--fluid-space-xs); }
.fluid-gap-sm { gap: var(--fluid-space-sm); }
.fluid-gap-md { gap: var(--fluid-space-md); }
.fluid-gap-lg { gap: var(--fluid-space-lg); }
.fluid-gap-xl { gap: var(--fluid-space-xl); }

/* Padding/Margin helpers (subset) */
.fluid-mb-0 { margin-bottom: 0; }
.fluid-mb-sm { margin-bottom: var(--fluid-space-sm); }
.fluid-mb-md { margin-bottom: var(--fluid-space-md); }
.fluid-mb-lg { margin-bottom: var(--fluid-space-lg); }
.fluid-p-sm { padding: var(--fluid-space-sm); }
.fluid-p-md { padding: var(--fluid-space-md); }
.fluid-p-lg { padding: var(--fluid-space-lg); }

/* Radius */
.fluid-rounded-sm { border-radius: var(--fluid-radius-sm); }
.fluid-rounded-md { border-radius: var(--fluid-radius-md); }
.fluid-rounded-lg { border-radius: var(--fluid-radius-lg); }
.fluid-rounded-full { border-radius: var(--fluid-radius-full); }

/* Shadows */
.fluid-shadow-xs { box-shadow: var(--fluid-shadow-xs); }
.fluid-shadow-sm { box-shadow: var(--fluid-shadow-sm); }
.fluid-shadow-md { box-shadow: var(--fluid-shadow-md); }
.fluid-shadow-lg { box-shadow: var(--fluid-shadow-lg); }
.fluid-shadow-xl { box-shadow: var(--fluid-shadow-xl); }
.fluid-shadow-2xl { box-shadow: var(--fluid-shadow-2xl); }

/* Responsive-only visibility */
@media (max-width: 768px) { .fluid-mobile-hidden { display: none; } }
@media (min-width: 769px) { .fluid-desktop-hidden { display: none; } }
/**
 * Fluid Animations (CSS-only utilities)
 * CSS classes for simple animations and keyframes (not the Motion System).
 */

.fluid-fade-in { animation: fluidFadeIn var(--fluid-transition) var(--fluid-ease-out); }
.fluid-fade-out { animation: fluidFadeOut var(--fluid-transition) var(--fluid-ease-in); }

/* Slide animations */
.fluid-slide-up { animation: fluidSlideUp var(--fluid-transition) var(--fluid-ease-out); }
.fluid-slide-down { animation: fluidSlideDown var(--fluid-transition) var(--fluid-ease-out); }

/* Scale animations */
.fluid-scale-in { animation: fluidScaleIn var(--fluid-transition) var(--fluid-ease-spring); }

/* Spin animation */
.fluid-spin { animation: fluidSpin 1s linear infinite; }

/* Pulse animation */
.fluid-pulse { animation: fluidPulse 2s var(--fluid-ease-in-out) infinite; }

/* Keyframes */
@keyframes fluidFadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes fluidFadeOut { from { opacity: 1; } to { opacity: 0; } }
@keyframes fluidSlideUp { from { opacity: 0; transform: translateY(10px);} to { opacity: 1; transform: translateY(0);} }
@keyframes fluidSlideDown { from { opacity: 0; transform: translateY(-10px);} to { opacity: 1; transform: translateY(0);} }
@keyframes fluidScaleIn { from { opacity: 0; transform: scale(0.95);} to { opacity: 1; transform: scale(1);} }
@keyframes fluidSpin { from { transform: rotate(0deg);} to { transform: rotate(360deg);} }
@keyframes fluidPulse { 0%,100% { opacity:1;} 50% { opacity: .5;} }


/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZsdWlkLm1pbi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiZmx1aWQubWluLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmx1aWQgQ29yZVxuICogUmVzZXQgJiBOb3JtYWxpemUsIERlc2lnbiBUb2tlbnMsIEJhc2UgVHlwb2dyYXBoeSwgTGF5b3V0IFByaW1pdGl2ZXMsXG4gKiBhbmQgY29yZSByZXNwb25zaXZlL3ByaW50IGhlbHBlcnMuXG4gKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIExBWUVSIDE6IFJFU0VUICYgTk9STUFMSVpFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4qLCAqOjpiZWZvcmUsICo6OmFmdGVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG5odG1sIHtcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuXG5ib2R5IHtcbiAgbWluLWhlaWdodDogMTAwdmg7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xufVxuXG5pbWcsIHBpY3R1cmUsIHZpZGVvLCBjYW52YXMsIHN2ZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbn1cblxuaW5wdXQsIGJ1dHRvbiwgdGV4dGFyZWEsIHNlbGVjdCB7XG4gIGZvbnQ6IGluaGVyaXQ7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5idXR0b24ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbn1cblxucCwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7XG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG59XG5cbmEge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTEFZRVIgMjogREVTSUdOIFRPS0VOU1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuOnJvb3Qge1xuICAvKiBDb3JlIHNwYWNpbmcgc2NhbGUgLSBmbHVpZCBhbmQgY29uc2lzdGVudCAqL1xuICAtLWZsdWlkLXNwYWNlLXVuaXQ6IDFyZW07XG4gIC0tZmx1aWQtc3BhY2UteHM6IGNhbGModmFyKC0tZmx1aWQtc3BhY2UtdW5pdCkgKiAwLjI1KTtcbiAgLS1mbHVpZC1zcGFjZS1zbTogY2FsYyh2YXIoLS1mbHVpZC1zcGFjZS11bml0KSAqIDAuNSk7XG4gIC0tZmx1aWQtc3BhY2UtbWQ6IHZhcigtLWZsdWlkLXNwYWNlLXVuaXQpO1xuICAtLWZsdWlkLXNwYWNlLWxnOiBjYWxjKHZhcigtLWZsdWlkLXNwYWNlLXVuaXQpICogMS41KTtcbiAgLS1mbHVpZC1zcGFjZS14bDogY2FsYyh2YXIoLS1mbHVpZC1zcGFjZS11bml0KSAqIDIpO1xuICAtLWZsdWlkLXNwYWNlLTJ4bDogY2FsYyh2YXIoLS1mbHVpZC1zcGFjZS11bml0KSAqIDMpO1xuICAtLWZsdWlkLXNwYWNlLTN4bDogY2FsYyh2YXIoLS1mbHVpZC1zcGFjZS11bml0KSAqIDQpO1xuICAtLWZsdWlkLXNwYWNlLTR4bDogY2FsYyh2YXIoLS1mbHVpZC1zcGFjZS11bml0KSAqIDYpO1xuXG4gIC8qIERlZmF1bHQgZmxvdyBzcGFjaW5nICovXG4gIC0tZmx1aWQtZmxvdy1zcGFjZTogdmFyKC0tZmx1aWQtc3BhY2UtbGcpO1xuXG4gIC8qIEJyYW5kIGNvbG9ycyAqL1xuICAtLWZsdWlkLWJyYW5kOiAjNWI2M2QzO1xuICAtLWZsdWlkLWJyYW5kLWRhcms6ICM0NTQ5YTM7XG4gIC0tZmx1aWQtYnJhbmQtbGlnaHQ6ICM4YjkzZTM7XG5cbiAgLyogU2VtYW50aWMgY29sb3JzICovXG4gIC0tZmx1aWQtY29sb3ItcHJpbWFyeTogdmFyKC0tZmx1aWQtYnJhbmQpO1xuICAtLWZsdWlkLWNvbG9yLXByaW1hcnktaG92ZXI6IHZhcigtLWZsdWlkLWJyYW5kLWRhcmspO1xuICAtLWZsdWlkLWNvbG9yLXN1Y2Nlc3M6ICMyMmM1NWU7XG4gIC0tZmx1aWQtY29sb3Itd2FybmluZzogI2ZiOTIzYztcbiAgLS1mbHVpZC1jb2xvci1kYW5nZXI6ICNlZjQ0NDQ7XG4gIC0tZmx1aWQtY29sb3ItaW5mbzogIzNiODJmNjtcblxuICAvKiBOZXV0cmFsIGNvbG9ycyAqL1xuICAtLWZsdWlkLWNvbG9yLXRleHQ6ICMxYTFhMWE7XG4gIC0tZmx1aWQtY29sb3ItdGV4dC1saWdodDogIzZiNzI4MDtcbiAgLS1mbHVpZC1jb2xvci1iZzogI2ZmZmZmZjtcbiAgLS1mbHVpZC1jb2xvci1iZy1hbHQ6ICNmOWZhZmI7XG4gIC0tZmx1aWQtY29sb3Itc3VyZmFjZTogI2ZmZmZmZjtcbiAgLS1mbHVpZC1jb2xvci1ib3JkZXI6ICNlNWU3ZWI7XG4gIC0tZmx1aWQtY29sb3ItYm9yZGVyLWxpZ2h0OiAjZjNmNGY2O1xuXG4gIC8qIFR5cG9ncmFwaHkgKi9cbiAgLS1mbHVpZC1mb250LXNhbnM6IHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgJ1NlZ29lIFVJJywgUm9ib3RvLCAnSGVsdmV0aWNhIE5ldWUnLCBzYW5zLXNlcmlmO1xuICAtLWZsdWlkLWZvbnQtbW9ubzogJ1NGIE1vbm8nLCBNb25hY28sICdDYXNjYWRpYSBDb2RlJywgJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuXG4gIC8qIEZvbnQgc2l6ZXMgLSBmbHVpZCBzY2FsaW5nICovXG4gIC0tZmx1aWQtdGV4dC14czogY2xhbXAoMC43NXJlbSwgMS41dncsIDAuODc1cmVtKTtcbiAgLS1mbHVpZC10ZXh0LXNtOiBjbGFtcCgwLjg3NXJlbSwgMnZ3LCAxcmVtKTtcbiAgLS1mbHVpZC10ZXh0LWJhc2U6IGNsYW1wKDFyZW0sIDIuNXZ3LCAxLjEyNXJlbSk7XG4gIC0tZmx1aWQtdGV4dC1sZzogY2xhbXAoMS4xMjVyZW0sIDN2dywgMS4yNXJlbSk7XG4gIC0tZmx1aWQtdGV4dC14bDogY2xhbXAoMS4yNXJlbSwgMy41dncsIDEuNXJlbSk7XG4gIC0tZmx1aWQtdGV4dC0yeGw6IGNsYW1wKDEuNXJlbSwgNHZ3LCAycmVtKTtcbiAgLS1mbHVpZC10ZXh0LTN4bDogY2xhbXAoMnJlbSwgNXZ3LCAzcmVtKTtcbiAgLS1mbHVpZC10ZXh0LTR4bDogY2xhbXAoMi41cmVtLCA2dncsIDRyZW0pO1xuXG4gIC8qIEJvcmRlciByYWRpdXMgKi9cbiAgLS1mbHVpZC1yYWRpdXMtc206IDAuMjVyZW07XG4gIC0tZmx1aWQtcmFkaXVzLW1kOiAwLjVyZW07XG4gIC0tZmx1aWQtcmFkaXVzLWxnOiAwLjc1cmVtO1xuICAtLWZsdWlkLXJhZGl1cy14bDogMXJlbTtcbiAgLS1mbHVpZC1yYWRpdXMtMnhsOiAxLjVyZW07XG4gIC0tZmx1aWQtcmFkaXVzLWZ1bGw6IDk5OTlweDtcblxuICAvKiBTaGFkb3dzIC0gc3VidGxlIGFuZCBsYXllcmVkICovXG4gIC0tZmx1aWQtc2hhZG93LXhzOiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTtcbiAgLS1mbHVpZC1zaGFkb3ctc206IDAgMnB4IDRweCAtMXB4IHJnYigwIDAgMCAvIDAuMDYpO1xuICAtLWZsdWlkLXNoYWRvdy1tZDogMCA0cHggNnB4IC0ycHggcmdiKDAgMCAwIC8gMC4xKTtcbiAgLS1mbHVpZC1zaGFkb3ctbGc6IDAgMTBweCAxNXB4IC0zcHggcmdiKDAgMCAwIC8gMC4xKTtcbiAgLS1mbHVpZC1zaGFkb3cteGw6IDAgMjBweCAyNXB4IC01cHggcmdiKDAgMCAwIC8gMC4xKTtcbiAgLS1mbHVpZC1zaGFkb3ctMnhsOiAwIDI1cHggNTBweCAtMTJweCByZ2IoMCAwIDAgLyAwLjI1KTtcblxuICAvKiBDb250YWluZXIgKi9cbiAgLS1mbHVpZC1jb250YWluZXItbWF4OiAxMjAwcHg7XG4gIC0tZmx1aWQtY29udGFpbmVyLXBhZGRpbmc6IHZhcigtLWZsdWlkLXNwYWNlLWxnKTtcblxuICAvKiBUcmFuc2l0aW9ucyAqL1xuICAtLWZsdWlkLXRyYW5zaXRpb24tZmFzdDogMTUwbXMgZWFzZTtcbiAgLS1mbHVpZC10cmFuc2l0aW9uOiAyNTBtcyBlYXNlO1xuICAtLWZsdWlkLXRyYW5zaXRpb24tc2xvdzogMzUwbXMgZWFzZTtcblxuICAvKiBNb3Rpb24gdGltaW5nIGZ1bmN0aW9ucyAqL1xuICAtLWZsdWlkLWVhc2UtaW46IGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpO1xuICAtLWZsdWlkLWVhc2Utb3V0OiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTtcbiAgLS1mbHVpZC1lYXNlLWluLW91dDogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcbiAgLS1mbHVpZC1lYXNlLXNwcmluZzogY3ViaWMtYmV6aWVyKDAuMzQsIDEuNTYsIDAuNjQsIDEpO1xufVxuXG4vKiBEYXJrIHRoZW1lIHRva2VucyAqL1xuW2RhdGEtdGhlbWU9XCJkYXJrXCJdIHtcbiAgLS1mbHVpZC1jb2xvci10ZXh0OiAjZjNmNGY2O1xuICAtLWZsdWlkLWNvbG9yLXRleHQtbGlnaHQ6ICM5Y2EzYWY7XG4gIC0tZmx1aWQtY29sb3ItYmc6ICMwYTBhMGE7XG4gIC0tZmx1aWQtY29sb3ItYmctYWx0OiAjMTgxODFiO1xuICAtLWZsdWlkLWNvbG9yLXN1cmZhY2U6ICMxODE4MWI7XG4gIC0tZmx1aWQtY29sb3ItYm9yZGVyOiAjMjcyNzJhO1xuICAtLWZsdWlkLWNvbG9yLWJvcmRlci1saWdodDogIzNmM2Y0Njtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIExBWUVSIDM6IEJBU0UgVFlQT0dSQVBIWVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuYm9keSB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mbHVpZC1mb250LXNhbnMpO1xuICBmb250LXNpemU6IHZhcigtLWZsdWlkLXRleHQtYmFzZSk7XG4gIGNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci10ZXh0KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmx1aWQtY29sb3ItYmcpO1xufVxuXG4vKiBBY2Nlc3NpYmxlIGZvY3VzIHN0eWxlcyAqL1xuOmZvY3VzLXZpc2libGUge1xuICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tZmx1aWQtY29sb3ItcHJpbWFyeSk7XG4gIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbmE6Zm9jdXMtdmlzaWJsZSxcbmJ1dHRvbjpmb2N1cy12aXNpYmxlLFxuLmZsdWlkLWJ0bjpmb2N1cy12aXNpYmxlLFxuaW5wdXQ6Zm9jdXMtdmlzaWJsZSxcbnNlbGVjdDpmb2N1cy12aXNpYmxlLFxudGV4dGFyZWE6Zm9jdXMtdmlzaWJsZSB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZmx1aWQtY29sb3ItcHJpbWFyeSkgMzAlLCB0cmFuc3BhcmVudCk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItcHJpbWFyeSk7XG59XG5cbi8qIEhlYWRpbmdzICovXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIGNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci10ZXh0KTtcbn1cblxuaDEgeyBmb250LXNpemU6IHZhcigtLWZsdWlkLXRleHQtNHhsKTsgZm9udC13ZWlnaHQ6IDcwMDsgfVxuaDIgeyBmb250LXNpemU6IHZhcigtLWZsdWlkLXRleHQtM3hsKTsgZm9udC13ZWlnaHQ6IDYwMDsgfVxuaDMgeyBmb250LXNpemU6IHZhcigtLWZsdWlkLXRleHQtMnhsKTsgfVxuaDQgeyBmb250LXNpemU6IHZhcigtLWZsdWlkLXRleHQteGwpOyB9XG5oNSB7IGZvbnQtc2l6ZTogdmFyKC0tZmx1aWQtdGV4dC1sZyk7IH1cbmg2IHsgZm9udC1zaXplOiB2YXIoLS1mbHVpZC10ZXh0LWJhc2UpOyBmb250LXdlaWdodDogNTAwOyB9XG5cbi8qIFBhcmFncmFwaHMgYW5kIHRleHQgKi9cbnAgeyBtYXJnaW4tYm90dG9tOiB2YXIoLS1mbHVpZC1zcGFjZS1tZCk7IH1cbnA6bGFzdC1jaGlsZCB7IG1hcmdpbi1ib3R0b206IDA7IH1cbnN0cm9uZyB7IGZvbnQtd2VpZ2h0OiA2MDA7IH1cbnNtYWxsIHsgZm9udC1zaXplOiB2YXIoLS1mbHVpZC10ZXh0LXNtKTsgfVxuXG4vKiBMaW5rcyAqL1xuYSB7XG4gIGNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci1wcmltYXJ5KTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0cmFuc2l0aW9uOiBjb2xvciB2YXIoLS1mbHVpZC10cmFuc2l0aW9uLWZhc3QpO1xufVxuYTpob3ZlciB7IGNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci1wcmltYXJ5LWhvdmVyKTsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cblxuLyogTGlzdHMgKi9cbnVsLCBvbCB7IHBhZGRpbmctbGVmdDogdmFyKC0tZmx1aWQtc3BhY2UtbGcpOyBtYXJnaW4tYm90dG9tOiB2YXIoLS1mbHVpZC1zcGFjZS1tZCk7IH1cbmxpIHsgbWFyZ2luLWJvdHRvbTogdmFyKC0tZmx1aWQtc3BhY2UteHMpOyB9XG5cbi8qIENvZGUgKi9cbmNvZGUge1xuICBmb250LWZhbWlseTogdmFyKC0tZmx1aWQtZm9udC1tb25vKTtcbiAgZm9udC1zaXplOiAwLjg3NWVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1mbHVpZC1jb2xvci1iZy1hbHQpO1xuICBwYWRkaW5nOiAwLjEyNWVtIDAuMjVlbTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmx1aWQtcmFkaXVzLXNtKTtcbn1cbnByZSB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mbHVpZC1mb250LW1vbm8pO1xuICBmb250LXNpemU6IHZhcigtLWZsdWlkLXRleHQtc20pO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1mbHVpZC1jb2xvci1iZy1hbHQpO1xuICBwYWRkaW5nOiB2YXIoLS1mbHVpZC1zcGFjZS1tZCk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWZsdWlkLXJhZGl1cy1tZCk7XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIG1hcmdpbi1ib3R0b206IHZhcigtLWZsdWlkLXNwYWNlLW1kKTtcbn1cbnByZSBjb2RlIHsgYmFja2dyb3VuZDogbm9uZTsgcGFkZGluZzogMDsgfVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTEFZRVIgNDogTEFZT1VUIFBSSU1JVElWRVNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5mbHVpZC1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiB2YXIoLS1mbHVpZC1jb250YWluZXItbWF4KTtcbiAgbWFyZ2luLWlubGluZTogYXV0bztcbiAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWZsdWlkLWNvbnRhaW5lci1wYWRkaW5nKTtcbn1cblxuLmZsdWlkLWZsb3cgPiAqICsgKiB7IG1hcmdpbi10b3A6IHZhcigtLWZsdWlkLWZsb3ctc3BhY2UsIHZhcigtLWZsdWlkLXNwYWNlLWxnKSk7IH1cblxuLmZsdWlkLXN0YWNrIHsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiB2YXIoLS1nYXAsIHZhcigtLWZsdWlkLXNwYWNlLWxnKSk7IH1cblxuLmZsdWlkLWNsdXN0ZXIgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogdmFyKC0tZ2FwLCB2YXIoLS1mbHVpZC1zcGFjZS1tZCkpOyBhbGlnbi1pdGVtczogY2VudGVyOyB9XG5cbi5mbHVpZC1ncmlkIHsgZGlzcGxheTogZ3JpZDsgZ2FwOiB2YXIoLS1nYXAsIHZhcigtLWZsdWlkLXNwYWNlLWxnKSk7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgodmFyKC0tbWluLCAyNTBweCksIDFmcikpOyB9XG5cbi5mbHVpZC1jZW50ZXIgeyBkaXNwbGF5OiBncmlkOyBwbGFjZS1pdGVtczogY2VudGVyOyBtaW4taGVpZ2h0OiB2YXIoLS1taW4taGVpZ2h0LCAxMDB2aCk7IH1cblxuLmZsdWlkLXNlY3Rpb24geyBwYWRkaW5nLWJsb2NrOiB2YXIoLS1mbHVpZC1zcGFjZS0zeGwpOyB9XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBSRVNQT05TSVZFIChDb3JlKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIDpyb290IHsgLS1mbHVpZC1jb250YWluZXItcGFkZGluZzogdmFyKC0tZmx1aWQtc3BhY2UtbWQpOyB9XG4gIC5mbHVpZC1zZWN0aW9uIHsgcGFkZGluZy1ibG9jazogdmFyKC0tZmx1aWQtc3BhY2UtMnhsKTsgfVxufVxuXG4vKiBQcmludCAoQ29yZSkgKi9cbkBtZWRpYSBwcmludCB7XG4gIC5mbHVpZC1uby1wcmludCB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxufVxuXG4vKipcbiAqIEZsdWlkIENvbXBvbmVudHNcbiAqIEJ1dHRvbnMsIENhcmRzLCBGb3JtcywgQmFkZ2VzLCBBbGVydHMsIFRhYmxlc1xuICovXG5cbi8qIEJ1dHRvbnMgKi9cbi5mbHVpZC1idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tZmx1aWQtc3BhY2Utc20pO1xuICBwYWRkaW5nOiB2YXIoLS1mbHVpZC1zcGFjZS1zbSkgdmFyKC0tZmx1aWQtc3BhY2UtbGcpO1xuICBmb250LXNpemU6IHZhcigtLWZsdWlkLXRleHQtc20pO1xuICBmb250LXdlaWdodDogNTAwO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1mbHVpZC1yYWRpdXMtbWQpO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZmx1aWQtdHJhbnNpdGlvbi1mYXN0KTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBpc29sYXRpb246IGlzb2xhdGU7XG59XG5cbi5mbHVpZC1idG46OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IHZhcigtLXgsIDUwJSkgdmFyKC0teSwgNTAlKSwgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSwgdHJhbnNwYXJlbnQgNzAlKTtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1mbHVpZC10cmFuc2l0aW9uKTtcbiAgei1pbmRleDogLTE7XG59XG4uZmx1aWQtYnRuOmhvdmVyOjpiZWZvcmUgeyBvcGFjaXR5OiAxOyB9XG5cbi5mbHVpZC1idG4tcHJpbWFyeSB7IGJhY2tncm91bmQ6IHZhcigtLWZsdWlkLWNvbG9yLXByaW1hcnkpOyBjb2xvcjogd2hpdGU7IGJveC1zaGFkb3c6IHZhcigtLWZsdWlkLXNoYWRvdy1zbSk7IH1cbi5mbHVpZC1idG4tcHJpbWFyeTpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWZsdWlkLWNvbG9yLXByaW1hcnktaG92ZXIpOyBib3gtc2hhZG93OiB2YXIoLS1mbHVpZC1zaGFkb3ctbWQpOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IH1cblxuLmZsdWlkLWJ0bi1zZWNvbmRhcnkgeyBiYWNrZ3JvdW5kOiB2YXIoLS1mbHVpZC1jb2xvci1iZy1hbHQpOyBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItdGV4dCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZsdWlkLWNvbG9yLWJvcmRlcik7IH1cbi5mbHVpZC1idG4tc2Vjb25kYXJ5OmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tZmx1aWQtY29sb3Itc3VyZmFjZSk7IGJvcmRlci1jb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItYm9yZGVyKTsgYm94LXNoYWRvdzogdmFyKC0tZmx1aWQtc2hhZG93LXNtKTsgfVxuXG4uZmx1aWQtYnRuLWdob3N0IHsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci10ZXh0KTsgfVxuLmZsdWlkLWJ0bi1naG9zdDpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWZsdWlkLWNvbG9yLWJnLWFsdCk7IH1cblxuLmZsdWlkLWJ0bi1kYW5nZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1mbHVpZC1jb2xvci1kYW5nZXIpOyBjb2xvcjogd2hpdGU7IH1cbi5mbHVpZC1idG4tZGFuZ2VyOmhvdmVyIHsgYmFja2dyb3VuZDogI2RjMjYyNjsgYm94LXNoYWRvdzogdmFyKC0tZmx1aWQtc2hhZG93LW1kKTsgfVxuXG4uZmx1aWQtYnRuLXNtIHsgcGFkZGluZzogdmFyKC0tZmx1aWQtc3BhY2UteHMpIHZhcigtLWZsdWlkLXNwYWNlLW1kKTsgZm9udC1zaXplOiB2YXIoLS1mbHVpZC10ZXh0LXhzKTsgfVxuLmZsdWlkLWJ0bi1sZyB7IHBhZGRpbmc6IHZhcigtLWZsdWlkLXNwYWNlLW1kKSB2YXIoLS1mbHVpZC1zcGFjZS14bCk7IGZvbnQtc2l6ZTogdmFyKC0tZmx1aWQtdGV4dC1iYXNlKTsgfVxuXG4vKiBDYXJkcyAqL1xuLmZsdWlkLWNhcmQge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1mbHVpZC1jb2xvci1zdXJmYWNlKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmx1aWQtY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmx1aWQtcmFkaXVzLWxnKTtcbiAgcGFkZGluZzogdmFyKC0tZmx1aWQtc3BhY2UtbGcpO1xuICBib3gtc2hhZG93OiB2YXIoLS1mbHVpZC1zaGFkb3ctc20pO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZmx1aWQtdHJhbnNpdGlvbik7XG59XG4uZmx1aWQtY2FyZDpob3ZlciB7IGJveC1zaGFkb3c6IHZhcigtLWZsdWlkLXNoYWRvdy1tZCk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsgfVxuLmZsdWlkLWNhcmQtaGVhZGVyIHsgbWFyZ2luLWJvdHRvbTogdmFyKC0tZmx1aWQtc3BhY2UtbWQpOyBwYWRkaW5nLWJvdHRvbTogdmFyKC0tZmx1aWQtc3BhY2UtbWQpOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZmx1aWQtY29sb3ItYm9yZGVyLWxpZ2h0KTsgfVxuLmZsdWlkLWNhcmQtdGl0bGUgeyBmb250LXNpemU6IHZhcigtLWZsdWlkLXRleHQtbGcpOyBmb250LXdlaWdodDogNjAwOyBtYXJnaW4tYm90dG9tOiB2YXIoLS1mbHVpZC1zcGFjZS14cyk7IH1cbi5mbHVpZC1jYXJkLWRlc2NyaXB0aW9uIHsgZm9udC1zaXplOiB2YXIoLS1mbHVpZC10ZXh0LXNtKTsgY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLXRleHQtbGlnaHQpOyB9XG5cbi8qIEZvcm1zICovXG4uZmx1aWQtZm9ybS1ncm91cCB7IG1hcmdpbi1ib3R0b206IHZhcigtLWZsdWlkLXNwYWNlLW1kKTsgfVxuLmZsdWlkLWxhYmVsIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbi1ib3R0b206IHZhcigtLWZsdWlkLXNwYWNlLXhzKTsgZm9udC13ZWlnaHQ6IDUwMDsgfVxuLmZsdWlkLWlucHV0LCAuZmx1aWQtdGV4dGFyZWEsIC5mbHVpZC1zZWxlY3Qge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogdmFyKC0tZmx1aWQtc3BhY2Utc20pIHZhcigtLWZsdWlkLXNwYWNlLW1kKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmx1aWQtY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmx1aWQtcmFkaXVzLW1kKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmx1aWQtY29sb3ItYmcpO1xuICBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItdGV4dCk7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1mbHVpZC10cmFuc2l0aW9uLWZhc3QpLCBib3gtc2hhZG93IHZhcigtLWZsdWlkLXRyYW5zaXRpb24tZmFzdCk7XG59XG4uZmx1aWQtaW5wdXQ6Zm9jdXMsIC5mbHVpZC10ZXh0YXJlYTpmb2N1cywgLmZsdWlkLXNlbGVjdDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItcHJpbWFyeSk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDkxLCA5OSwgMjExLCAwLjE1KTtcbiAgb3V0bGluZTogbm9uZTtcbn1cbi5mbHVpZC10ZXh0YXJlYSB7IG1pbi1oZWlnaHQ6IDEyMHB4OyByZXNpemU6IHZlcnRpY2FsOyB9XG4uZmx1aWQtY2hlY2tib3gsIC5mbHVpZC1yYWRpbyB7IG1hcmdpbi1yaWdodDogdmFyKC0tZmx1aWQtc3BhY2Utc20pOyB9XG5cbi8qIEJhZGdlcyAqL1xuLmZsdWlkLWJhZGdlIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IHZhcigtLWZsdWlkLXNwYWNlLXhzKSB2YXIoLS1mbHVpZC1zcGFjZS1zbSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZmx1aWQtdGV4dC14cyk7IGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWZsdWlkLXJhZGl1cy1mdWxsKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmx1aWQtY29sb3ItYmctYWx0KTsgY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLXRleHQpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1mbHVpZC1jb2xvci1ib3JkZXIpO1xufVxuLmZsdWlkLWJhZGdlLXByaW1hcnkgeyBiYWNrZ3JvdW5kOiB2YXIoLS1mbHVpZC1jb2xvci1wcmltYXJ5KTsgY29sb3I6IHdoaXRlOyBib3JkZXItY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLXByaW1hcnkpOyB9XG4uZmx1aWQtYmFkZ2Utc3VjY2VzcyB7IGJhY2tncm91bmQ6IHZhcigtLWZsdWlkLWNvbG9yLXN1Y2Nlc3MpOyBjb2xvcjogd2hpdGU7IGJvcmRlci1jb2xvcjogdmFyKC0tZmx1aWQtY29sb3Itc3VjY2Vzcyk7IH1cbi5mbHVpZC1iYWRnZS13YXJuaW5nIHsgYmFja2dyb3VuZDogdmFyKC0tZmx1aWQtY29sb3Itd2FybmluZyk7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci13YXJuaW5nKTsgfVxuLmZsdWlkLWJhZGdlLWRhbmdlciB7IGJhY2tncm91bmQ6IHZhcigtLWZsdWlkLWNvbG9yLWRhbmdlcik7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci1kYW5nZXIpOyB9XG5cbi8qIEFsZXJ0cyAqL1xuLmZsdWlkLWFsZXJ0IHsgcGFkZGluZzogdmFyKC0tZmx1aWQtc3BhY2UtbWQpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1mbHVpZC1yYWRpdXMtbWQpOyBtYXJnaW4tYm90dG9tOiB2YXIoLS1mbHVpZC1zcGFjZS1tZCk7IGJvcmRlcjogMXB4IHNvbGlkOyB9XG4uZmx1aWQtYWxlcnQtaW5mbyB7IGJhY2tncm91bmQ6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpOyBib3JkZXItY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLWluZm8pOyBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItaW5mbyk7IH1cbi5mbHVpZC1hbGVydC1zdWNjZXNzIHsgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4xKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci1zdWNjZXNzKTsgY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLXN1Y2Nlc3MpOyB9XG4uZmx1aWQtYWxlcnQtd2FybmluZyB7IGJhY2tncm91bmQ6IHJnYmEoMjUxLCAxNDYsIDYwLCAwLjEpOyBib3JkZXItY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLXdhcm5pbmcpOyBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3Itd2FybmluZyk7IH1cbi5mbHVpZC1hbGVydC1kYW5nZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjEpOyBib3JkZXItY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLWRhbmdlcik7IGNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci1kYW5nZXIpOyB9XG5cbi8qIFRhYmxlcyAqL1xuLmZsdWlkLXRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGJhY2tncm91bmQ6IHZhcigtLWZsdWlkLWNvbG9yLXN1cmZhY2UpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1mbHVpZC1yYWRpdXMtbGcpOyBvdmVyZmxvdzogaGlkZGVuOyBib3gtc2hhZG93OiB2YXIoLS1mbHVpZC1zaGFkb3ctc20pO1xufVxuLmZsdWlkLXRhYmxlIHRoIHsgYmFja2dyb3VuZDogdmFyKC0tZmx1aWQtY29sb3ItYmctYWx0KTsgcGFkZGluZzogdmFyKC0tZmx1aWQtc3BhY2UtbWQpOyB0ZXh0LWFsaWduOiBsZWZ0OyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IHZhcigtLWZsdWlkLXRleHQtc20pOyBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItdGV4dCk7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1mbHVpZC1jb2xvci1ib3JkZXIpOyB9XG4uZmx1aWQtdGFibGUgdGQgeyBwYWRkaW5nOiB2YXIoLS1mbHVpZC1zcGFjZS1tZCk7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1mbHVpZC1jb2xvci1ib3JkZXItbGlnaHQpOyB9XG4uZmx1aWQtdGFibGUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZCB7IGJvcmRlci1ib3R0b206IG5vbmU7IH1cbi5mbHVpZC10YWJsZSB0Ym9keSB0cjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWZsdWlkLWNvbG9yLWJnLWFsdCk7IH1cblxuLyoqXG4gKiBGbHVpZCBCdXNpbmVzcyBDb21wb25lbnRzXG4gKiBJbnZvaWNlLCBTZXJ2aWNlIENhcmQgYW5kIHJlbGF0ZWQgYnVzaW5lc3MgVUlcbiAqL1xuXG4vKiBJbnZvaWNlICovXG4uZmx1aWQtaW52b2ljZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWZsdWlkLWNvbG9yLXN1cmZhY2UpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1mbHVpZC1yYWRpdXMtbGcpO1xuICBwYWRkaW5nOiB2YXIoLS1mbHVpZC1zcGFjZS0yeGwpO1xuICBib3gtc2hhZG93OiB2YXIoLS1mbHVpZC1zaGFkb3ctbGcpO1xufVxuLmZsdWlkLWludm9pY2UtaGVhZGVyIHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBtYXJnaW4tYm90dG9tOiB2YXIoLS1mbHVpZC1zcGFjZS0yeGwpOyBwYWRkaW5nLWJvdHRvbTogdmFyKC0tZmx1aWQtc3BhY2UtbGcpOyBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tZmx1aWQtY29sb3ItYm9yZGVyKTsgfVxuLmZsdWlkLWludm9pY2UtbG9nbyB7IGZvbnQtc2l6ZTogdmFyKC0tZmx1aWQtdGV4dC0yeGwpOyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItcHJpbWFyeSk7IH1cbi5mbHVpZC1pbnZvaWNlLW51bWJlciB7IGZvbnQtc2l6ZTogdmFyKC0tZmx1aWQtdGV4dC1zbSk7IGNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci10ZXh0LWxpZ2h0KTsgfVxuLmZsdWlkLWludm9pY2UtZGV0YWlscyB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiB2YXIoLS1mbHVpZC1zcGFjZS14bCk7IG1hcmdpbi1ib3R0b206IHZhcigtLWZsdWlkLXNwYWNlLTJ4bCk7IH1cbi5mbHVpZC1pbnZvaWNlLWZyb20sIC5mbHVpZC1pbnZvaWNlLXRvIHsgZm9udC1zaXplOiB2YXIoLS1mbHVpZC10ZXh0LXNtKTsgfVxuLmZsdWlkLWludm9pY2UtZnJvbSBoMywgLmZsdWlkLWludm9pY2UtdG8gaDMgeyBmb250LXNpemU6IHZhcigtLWZsdWlkLXRleHQtYmFzZSk7IG1hcmdpbi1ib3R0b206IHZhcigtLWZsdWlkLXNwYWNlLXNtKTsgY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLXRleHQpOyB9XG4uZmx1aWQtaW52b2ljZS1pdGVtcyB7IG1hcmdpbi1ib3R0b206IHZhcigtLWZsdWlkLXNwYWNlLXhsKTsgfVxuLmZsdWlkLWludm9pY2UtdG90YWwgeyB0ZXh0LWFsaWduOiByaWdodDsgcGFkZGluZy10b3A6IHZhcigtLWZsdWlkLXNwYWNlLWxnKTsgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHZhcigtLWZsdWlkLWNvbG9yLWJvcmRlcik7IH1cbi5mbHVpZC1pbnZvaWNlLXRvdGFsLWFtb3VudCB7IGZvbnQtc2l6ZTogdmFyKC0tZmx1aWQtdGV4dC0yeGwpOyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItcHJpbWFyeSk7IH1cblxuLyogU2VydmljZSBDYXJkICovXG4uZmx1aWQtc2VydmljZS1jYXJkIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZmx1aWQtY29sb3Itc3VyZmFjZSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZsdWlkLWNvbG9yLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWZsdWlkLXJhZGl1cy1sZyk7XG4gIHBhZGRpbmc6IHZhcigtLWZsdWlkLXNwYWNlLXhsKTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLWZsdWlkLXRyYW5zaXRpb24pO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uZmx1aWQtc2VydmljZS1jYXJkOmhvdmVyIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOyBib3gtc2hhZG93OiB2YXIoLS1mbHVpZC1zaGFkb3cteGwpOyBib3JkZXItY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLXByaW1hcnkpOyB9XG4uZmx1aWQtc2VydmljZS1pY29uIHsgd2lkdGg6IDQ4cHg7IGhlaWdodDogNDhweDsgbWFyZ2luLWJvdHRvbTogdmFyKC0tZmx1aWQtc3BhY2UtbWQpOyBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItcHJpbWFyeSk7IH1cbi5mbHVpZC1zZXJ2aWNlLXRpdGxlIHsgZm9udC1zaXplOiB2YXIoLS1mbHVpZC10ZXh0LWxnKTsgZm9udC13ZWlnaHQ6IDYwMDsgbWFyZ2luLWJvdHRvbTogdmFyKC0tZmx1aWQtc3BhY2Utc20pOyB9XG4uZmx1aWQtc2VydmljZS1kZXNjcmlwdGlvbiB7IGZvbnQtc2l6ZTogdmFyKC0tZmx1aWQtdGV4dC1zbSk7IGNvbG9yOiB2YXIoLS1mbHVpZC1jb2xvci10ZXh0LWxpZ2h0KTsgbWFyZ2luLWJvdHRvbTogdmFyKC0tZmx1aWQtc3BhY2UtbWQpOyB9XG4uZmx1aWQtc2VydmljZS1wcmljZSB7IGZvbnQtc2l6ZTogdmFyKC0tZmx1aWQtdGV4dC0yeGwpOyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItcHJpbWFyeSk7IH1cblxuLyogUmVzcG9uc2l2ZSAoQnVzaW5lc3MpICovXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmZsdWlkLWludm9pY2UtaGVhZGVyIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiB2YXIoLS1mbHVpZC1zcGFjZS1sZyk7IH1cbiAgLmZsdWlkLWludm9pY2UtZGV0YWlscyB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9XG59XG5cbi8qIFByaW50IChCdXNpbmVzcykgKi9cbkBtZWRpYSBwcmludCB7XG4gIC5mbHVpZC1pbnZvaWNlIHsgYm94LXNoYWRvdzogbm9uZTsgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9XG59XG5cbi8qKlxuICogRmx1aWQgVXRpbGl0aWVzXG4gKiBUZXh0IGFsaWdubWVudC9jb2xvciwgZGlzcGxheSwgZmxleC9ncmlkIGhlbHBlcnMsIHNwYWNpbmcsIHNpemluZywgYm9yZGVycyxcbiAqIGFuZCByZXNwb25zaXZlLW9ubHkgdmlzaWJpbGl0eSBoZWxwZXJzLlxuICovXG5cbi8qIFRleHQgYWxpZ25tZW50ICovXG4uZmx1aWQtdGV4dC1sZWZ0IHsgdGV4dC1hbGlnbjogbGVmdDsgfVxuLmZsdWlkLXRleHQtY2VudGVyIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4uZmx1aWQtdGV4dC1yaWdodCB7IHRleHQtYWxpZ246IHJpZ2h0OyB9XG5cbi8qIFRleHQgY29sb3IgKi9cbi5mbHVpZC10ZXh0LXByaW1hcnkgeyBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItcHJpbWFyeSk7IH1cbi5mbHVpZC10ZXh0LW11dGVkIHsgY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLXRleHQtbGlnaHQpOyB9XG4uZmx1aWQtdGV4dC1zdWNjZXNzIHsgY29sb3I6IHZhcigtLWZsdWlkLWNvbG9yLXN1Y2Nlc3MpOyB9XG4uZmx1aWQtdGV4dC1kYW5nZXIgeyBjb2xvcjogdmFyKC0tZmx1aWQtY29sb3ItZGFuZ2VyKTsgfVxuXG4vKiBGb250IHdlaWdodCAqL1xuLmZsdWlkLWZvbnQtbm9ybWFsIHsgZm9udC13ZWlnaHQ6IDQwMDsgfVxuLmZsdWlkLWZvbnQtbWVkaXVtIHsgZm9udC13ZWlnaHQ6IDUwMDsgfVxuLmZsdWlkLWZvbnQtc2VtaWJvbGQgeyBmb250LXdlaWdodDogNjAwOyB9XG4uZmx1aWQtZm9udC1ib2xkIHsgZm9udC13ZWlnaHQ6IDcwMDsgfVxuXG4vKiBEaXNwbGF5ICovXG4uZmx1aWQtaGlkZGVuIHsgZGlzcGxheTogbm9uZTsgfVxuLmZsdWlkLWJsb2NrIHsgZGlzcGxheTogYmxvY2s7IH1cbi5mbHVpZC1pbmxpbmUtYmxvY2sgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbi5mbHVpZC1mbGV4IHsgZGlzcGxheTogZmxleDsgfVxuLmZsdWlkLWlubGluZS1mbGV4IHsgZGlzcGxheTogaW5saW5lLWZsZXg7IH1cblxuLyogRmxleGJveCAqL1xuLmZsdWlkLWl0ZW1zLWNlbnRlciB7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbi5mbHVpZC1pdGVtcy1zdGFydCB7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyB9XG4uZmx1aWQtaXRlbXMtZW5kIHsgYWxpZ24taXRlbXM6IGZsZXgtZW5kOyB9XG4uZmx1aWQtanVzdGlmeS1jZW50ZXIgeyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxuLmZsdWlkLWp1c3RpZnktYmV0d2VlbiB7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuLmZsdWlkLWp1c3RpZnktYXJvdW5kIHsganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7IH1cbi5mbHVpZC1mbGV4LTEgeyBmbGV4OiAxOyB9XG4uZmx1aWQtZmxleC13cmFwIHsgZmxleC13cmFwOiB3cmFwOyB9XG5cbi8qIEdhcHMgKi9cbi5mbHVpZC1nYXAteHMgeyBnYXA6IHZhcigtLWZsdWlkLXNwYWNlLXhzKTsgfVxuLmZsdWlkLWdhcC1zbSB7IGdhcDogdmFyKC0tZmx1aWQtc3BhY2Utc20pOyB9XG4uZmx1aWQtZ2FwLW1kIHsgZ2FwOiB2YXIoLS1mbHVpZC1zcGFjZS1tZCk7IH1cbi5mbHVpZC1nYXAtbGcgeyBnYXA6IHZhcigtLWZsdWlkLXNwYWNlLWxnKTsgfVxuLmZsdWlkLWdhcC14bCB7IGdhcDogdmFyKC0tZmx1aWQtc3BhY2UteGwpOyB9XG5cbi8qIFBhZGRpbmcvTWFyZ2luIGhlbHBlcnMgKHN1YnNldCkgKi9cbi5mbHVpZC1tYi0wIHsgbWFyZ2luLWJvdHRvbTogMDsgfVxuLmZsdWlkLW1iLXNtIHsgbWFyZ2luLWJvdHRvbTogdmFyKC0tZmx1aWQtc3BhY2Utc20pOyB9XG4uZmx1aWQtbWItbWQgeyBtYXJnaW4tYm90dG9tOiB2YXIoLS1mbHVpZC1zcGFjZS1tZCk7IH1cbi5mbHVpZC1tYi1sZyB7IG1hcmdpbi1ib3R0b206IHZhcigtLWZsdWlkLXNwYWNlLWxnKTsgfVxuLmZsdWlkLXAtc20geyBwYWRkaW5nOiB2YXIoLS1mbHVpZC1zcGFjZS1zbSk7IH1cbi5mbHVpZC1wLW1kIHsgcGFkZGluZzogdmFyKC0tZmx1aWQtc3BhY2UtbWQpOyB9XG4uZmx1aWQtcC1sZyB7IHBhZGRpbmc6IHZhcigtLWZsdWlkLXNwYWNlLWxnKTsgfVxuXG4vKiBSYWRpdXMgKi9cbi5mbHVpZC1yb3VuZGVkLXNtIHsgYm9yZGVyLXJhZGl1czogdmFyKC0tZmx1aWQtcmFkaXVzLXNtKTsgfVxuLmZsdWlkLXJvdW5kZWQtbWQgeyBib3JkZXItcmFkaXVzOiB2YXIoLS1mbHVpZC1yYWRpdXMtbWQpOyB9XG4uZmx1aWQtcm91bmRlZC1sZyB7IGJvcmRlci1yYWRpdXM6IHZhcigtLWZsdWlkLXJhZGl1cy1sZyk7IH1cbi5mbHVpZC1yb3VuZGVkLWZ1bGwgeyBib3JkZXItcmFkaXVzOiB2YXIoLS1mbHVpZC1yYWRpdXMtZnVsbCk7IH1cblxuLyogU2hhZG93cyAqL1xuLmZsdWlkLXNoYWRvdy14cyB7IGJveC1zaGFkb3c6IHZhcigtLWZsdWlkLXNoYWRvdy14cyk7IH1cbi5mbHVpZC1zaGFkb3ctc20geyBib3gtc2hhZG93OiB2YXIoLS1mbHVpZC1zaGFkb3ctc20pOyB9XG4uZmx1aWQtc2hhZG93LW1kIHsgYm94LXNoYWRvdzogdmFyKC0tZmx1aWQtc2hhZG93LW1kKTsgfVxuLmZsdWlkLXNoYWRvdy1sZyB7IGJveC1zaGFkb3c6IHZhcigtLWZsdWlkLXNoYWRvdy1sZyk7IH1cbi5mbHVpZC1zaGFkb3cteGwgeyBib3gtc2hhZG93OiB2YXIoLS1mbHVpZC1zaGFkb3cteGwpOyB9XG4uZmx1aWQtc2hhZG93LTJ4bCB7IGJveC1zaGFkb3c6IHZhcigtLWZsdWlkLXNoYWRvdy0yeGwpOyB9XG5cbi8qIFJlc3BvbnNpdmUtb25seSB2aXNpYmlsaXR5ICovXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsgLmZsdWlkLW1vYmlsZS1oaWRkZW4geyBkaXNwbGF5OiBub25lOyB9IH1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjlweCkgeyAuZmx1aWQtZGVza3RvcC1oaWRkZW4geyBkaXNwbGF5OiBub25lOyB9IH1cbi8qKlxuICogRmx1aWQgQW5pbWF0aW9ucyAoQ1NTLW9ubHkgdXRpbGl0aWVzKVxuICogQ1NTIGNsYXNzZXMgZm9yIHNpbXBsZSBhbmltYXRpb25zIGFuZCBrZXlmcmFtZXMgKG5vdCB0aGUgTW90aW9uIFN5c3RlbSkuXG4gKi9cblxuLmZsdWlkLWZhZGUtaW4geyBhbmltYXRpb246IGZsdWlkRmFkZUluIHZhcigtLWZsdWlkLXRyYW5zaXRpb24pIHZhcigtLWZsdWlkLWVhc2Utb3V0KTsgfVxuLmZsdWlkLWZhZGUtb3V0IHsgYW5pbWF0aW9uOiBmbHVpZEZhZGVPdXQgdmFyKC0tZmx1aWQtdHJhbnNpdGlvbikgdmFyKC0tZmx1aWQtZWFzZS1pbik7IH1cblxuLyogU2xpZGUgYW5pbWF0aW9ucyAqL1xuLmZsdWlkLXNsaWRlLXVwIHsgYW5pbWF0aW9uOiBmbHVpZFNsaWRlVXAgdmFyKC0tZmx1aWQtdHJhbnNpdGlvbikgdmFyKC0tZmx1aWQtZWFzZS1vdXQpOyB9XG4uZmx1aWQtc2xpZGUtZG93biB7IGFuaW1hdGlvbjogZmx1aWRTbGlkZURvd24gdmFyKC0tZmx1aWQtdHJhbnNpdGlvbikgdmFyKC0tZmx1aWQtZWFzZS1vdXQpOyB9XG5cbi8qIFNjYWxlIGFuaW1hdGlvbnMgKi9cbi5mbHVpZC1zY2FsZS1pbiB7IGFuaW1hdGlvbjogZmx1aWRTY2FsZUluIHZhcigtLWZsdWlkLXRyYW5zaXRpb24pIHZhcigtLWZsdWlkLWVhc2Utc3ByaW5nKTsgfVxuXG4vKiBTcGluIGFuaW1hdGlvbiAqL1xuLmZsdWlkLXNwaW4geyBhbmltYXRpb246IGZsdWlkU3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7IH1cblxuLyogUHVsc2UgYW5pbWF0aW9uICovXG4uZmx1aWQtcHVsc2UgeyBhbmltYXRpb246IGZsdWlkUHVsc2UgMnMgdmFyKC0tZmx1aWQtZWFzZS1pbi1vdXQpIGluZmluaXRlOyB9XG5cbi8qIEtleWZyYW1lcyAqL1xuQGtleWZyYW1lcyBmbHVpZEZhZGVJbiB7IGZyb20geyBvcGFjaXR5OiAwOyB9IHRvIHsgb3BhY2l0eTogMTsgfSB9XG5Aa2V5ZnJhbWVzIGZsdWlkRmFkZU91dCB7IGZyb20geyBvcGFjaXR5OiAxOyB9IHRvIHsgb3BhY2l0eTogMDsgfSB9XG5Aa2V5ZnJhbWVzIGZsdWlkU2xpZGVVcCB7IGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7fSB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTt9IH1cbkBrZXlmcmFtZXMgZmx1aWRTbGlkZURvd24geyBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTt9IHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO30gfVxuQGtleWZyYW1lcyBmbHVpZFNjYWxlSW4geyBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTt9IHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxKTt9IH1cbkBrZXlmcmFtZXMgZmx1aWRTcGluIHsgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO30gdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO30gfVxuQGtleWZyYW1lcyBmbHVpZFB1bHNlIHsgMCUsMTAwJSB7IG9wYWNpdHk6MTt9IDUwJSB7IG9wYWNpdHk6IC41O30gfVxuXG4iXX0= */