/* ==========================================================================
   HubRaiz — Main Stylesheet Entry Point
   Imports all CSS partials in documented architecture order.
   PostCSS + postcss-import bundles this into dist/style.css at build time.
   ========================================================================== */

/* 1. Self-hosted font faces */

/* ==========================================================================
   Self-hosted typography
   IBM Plex files are installed from @fontsource during npm install and copied
   into /assets/fonts by Eleventy at build time. No runtime Google Fonts calls.
   ========================================================================== */

@font-face {
  font-family: "IBM Plex Serif";
  src: url("/assets/fonts/ibm-plex-serif/ibm-plex-serif-latin-600-normal.e279e4f8ba.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Serif";
  src: url("/assets/fonts/ibm-plex-serif/ibm-plex-serif-latin-700-normal.886ea167fa.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/ibm-plex-sans/ibm-plex-sans-latin-400-normal.3b646991d3.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/ibm-plex-sans/ibm-plex-sans-latin-500-normal.0717336fb3.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/ibm-plex-sans/ibm-plex-sans-latin-500-italic.f68312ae7d.woff2") format("woff2");
  font-weight: 500;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/ibm-plex-sans/ibm-plex-sans-latin-600-normal.8960851d69.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/ibm-plex-sans/ibm-plex-sans-latin-700-normal.42e7b0c143.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* 2. Design tokens — MUST follow fonts; all component partials depend on these */

/* ==========================================================================
   1. DESIGN TOKENS
   CSS custom properties organized by role:
   
   ┌─ Palette Primitives ─────────────────────────────────────┐
   │  Surface, Neutral — base color scales                    │
   │  Feed semantic tokens; also consumed directly by some    │
   │  component overrides (especially .dark selector blocks)  │
   └──────────────────────────────────────────────────────────┘
   ┌─ Accent System ──────────────────────────────────────────┐
   │  --accent-primary / --accent-secondary + variants        │
   │  SWAP between default and alt themes                     │
   └──────────────────────────────────────────────────────────┘
   ┌─ Semantic Tokens ────────────────────────────────────────┐
   │  --bg-primary, --text-*, --glass-*, --pill-*, etc.      │
   │  Override in .dark / [alt] / [alt].dark / @media        │
   └──────────────────────────────────────────────────────────┘
   ┌─ Scheme Tokens ──────────────────────────────────────────┐
   │  --scheme-* — context-specific overrides per theme       │
   │  Each defined in :root and overridden per theme block    │
   └──────────────────────────────────────────────────────────┘
   ┌─ Structural Tokens ──────────────────────────────────────┐
   │  --chrome-shadow-*, --glass-inset-*, --ui-surface-*     │
   │  --toggle-*, --drawer-close-*, --btn-inset-*            │
   │  Shadows, highlights, translucent overlays               │
   └──────────────────────────────────────────────────────────┘
   
   Theme structure:
     :root                         → Default (Orange) light mode
     .dark                         → Default (Orange) dark mode
     [data-color-scheme="alt"]     → Alt (Olive) light mode
     [data-color-scheme="alt"].dark→ Alt (Olive) dark mode
     @media(prefers-color-scheme:dark) → Non-JS dark fallback
   ========================================================================== */

:root {
  color-scheme: light;

  /* Surface palette — base canvas tones for backgrounds & light text on dark */
  --surface-50: #FAF7F2;
  --surface-100: #F5F0E8;
  --surface-200: #EBE3D5;
  --surface-300: #D4C8B4;
  --surface-400: #B8A68E;

  /* Neutral palette — text, borders, and structural tones */
  --neutral-200: #D1BFA8;
  --neutral-300: #B09A7E;
  --neutral-400: #8A7260;
  --neutral-500: #6E5A48;
  --neutral-600: #5C4A3A;
  --neutral-700: #4A3A2E;
  --neutral-800: #3D2E22;
  --neutral-900: #2C1810;

  /* Glass card/panel shadow tokens */
  --card-shadow:       rgba(44, 24, 16, 0.04);
  --card-shadow-hover: rgba(255, 92, 0, 0.08);

  /* Marketplace colors */
  --ml-yellow: #FFE600;
  --ml-yellow-hover: #FFD700;
  --ml-navy: #2D3277;
  --ml-shadow: rgba(255, 230, 0, 0.25);
  --ml-shadow-hover: rgba(255, 230, 0, 0.35);
  --shopee-orange: #EE4D2D;
  --shopee-orange-hover: #D73211;
  --shopee-shadow: rgba(238, 77, 45, 0.25);
  --shopee-shadow-hover: rgba(238, 77, 45, 0.35);

  /* Fonts */
  --font-heading: "IBM Plex Serif", Georgia, "Times New Roman", Cambria, "Noto Serif", serif;
  --font-body: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --font-ui: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;

  /* Transition presets */
  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
  --duration-normal: 0.2s;
  --duration-slow: 0.3s;

  /* Layer scale — active panels must sit above fixed controls and catalog chrome. */
  --layer-floating-control: 50;
  --layer-active-panel-backdrop: 1000;
  --layer-active-panel: 1001;

  /* Accent system — primary accent with secondary as fallback */
  --accent-primary: #FF5C00;
  --accent-primary-hover: #E94F00;
  --accent-primary-light: rgba(255, 92, 0, 0.12);
  --accent-primary-border: rgba(255, 92, 0, 0.25);
  --accent-primary-shadow: rgba(255, 92, 0, 0.25);

  --accent-secondary: #636B2F;
  --accent-secondary-light: rgba(99, 107, 47, 0.12);
  --accent-secondary-border: rgba(99, 107, 47, 0.25);

  /* Semantic colors — light mode defaults */
  --bg-primary: #F5F0E8;
  --text-primary: #2C1810;
  --text-secondary: #5C4A3A;
  --text-muted: #725E4C;
  --text-placeholder: rgba(92, 74, 58, 0.4);
  --glass-bg: rgba(255, 255, 255, 0.85);
  --glass-border: rgba(255, 92, 0, 0.14);
  --glass-hover-bg: rgba(255, 255, 255, 0.92);
  --glass-hover-border: rgba(255, 92, 0, 0.2);
  --filter-bar-bg: rgba(250, 247, 242, 0.88);
  --filter-bar-border: rgba(255, 255, 255, 0.5);
  --search-bg: rgba(255, 255, 255, 0.8);
  --search-border: rgba(255, 255, 255, 0.5);
  --search-focus-bg: rgba(255, 255, 255, 0.92);
  --search-focus-border: rgba(255, 92, 0, 0.4);
  --pill-inactive-bg: rgba(255, 255, 255, 0.7);
  --pill-inactive-border: rgba(255, 255, 255, 0.5);
  --pill-inactive-text: #5C4A3A;
  --drawer-panel-bg: rgba(250, 247, 242, 0.92);
  --drawer-border: rgba(255, 255, 255, 0.5);
  --drawer-overlay-bg: rgba(44, 24, 16, 0.4);
  --desc-fade: rgba(255, 255, 255, 0.85);
  --footer-bg: #2C1810;
  --footer-text: #E5DFD4;
  --footer-muted: rgba(200, 190, 175, 0.75);
  --scheme-footer-accent: #FF8C5A;
  --scheme-footer-icon: rgba(255, 140, 90, 0.65);
  --scheme-footer-border: rgba(255, 140, 90, 0.12);
  --footer-disclaimer: rgba(200, 190, 175, 0.8);

  /* Scheme-specific accent tokens — default (orange) theme */
  --scheme-hero-tagline: #FF5C00;
  /* Tag, pill, badge tokens use --accent-primary family directly
     so they swap automatically with the active color scheme. */
  --scheme-badge-bg: linear-gradient(135deg, var(--accent-primary) 0%, var(--accent-primary-hover) 100%);
  --scheme-scroll-thumb: rgba(255, 92, 0, 0.4);
  --scheme-focus-ring: #FF5C00;
  --scheme-hero-logo-bg: rgba(255, 92, 0, 0.06);
  --scheme-hero-logo-bg-dark: rgba(255, 140, 90, 0.16);
  --scheme-hero-trust: #6E5A48;
  --scheme-hero-scroll-color: rgba(255, 92, 0, 0.6);
  --scheme-image-wrap-bg: rgba(235, 227, 213, 0.3);
  --scheme-image-wrap-bg-dark: rgba(44, 24, 16, 0.4);
  --scheme-overlay-gradient: rgba(44, 24, 16, 0.2);
  --scheme-overlay-gradient-dark: rgba(0, 0, 0, 0.2);
  --scheme-search-focus-ring: rgba(255, 92, 0, 0.08);
  --scheme-search-focus-ring-strong: rgba(255, 92, 0, 0.1);
  --scheme-trust-divider: rgba(255, 140, 90, 0.3);
  --scheme-trust-divider-dark: rgba(255, 92, 0, 0.12);
  /* Marketplace badge — subtle accent tint (footer is always dark) */
  --scheme-marketplace-badge-bg: rgba(255, 140, 90, 0.15);
  --scheme-marketplace-badge-border: rgba(255, 140, 90, 0.3);

  /* Tag hierarchy — both use accent-primary-light bg (hero icon style).
     Brand tags: full accent text + full accent border + bold = pops.
     Category tags: faded accent text + faded accent border + normal = recedes.
     No separate -dark tokens needed; accent tokens auto-swap. */
  /* ── Text on accent ────────────────────────────────────────
     Text on solid/filled accent backgrounds (skip link, CTA buttons). */
  --text-on-accent: #2C1810;

  /* ── Selection highlight ─────────────────────────────────── */
  --selection-bg-dark: rgba(255, 140, 90, 0.35);

  /* ── Glass morphism inset highlights ────────────────────────
     Subtle top-edge highlight that simulates light reflection
     on glass surfaces in light and dark modes */
  --glass-inset: rgba(255, 255, 255, 0.3);
  --glass-inset-hover: rgba(255, 255, 255, 0.4);
  --glass-inset-dark: rgba(229, 223, 212, 0.05);
  --glass-inset-dark-hover: rgba(229, 223, 212, 0.08);

  /* ── Structural shadows ─────────────────────────────────────
     Warm-tinted drop shadows for UI chrome (panels, drawers, FABs).
     Light mode uses warm brown base; dark mode uses pure black. */
  --chrome-shadow-sm: rgba(44, 24, 16, 0.05);
  --chrome-shadow-md: rgba(44, 24, 16, 0.08);
  --chrome-shadow-lg: rgba(44, 24, 16, 0.12);
  --chrome-shadow-dark: rgba(0, 0, 0, 0.2);
  --logo-drop-shadow:   rgba(0, 0, 0, 0.35);  /* hero logo glow drop-shadow */

  /* ── Translucent UI surfaces ────────────────────────────────
     Semi-transparent white overlays for circular glass elements
     (hero scroll button, trust divider, toggle FAB).
     Dark mode uses much lower opacity for subtle visibility. */
  --ui-surface-bg: rgba(255, 255, 255, 0.3);
  --ui-surface-border: rgba(255, 255, 255, 0.4);
  --ui-surface-hover-bg: rgba(255, 255, 255, 0.5);
  --ui-surface-bg-dark: rgba(255, 255, 255, 0.05);
  --ui-surface-border-dark: rgba(255, 255, 255, 0.1);
  --ui-surface-hover-bg-dark: rgba(255, 255, 255, 0.12);

  /* ── Toggle FAB surfaces ────────────────────────────────────
     The floating action button for dark/light mode has its own
     surface tokens because it uses a distinct opacity range. */
  --toggle-bg: rgba(255, 255, 255, 0.5);
  --toggle-border: rgba(255, 255, 255, 0.6);
  --toggle-bg-dark: rgba(255, 255, 255, 0.1);
  --toggle-border-dark: rgba(255, 255, 255, 0.15);

  /* ── Drawer close button ──────────────────────────────────── */
  --drawer-close-bg: rgba(250, 247, 242, 0.6);
  --drawer-close-bg-dark: rgba(255, 255, 255, 0.1);
  --drawer-close-bg-dark-hover: rgba(255, 255, 255, 0.15);

  /* ── Button inset highlights ────────────────────────────────
     Top-edge highlight for CTA-style buttons */
  --btn-inset: rgba(255, 255, 255, 0.15);
  --btn-inset-hover: rgba(255, 255, 255, 0.2);
  --ml-inset: rgba(255, 255, 255, 0.5);
  --ml-inset-hover: rgba(255, 255, 255, 0.6);

  /* ── Scheme swatch border ─────────────────────────────────── */
  --scheme-swatch-border: rgba(128, 128, 128, 0.15);

  /* ── Font-weight scale ──────────────────────────────────────
     Used by hero, footer, and other component partials. */
  --font-weight-normal: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-weight-bold: 700;
  --font-weight-display: 700;
}

/* ── Dark mode tokens ──────────────────────────────────────
   These semantic token values appear TWICE intentionally:
   1. .dark { }           → JS-driven toggle (localStorage / user click)
   2. @media prefers-color-scheme: dark → Non-JS fallback when no
      .light or .dark class is present on <html>
   DO NOT deduplicate — they serve different code paths.
   When updating dark-mode values, update BOTH blocks.
   ─────────────────────────────────────────────────────── */

/* JS-driven dark mode */

.dark {
  color-scheme: dark;
  --bg-primary: #1A1816;
  --text-primary: #E5DFD4;
  --text-secondary: #D4C5B8;
  --text-muted: #B09A7E;
  --text-placeholder: rgba(200, 190, 175, 0.35);
  --glass-bg: rgba(35, 32, 28, 0.88);
  --glass-border: rgba(255, 140, 90, 0.2);
  --glass-hover-bg: rgba(45, 40, 34, 0.92);
  --glass-hover-border: rgba(255, 140, 90, 0.2);
  --filter-bar-bg: rgba(26, 24, 22, 0.92);
  --filter-bar-border: rgba(60, 55, 45, 0.5);
  --search-bg: rgba(35, 32, 28, 0.85);
  --search-border: rgba(60, 55, 45, 0.5);
  --search-focus-bg: rgba(40, 36, 30, 0.92);
  --search-focus-border: rgba(255, 140, 90, 0.4);
  --pill-inactive-bg: rgba(35, 32, 28, 0.75);
  --pill-inactive-border: rgba(60, 55, 45, 0.5);
  --pill-inactive-text: #E5DFD4;
  --drawer-panel-bg: rgba(30, 28, 24, 0.95);
  --drawer-border: rgba(60, 55, 45, 0.5);
  --drawer-overlay-bg: rgba(0, 0, 0, 0.5);
  --desc-fade: rgba(35, 32, 28, 0.85);
  --footer-bg: #131210;
  --footer-disclaimer: rgba(200, 190, 175, 0.75);

  /* Dark mode scheme token overrides */
  --scheme-hero-tagline: var(--scheme-footer-accent);

  /* Dark mode accent — lighter shade for contrast on dark bg */
  --accent-primary: #FF8C5A;
  --accent-primary-hover: #FFA070;
  --accent-primary-light: rgba(255, 140, 90, 0.15);
  --accent-primary-border: rgba(255, 140, 90, 0.3);
  --accent-primary-shadow: rgba(255, 140, 90, 0.25);
  --card-shadow-hover: rgba(255, 140, 90, 0.08);

  /* Focus ring uses lightened accent for visibility on dark bg */
  --scheme-focus-ring: var(--accent-primary);

  /* Text on solid accent backgrounds — dark tint for contrast on bright accent */
  --text-on-accent: #551F00;
}

/* Scheme override: alternate — olive-first variation */

[data-color-scheme="alt"] {
  /* Alternate olive scheme — keeps the natural-food tone available. */
  --accent-primary: #636B2F;
  --accent-primary-hover: #748038;
  --accent-primary-light: rgba(99, 107, 47, 0.15);
  --accent-primary-border: rgba(99, 107, 47, 0.25);
  --accent-primary-shadow: rgba(99, 107, 47, 0.25);
  --accent-secondary: #FF5C00;
  --accent-secondary-light: rgba(255, 92, 0, 0.12);
  --accent-secondary-border: rgba(255, 92, 0, 0.25);
  --card-shadow-hover: rgba(99, 107, 47, 0.08);
  --glass-border: rgba(99, 107, 47, 0.15);
  --glass-hover-border: rgba(99, 107, 47, 0.2);
  --search-focus-border: rgba(99, 107, 47, 0.4);

  --scheme-hero-tagline: #636B2F;
  --scheme-scroll-thumb: rgba(99, 107, 47, 0.4);
  --scheme-focus-ring: #636B2F;
  --scheme-hero-logo-bg: rgba(99, 107, 47, 0.08);
  --scheme-hero-logo-bg-dark: rgba(99, 107, 47, 0.2);
  --scheme-hero-trust: #6E5A48;
  --scheme-hero-scroll-color: rgba(99, 107, 47, 0.6);
  --scheme-footer-accent: #A8B854;
  --scheme-footer-icon: rgba(168, 184, 84, 0.6);
  --scheme-footer-border: rgba(168, 184, 84, 0.1);
  --scheme-search-focus-ring: rgba(99, 107, 47, 0.08);
  --scheme-search-focus-ring-strong: rgba(99, 107, 47, 0.1);
  --scheme-trust-divider: rgba(168, 184, 84, 0.3);
  --scheme-trust-divider-dark: rgba(99, 107, 47, 0.12);
  --scheme-marketplace-badge-bg: rgba(168, 184, 84, 0.15);
  --scheme-marketplace-badge-border: rgba(168, 184, 84, 0.3);
  --footer-disclaimer: rgba(200, 190, 175, 0.8);
  --footer-bg: #1A2110;
  --selection-bg-dark: rgba(168, 184, 84, 0.35);
  --text-on-accent: #FFFFFF;
}

[data-color-scheme="alt"].dark {
  color-scheme: dark;
  --accent-primary: #A8B854;
  --accent-primary-hover: #B8C864;
  --accent-primary-light: rgba(168, 184, 84, 0.15);
  --accent-primary-border: rgba(168, 184, 84, 0.3);
  --accent-primary-shadow: rgba(168, 184, 84, 0.25);
  --card-shadow-hover: rgba(168, 184, 84, 0.08);
  --glass-border: rgba(168, 184, 84, 0.2);
  --glass-hover-border: rgba(168, 184, 84, 0.2);
  --search-focus-border: rgba(168, 184, 84, 0.4);

  --accent-secondary: #FF8C5A;
  --accent-secondary-light: rgba(255, 140, 90, 0.15);
  --accent-secondary-border: rgba(255, 140, 90, 0.3);
  --text-secondary: #C5D4B8;

  --scheme-hero-tagline: var(--scheme-footer-accent);
  --scheme-focus-ring: var(--accent-primary);
  --footer-bg: #111A08;
  --footer-disclaimer: rgba(200, 190, 175, 0.75);
  --text-on-accent: #2C3015;
}

/* Light mode explicit opt-in — forces native controls to light scheme */

.light {
  color-scheme: light;
}

/* Non-JS dark mode fallback (prefers-color-scheme: dark).
 * NOTE: This only applies the default HubRaiz dark tokens.
 * Users who selected an alternative color scheme via JavaScript
 * (stored in localStorage as "hubraiz-color-scheme") will see the
 * default scheme if JavaScript is unavailable, since
 * data-color-scheme is set by JS at runtime.
 */

@media (prefers-color-scheme: dark) {
  /* Mirror of .dark — keep in sync. When updating dark-mode values,
     update BOTH the .dark block (JS-toggled) and this @media block (no-JS fallback). */
  :root:not(.light):not(.dark) {
    color-scheme: dark;
    --bg-primary: #1A1816;
    --text-primary: #E5DFD4;
    --text-secondary: #D4C5B8;
    --text-muted: #B09A7E;
    --text-placeholder: rgba(200, 190, 175, 0.35);
    --glass-bg: rgba(35, 32, 28, 0.88);
    --glass-border: rgba(255, 140, 90, 0.2);
    --glass-hover-bg: rgba(45, 40, 34, 0.92);
    --glass-hover-border: rgba(255, 140, 90, 0.2);
    --filter-bar-bg: rgba(26, 24, 22, 0.92);
    --filter-bar-border: rgba(60, 55, 45, 0.5);
    --search-bg: rgba(35, 32, 28, 0.85);
    --search-border: rgba(60, 55, 45, 0.5);
    --search-focus-bg: rgba(40, 36, 30, 0.92);
    --search-focus-border: rgba(255, 140, 90, 0.4);
    --pill-inactive-bg: rgba(35, 32, 28, 0.75);
    --pill-inactive-border: rgba(60, 55, 45, 0.5);
    --pill-inactive-text: #E5DFD4;
    --drawer-panel-bg: rgba(30, 28, 24, 0.95);
    --drawer-border: rgba(60, 55, 45, 0.5);
    --drawer-overlay-bg: rgba(0, 0, 0, 0.5);
    --desc-fade: rgba(35, 32, 28, 0.85);
    --footer-bg: #131210;
    --footer-disclaimer: rgba(200, 190, 175, 0.75);
    --accent-primary: #FF8C5A;
    --accent-primary-hover: #FFA070;
    --accent-primary-light: rgba(255, 140, 90, 0.15);
    --accent-primary-border: rgba(255, 140, 90, 0.3);
    --accent-primary-shadow: rgba(255, 140, 90, 0.25);
    --card-shadow-hover: rgba(255, 140, 90, 0.08);
    --scheme-hero-tagline: var(--scheme-footer-accent);
    --scheme-focus-ring: var(--accent-primary);
    --text-on-accent: #551F00;
  }
}

/* 3. Reset & base */

/* ==========================================================================
   2. RESET & BASE
   Box-sizing reset, body defaults, focus states, scrollbar, selection,
   reduced-motion, skip link
   ========================================================================== */

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

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

body {
  background: var(--bg-primary);
  font-family: var(--font-body);
  color: var(--text-primary);
  min-height: 100vh;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  line-height: 1.65;
  overflow-x: hidden;
  display: flex;
  flex-direction: column;
}

h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-heading);
  font-weight: var(--font-weight-bold);
  line-height: 1.12;
  text-wrap: balance;
}

p { text-wrap: pretty; }

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

img { display: block; max-width: 100%; height: auto; }

button, input, textarea, select { font-family: inherit; }

button { cursor: pointer; }

ul { list-style: none; }

/* --- Utility: Hidden by default, shown via JS --- */

.is-hidden { display: none !important; }

/* --- Skip Link --- */

.skip-link {
  position: absolute;
  top: -100%;
  left: 50%;
  transform: translateX(-50%);
  background: var(--accent-primary);
  color: var(--text-on-accent);
  padding: 0.75rem 1.5rem;
  border-radius: 0 0 0.75rem 0.75rem;
  z-index: 9999;
  font-weight: 600;
  font-size: 0.875rem;
  transition: top var(--duration-normal) ease;
  text-decoration: none;
  box-shadow: 0 0 12px var(--chrome-shadow-dark);
}

.skip-link:focus {
  top: 0;
  outline: 3px solid var(--scheme-focus-ring);
  outline-offset: 2px;
}

/* --- Focus States --- */

*:focus-visible {
  outline: 3px solid var(--scheme-focus-ring);
  outline-offset: 3px;
  border-radius: 6px;
}

/* --- Scrollbar --- */

::-webkit-scrollbar { width: 8px; }

::-webkit-scrollbar-track { background: transparent; }

::-webkit-scrollbar-thumb { background: var(--scheme-scroll-thumb); border-radius: 4px; }

::-webkit-scrollbar-thumb:hover { background: var(--scheme-focus-ring); }

/* --- Selection --- */

::selection { background: var(--accent-primary-light); color: var(--neutral-900); }

.dark ::selection { background: var(--selection-bg-dark); color: var(--surface-100); }

/* --- Reduced Motion --- */

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* 4. Utilities (keyframes, animations, atomic helpers) */

/* ==========================================================================
   3. UTILITIES
   Keyframes, stagger delays, animation utilities,
   icon sizing, text truncation, screen-reader-only.

   The previous Tailwind-inspired atomic `u-*` utility classes were removed
   because no template, layout, or component ever consumed them. Use existing
   design tokens (`--accent-primary`, `--text-primary`, `--glass-bg`, etc.)
   directly in component CSS instead of adding new atomic utilities.
   ========================================================================== */

/* --- Keyframes --- */

@keyframes fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes slide-up {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

@keyframes drawer-in {
  from { transform: translateX(-100%); }
  to { transform: translateX(0); }
}

@keyframes drawer-out {
  from { transform: translateX(0); }
  to { transform: translateX(-100%); }
}

@keyframes drawer-right-in {
  from { transform: translateX(100%); }
  to { transform: translateX(0); }
}

@keyframes drawer-right-out {
  from { transform: translateX(0); }
  to { transform: translateX(100%); }
}

@keyframes sheet-in {
  from { transform: translateY(100%); }
  to { transform: translateY(0); }
}

@keyframes sheet-out {
  from { transform: translateY(0); }
  to { transform: translateY(100%); }
}

@keyframes overlay-out {
  from { opacity: 1; }
  to { opacity: 0; }
}

/* --- Stagger Delays --- */

.stagger-1 { animation-delay: 0.05s; }

.stagger-2 { animation-delay: 0.1s; }

.stagger-3 { animation-delay: 0.15s; }

.stagger-4 { animation-delay: 0.2s; }

/* --- Animation Utilities --- */

.animate-fade-in { animation: fade-in 0.6s ease-out both; }

.animate-slide-up { animation: slide-up 0.5s ease-out both; }

.animate-float { animation: float 6s ease-in-out infinite; }

/* --- Icon Sizing --- */

.btn-icon {
  width: 1rem;
  height: 1rem;
  flex-shrink: 0;
}

/* --- Text Truncation --- */

.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* --- Screen Reader Only --- */

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

/* 5. Glass morphism */

/* ==========================================================================
   4. GLASS MORPHISM
   Glass cards, panels, marketplace buttons (btn-ml, btn-shopee)
   ========================================================================== */

/* --- Glass Card --- */

.glass-card {
  position: relative;
  background: var(--glass-bg);
  border: 1px solid var(--glass-border);
  border-radius: 1.25rem;
  box-shadow:
    0 0 8px var(--card-shadow), inset 0 0.5px 0 var(--glass-inset);
  transition: box-shadow var(--duration-slow) ease, background var(--duration-slow) ease, border-color var(--duration-slow) ease;
  contain: layout;
}

.glass-card:hover {
  background: var(--glass-hover-bg);
  box-shadow:
    0 0 16px var(--card-shadow-hover), inset 0 0.5px 0 var(--glass-inset-hover);
  border-color: var(--glass-hover-border);
}

/* --- Glass Panel --- */

.glass-panel {
  background: var(--glass-bg);
  border: 1px solid var(--glass-border);
  border-radius: 2rem;
  box-shadow:
    0 0 24px var(--card-shadow), inset 0 0.5px 0 var(--glass-inset);
  transition: box-shadow var(--duration-slow) ease, border-color var(--duration-slow) ease;
}

.glass-panel:hover {
  box-shadow:
    0 0 16px var(--card-shadow-hover), inset 0 0.5px 0 var(--glass-inset-hover);
  border-color: var(--glass-hover-border);
}

/* Dark mode: tone down the inset top-highlight for both color themes */

.dark .glass-card {
  box-shadow: 0 0 8px var(--card-shadow), inset 0 0.5px 0 var(--glass-inset-dark);
}

.dark .glass-card:hover {
  box-shadow: 0 0 16px var(--card-shadow-hover), inset 0 0.5px 0 var(--glass-inset-dark-hover);
}

.dark .glass-panel {
  box-shadow: 0 0 24px var(--card-shadow), inset 0 0.5px 0 var(--glass-inset-dark);
}

.dark .glass-panel:hover {
  box-shadow: 0 0 16px var(--card-shadow-hover), inset 0 0.5px 0 var(--glass-inset-dark-hover);
}

/* --- Shared Marketplace Button Styles --- */

.btn-ml,
.btn-shopee {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  width: 100%;
  padding: 0.875rem 1.25rem;
  border-radius: 0.875rem;
  font-family: var(--font-ui);
  font-weight: var(--font-weight-bold);
  font-size: 0.875rem;
  letter-spacing: -0.005em;
  text-decoration: none;
  min-height: 48px;
  transition: background var(--duration-normal) ease, box-shadow var(--duration-normal) ease, transform var(--duration-normal) ease;
  cursor: pointer;
  border: none;
}

.btn-ml:hover,
.btn-shopee:hover {
  transform: translateY(-2px);
}

.btn-ml:active,
.btn-shopee:active {
  transform: scale(0.98) translateY(0);
}

/* --- Mercado Livre Button --- */

.btn-ml {
  background: linear-gradient(135deg, var(--ml-yellow) 0%, var(--ml-yellow-hover) 100%);
  color: var(--ml-navy);
  box-shadow: 0 0 16px var(--ml-shadow), inset 0 1px 0 var(--ml-inset);
}

.btn-ml:hover {
  background: linear-gradient(135deg, var(--ml-yellow-hover) 0%, color-mix(in srgb, var(--ml-yellow-hover) 85%, black) 100%);
  box-shadow: 0 0 24px var(--ml-shadow-hover), inset 0 1px 0 var(--ml-inset-hover);
}

/* --- Shopee Button --- */

.btn-shopee {
  background: linear-gradient(135deg, var(--shopee-orange) 0%, var(--shopee-orange-hover) 100%);
  /* Shopee brand white text — not --text-on-accent (3rd-party brand color).
     White on #EE4D2D = 3.66:1 — passes large-text (3:1). Documented exception. */
  color: #FFFFFF;
  box-shadow: 0 0 16px var(--shopee-shadow), inset 0 1px 0 var(--btn-inset);
}

.btn-shopee:hover {
  background: linear-gradient(135deg, var(--shopee-orange-hover) 0%, color-mix(in srgb, var(--shopee-orange-hover) 85%, black) 100%);
  box-shadow: 0 0 24px var(--shopee-shadow-hover), inset 0 1px 0 var(--btn-inset-hover);
}

/* 6. Hero section */

/* ==========================================================================
   5. HERO
   Hero section layout, logo, title, tagline, CTAs, scroll indicator
   ========================================================================== */

.hero {
  position: relative;
  min-height: 100vh;
  min-height: 100dvh;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}

.hero-dot-grid {
  position: absolute;
  inset: 0;
  opacity: 0.025;
  background-image: radial-gradient(circle at 1px 1px, var(--neutral-900) 1px, transparent 0);
  background-size: 28px 28px;
}

.dark .hero-dot-grid { opacity: 0.02; }

.hero-content {
  position: relative;
  z-index: 10;
  width: 100%;
  max-width: 52rem;
  margin: 0 auto;
  padding: 5rem 1.25rem;
}

@media (min-width: 640px) { .hero-content { padding: 7rem 2rem; } }

.hero-glass {
  padding: 2rem;
  text-align: center;
  max-width: 43rem;
  margin: 0 auto;
}

@media (min-width: 640px) { .hero-glass { padding: 3rem; } }

@media (min-width: 768px) { .hero-glass { padding: 4rem; } }

.hero-logo-wrapper {
  display: flex;
  justify-content: center;
  margin-bottom: 1.5rem;
}

.hero-logo-container {
  width: 4.75rem;
  height: 4.75rem;
  border-radius: 1.25rem;
  background: var(--scheme-hero-logo-bg);
  border: 1px solid var(--glass-border);
  box-shadow: 0 0 18px var(--chrome-shadow-sm), inset 0 0.5px 0 var(--glass-inset);
  display: flex;
  align-items: center;
  justify-content: center;
}

.dark .hero-logo-container {
  border-color: var(--glass-border);
  box-shadow: 0 0 18px var(--chrome-shadow-dark), inset 0 0.5px 0 var(--glass-inset-dark);
}

@media (min-width: 640px) {
  .hero-logo-container { width: 8rem; height: 8rem; border-radius: 1.5rem; }
}

.hero-logo-img {
  width: 80%;
  height: 80%;
  object-fit: contain;
  filter: drop-shadow(0 0 8px var(--logo-drop-shadow));
}

@media (min-width: 640px) {
  .hero-logo-img { width: 80%; height: 80%; }
}

.hero-title {
  font-size: clamp(3rem, 8vw, 5.25rem);
  font-weight: var(--font-weight-display);
  letter-spacing: -0.035em;
  line-height: 0.95;
  margin-bottom: 0.875rem;
}

.hero-title-hub { color: var(--neutral-900); }

.dark .hero-title-hub { color: var(--surface-100); }

.hero-title-raiz { color: var(--accent-primary); }

.hero-tagline {
  font-family: var(--font-ui);
  font-size: clamp(1rem, 2.4vw, 1.25rem);
  color: var(--scheme-hero-tagline);
  font-style: italic;
  font-weight: var(--font-weight-medium);
  letter-spacing: 0.005em;
  margin-bottom: 1.25rem;
}

.hero-description {
  max-width: 35rem;
  margin: 0 auto 2rem;
  line-height: 1.75;
  color: var(--neutral-600);
  font-size: 1rem;
}

.dark .hero-description { color: var(--surface-300); }

@media (min-width: 640px) { .hero-description { font-size: 1.125rem; } }

.hero-ctas {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  justify-content: center;
  align-items: center;
}

@media (min-width: 640px) {
  .hero-ctas { flex-direction: row; gap: 1rem; }
}

.hero-ctas .btn-ml,
.hero-ctas .btn-shopee {
  width: auto;
  padding: 1rem 1.75rem;
  font-size: 1rem;
  border-radius: 0.75rem;
}

.hero-trust-hint {
  margin-top: 1.75rem;
  color: var(--scheme-hero-trust);
  font-family: var(--font-ui);
  font-size: 0.75rem;
  font-weight: var(--font-weight-medium);
  letter-spacing: 0.01em;
}

@media (min-width: 640px) { .hero-trust-hint { font-size: 0.875rem; } }

.dark .hero-trust-hint { color: var(--surface-400); }

.hero-scroll-indicator {
  position: absolute;
  bottom: 1.5rem;
  left: 50%;
  margin-left: -1.25rem;
  width: 2.5rem;
  z-index: 10;
}

@media (min-width: 640px) { .hero-scroll-indicator { bottom: 2rem; } }

.hero-scroll-btn {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 9999px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--ui-surface-bg);
  border: 1px solid var(--ui-surface-border);
  color: var(--scheme-hero-scroll-color);
  transition: background var(--duration-slow) ease, color var(--duration-slow) ease;
  cursor: pointer;
}

.dark .hero-scroll-btn {
  background: var(--ui-surface-bg-dark);
  border-color: var(--ui-surface-border-dark);
  color: var(--accent-primary);
}

.hero-scroll-btn:hover {
  color: var(--scheme-focus-ring);
  background: var(--ui-surface-hover-bg);
}

.dark .hero-scroll-btn:hover {
  color: var(--accent-primary-hover);
  background: var(--ui-surface-hover-bg-dark);
}

/* 7. Catalog (filter bar, pills, search, grid/list layout) */

/* ==========================================================================
   6. CATALOG
   Catalog section header, sticky bar, filter bar, search inputs,
   filter pills, view toggle, desktop filters, results bar, mobile summary
   ========================================================================== */

.catalog {
  padding: 2.5rem 1rem 3.5rem;
  max-width: 1600px;
  margin: 0 auto;
  position: relative;
  z-index: 10;
}

@media (min-width: 640px) {
  .catalog { padding: 4rem 1.5rem; }
}

@media (min-width: 1024px) {
  .catalog { padding-left: 2rem; padding-right: 2rem; }
}

.catalog-header {
  text-align: center;
  margin-bottom: 1.125rem;
}

@media (min-width: 640px) { .catalog-header { margin-bottom: 2rem; } }

.catalog-title {
  font-weight: var(--font-weight-bold);
  color: var(--neutral-900);
  letter-spacing: -0.02em;
  margin-bottom: 0.75rem;
  font-size: clamp(1.85rem, 4vw, 2.75rem);
}

.dark .catalog-title { color: var(--surface-100); }

@media (min-width: 640px) { .catalog-title { margin-bottom: 1rem; } }

.catalog-subtitle {
  color: var(--neutral-600);
  font-family: var(--font-ui);
  font-size: 1rem;
  line-height: 1.7;
  max-width: 42rem;
  margin: 0 auto;
}

.dark .catalog-subtitle { color: var(--surface-300); }

@media (min-width: 640px) { .catalog-subtitle { font-size: 1.125rem; } }

/* --- Sticky Bar --- */

.sticky-bar {
  position: sticky;
  top: 0;
  z-index: 30;
  margin-left: -1rem;
  margin-right: -1rem;
  padding: 0.625rem 1rem;
}

@media (min-width: 640px) {
  .sticky-bar { margin-left: -1.5rem; margin-right: -1.5rem; }
}

.sticky-bar-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateY(-6px);
  transition: opacity var(--duration-slow) ease, transform var(--duration-slow) ease, visibility 0s linear var(--duration-slow);
}

.sticky-bar-visible {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateY(0);
  transition: opacity var(--duration-slow) ease, transform var(--duration-slow) ease, visibility 0s linear 0s;
}

.sticky-bar-hidden .filter-bar {
  opacity: 0;
  transition: opacity var(--duration-slow) ease;
}

.sticky-bar-visible .filter-bar {
  opacity: 1;
  transition: opacity var(--duration-slow) ease;
}

.sticky-bar-inner {
  max-width: 48rem;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding: 0.625rem 0.75rem;
  border-radius: 1rem;
}

@media (min-width: 640px) {
  .sticky-bar-inner { padding: 0.75rem; }
}

/* Controls row ── filter button + search + view toggle.
   Lives inside .sticky-bar-inner so the .filter-bar glass surface wraps both
   this row and the (conditionally visible) mobile-filters-summary row. */

.sticky-bar-controls {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  width: 100%;
}

@media (min-width: 640px) {
  .sticky-bar-controls { gap: 0.75rem; }
}

/* --- Filter Bar --- */

.filter-bar {
  background: var(--filter-bar-bg);
  border: 1px solid var(--filter-bar-border);
  box-shadow: 0 0 24px var(--chrome-shadow-sm);
}

.filter-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  border-radius: 9999px;
  background: var(--accent-primary);
  color: var(--text-on-accent);
  font-size: 0.625rem;
  font-weight: 700;
  padding: 0 5px;
}

/* --- Filter Button --- */

.filter-btn {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 0.75rem;
  background: var(--accent-primary-light);
  border: 1px solid var(--accent-primary-border);
  color: var(--accent-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  position: relative;
  cursor: pointer;
  transition: background var(--duration-normal) ease;
}

.filter-btn:hover { background: var(--accent-primary-border); }

@media (min-width: 640px) {
  .filter-btn { width: 2.75rem; height: 2.75rem; }
}

.filter-btn-badge {
  position: absolute;
  top: -0.375rem;
  right: -0.375rem;
  min-width: 18px;
  height: 18px;
  font-size: 0.5625rem;
}

/* --- Search Field (shared component) ---
   BEM-structured search input used by both sticky bar and desktop bar.
   Variant modifiers: .search-field--sticky (compact) / .search-field--desktop (full-size)
   Eliminates the previous .sticky-search-* / .desktop-search-* duplication. */

.search-field {
  position: relative;
  flex: 1;
  min-width: 0;
}

.search-field__icon {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  color: var(--neutral-400);
  pointer-events: none;
}

.dark .search-field__icon {
  color: var(--surface-400);
}

.search-field__input {
  width: 100%;
  border-radius: 0.75rem;
  background: var(--search-bg);
  border: 1.5px solid var(--search-border);
  color: var(--text-primary);
  transition: background var(--duration-normal) ease, border-color var(--duration-normal) ease, box-shadow var(--duration-normal) ease;
}

.search-field__input::placeholder { color: var(--text-placeholder); }

.search-field__input:focus {
  outline: none;
  border-color: var(--search-focus-border);
  background: var(--search-focus-bg);
  box-shadow: 0 0 0 2px var(--scheme-search-focus-ring-strong);
}

.search-field__clear {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  color: var(--neutral-300);
  cursor: pointer;
  transition: color var(--duration-normal) ease;
}

/* SVG inside the clear button defaults to 300x150 without explicit sizing.
   Pin it to the icon size of each variant so the button stays compact. */

.search-field__clear-svg {
  display: block;
  width: 1rem;
  height: 1rem;
}

/* ── Sticky variant (compact, mobile-first) ── */

.search-field--sticky .search-field__icon {
  left: 0.75rem;
  width: 1rem;
  height: 1rem;
}

.search-field--sticky .search-field__input {
  padding: 0.5rem 0.75rem 0.5rem 2.25rem;
  font-size: 0.875rem;
}

.search-field--sticky .search-field__input:focus {
  box-shadow: 0 0 0 2px var(--scheme-search-focus-ring-strong);
}

.dark .search-field--sticky .search-field__input:focus {
  box-shadow: 0 0 0 3px var(--scheme-search-focus-ring-strong);
}

@media (min-width: 640px) {
  .search-field--sticky .search-field__input { padding: 0.625rem 0.75rem 0.625rem 2.25rem; }
}

.search-field--sticky .search-field__clear {
  right: 0.625rem;
  padding: 0.125rem;
}

.search-field--sticky .search-field__clear:hover { color: var(--neutral-500); }

.dark .search-field--sticky .search-field__clear:hover { color: var(--surface-300); }

/* ── Desktop variant (full-size, larger icons & padding) ── */

.search-field--desktop .search-field__icon {
  left: 0.875rem;
  width: 1.25rem;
  height: 1.25rem;
}

.search-field--desktop .search-field__input {
  padding: 0.625rem 1rem 0.625rem 2.75rem;
  font-size: 0.9375rem;
  border-radius: 0.875rem;
}

.search-field--desktop .search-field__input:focus {
  box-shadow: 0 0 0 3px var(--scheme-search-focus-ring);
}

.search-field--desktop .search-field__clear {
  right: 0.75rem;
  padding: 0.25rem;
}

.search-field--desktop .search-field__clear:hover { color: var(--neutral-600); }

.dark .search-field--desktop .search-field__clear:hover { color: var(--surface-200); }

/* --- Mobile Filters Summary ---
   Rendered as a second row inside .sticky-bar-inner so it inherits the
   .filter-bar glass surface. The column gap on .sticky-bar-inner handles
   vertical spacing; no extra margin-top is needed. */

.mobile-filters-summary {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  font-size: 0.75rem;
  color: var(--neutral-500);
}

.mobile-filters-summary-dot {
  color: var(--neutral-300);
}

.dark .mobile-filters-summary { color: var(--surface-400); }

.mobile-filters-summary button {
  color: var(--accent-primary);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
  background: none;
  border: none;
  cursor: pointer;
  font-size: inherit;
}

@media (min-width: 640px) { .mobile-filters-summary { display: none; } }

/* --- Desktop Inline Filters --- */

.desktop-filters {
  display: none;
  margin-bottom: 1.875rem;
}

@media (min-width: 640px) { .desktop-filters { display: block; } }

.desktop-filters > * + * { margin-top: 0.875rem; }

.filter-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.4375rem;
}

.filter-row-label {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--neutral-400);
  margin-right: 0.125rem;
}

.dark .filter-row-label { color: var(--surface-400); }

/* --- Desktop Search Bar (search field + controls) --- */

/* Matches the sticky bar's filter-bar glass morphism pattern */

.desktop-search-bar {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.75rem;
  border-radius: 1rem;
}

.desktop-search-controls {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  flex-shrink: 0;
}

.pill-count {
  margin-left: 0.375rem;
  opacity: 0.55;
}

/* --- Desktop Results Bar --- */

.desktop-results-bar {
  display: none;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 1.125rem;
}

@media (min-width: 640px) { .desktop-results-bar { display: flex; } }

.desktop-results-count {
  font-family: var(--font-ui);
  font-size: 0.875rem;
  color: var(--neutral-500);
}

.dark .desktop-results-count { color: var(--surface-400); }

.desktop-clear-btn {
  font-family: var(--font-ui);
  font-size: 0.875rem;
  font-weight: var(--font-weight-medium);
  color: var(--accent-primary);
  text-decoration: underline;
  text-underline-offset: 2px;
  background: none;
  border: none;
  cursor: pointer;
  transition: color var(--duration-normal) ease;
}

.desktop-clear-btn:hover { color: var(--accent-primary-hover); }

/* --- Filter Pills --- */

.category-pill, .brand-pill, .tag-pill {
  padding: 0.4375rem 0.875rem;
  border-radius: 9999px;
  font-family: var(--font-ui);
  font-size: 0.75rem;
  font-weight: 600;
  transition: background var(--duration-normal) ease, color var(--duration-normal) ease, border-color var(--duration-normal) ease, box-shadow var(--duration-normal) ease;
  border: none;
  cursor: pointer;
  min-height: 34px;
  display: inline-flex;
  align-items: center;
}

.category-pill--active, .brand-pill--active, .tag-pill--active {
  background: var(--accent-primary);
  color: var(--text-on-accent);
  box-shadow: 0 0 16px var(--accent-primary-shadow), inset 0 1px 0 var(--btn-inset);
}

.category-pill--inactive, .brand-pill--inactive, .tag-pill--inactive {
  background: var(--pill-inactive-bg);
  color: var(--pill-inactive-text);
  border: 1px solid var(--pill-inactive-border);
}

.category-pill--inactive:hover, .brand-pill--inactive:hover, .tag-pill--inactive:hover {
  background: var(--glass-hover-bg);
  border-color: var(--accent-primary-border);
}

/* Brand pills use --accent-primary-border on hover, same as category pills,
   so both follow the active theme consistently. */

/* --- View Toggle (single button) ---
   Replaces the previous two-button .view-toggle container.
   One button toggles between grid and list view; the visible icon
   represents the TARGET view (the view you will switch to on click).
   JS (main.js → syncViewToggles) swaps the icon + aria-label. */

.view-toggle-single {
  background: var(--pill-inactive-bg);
  border: 1px solid var(--pill-inactive-border);
  border-radius: 0.75rem;
  padding: 0.5rem;
  min-width: 40px;
  min-height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: var(--text-secondary);
  flex-shrink: 0;
  transition: background var(--duration-normal) ease, color var(--duration-normal) ease, border-color var(--duration-normal) ease, box-shadow var(--duration-normal) ease;
}

.view-toggle-single:hover {
  background: var(--glass-hover-bg);
  border-color: var(--accent-primary-border);
  color: var(--accent-primary);
}

.dark .view-toggle-single { color: var(--text-muted); }

.view-toggle-single__icon { display: block; }

.view-toggle-single__icon.is-hidden { display: none; }

/* Sticky bar view toggle — compact on mobile */

.sticky-bar .view-toggle-single { padding: 6px; min-width: 34px; min-height: 34px; }

.sticky-bar .view-toggle-single__icon { width: 14px; height: 14px; }

@media (min-width: 640px) {
  .sticky-bar .view-toggle-single { min-width: 38px; min-height: 38px; padding: 8px; }
  .sticky-bar .view-toggle-single__icon { width: 16px; height: 16px; }
}

/* 8. Product card */

/* ==========================================================================
   7. PRODUCT CARD
   Compact, premium product-shelf cards with equal-height grid rows and reduced horizontal text waste.
   ========================================================================== */

/* --- Product Card --- */

.product-card {
  --card-image-height: clamp(124px, 12vw, 148px);
  --card-content-padding-block: 0.75rem;
  --card-content-padding-inline: 0.8125rem;
  --card-content-gap: 0.4rem;
  --card-chip-font-size: 0.59375rem;
  --card-chip-padding-block: 0.15rem;
  --card-chip-padding-inline: 0.425rem;
  --card-name-font-size: 0.9rem;
  --card-name-line-height: 1.2;
  --card-action-min-height: 30px;
  --card-action-font-size: 0.735rem;

  overflow: hidden;
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
  contain: layout;
}

@media (max-width: 479px) {
  .product-card {
    --card-image-height: clamp(126px, 34vw, 152px);
    --card-name-font-size: 0.9375rem;
    --card-action-min-height: 34px;
    --card-action-font-size: 0.765rem;
  }
}

.product-card.list-view {
  flex-direction: row;
  min-height: 11rem;
}

.product-card-image-wrap {
  position: relative;
  overflow: hidden;
  background: var(--scheme-image-wrap-bg);
  flex-shrink: 0;
  width: 100%;
  height: var(--card-image-height);
}

.dark .product-card-image-wrap { background: var(--scheme-image-wrap-bg-dark); }

.product-card.list-view .product-card-image-wrap {
  width: clamp(7.5rem, 24vw, 11rem);
  aspect-ratio: auto;
  /* Let the flex row's align-items: stretch fill the full card height.
     The base .product-card-image-wrap sets height: var(--card-image-height)
     which is correct for grid view but prevents stretching in list view,
     leaving an empty glass-card strip below the image. */
  height: auto;
}

@media (min-width: 768px) {
  .product-card.list-view .product-card-image-wrap { width: 12rem; }
}

.product-card-image-wrap picture { display: contents; }

.product-card-image-wrap img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  box-sizing: border-box;
  padding: 0.2rem;
  transition: transform 0.05s ease-out;
  will-change: transform;
}

.product-card:hover .product-card-image-wrap img {
  transform: scale(1.05);
}

/* Image error placeholder — absolutely positioned to overlay image area */

.product-card-image-error {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.25rem;
  color: var(--neutral-300);
  z-index: 1;
}

.dark .product-card-image-error { color: var(--surface-400); }

.product-card-image-error-text {
  font-size: 0.75rem;
}

.product-card-hover-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, var(--scheme-overlay-gradient), transparent 55%);
  opacity: 0;
  transition: opacity var(--duration-slow) ease;
  pointer-events: none;
}

.dark .product-card-hover-overlay { background: linear-gradient(to top, var(--scheme-overlay-gradient-dark), transparent 55%); }

.product-card:hover .product-card-hover-overlay { opacity: 1; }

/* --- Card Content --- */

.product-card-content {
  display: flex;
  flex-direction: column;
  justify-content: stretch;
  gap: var(--card-content-gap);
  flex: 1 1 auto;
  min-width: 0;
  padding: var(--card-content-padding-block) var(--card-content-padding-inline);
  text-align: center;
}

@media (min-width: 640px) {
  .product-card {
    --card-content-padding-block: 0.8125rem;
    --card-content-padding-inline: 0.875rem;
    --card-name-font-size: 0.9375rem;
  }
}

.product-card.list-view .product-card-content {
  padding: 0.875rem;
  text-align: left;
}

@media (min-width: 768px) {
  .product-card.list-view .product-card-content { padding: 1rem 1.125rem; }
}

/* --- Tags --- */

.product-tags {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0.275rem;
  margin-bottom: 0;
}

.product-card.list-view .product-tags {
  justify-content: flex-start;
}

.tag-brand,
.tag-category,
.tag-attribute,
.tag-more {
  display: inline-flex;
  align-items: center;
  max-width: 100%;
  border-radius: 9999px;
  font-family: var(--font-ui);
  font-size: var(--card-chip-font-size);
  line-height: 1.18;
  padding: var(--card-chip-padding-block) var(--card-chip-padding-inline);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.tag-brand {
  font-weight: 700;
  background: var(--accent-primary-light);
  color: var(--accent-primary);
  border: 1px solid var(--accent-primary-border);
}

.tag-category,
.tag-attribute,
.tag-more {
  font-weight: 600;
  background: color-mix(in srgb, var(--accent-primary-light) 45%, var(--glass-bg));
  color: color-mix(in srgb, var(--accent-primary) 42%, var(--text-muted));
  border: 1px solid color-mix(in srgb, var(--accent-primary-border) 42%, var(--glass-border));
}

.tag-attribute,
.tag-more {
  font-weight: 500;
  color: color-mix(in srgb, var(--accent-primary) 34%, var(--text-muted));
}

.tag-more {
  min-width: 1.45rem;
  justify-content: center;
  padding-inline: 0.325rem;
}

.tag-brand { max-width: 45%; }

.tag-category { max-width: 100%; }

.tag-attribute { max-width: 48%; }

/* Compact-card attribute chips are hidden on very small screens to keep card
   heights uniform. Scope this to .product-tags (the card chip container) only,
   so it never reaches the Quick View panel, which reuses .tag-attribute for its
   own attribute chips (see product-quick-view.css / product-quick-view.js). */

@media (max-width: 479px) {
  .product-tags .tag-attribute,
  .product-tags .tag-more { display: none; }
}

/* --- Product Quick View Triggers --- */

.product-card-image-button,
.product-name-button {
  appearance: none;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
}

.product-card-image-button {
  position: relative;
  display: block;
  width: 100%;
  height: 100%;
  padding: 0;
  cursor: pointer;
}

.product-card-image-button:focus-visible,
.product-name-button:focus-visible {
  outline: 3px solid var(--scheme-focus-ring);
  outline-offset: 3px;
}

.product-card-image-button:focus-visible {
  outline-offset: -4px;
}

/* --- Product Name --- */

.product-name {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: calc(4 * var(--card-name-line-height) * 1em);
  flex: 1 1 auto;
  margin-bottom: 0;
  color: var(--neutral-900);
  font-family: var(--font-heading);
  font-weight: var(--font-weight-semibold);
  font-size: var(--card-name-font-size);
  line-height: var(--card-name-line-height);
  letter-spacing: -0.006em;
  text-align: center;
}

.dark .product-name { color: var(--surface-100); }

.product-name-button {
  display: -webkit-box;
  width: 100%;
  overflow: hidden;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  padding: 0;
  text-align: inherit;
  overflow-wrap: anywhere;
  hyphens: auto;
  text-wrap: pretty;
  cursor: pointer;
}

.product-name-button:hover {
  color: var(--accent-primary);
}

.product-card.list-view .product-name {
  display: block;
  flex: 0 0 auto;
  min-height: 0;
  /* Auto top + bottom margins center the title vertically between the
     tags row (above) and the buttons row (below). In a flex column,
     free space is distributed equally to auto margins, so the title
     sits at the midpoint of the space between tags and buttons while
     buttons settle at the bottom of the card. */
  margin-top: auto;
  margin-bottom: auto;
  font-size: 0.9375rem;
  line-height: 1.25;
  text-align: left;
}

@media (min-width: 640px) {
  .product-card.list-view .product-name { font-size: 1rem; }
}

/* --- Product Buttons --- */

.product-buttons {
  display: flex;
  flex-direction: row;
  gap: 0.4rem;
  margin-top: 0;
}

.product-buttons .btn-ml,
.product-buttons .btn-shopee {
  flex: 1 1 0;
  width: auto;
  min-width: 0;
  justify-content: center;
  text-align: center;
  min-height: var(--card-action-min-height);
  padding: 0.375rem 0.5rem;
  border-radius: 0.65rem;
  font-size: var(--card-action-font-size);
  font-weight: var(--font-weight-semibold);
  box-shadow: none;
}

.product-buttons .btn-ml:hover,
.product-buttons .btn-shopee:hover {
  transform: translateY(-1px);
}

.product-buttons .btn-ml:focus-visible,
.product-buttons .btn-shopee:focus-visible {
  outline: 2px solid var(--scheme-focus-ring);
  outline-offset: 2px;
}

.product-buttons .truncate {
  display: inline-block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (max-width: 359px) {
  .product-buttons {
    flex-direction: column;
    gap: 0.375rem;
  }
}

.product-card.list-view .product-buttons {
  flex-direction: row;
  gap: 0.5rem;
  /* No margin-top: auto here — the title's auto margins (see
     .product-card.list-view .product-name) consume the free space
     and center the title between tags and buttons. Buttons naturally
     settle at the bottom of the card as a result. */
}

.product-card.list-view .product-buttons .btn-ml,
.product-card.list-view .product-buttons .btn-shopee {
  min-height: 32px;
  padding: 0.425rem 0.7rem;
  font-size: 0.75rem;
}

@media (min-width: 640px) {
  .product-card.list-view .product-buttons .btn-ml,
  .product-card.list-view .product-buttons .btn-shopee {
    min-height: 34px;
    padding: 0.45rem 0.8rem;
    font-size: 0.7875rem;
  }
}

/* --- Featured Badge --- */

.featured-badge {
  position: absolute;
  top: 0.625rem;
  left: 0.625rem;
  z-index: 2;
  display: flex;
  align-items: center;
  gap: 0.25rem;
  border-radius: 9999px;
  padding: 0.25rem 0.625rem;
  background: var(--scheme-badge-bg);
  color: var(--text-on-accent);
  box-shadow: 0 0 12px var(--accent-primary-shadow);
  font-family: var(--font-ui);
  font-size: 0.625rem;
  font-weight: 700;
  letter-spacing: 0.025em;
  text-transform: uppercase;
}

.featured-badge svg {
  width: 0.625rem;
  height: 0.625rem;
  flex-shrink: 0;
}

.product-card.list-view .featured-badge {
  top: 0.5rem;
  left: 0.5rem;
  padding: 0.25rem 0.5rem;
  font-size: 0.6rem;
}

.featured-text-full { display: none; }

.featured-text-short { display: inline; }

@media (min-width: 640px) {
  .featured-text-full { display: inline; }
  .featured-text-short { display: none; }
}

/* --- Fluid Grids --- */

.fluid-grid-products {
  display: grid;
  gap: 0.95rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 242px), 1fr));
  align-items: stretch;
}

.product-list {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
}

@media (min-width: 640px) {
  .fluid-grid-products {
    gap: 1rem;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 248px), 1fr));
  }
  .product-list { gap: 1.125rem; }
}

/* Two-column list view on wide desktops.
   At 1024px+ the catalog content area is ~960px, which gives each
   card ~471px — enough for the 192px image plus a comfortable content
   column. Below this breakpoint cards stay in a single column so the
   image + text never feel cramped. */

@media (min-width: 1024px) {
  .product-list {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (min-width: 1280px) {
  .fluid-grid-products {
    gap: 1.125rem;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 252px), 1fr));
  }
}

.fluid-grid-trust {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 1.25rem;
}

.fluid-grid-trust > * {
  flex: 0 1 260px;
  min-width: 220px;
}

@media (min-width: 640px) {
  .fluid-grid-trust { gap: 1.5rem; }
}

/* --- Empty State --- */

.empty-state {
  text-align: center;
  padding: 4rem 2.5rem;
}

@media (min-width: 640px) { .empty-state { padding: 6rem 2.5rem; } }

.empty-state-icon { font-size: 3rem; margin-bottom: 1rem; }

.empty-state-title {
  font-size: 1.125rem;
  color: var(--neutral-600);
  margin-bottom: 0.5rem;
}

.dark .empty-state-title { color: var(--surface-200); }

.empty-state-text {
  font-size: 0.875rem;
  color: var(--neutral-400);
  margin-bottom: 1.5rem;
}

.dark .empty-state-text { color: var(--surface-400); }

.empty-state-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.75rem 1.5rem;
  border-radius: 0.75rem;
  background: var(--accent-primary);
  color: var(--text-on-accent);
  font-family: var(--font-ui);
  font-weight: var(--font-weight-semibold);
  min-height: 48px;
  cursor: pointer;
  border: none;
  transition: background var(--duration-normal) ease;
}

.empty-state-btn:hover { background: var(--accent-primary-hover); }

/* 9. Product quick view */

/* ============================================================================
   PRODUCT QUICK VIEW
   Static product detail drawer / mobile bottom sheet.
   ============================================================================ */

.product-quick-view[hidden] {
  display: none !important;
}

.product-quick-view {
  position: fixed;
  inset: 0;
  z-index: var(--layer-active-panel-backdrop);
  display: flex;
  justify-content: flex-end;
  pointer-events: none;
}

.product-quick-view__backdrop {
  position: absolute;
  inset: 0;
  background: var(--drawer-overlay-bg);
  opacity: 0;
}

.product-quick-view.is-open .product-quick-view__backdrop {
  animation: fade-in 0.25s var(--ease-out) both;
}

.product-quick-view__backdrop--closing {
  animation: overlay-out 0.2s var(--ease-out) both;
}

.product-quick-view__panel {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  width: min(100%, 440px);
  height: 100dvh;
  max-height: 100dvh;
  border-radius: 0;
  background: var(--drawer-panel-bg);
  border-left: 1px solid var(--drawer-border);
  box-shadow: 0 0 40px var(--chrome-shadow-md);
  overflow: hidden;
  transform: translateX(100%);
  pointer-events: auto;
  contain: layout paint;
}

.product-quick-view.is-open {
  pointer-events: auto;
}

.product-quick-view.is-open .product-quick-view__panel {
  animation: drawer-right-in 0.3s var(--ease-out) both;
}

.product-quick-view__panel--closing {
  animation: drawer-right-out 0.2s var(--ease-out) both;
}

.product-quick-view__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 1rem;
  border-bottom: 1px solid var(--glass-border);
  flex-shrink: 0;
}

.product-quick-view__header.drawer-header {
  padding: 1rem;
}

.product-quick-view__header-icon-wrap {
  flex: 0 0 auto;
}

.product-quick-view__eyebrow {
  margin-bottom: 0.125rem;
  color: var(--neutral-400);
  font-family: var(--font-ui);
  font-size: 0.6875rem;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.dark .product-quick-view__eyebrow { color: var(--surface-400); }

.product-quick-view__header .product-quick-view__header-title {
  font-size: 1rem;
  line-height: 1.2;
}

.product-quick-view__close.drawer-close-btn {
  flex: 0 0 auto;
}

.product-quick-view__body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 1rem;
}

.product-quick-view__image-wrap {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 200px;
  border-radius: 1rem;
  background: var(--scheme-image-wrap-bg);
  border: 1px solid var(--glass-border);
  overflow: hidden;
}

.dark .product-quick-view__image-wrap { background: var(--scheme-image-wrap-bg-dark); }

.product-quick-view__image-wrap img {
  width: min(100%, 320px);
  height: min(42vh, 320px);
  object-fit: contain;
  padding: 0.05rem;
}

.product-quick-view__content {
  padding-top: 1rem;
}

.product-quick-view__chips,
.product-quick-view__tags {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
}

.product-quick-view__chips {
  margin-bottom: 0.75rem;
}

.product-quick-view__chips .tag-brand,
.product-quick-view__chips .tag-category,
.product-quick-view__tags .tag-attribute {
  max-width: 100%;
  font-size: 0.6875rem;
  line-height: 1.18;
  padding: 0.25rem 0.625rem;
}

.product-quick-view__tags .tag-attribute {
  white-space: normal;
}

.product-quick-view__title {
  color: var(--neutral-900);
  font-size: clamp(1.25rem, 3vw, 1.65rem);
  line-height: 1.16;
  letter-spacing: -0.02em;
  margin-bottom: 1rem;
}

.dark .product-quick-view__title { color: var(--surface-100); }

.product-quick-view__tag-block,
.product-quick-view__description-block {
  padding-top: 1rem;
  border-top: 1px solid var(--glass-border);
}

.product-quick-view__tag-block + .product-quick-view__description-block {
  margin-top: 1rem;
}

.product-quick-view__section-title {
  margin-bottom: 0.5rem;
  color: var(--neutral-500);
  font-family: var(--font-ui);
  font-size: 0.75rem;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.dark .product-quick-view__section-title { color: var(--surface-400); }

.product-quick-view__description {
  color: var(--neutral-700);
  font-family: var(--font-ui);
  font-size: 0.925rem;
  line-height: 1.65;
  white-space: pre-line;
}

.dark .product-quick-view__description { color: var(--surface-300); }

.product-quick-view__actions {
  display: flex;
  gap: 0.625rem;
  padding: 1rem;
  border-top: 1px solid var(--glass-border);
  background: color-mix(in srgb, var(--drawer-panel-bg) 92%, transparent);
  flex-shrink: 0;
}

.product-quick-view__actions .btn-ml,
.product-quick-view__actions .btn-shopee {
  flex: 1 1 0;
  min-width: 0;
  min-height: 44px;
  padding: 0.675rem 0.875rem;
  font-size: 0.8125rem;
  text-align: center;
}

body.product-quick-view-open .dark-toggle,
body.product-quick-view-open .scheme-picker {
  z-index: 0;
  pointer-events: none;
}

@media (max-width: 639px) {
  .product-quick-view {
    align-items: flex-end;
    justify-content: center;
  }

  .product-quick-view__panel {
    width: 100%;
    height: auto;
    max-height: 85dvh;
    border-left: 0;
    border-top: 1px solid var(--drawer-border);
    border-radius: 0;
    transform: translateY(100%);
  }

  .product-quick-view.is-open .product-quick-view__panel {
    animation-name: sheet-in;
  }

  .product-quick-view__panel--closing {
    animation-name: sheet-out;
  }

  .product-quick-view__body {
    padding: 0.875rem;
  }

  .product-quick-view__image-wrap {
    min-height: 180px;
  }

  .product-quick-view__image-wrap img {
    height: min(32vh, 260px);
  }

  .product-quick-view__actions {
    padding: 0.875rem;
  }
}

@media (max-width: 359px) {
  .product-quick-view__actions {
    flex-direction: column;
  }
}

@media (prefers-reduced-motion: reduce) {
  .product-quick-view.is-open .product-quick-view__backdrop,
  .product-quick-view__backdrop--closing,
  .product-quick-view.is-open .product-quick-view__panel,
  .product-quick-view__panel--closing {
    animation: none;
  }

  .product-quick-view.is-open .product-quick-view__backdrop { opacity: 1; }
  .product-quick-view.is-open .product-quick-view__panel { transform: translateX(0); }

  @media (max-width: 639px) {
    .product-quick-view.is-open .product-quick-view__panel { transform: translateY(0); }
  }
}

/* 10. Mobile filter drawer */

/* ==========================================================================
   8. DRAWER
   Filter drawer overlay, panel, header, sections, footer, drawer-open body state
   ========================================================================== */

/* --- Drawer Overlay --- */

.drawer-overlay {
  position: fixed;
  inset: 0;
  background: var(--drawer-overlay-bg);
  z-index: var(--layer-active-panel-backdrop);
  animation: fade-in 0.25s var(--ease-out) both;
}

.drawer-overlay--closing { animation: overlay-out 0.2s var(--ease-out) both; }

/* --- Drawer Panel --- */

.drawer-panel {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  width: 85%;
  max-width: 360px;
  background: var(--drawer-panel-bg);
  border-right: 1px solid var(--drawer-border);
  box-shadow: 0 0 40px var(--chrome-shadow-md);
  z-index: var(--layer-active-panel);
  overflow-y: auto;
  animation: drawer-in 0.3s var(--ease-out) both;
  display: flex;
  flex-direction: column;
  overscroll-behavior: contain;
}

.drawer-panel--closing { animation: drawer-out 0.2s var(--ease-out) both; }

/* --- Drawer Header --- */

.drawer-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1rem;
  border-bottom: 1px solid var(--glass-border);
}

.drawer-header-left {
  display: flex;
  align-items: center;
  gap: 0.625rem;
}

.drawer-header-icon-wrap {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 0.75rem;
  background: var(--accent-primary-light);
  border: 1px solid var(--accent-primary-border);
  color: var(--accent-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background var(--duration-normal) ease;
}

.drawer-header-icon-wrap:hover { background: var(--accent-primary-border); }

.drawer-header-icon { width: 1.125rem; height: 1.125rem; }

.drawer-title {
  font-weight: bold;
  font-size: 1.125rem;
  color: var(--neutral-900);
}

.dark .drawer-title { color: var(--surface-100); }

.drawer-filter-badge {
  font-size: 0.6875rem;
  font-weight: 700;
  min-width: 1.25rem;
  height: 1.25rem;
  line-height: 1.25rem;
  text-align: center;
  border-radius: 0.625rem;
  padding: 0 0.375rem;
  background: var(--accent-primary);
  color: var(--text-on-accent);
}

.drawer-close-btn {
  width: 2.25rem;
  height: 2.25rem;
  border-radius: 0.5rem;
  background: var(--drawer-close-bg);
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  cursor: pointer;
  color: var(--neutral-400);
  transition: background var(--duration-normal) ease, color var(--duration-normal) ease;
}

.dark .drawer-close-btn,
[data-color-scheme="alt"].dark .drawer-close-btn { background: var(--drawer-close-bg-dark); color: var(--surface-300); }

.drawer-close-btn:hover { color: var(--neutral-700); background: var(--glass-hover-bg); }

.dark .drawer-close-btn:hover,
[data-color-scheme="alt"].dark .drawer-close-btn:hover { color: var(--surface-100); background: var(--drawer-close-bg-dark-hover); }

/* --- Drawer Sections --- */

.drawer-section { padding: 1rem 1rem 0.5rem; }

.drawer-section-title {
  font-size: 0.75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--neutral-400);
  margin-bottom: 0.75rem;
}

.dark .drawer-section-title { color: var(--surface-400); }

.drawer-pills { display: flex; flex-wrap: wrap; gap: 0.5rem; }

/* --- Drawer Footer --- */

.drawer-footer {
  padding: 1rem;
  margin-top: auto;
  border-top: 1px solid var(--glass-border);
}

.drawer-submit-btn {
  width: 100%;
  padding: 0.75rem 1rem;
  border-radius: 0.75rem;
  background: var(--accent-primary);
  color: var(--text-on-accent);
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 0.875rem;
  box-shadow: 0 0 16px var(--accent-primary-shadow);
  min-height: 48px;
  cursor: pointer;
  border: none;
  transition: background var(--duration-normal) ease;
}

.drawer-submit-btn:hover { background: var(--accent-primary-hover); }

/* --- Drawer Open: Prevent page shift on fixed elements --- */

body.drawer-open .dark-toggle {
  right: calc(1.25rem + var(--scrollbar-compensation, 0px));
}

body.drawer-open .dark-toggle,
body.drawer-open .scheme-picker {
  z-index: 0;
  pointer-events: none;
}

/* 11. Trust section */

/* ==========================================================================
   9. TRUST
   Trust section, divider, header, cards, CTA
   ========================================================================== */

.trust-section {
  padding: 4rem 1rem;
  max-width: 1600px;
  margin: 0 auto;
  position: relative;
  z-index: 10;
}

@media (min-width: 640px) {
  .trust-section { padding: 5rem 1.5rem; }
}

@media (min-width: 1024px) {
  .trust-section { padding-left: 2rem; padding-right: 2rem; }
}

.trust-divider {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin-bottom: 2.5rem;
}

@media (min-width: 640px) { .trust-divider { margin-bottom: 3rem; } }

.trust-divider-line {
  flex: 1;
  height: 1px;
  background: linear-gradient(to right, transparent, var(--scheme-trust-divider), transparent);
}

.dark .trust-divider-line { background: linear-gradient(to right, transparent, var(--scheme-trust-divider-dark), transparent); }

.trust-divider-circle {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 9999px;
  background: var(--ui-surface-bg);
  border: 1px solid var(--ui-surface-border);
  display: flex;
  align-items: center;
  justify-content: center;
}

.dark .trust-divider-circle { background: var(--ui-surface-bg-dark); border-color: var(--ui-surface-border-dark); }

.trust-header {
  text-align: center;
  margin-bottom: 2.5rem;
}

.trust-title {
  font-weight: var(--font-weight-bold);
  color: var(--neutral-900);
  letter-spacing: -0.015em;
  margin-bottom: 0.75rem;
  font-size: clamp(1.6rem, 3vw, 2.15rem);
}

.dark .trust-title { color: var(--surface-100); }

.trust-subtitle {
  color: var(--neutral-500);
  font-family: var(--font-ui);
  font-size: 0.875rem;
  line-height: 1.7;
  max-width: 28rem;
  margin: 0 auto;
}

.dark .trust-subtitle { color: var(--surface-400); }

@media (min-width: 640px) { .trust-subtitle { font-size: 1rem; } }

/* --- Trust Card --- */

.trust-card {
  padding: 1.5rem;
  text-align: center;
}

@media (min-width: 640px) { .trust-card { padding: 1.75rem; } }

.trust-card-icon-wrap {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 3.5rem;
  height: 3.5rem;
  border-radius: 1rem;
  margin-bottom: 1rem;
  border: 1px solid transparent;
}

.trust-card-icon-wrap--primary {
  background: var(--accent-primary-light);
  color: var(--accent-primary);
  border-color: var(--accent-primary-border);
}

.trust-card-icon-wrap--secondary {
  background: var(--accent-secondary-light);
  color: var(--accent-secondary);
  border-color: var(--accent-secondary-border);
}

.trust-card-title {
  font-family: var(--font-heading);
  font-weight: var(--font-weight-bold);
  color: var(--neutral-900);
  font-size: 1rem;
  margin-bottom: 0.5rem;
}

.dark .trust-card-title { color: var(--surface-100); }

.trust-card-text {
  color: var(--neutral-500);
  font-family: var(--font-ui);
  font-size: 0.875rem;
  line-height: 1.65;
}

.dark .trust-card-text { color: var(--surface-400); }

/* --- Trust CTA --- */

.trust-cta {
  margin-top: 2.5rem;
  text-align: center;
}

.trust-cta-panel {
  display: inline-block;
  padding: 1rem 2rem;
}

.trust-cta-text {
  color: var(--neutral-500);
  font-size: 0.875rem;
}

.dark .trust-cta-text { color: var(--surface-400); }

.trust-cta-link {
  color: var(--accent-primary);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color var(--duration-normal) ease;
  min-height: 48px;
  display: inline-flex;
  align-items: center;
}

.trust-cta-link:hover { color: var(--accent-primary-hover); }

/* 12. Footer */

/* ==========================================================================
   10. FOOTER
   Site footer grid, brand column, links, security text, bottom bar,
   dark mode toggle FAB
   ========================================================================== */

.site-footer {
  background: var(--footer-bg);
  color: var(--footer-text);
  padding: 3rem 1.25rem 2rem;
  position: relative;
  z-index: 10;
}

@media (min-width: 640px) {
  .site-footer { padding-top: 3.5rem; padding-left: 1.5rem; padding-right: 1.5rem; }
}

@media (min-width: 1024px) {
  .site-footer { padding-left: 2rem; padding-right: 2rem; }
}

.footer-inner { max-width: 1600px; margin: 0 auto; }

.footer-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2rem;
  margin-bottom: 2.5rem;
}

@media (min-width: 640px) { .footer-grid { grid-template-columns: 1fr 1fr; } }

@media (min-width: 1024px) { .footer-grid { grid-template-columns: 1fr 1fr 1fr; } }

.footer-brand-title {
  font-size: 1.25rem;
  font-weight: var(--font-weight-bold);
  font-family: var(--font-heading);
  letter-spacing: -0.02em;
  margin-bottom: 1rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.footer-logo-img {
  width: 1.75rem;
  height: 1.75rem;
  object-fit: contain;
}

.footer-brand-hub { color: var(--footer-text); }

.footer-brand-raiz { color: var(--scheme-footer-accent); }

.footer-brand-desc {
  color: var(--footer-muted);
  font-family: var(--font-ui);
  font-size: 0.875rem;
  line-height: 1.65;
}

.footer-heading {
  font-weight: var(--font-weight-bold);
  font-size: 1rem;
  margin-bottom: 0.75rem;
}

.footer-links {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.25rem;
}

.footer-link {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  color: var(--footer-muted);
  font-family: var(--font-ui);
  font-size: 0.875rem;
  min-height: 44px;
  transition: color var(--duration-normal) ease;
}

.footer-link:hover { color: var(--scheme-footer-accent); }

.footer-link-icon {
  width: 1rem;
  height: 1rem;
  flex-shrink: 0;
  color: var(--scheme-footer-icon);
}

.footer-security-text {
  color: var(--footer-muted);
  font-family: var(--font-ui);
  font-size: 0.875rem;
  line-height: 1.65;
  margin-bottom: 1rem;
}

.footer-marketplace-badges {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  color: var(--footer-muted);
}

.footer-marketplace-badge {
  font-size: 0.75rem;
  font-weight: 500;
  padding: 0.25rem 0.625rem;
  border-radius: 0.375rem;
  background: var(--scheme-marketplace-badge-bg);
  border: 1px solid var(--scheme-marketplace-badge-border);
  color: var(--scheme-footer-accent);
}

.footer-marketplace-plus {
  font-size: 0.75rem;
}

.footer-email {
  word-break: break-all;
}

.footer-bottom {
  border-top: 1px solid var(--scheme-footer-border);
  padding-top: 1.5rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.75rem;
  text-align: center;
}

.footer-copyright {
  color: var(--footer-muted);
  font-size: 0.75rem;
}

.footer-disclaimer {
  color: var(--footer-disclaimer);
  font-size: 0.75rem;
  max-width: 28rem;
}

/* 13. Dark mode toggle FAB */

/* ==========================================================================
   10. DARK MODE TOGGLE (FAB) & COLOR SCHEME PICKER
   ========================================================================== */

.dark-toggle {
  position: fixed;
  bottom: 1.25rem;
  right: 1.25rem;
  z-index: var(--layer-floating-control);
  width: 3rem;
  height: 3rem;
  border-radius: 9999px;
  background: var(--toggle-bg);
  border: 1px solid var(--toggle-border);
  box-shadow: 0 0 16px var(--chrome-shadow-md);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background var(--duration-slow) ease, border-color var(--duration-slow) ease, box-shadow var(--duration-slow) ease, transform var(--duration-slow) ease;
}

.dark-toggle:hover {
  transform: scale(1.1);
  box-shadow: 0 0 24px var(--chrome-shadow-lg);
}

.dark-toggle:active { transform: scale(0.95); }

.dark .dark-toggle,
[data-color-scheme="alt"].dark .dark-toggle {
  background: var(--toggle-bg-dark);
  border-color: var(--toggle-border-dark);
  box-shadow: 0 0 16px var(--chrome-shadow-dark);
}

.dark-toggle-icon {
  position: absolute;
  width: 1.25rem;
  height: 1.25rem;
  transition: opacity var(--duration-slow) ease, transform var(--duration-slow) ease;
}

/* Sun visible in dark mode, hidden in light */

.dark-toggle-icon--sun {
  color: var(--accent-primary);
  opacity: 0;
  transform: rotate(90deg) scale(0.5);
}

.dark .dark-toggle-icon--sun {
  opacity: 1;
  transform: rotate(0) scale(1);
}

/* Moon visible in light mode, hidden in dark */

.dark-toggle-icon--moon {
  color: var(--accent-primary);
  opacity: 1;
  transform: rotate(0) scale(1);
}

.dark .dark-toggle-icon--moon {
  opacity: 0;
  transform: rotate(-90deg) scale(0.5);
}

/* ── Long-press hint pulse on toggle ─────────────────────── */

.dark-toggle[data-scheme-picker-hint] {
  animation: scheme-hint-pulse 0.6s ease;
}

@keyframes scheme-hint-pulse {
  0%   { box-shadow: 0 0 0 0 var(--accent-primary-shadow); }
  70%  { box-shadow: 0 0 0 10px transparent; }
  100% { box-shadow: 0 0 0 0 transparent; }
}

/* 14. Color scheme picker panel */

/* ==========================================================================
   12. COLOR SCHEME PICKER
   Popup panel for selecting color schemes, triggered by long-press
   on the dark/light mode toggle FAB
   ========================================================================== */

/* --- Dropdown Panel (shared base) ---
   Glass morphism popup with show/hide transition.
   Used by both .scheme-picker and .per-page-panel.
   Variant positioning is applied via the concrete component classes. */

.dropdown-panel {
  background: var(--glass-bg);
  border: 1px solid var(--glass-border);
  border-radius: 1.25rem;
  box-shadow: 0 0 32px var(--chrome-shadow-lg);
  opacity: 0;
  visibility: hidden;
  transform: translateY(6px) scale(0.97);
  transition: opacity var(--duration-slow) ease, transform var(--duration-slow) ease, visibility 0s linear var(--duration-slow);
}

.dropdown-panel.is-open {
  opacity: 1;
  visibility: visible;
  transform: translateY(0) scale(1);
  transition: opacity var(--duration-slow) ease, transform var(--duration-slow) ease, visibility 0s linear 0s;
}

.dropdown-option {
  width: 100%;
  padding: 0.625rem 0.75rem;
  border-radius: 0.75rem;
  border: 1.5px solid transparent;
  background: transparent;
  cursor: pointer;
  font-family: inherit;
  color: var(--text-primary);
  transition: background var(--duration-normal) ease, border-color var(--duration-normal) ease;
}

.dropdown-option:hover {
  background: var(--glass-hover-bg);
}

.dropdown-option.is-active {
  border-color: var(--accent-primary);
  background: var(--glass-hover-bg);
}

.dropdown-title {
  font-size: 0.75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text-muted);
}

.scheme-picker {
  position: fixed;
  bottom: 5rem;
  right: 1.25rem;
  z-index: calc(var(--layer-floating-control) - 1);
  width: 260px;
  padding: 1rem;
  transform: translateY(8px) scale(0.95);
}

.scheme-picker-title {
  /* .dropdown-title is inherited — extends with spacing */
  margin-bottom: 0.75rem;
}

.scheme-picker-list {
  display: flex;
  flex-direction: column;
  gap: 0.375rem;
}

.scheme-option {
  /* .dropdown-option inherited — extends with flex layout */
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

.scheme-option-swatches {
  display: flex;
  gap: 3px;
  flex-shrink: 0;
}

.scheme-swatch {
  width: 14px;
  height: 14px;
  border-radius: 9999px;
  border: 1px solid var(--scheme-swatch-border);
  flex-shrink: 0;
}

.scheme-option-info {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.scheme-option-name {
  font-size: 0.8125rem;
  font-weight: 600;
  line-height: 1.2;
}

.scheme-option-desc {
  font-size: 0.6875rem;
  color: var(--text-muted);
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.scheme-option-check {
  margin-left: auto;
  width: 1rem;
  height: 1rem;
  color: var(--accent-primary);
  opacity: 0;
  flex-shrink: 0;
}

.scheme-option.is-active .scheme-option-check {
  opacity: 1;
}

/* 15. Alternate color scheme component overrides */

/* ── Alternate olive scheme overrides ─────────────────────────────
   Only rules where the desired color differs from what
   var(--accent-primary) and var(--accent-secondary) resolve to
   in the alternate olive context. Most switching is handled by tokens.
   ─────────────────────────────────────────────────────── */

/* Card shadows */

[data-color-scheme="alt"] .filter-bar {
  box-shadow: 0 0 24px var(--card-shadow);
}

/* Selection */

[data-color-scheme="alt"] ::selection { background: var(--accent-primary-light); color: var(--text-primary); }

[data-color-scheme="alt"].dark ::selection { background: var(--selection-bg-dark); color: var(--surface-100); }

/* Circular glass elements — match the scheme-tinted glass border so they're
   consistent with glass-card / glass-panel in the olive theme */

[data-color-scheme="alt"] .hero-scroll-btn   { border-color: var(--glass-border); }

[data-color-scheme="alt"] .trust-divider-circle { border-color: var(--glass-border); }

/* dark-toggle: light-mode only — the alt.dark state already uses transparent white */

[data-color-scheme="alt"]:not(.dark) .dark-toggle { border-color: var(--glass-border); }

/* Alt dark mode: hero scroll button consistent with default dark */

[data-color-scheme="alt"].dark .hero-scroll-btn {
  background: var(--ui-surface-bg-dark);
  border-color: var(--ui-surface-border-dark);
  color: var(--accent-primary);
}

/* Alt dark mode: trust divider circle consistent with default dark */

[data-color-scheme="alt"].dark .trust-divider-circle {
  background: var(--ui-surface-bg-dark);
  border-color: var(--ui-surface-border-dark);
}

/* ── Alternate olive dark: Component overrides ──────────────────── */

/* Dark toggle FAB — already combined with default dark via selector grouping */

/* Long-press hint pulse — reuses scheme-hint-pulse keyframe (identical values;
   --accent-primary-shadow resolves correctly per-theme automatically) */

[data-color-scheme="alt"].dark .dark-toggle[data-scheme-picker-hint] {
  animation: scheme-hint-pulse 0.6s ease;
}

/* 16. 404 page */

/* ==========================================================================
   11. 404 PAGE
   Not found page styles
   ========================================================================== */

.not-found {
  min-height: 100vh;
  min-height: 100dvh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 2rem 1.25rem;
}

.not-found-content {
  width: 100%;
  max-width: 32rem;
  margin: 0 auto;
}

.not-found-glass {
  padding: 3rem 2rem;
  text-align: center;
}

.not-found-icon {
  color: var(--accent-primary);
  margin-bottom: 1.5rem;
}

.not-found-title {
  font-family: var(--font-heading);
  font-size: clamp(4rem, 10vw, 6rem);
  font-weight: bold;
  color: var(--accent-primary);
  line-height: 1;
  margin-bottom: 0.5rem;
}

.not-found-text {
  font-size: 1.25rem;
  font-weight: 600;
  color: var(--neutral-800);
  margin-bottom: 0.75rem;
}

.dark .not-found-text { color: var(--surface-100); }

.not-found-subtext {
  color: var(--neutral-500);
  font-size: 0.9375rem;
  margin-bottom: 2rem;
}

.dark .not-found-subtext { color: var(--surface-400); }

.not-found-btn {
  display: inline-flex;
  width: auto;
  padding: 0.875rem 1.75rem;
}

/* ── Pagination ───────────────────────────────────── */

.page-hidden { display: none !important; }

/* Trigger button — matches view-toggle container style */

.per-page-wrap {
  position: relative;
}

.per-page-trigger {
  display: flex;
  align-items: center;
  gap: 0.375rem;
  min-height: 40px;
  padding: 0 0.625rem;
  background: var(--pill-inactive-bg);
  border: 1px solid var(--pill-inactive-border);
  border-radius: 0.75rem;
  color: var(--text-secondary);
  font-family: var(--font-ui);
  font-size: 0.8125rem;
  font-weight: 500;
  cursor: pointer;
  white-space: nowrap;
  transition: border-color var(--duration-normal) ease, background var(--duration-normal) ease;
}

.per-page-trigger:hover { border-color: var(--accent-primary); }

.per-page-trigger[aria-expanded="true"] {
  border-color: var(--accent-primary);
  background: var(--glass-hover-bg);
}

.per-page-chevron {
  transition: transform 0.2s ease;
}

.per-page-trigger[aria-expanded="true"] .per-page-chevron {
  transform: rotate(180deg);
}

/* ── Sticky variant (compact, mobile-first) ──
   Used inside the sticky bar. Smaller height/padding than the desktop
   variant so it fits alongside the filter button, search field, and
   single view-toggle button on narrow viewports. */

.per-page-trigger--sticky {
  min-height: 34px;
  padding: 0 0.4375rem;
  font-size: 0.75rem;
  gap: 0.25rem;
}

.per-page-trigger--sticky .per-page-trigger__icon {
  width: 13px;
  height: 13px;
}

.per-page-trigger--sticky .per-page-chevron {
  width: 10px;
  height: 10px;
}

@media (min-width: 640px) {
  .per-page-trigger--sticky {
    min-height: 38px;
    padding: 0 0.5rem;
    font-size: 0.8125rem;
  }
  .per-page-trigger--sticky .per-page-trigger__icon {
    width: 15px;
    height: 15px;
  }
}

/* Panel — mirrors .scheme-picker */

.per-page-panel {
  /* .dropdown-panel inherited — extends with positioning */
  position: absolute;
  top: calc(100% + 0.5rem);
  right: 0;
  z-index: 55;
  width: 160px;
  padding: 0.75rem;
}

.per-page-panel-title {
  /* .dropdown-title inherited — extends with spacing */
  margin-bottom: 0.5rem;
  padding: 0 0.25rem;
}

.per-page-option {
  /* .dropdown-option inherited — extends with text sizing */
  display: block;
  padding: 0.5rem 0.75rem;
  text-align: left;
  font-size: 0.8125rem;
  font-weight: 500;
}

.pagination-controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  margin-top: 2.5rem;
  padding-bottom: 1rem;
}

.pagination-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.5rem 1rem;
  border-radius: 0.625rem;
  border: 1px solid var(--neutral-200);
  background: var(--surface-50);
  color: var(--neutral-700);
  font-size: 0.875rem;
  font-family: inherit;
  font-weight: 500;
  cursor: pointer;
  transition: background 0.15s, border-color 0.15s, color 0.15s;
}

.pagination-btn:hover:not(:disabled) {
  background: var(--accent-primary-light);
  border-color: var(--accent-primary);
  color: var(--accent-primary);
}

.pagination-btn:disabled {
  opacity: 0.35;
  cursor: not-allowed;
}

.dark .pagination-btn {
  background: var(--neutral-800);
  color: var(--surface-300);
  border-color: var(--neutral-600);
}

.dark .pagination-btn:hover:not(:disabled) {
  background: var(--accent-primary-light);
  border-color: var(--accent-primary);
  color: var(--accent-primary);
}

.pagination-indicator {
  font-size: 0.875rem;
  color: var(--neutral-500);
  min-width: 5rem;
  text-align: center;
}

.dark .pagination-indicator { color: var(--surface-400); }

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3BhcnRpYWxzL21haW4uY3NzIiwiLi4vcGFydGlhbHMvZm9udHMuY3NzIiwiLi4vcGFydGlhbHMvdG9rZW5zLmNzcyIsIi4uL3BhcnRpYWxzL3Jlc2V0LmNzcyIsIi4uL3BhcnRpYWxzL3V0aWxpdGllcy5jc3MiLCIuLi9wYXJ0aWFscy9nbGFzcy5jc3MiLCIuLi9wYXJ0aWFscy9oZXJvLmNzcyIsIi4uL3BhcnRpYWxzL2NhdGFsb2cuY3NzIiwiLi4vcGFydGlhbHMvY2F0YWxvZy1jYXJkLmNzcyIsIi4uL3BhcnRpYWxzL3Byb2R1Y3QtcXVpY2stdmlldy5jc3MiLCIuLi9wYXJ0aWFscy9kcmF3ZXIuY3NzIiwiLi4vcGFydGlhbHMvdHJ1c3QuY3NzIiwiLi4vcGFydGlhbHMvZm9vdGVyLmNzcyIsIi4uL3BhcnRpYWxzL2RhcmstdG9nZ2xlLmNzcyIsIi4uL3BhcnRpYWxzL3NjaGVtZS1waWNrZXIuY3NzIiwiLi4vcGFydGlhbHMvc2NoZW1lLW92ZXJyaWRlcy5jc3MiLCIuLi9wYXJ0aWFscy80MDQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OytFQUkrRTs7QUFFL0UsOEJBQThCOztBQ045Qjs7OzsrRUFJK0U7O0FBRS9FO0VBQ0UsNkJBQTZCO0VBQzdCLDhGQUE4RjtFQUM5RixnQkFBZ0I7RUFDaEIsa0JBQWtCO0VBQ2xCLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLDZCQUE2QjtFQUM3Qiw4RkFBOEY7RUFDOUYsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSw0QkFBNEI7RUFDNUIsNEZBQTRGO0VBQzVGLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsNEJBQTRCO0VBQzVCLDRGQUE0RjtFQUM1RixnQkFBZ0I7RUFDaEIsa0JBQWtCO0VBQ2xCLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLDRCQUE0QjtFQUM1Qiw0RkFBNEY7RUFDNUYsZ0JBQWdC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QUFDdEI7O0FBRUE7RUFDRSxvQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLFdBQVc7RUFDWCxvQkFBb0I7RUFDcEIsdUJBQXVCO0VBQ3ZCLG9DQUFvQztFQUNwQyw2QkFBNkI7RUFDN0IseUJBQXlCO0VBQ3pCLG1CQUFtQjtFQUNuQixvQkFBb0I7RUFDcEIsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZiw2REFBNkQ7QUFDL0Q7O0FBRUE7RUFDRSx1Q0FBdUM7RUFDdkMsbUNBQW1DO0VBQ25DLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSw4QkFBOEI7RUFDOUIseUJBQXlCO0VBQ3pCLGdDQUFnQztBQUNsQzs7QUFFQTtFQUNFLHVDQUF1QztFQUN2QyxtQ0FBbUM7RUFDbkMsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsbUJBQW1CO0VBQ25CLHlCQUF5QjtFQUN6QixlQUFlO0VBQ2Ysa0JBQWtCO0FBQ3BCOztBQUVBLDhCQUE4Qix5QkFBeUIsRUFBRSIsImZpbGUiOiJzdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgSHViUmFpeiDigJQgTWFpbiBTdHlsZXNoZWV0IEVudHJ5IFBvaW50XG4gICBJbXBvcnRzIGFsbCBDU1MgcGFydGlhbHMgaW4gZG9jdW1lbnRlZCBhcmNoaXRlY3R1cmUgb3JkZXIuXG4gICBQb3N0Q1NTICsgcG9zdGNzcy1pbXBvcnQgYnVuZGxlcyB0aGlzIGludG8gZGlzdC9zdHlsZS5jc3MgYXQgYnVpbGQgdGltZS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIDEuIFNlbGYtaG9zdGVkIGZvbnQgZmFjZXMgKi9cbkBpbXBvcnQgXCIuL2ZvbnRzLmNzc1wiO1xuXG4vKiAyLiBEZXNpZ24gdG9rZW5zIOKAlCBNVVNUIGZvbGxvdyBmb250czsgYWxsIGNvbXBvbmVudCBwYXJ0aWFscyBkZXBlbmQgb24gdGhlc2UgKi9cbkBpbXBvcnQgXCIuL3Rva2Vucy5jc3NcIjtcblxuLyogMy4gUmVzZXQgJiBiYXNlICovXG5AaW1wb3J0IFwiLi9yZXNldC5jc3NcIjtcblxuLyogNC4gVXRpbGl0aWVzIChrZXlmcmFtZXMsIGFuaW1hdGlvbnMsIGF0b21pYyBoZWxwZXJzKSAqL1xuQGltcG9ydCBcIi4vdXRpbGl0aWVzLmNzc1wiO1xuXG4vKiA1LiBHbGFzcyBtb3JwaGlzbSAqL1xuQGltcG9ydCBcIi4vZ2xhc3MuY3NzXCI7XG5cbi8qIDYuIEhlcm8gc2VjdGlvbiAqL1xuQGltcG9ydCBcIi4vaGVyby5jc3NcIjtcblxuLyogNy4gQ2F0YWxvZyAoZmlsdGVyIGJhciwgcGlsbHMsIHNlYXJjaCwgZ3JpZC9saXN0IGxheW91dCkgKi9cbkBpbXBvcnQgXCIuL2NhdGFsb2cuY3NzXCI7XG5cbi8qIDguIFByb2R1Y3QgY2FyZCAqL1xuQGltcG9ydCBcIi4vY2F0YWxvZy1jYXJkLmNzc1wiO1xuXG4vKiA5LiBQcm9kdWN0IHF1aWNrIHZpZXcgKi9cbkBpbXBvcnQgXCIuL3Byb2R1Y3QtcXVpY2stdmlldy5jc3NcIjtcblxuLyogMTAuIE1vYmlsZSBmaWx0ZXIgZHJhd2VyICovXG5AaW1wb3J0IFwiLi9kcmF3ZXIuY3NzXCI7XG5cbi8qIDExLiBUcnVzdCBzZWN0aW9uICovXG5AaW1wb3J0IFwiLi90cnVzdC5jc3NcIjtcblxuLyogMTIuIEZvb3RlciAqL1xuQGltcG9ydCBcIi4vZm9vdGVyLmNzc1wiO1xuXG4vKiAxMy4gRGFyayBtb2RlIHRvZ2dsZSBGQUIgKi9cbkBpbXBvcnQgXCIuL2RhcmstdG9nZ2xlLmNzc1wiO1xuXG4vKiAxNC4gQ29sb3Igc2NoZW1lIHBpY2tlciBwYW5lbCAqL1xuQGltcG9ydCBcIi4vc2NoZW1lLXBpY2tlci5jc3NcIjtcblxuLyogMTUuIEFsdGVybmF0ZSBjb2xvciBzY2hlbWUgY29tcG9uZW50IG92ZXJyaWRlcyAqL1xuQGltcG9ydCBcIi4vc2NoZW1lLW92ZXJyaWRlcy5jc3NcIjtcblxuLyogMTYuIDQwNCBwYWdlICovXG5AaW1wb3J0IFwiLi80MDQuY3NzXCI7XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU2VsZi1ob3N0ZWQgdHlwb2dyYXBoeVxuICAgSUJNIFBsZXggZmlsZXMgYXJlIGluc3RhbGxlZCBmcm9tIEBmb250c291cmNlIGR1cmluZyBucG0gaW5zdGFsbCBhbmQgY29waWVkXG4gICBpbnRvIC9hc3NldHMvZm9udHMgYnkgRWxldmVudHkgYXQgYnVpbGQgdGltZS4gTm8gcnVudGltZSBHb29nbGUgRm9udHMgY2FsbHMuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2VyaWZcIjtcbiAgc3JjOiB1cmwoXCIvYXNzZXRzL2ZvbnRzL2libS1wbGV4LXNlcmlmL2libS1wbGV4LXNlcmlmLWxhdGluLTYwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2VyaWZcIjtcbiAgc3JjOiB1cmwoXCIvYXNzZXRzL2ZvbnRzL2libS1wbGV4LXNlcmlmL2libS1wbGV4LXNlcmlmLWxhdGluLTcwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuICBzcmM6IHVybChcIi9hc3NldHMvZm9udHMvaWJtLXBsZXgtc2Fucy9pYm0tcGxleC1zYW5zLWxhdGluLTQwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuICBzcmM6IHVybChcIi9hc3NldHMvZm9udHMvaWJtLXBsZXgtc2Fucy9pYm0tcGxleC1zYW5zLWxhdGluLTUwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuICBzcmM6IHVybChcIi9hc3NldHMvZm9udHMvaWJtLXBsZXgtc2Fucy9pYm0tcGxleC1zYW5zLWxhdGluLTUwMC1pdGFsaWMud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuICBzcmM6IHVybChcIi9hc3NldHMvZm9udHMvaWJtLXBsZXgtc2Fucy9pYm0tcGxleC1zYW5zLWxhdGluLTYwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuICBzcmM6IHVybChcIi9hc3NldHMvZm9udHMvaWJtLXBsZXgtc2Fucy9pYm0tcGxleC1zYW5zLWxhdGluLTcwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIDEuIERFU0lHTiBUT0tFTlNcbiAgIENTUyBjdXN0b20gcHJvcGVydGllcyBvcmdhbml6ZWQgYnkgcm9sZTpcbiAgIFxuICAg4pSM4pSAIFBhbGV0dGUgUHJpbWl0aXZlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgU3VyZmFjZSwgTmV1dHJhbCDigJQgYmFzZSBjb2xvciBzY2FsZXMgICAgICAgICAgICAgICAgICAgIOKUglxuICAg4pSCICBGZWVkIHNlbWFudGljIHRva2VuczsgYWxzbyBjb25zdW1lZCBkaXJlY3RseSBieSBzb21lICAgIOKUglxuICAg4pSCICBjb21wb25lbnQgb3ZlcnJpZGVzIChlc3BlY2lhbGx5IC5kYXJrIHNlbGVjdG9yIGJsb2NrcykgIOKUglxuICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICDilIzilIAgQWNjZW50IFN5c3RlbSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgLS1hY2NlbnQtcHJpbWFyeSAvIC0tYWNjZW50LXNlY29uZGFyeSArIHZhcmlhbnRzICAgICAgICDilIJcbiAgIOKUgiAgU1dBUCBiZXR3ZWVuIGRlZmF1bHQgYW5kIGFsdCB0aGVtZXMgICAgICAgICAgICAgICAgICAgICDilIJcbiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAg4pSM4pSAIFNlbWFudGljIFRva2VucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgLS1iZy1wcmltYXJ5LCAtLXRleHQtKiwgLS1nbGFzcy0qLCAtLXBpbGwtKiwgZXRjLiAgICAgIOKUglxuICAg4pSCICBPdmVycmlkZSBpbiAuZGFyayAvIFthbHRdIC8gW2FsdF0uZGFyayAvIEBtZWRpYSAgICAgICAg4pSCXG4gICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgIOKUjOKUgCBTY2hlbWUgVG9rZW5zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAtLXNjaGVtZS0qIOKAlCBjb250ZXh0LXNwZWNpZmljIG92ZXJyaWRlcyBwZXIgdGhlbWUgICAgICAg4pSCXG4gICDilIIgIEVhY2ggZGVmaW5lZCBpbiA6cm9vdCBhbmQgb3ZlcnJpZGRlbiBwZXIgdGhlbWUgYmxvY2sgICAg4pSCXG4gICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgIOKUjOKUgCBTdHJ1Y3R1cmFsIFRva2VucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgLS1jaHJvbWUtc2hhZG93LSosIC0tZ2xhc3MtaW5zZXQtKiwgLS11aS1zdXJmYWNlLSogICAgIOKUglxuICAg4pSCICAtLXRvZ2dsZS0qLCAtLWRyYXdlci1jbG9zZS0qLCAtLWJ0bi1pbnNldC0qICAgICAgICAgICAg4pSCXG4gICDilIIgIFNoYWRvd3MsIGhpZ2hsaWdodHMsIHRyYW5zbHVjZW50IG92ZXJsYXlzICAgICAgICAgICAgICAg4pSCXG4gICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgIFxuICAgVGhlbWUgc3RydWN0dXJlOlxuICAgICA6cm9vdCAgICAgICAgICAgICAgICAgICAgICAgICDihpIgRGVmYXVsdCAoT3JhbmdlKSBsaWdodCBtb2RlXG4gICAgIC5kYXJrICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBEZWZhdWx0IChPcmFuZ2UpIGRhcmsgbW9kZVxuICAgICBbZGF0YS1jb2xvci1zY2hlbWU9XCJhbHRcIl0gICAgIOKGkiBBbHQgKE9saXZlKSBsaWdodCBtb2RlXG4gICAgIFtkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXS5kYXJr4oaSIEFsdCAoT2xpdmUpIGRhcmsgbW9kZVxuICAgICBAbWVkaWEocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyaykg4oaSIE5vbi1KUyBkYXJrIGZhbGxiYWNrXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG46cm9vdCB7XG4gIGNvbG9yLXNjaGVtZTogbGlnaHQ7XG5cbiAgLyogU3VyZmFjZSBwYWxldHRlIOKAlCBiYXNlIGNhbnZhcyB0b25lcyBmb3IgYmFja2dyb3VuZHMgJiBsaWdodCB0ZXh0IG9uIGRhcmsgKi9cbiAgLS1zdXJmYWNlLTUwOiAjRkFGN0YyO1xuICAtLXN1cmZhY2UtMTAwOiAjRjVGMEU4O1xuICAtLXN1cmZhY2UtMjAwOiAjRUJFM0Q1O1xuICAtLXN1cmZhY2UtMzAwOiAjRDRDOEI0O1xuICAtLXN1cmZhY2UtNDAwOiAjQjhBNjhFO1xuXG4gIC8qIE5ldXRyYWwgcGFsZXR0ZSDigJQgdGV4dCwgYm9yZGVycywgYW5kIHN0cnVjdHVyYWwgdG9uZXMgKi9cbiAgLS1uZXV0cmFsLTIwMDogI0QxQkZBODtcbiAgLS1uZXV0cmFsLTMwMDogI0IwOUE3RTtcbiAgLS1uZXV0cmFsLTQwMDogIzhBNzI2MDtcbiAgLS1uZXV0cmFsLTUwMDogIzZFNUE0ODtcbiAgLS1uZXV0cmFsLTYwMDogIzVDNEEzQTtcbiAgLS1uZXV0cmFsLTcwMDogIzRBM0EyRTtcbiAgLS1uZXV0cmFsLTgwMDogIzNEMkUyMjtcbiAgLS1uZXV0cmFsLTkwMDogIzJDMTgxMDtcblxuICAvKiBHbGFzcyBjYXJkL3BhbmVsIHNoYWRvdyB0b2tlbnMgKi9cbiAgLS1jYXJkLXNoYWRvdzogICAgICAgcmdiYSg0NCwgMjQsIDE2LCAwLjA0KTtcbiAgLS1jYXJkLXNoYWRvdy1ob3ZlcjogcmdiYSgyNTUsIDkyLCAwLCAwLjA4KTtcblxuICAvKiBNYXJrZXRwbGFjZSBjb2xvcnMgKi9cbiAgLS1tbC15ZWxsb3c6ICNGRkU2MDA7XG4gIC0tbWwteWVsbG93LWhvdmVyOiAjRkZENzAwO1xuICAtLW1sLW5hdnk6ICMyRDMyNzc7XG4gIC0tbWwtc2hhZG93OiByZ2JhKDI1NSwgMjMwLCAwLCAwLjI1KTtcbiAgLS1tbC1zaGFkb3ctaG92ZXI6IHJnYmEoMjU1LCAyMzAsIDAsIDAuMzUpO1xuICAtLXNob3BlZS1vcmFuZ2U6ICNFRTREMkQ7XG4gIC0tc2hvcGVlLW9yYW5nZS1ob3ZlcjogI0Q3MzIxMTtcbiAgLS1zaG9wZWUtc2hhZG93OiByZ2JhKDIzOCwgNzcsIDQ1LCAwLjI1KTtcbiAgLS1zaG9wZWUtc2hhZG93LWhvdmVyOiByZ2JhKDIzOCwgNzcsIDQ1LCAwLjM1KTtcblxuICAvKiBGb250cyAqL1xuICAtLWZvbnQtaGVhZGluZzogXCJJQk0gUGxleCBTZXJpZlwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiLCBDYW1icmlhLCBcIk5vdG8gU2VyaWZcIiwgc2VyaWY7XG4gIC0tZm9udC1ib2R5OiBcIklCTSBQbGV4IFNhbnNcIiwgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBcIlNlZ29lIFVJXCIsIFJvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgLS1mb250LXVpOiBcIklCTSBQbGV4IFNhbnNcIiwgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBcIlNlZ29lIFVJXCIsIFJvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuICAvKiBUcmFuc2l0aW9uIHByZXNldHMgKi9cbiAgLS1lYXNlLW91dDogY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpO1xuICAtLWR1cmF0aW9uLW5vcm1hbDogMC4ycztcbiAgLS1kdXJhdGlvbi1zbG93OiAwLjNzO1xuXG4gIC8qIExheWVyIHNjYWxlIOKAlCBhY3RpdmUgcGFuZWxzIG11c3Qgc2l0IGFib3ZlIGZpeGVkIGNvbnRyb2xzIGFuZCBjYXRhbG9nIGNocm9tZS4gKi9cbiAgLS1sYXllci1mbG9hdGluZy1jb250cm9sOiA1MDtcbiAgLS1sYXllci1hY3RpdmUtcGFuZWwtYmFja2Ryb3A6IDEwMDA7XG4gIC0tbGF5ZXItYWN0aXZlLXBhbmVsOiAxMDAxO1xuXG4gIC8qIEFjY2VudCBzeXN0ZW0g4oCUIHByaW1hcnkgYWNjZW50IHdpdGggc2Vjb25kYXJ5IGFzIGZhbGxiYWNrICovXG4gIC0tYWNjZW50LXByaW1hcnk6ICNGRjVDMDA7XG4gIC0tYWNjZW50LXByaW1hcnktaG92ZXI6ICNFOTRGMDA7XG4gIC0tYWNjZW50LXByaW1hcnktbGlnaHQ6IHJnYmEoMjU1LCA5MiwgMCwgMC4xMik7XG4gIC0tYWNjZW50LXByaW1hcnktYm9yZGVyOiByZ2JhKDI1NSwgOTIsIDAsIDAuMjUpO1xuICAtLWFjY2VudC1wcmltYXJ5LXNoYWRvdzogcmdiYSgyNTUsIDkyLCAwLCAwLjI1KTtcblxuICAtLWFjY2VudC1zZWNvbmRhcnk6ICM2MzZCMkY7XG4gIC0tYWNjZW50LXNlY29uZGFyeS1saWdodDogcmdiYSg5OSwgMTA3LCA0NywgMC4xMik7XG4gIC0tYWNjZW50LXNlY29uZGFyeS1ib3JkZXI6IHJnYmEoOTksIDEwNywgNDcsIDAuMjUpO1xuXG4gIC8qIFNlbWFudGljIGNvbG9ycyDigJQgbGlnaHQgbW9kZSBkZWZhdWx0cyAqL1xuICAtLWJnLXByaW1hcnk6ICNGNUYwRTg7XG4gIC0tdGV4dC1wcmltYXJ5OiAjMkMxODEwO1xuICAtLXRleHQtc2Vjb25kYXJ5OiAjNUM0QTNBO1xuICAtLXRleHQtbXV0ZWQ6ICM3MjVFNEM7XG4gIC0tdGV4dC1wbGFjZWhvbGRlcjogcmdiYSg5MiwgNzQsIDU4LCAwLjQpO1xuICAtLWdsYXNzLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xuICAtLWdsYXNzLWJvcmRlcjogcmdiYSgyNTUsIDkyLCAwLCAwLjE0KTtcbiAgLS1nbGFzcy1ob3Zlci1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTtcbiAgLS1nbGFzcy1ob3Zlci1ib3JkZXI6IHJnYmEoMjU1LCA5MiwgMCwgMC4yKTtcbiAgLS1maWx0ZXItYmFyLWJnOiByZ2JhKDI1MCwgMjQ3LCAyNDIsIDAuODgpO1xuICAtLWZpbHRlci1iYXItYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIC0tc2VhcmNoLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG4gIC0tc2VhcmNoLWJvcmRlcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAtLXNlYXJjaC1mb2N1cy1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTtcbiAgLS1zZWFyY2gtZm9jdXMtYm9yZGVyOiByZ2JhKDI1NSwgOTIsIDAsIDAuNCk7XG4gIC0tcGlsbC1pbmFjdGl2ZS1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAtLXBpbGwtaW5hY3RpdmUtYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIC0tcGlsbC1pbmFjdGl2ZS10ZXh0OiAjNUM0QTNBO1xuICAtLWRyYXdlci1wYW5lbC1iZzogcmdiYSgyNTAsIDI0NywgMjQyLCAwLjkyKTtcbiAgLS1kcmF3ZXItYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIC0tZHJhd2VyLW92ZXJsYXktYmc6IHJnYmEoNDQsIDI0LCAxNiwgMC40KTtcbiAgLS1kZXNjLWZhZGU6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7XG4gIC0tZm9vdGVyLWJnOiAjMkMxODEwO1xuICAtLWZvb3Rlci10ZXh0OiAjRTVERkQ0O1xuICAtLWZvb3Rlci1tdXRlZDogcmdiYSgyMDAsIDE5MCwgMTc1LCAwLjc1KTtcbiAgLS1zY2hlbWUtZm9vdGVyLWFjY2VudDogI0ZGOEM1QTtcbiAgLS1zY2hlbWUtZm9vdGVyLWljb246IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjY1KTtcbiAgLS1zY2hlbWUtZm9vdGVyLWJvcmRlcjogcmdiYSgyNTUsIDE0MCwgOTAsIDAuMTIpO1xuICAtLWZvb3Rlci1kaXNjbGFpbWVyOiByZ2JhKDIwMCwgMTkwLCAxNzUsIDAuOCk7XG5cbiAgLyogU2NoZW1lLXNwZWNpZmljIGFjY2VudCB0b2tlbnMg4oCUIGRlZmF1bHQgKG9yYW5nZSkgdGhlbWUgKi9cbiAgLS1zY2hlbWUtaGVyby10YWdsaW5lOiAjRkY1QzAwO1xuICAvKiBUYWcsIHBpbGwsIGJhZGdlIHRva2VucyB1c2UgLS1hY2NlbnQtcHJpbWFyeSBmYW1pbHkgZGlyZWN0bHlcbiAgICAgc28gdGhleSBzd2FwIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUgYWN0aXZlIGNvbG9yIHNjaGVtZS4gKi9cbiAgLS1zY2hlbWUtYmFkZ2UtYmc6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWFjY2VudC1wcmltYXJ5KSAwJSwgdmFyKC0tYWNjZW50LXByaW1hcnktaG92ZXIpIDEwMCUpO1xuICAtLXNjaGVtZS1zY3JvbGwtdGh1bWI6IHJnYmEoMjU1LCA5MiwgMCwgMC40KTtcbiAgLS1zY2hlbWUtZm9jdXMtcmluZzogI0ZGNUMwMDtcbiAgLS1zY2hlbWUtaGVyby1sb2dvLWJnOiByZ2JhKDI1NSwgOTIsIDAsIDAuMDYpO1xuICAtLXNjaGVtZS1oZXJvLWxvZ28tYmctZGFyazogcmdiYSgyNTUsIDE0MCwgOTAsIDAuMTYpO1xuICAtLXNjaGVtZS1oZXJvLXRydXN0OiAjNkU1QTQ4O1xuICAtLXNjaGVtZS1oZXJvLXNjcm9sbC1jb2xvcjogcmdiYSgyNTUsIDkyLCAwLCAwLjYpO1xuICAtLXNjaGVtZS1pbWFnZS13cmFwLWJnOiByZ2JhKDIzNSwgMjI3LCAyMTMsIDAuMyk7XG4gIC0tc2NoZW1lLWltYWdlLXdyYXAtYmctZGFyazogcmdiYSg0NCwgMjQsIDE2LCAwLjQpO1xuICAtLXNjaGVtZS1vdmVybGF5LWdyYWRpZW50OiByZ2JhKDQ0LCAyNCwgMTYsIDAuMik7XG4gIC0tc2NoZW1lLW92ZXJsYXktZ3JhZGllbnQtZGFyazogcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAtLXNjaGVtZS1zZWFyY2gtZm9jdXMtcmluZzogcmdiYSgyNTUsIDkyLCAwLCAwLjA4KTtcbiAgLS1zY2hlbWUtc2VhcmNoLWZvY3VzLXJpbmctc3Ryb25nOiByZ2JhKDI1NSwgOTIsIDAsIDAuMSk7XG4gIC0tc2NoZW1lLXRydXN0LWRpdmlkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjMpO1xuICAtLXNjaGVtZS10cnVzdC1kaXZpZGVyLWRhcms6IHJnYmEoMjU1LCA5MiwgMCwgMC4xMik7XG4gIC8qIE1hcmtldHBsYWNlIGJhZGdlIOKAlCBzdWJ0bGUgYWNjZW50IHRpbnQgKGZvb3RlciBpcyBhbHdheXMgZGFyaykgKi9cbiAgLS1zY2hlbWUtbWFya2V0cGxhY2UtYmFkZ2UtYmc6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjE1KTtcbiAgLS1zY2hlbWUtbWFya2V0cGxhY2UtYmFkZ2UtYm9yZGVyOiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4zKTtcblxuICAvKiBUYWcgaGllcmFyY2h5IOKAlCBib3RoIHVzZSBhY2NlbnQtcHJpbWFyeS1saWdodCBiZyAoaGVybyBpY29uIHN0eWxlKS5cbiAgICAgQnJhbmQgdGFnczogZnVsbCBhY2NlbnQgdGV4dCArIGZ1bGwgYWNjZW50IGJvcmRlciArIGJvbGQgPSBwb3BzLlxuICAgICBDYXRlZ29yeSB0YWdzOiBmYWRlZCBhY2NlbnQgdGV4dCArIGZhZGVkIGFjY2VudCBib3JkZXIgKyBub3JtYWwgPSByZWNlZGVzLlxuICAgICBObyBzZXBhcmF0ZSAtZGFyayB0b2tlbnMgbmVlZGVkOyBhY2NlbnQgdG9rZW5zIGF1dG8tc3dhcC4gKi9cbiAgLyog4pSA4pSAIFRleHQgb24gYWNjZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICBUZXh0IG9uIHNvbGlkL2ZpbGxlZCBhY2NlbnQgYmFja2dyb3VuZHMgKHNraXAgbGluaywgQ1RBIGJ1dHRvbnMpLiAqL1xuICAtLXRleHQtb24tYWNjZW50OiAjMkMxODEwO1xuXG4gIC8qIOKUgOKUgCBTZWxlY3Rpb24gaGlnaGxpZ2h0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuICAtLXNlbGVjdGlvbi1iZy1kYXJrOiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4zNSk7XG5cbiAgLyog4pSA4pSAIEdsYXNzIG1vcnBoaXNtIGluc2V0IGhpZ2hsaWdodHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgIFN1YnRsZSB0b3AtZWRnZSBoaWdobGlnaHQgdGhhdCBzaW11bGF0ZXMgbGlnaHQgcmVmbGVjdGlvblxuICAgICBvbiBnbGFzcyBzdXJmYWNlcyBpbiBsaWdodCBhbmQgZGFyayBtb2RlcyAqL1xuICAtLWdsYXNzLWluc2V0OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7XG4gIC0tZ2xhc3MtaW5zZXQtaG92ZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTtcbiAgLS1nbGFzcy1pbnNldC1kYXJrOiByZ2JhKDIyOSwgMjIzLCAyMTIsIDAuMDUpO1xuICAtLWdsYXNzLWluc2V0LWRhcmstaG92ZXI6IHJnYmEoMjI5LCAyMjMsIDIxMiwgMC4wOCk7XG5cbiAgLyog4pSA4pSAIFN0cnVjdHVyYWwgc2hhZG93cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgV2FybS10aW50ZWQgZHJvcCBzaGFkb3dzIGZvciBVSSBjaHJvbWUgKHBhbmVscywgZHJhd2VycywgRkFCcykuXG4gICAgIExpZ2h0IG1vZGUgdXNlcyB3YXJtIGJyb3duIGJhc2U7IGRhcmsgbW9kZSB1c2VzIHB1cmUgYmxhY2suICovXG4gIC0tY2hyb21lLXNoYWRvdy1zbTogcmdiYSg0NCwgMjQsIDE2LCAwLjA1KTtcbiAgLS1jaHJvbWUtc2hhZG93LW1kOiByZ2JhKDQ0LCAyNCwgMTYsIDAuMDgpO1xuICAtLWNocm9tZS1zaGFkb3ctbGc6IHJnYmEoNDQsIDI0LCAxNiwgMC4xMik7XG4gIC0tY2hyb21lLXNoYWRvdy1kYXJrOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIC0tbG9nby1kcm9wLXNoYWRvdzogICByZ2JhKDAsIDAsIDAsIDAuMzUpOyAgLyogaGVybyBsb2dvIGdsb3cgZHJvcC1zaGFkb3cgKi9cblxuICAvKiDilIDilIAgVHJhbnNsdWNlbnQgVUkgc3VyZmFjZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgIFNlbWktdHJhbnNwYXJlbnQgd2hpdGUgb3ZlcmxheXMgZm9yIGNpcmN1bGFyIGdsYXNzIGVsZW1lbnRzXG4gICAgIChoZXJvIHNjcm9sbCBidXR0b24sIHRydXN0IGRpdmlkZXIsIHRvZ2dsZSBGQUIpLlxuICAgICBEYXJrIG1vZGUgdXNlcyBtdWNoIGxvd2VyIG9wYWNpdHkgZm9yIHN1YnRsZSB2aXNpYmlsaXR5LiAqL1xuICAtLXVpLXN1cmZhY2UtYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTtcbiAgLS11aS1zdXJmYWNlLWJvcmRlcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpO1xuICAtLXVpLXN1cmZhY2UtaG92ZXItYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgLS11aS1zdXJmYWNlLWJnLWRhcms6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG4gIC0tdWktc3VyZmFjZS1ib3JkZXItZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAtLXVpLXN1cmZhY2UtaG92ZXItYmctZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTtcblxuICAvKiDilIDilIAgVG9nZ2xlIEZBQiBzdXJmYWNlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgVGhlIGZsb2F0aW5nIGFjdGlvbiBidXR0b24gZm9yIGRhcmsvbGlnaHQgbW9kZSBoYXMgaXRzIG93blxuICAgICBzdXJmYWNlIHRva2VucyBiZWNhdXNlIGl0IHVzZXMgYSBkaXN0aW5jdCBvcGFjaXR5IHJhbmdlLiAqL1xuICAtLXRvZ2dsZS1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAtLXRvZ2dsZS1ib3JkZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbiAgLS10b2dnbGUtYmctZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAtLXRvZ2dsZS1ib3JkZXItZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTtcblxuICAvKiDilIDilIAgRHJhd2VyIGNsb3NlIGJ1dHRvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cbiAgLS1kcmF3ZXItY2xvc2UtYmc6IHJnYmEoMjUwLCAyNDcsIDI0MiwgMC42KTtcbiAgLS1kcmF3ZXItY2xvc2UtYmctZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAtLWRyYXdlci1jbG9zZS1iZy1kYXJrLWhvdmVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpO1xuXG4gIC8qIOKUgOKUgCBCdXR0b24gaW5zZXQgaGlnaGxpZ2h0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgVG9wLWVkZ2UgaGlnaGxpZ2h0IGZvciBDVEEtc3R5bGUgYnV0dG9ucyAqL1xuICAtLWJ0bi1pbnNldDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTtcbiAgLS1idG4taW5zZXQtaG92ZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgLS1tbC1pbnNldDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAtLW1sLWluc2V0LWhvdmVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG5cbiAgLyog4pSA4pSAIFNjaGVtZSBzd2F0Y2ggYm9yZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuICAtLXNjaGVtZS1zd2F0Y2gtYm9yZGVyOiByZ2JhKDEyOCwgMTI4LCAxMjgsIDAuMTUpO1xuXG4gIC8qIOKUgOKUgCBGb250LXdlaWdodCBzY2FsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgVXNlZCBieSBoZXJvLCBmb290ZXIsIGFuZCBvdGhlciBjb21wb25lbnQgcGFydGlhbHMuICovXG4gIC0tZm9udC13ZWlnaHQtbm9ybWFsOiA0MDA7XG4gIC0tZm9udC13ZWlnaHQtbWVkaXVtOiA1MDA7XG4gIC0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6IDYwMDtcbiAgLS1mb250LXdlaWdodC1ib2xkOiA3MDA7XG4gIC0tZm9udC13ZWlnaHQtZGlzcGxheTogNzAwO1xufVxuXG4vKiDilIDilIAgRGFyayBtb2RlIHRva2VucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgIFRoZXNlIHNlbWFudGljIHRva2VuIHZhbHVlcyBhcHBlYXIgVFdJQ0UgaW50ZW50aW9uYWxseTpcbiAgIDEuIC5kYXJrIHsgfSAgICAgICAgICAg4oaSIEpTLWRyaXZlbiB0b2dnbGUgKGxvY2FsU3RvcmFnZSAvIHVzZXIgY2xpY2spXG4gICAyLiBAbWVkaWEgcHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmsg4oaSIE5vbi1KUyBmYWxsYmFjayB3aGVuIG5vXG4gICAgICAubGlnaHQgb3IgLmRhcmsgY2xhc3MgaXMgcHJlc2VudCBvbiA8aHRtbD5cbiAgIERPIE5PVCBkZWR1cGxpY2F0ZSDigJQgdGhleSBzZXJ2ZSBkaWZmZXJlbnQgY29kZSBwYXRocy5cbiAgIFdoZW4gdXBkYXRpbmcgZGFyay1tb2RlIHZhbHVlcywgdXBkYXRlIEJPVEggYmxvY2tzLlxuICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG5cbi8qIEpTLWRyaXZlbiBkYXJrIG1vZGUgKi9cbi5kYXJrIHtcbiAgY29sb3Itc2NoZW1lOiBkYXJrO1xuICAtLWJnLXByaW1hcnk6ICMxQTE4MTY7XG4gIC0tdGV4dC1wcmltYXJ5OiAjRTVERkQ0O1xuICAtLXRleHQtc2Vjb25kYXJ5OiAjRDRDNUI4O1xuICAtLXRleHQtbXV0ZWQ6ICNCMDlBN0U7XG4gIC0tdGV4dC1wbGFjZWhvbGRlcjogcmdiYSgyMDAsIDE5MCwgMTc1LCAwLjM1KTtcbiAgLS1nbGFzcy1iZzogcmdiYSgzNSwgMzIsIDI4LCAwLjg4KTtcbiAgLS1nbGFzcy1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjIpO1xuICAtLWdsYXNzLWhvdmVyLWJnOiByZ2JhKDQ1LCA0MCwgMzQsIDAuOTIpO1xuICAtLWdsYXNzLWhvdmVyLWJvcmRlcjogcmdiYSgyNTUsIDE0MCwgOTAsIDAuMik7XG4gIC0tZmlsdGVyLWJhci1iZzogcmdiYSgyNiwgMjQsIDIyLCAwLjkyKTtcbiAgLS1maWx0ZXItYmFyLWJvcmRlcjogcmdiYSg2MCwgNTUsIDQ1LCAwLjUpO1xuICAtLXNlYXJjaC1iZzogcmdiYSgzNSwgMzIsIDI4LCAwLjg1KTtcbiAgLS1zZWFyY2gtYm9yZGVyOiByZ2JhKDYwLCA1NSwgNDUsIDAuNSk7XG4gIC0tc2VhcmNoLWZvY3VzLWJnOiByZ2JhKDQwLCAzNiwgMzAsIDAuOTIpO1xuICAtLXNlYXJjaC1mb2N1cy1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjQpO1xuICAtLXBpbGwtaW5hY3RpdmUtYmc6IHJnYmEoMzUsIDMyLCAyOCwgMC43NSk7XG4gIC0tcGlsbC1pbmFjdGl2ZS1ib3JkZXI6IHJnYmEoNjAsIDU1LCA0NSwgMC41KTtcbiAgLS1waWxsLWluYWN0aXZlLXRleHQ6ICNFNURGRDQ7XG4gIC0tZHJhd2VyLXBhbmVsLWJnOiByZ2JhKDMwLCAyOCwgMjQsIDAuOTUpO1xuICAtLWRyYXdlci1ib3JkZXI6IHJnYmEoNjAsIDU1LCA0NSwgMC41KTtcbiAgLS1kcmF3ZXItb3ZlcmxheS1iZzogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAtLWRlc2MtZmFkZTogcmdiYSgzNSwgMzIsIDI4LCAwLjg1KTtcbiAgLS1mb290ZXItYmc6ICMxMzEyMTA7XG4gIC0tZm9vdGVyLWRpc2NsYWltZXI6IHJnYmEoMjAwLCAxOTAsIDE3NSwgMC43NSk7XG5cbiAgLyogRGFyayBtb2RlIHNjaGVtZSB0b2tlbiBvdmVycmlkZXMgKi9cbiAgLS1zY2hlbWUtaGVyby10YWdsaW5lOiB2YXIoLS1zY2hlbWUtZm9vdGVyLWFjY2VudCk7XG5cbiAgLyogRGFyayBtb2RlIGFjY2VudCDigJQgbGlnaHRlciBzaGFkZSBmb3IgY29udHJhc3Qgb24gZGFyayBiZyAqL1xuICAtLWFjY2VudC1wcmltYXJ5OiAjRkY4QzVBO1xuICAtLWFjY2VudC1wcmltYXJ5LWhvdmVyOiAjRkZBMDcwO1xuICAtLWFjY2VudC1wcmltYXJ5LWxpZ2h0OiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4xNSk7XG4gIC0tYWNjZW50LXByaW1hcnktYm9yZGVyOiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4zKTtcbiAgLS1hY2NlbnQtcHJpbWFyeS1zaGFkb3c6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjI1KTtcbiAgLS1jYXJkLXNoYWRvdy1ob3ZlcjogcmdiYSgyNTUsIDE0MCwgOTAsIDAuMDgpO1xuXG4gIC8qIEZvY3VzIHJpbmcgdXNlcyBsaWdodGVuZWQgYWNjZW50IGZvciB2aXNpYmlsaXR5IG9uIGRhcmsgYmcgKi9cbiAgLS1zY2hlbWUtZm9jdXMtcmluZzogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuXG4gIC8qIFRleHQgb24gc29saWQgYWNjZW50IGJhY2tncm91bmRzIOKAlCBkYXJrIHRpbnQgZm9yIGNvbnRyYXN0IG9uIGJyaWdodCBhY2NlbnQgKi9cbiAgLS10ZXh0LW9uLWFjY2VudDogIzU1MUYwMDtcbn1cblxuLyogU2NoZW1lIG92ZXJyaWRlOiBhbHRlcm5hdGUg4oCUIG9saXZlLWZpcnN0IHZhcmlhdGlvbiAqL1xuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdIHtcbiAgLyogQWx0ZXJuYXRlIG9saXZlIHNjaGVtZSDigJQga2VlcHMgdGhlIG5hdHVyYWwtZm9vZCB0b25lIGF2YWlsYWJsZS4gKi9cbiAgLS1hY2NlbnQtcHJpbWFyeTogIzYzNkIyRjtcbiAgLS1hY2NlbnQtcHJpbWFyeS1ob3ZlcjogIzc0ODAzODtcbiAgLS1hY2NlbnQtcHJpbWFyeS1saWdodDogcmdiYSg5OSwgMTA3LCA0NywgMC4xNSk7XG4gIC0tYWNjZW50LXByaW1hcnktYm9yZGVyOiByZ2JhKDk5LCAxMDcsIDQ3LCAwLjI1KTtcbiAgLS1hY2NlbnQtcHJpbWFyeS1zaGFkb3c6IHJnYmEoOTksIDEwNywgNDcsIDAuMjUpO1xuICAtLWFjY2VudC1zZWNvbmRhcnk6ICNGRjVDMDA7XG4gIC0tYWNjZW50LXNlY29uZGFyeS1saWdodDogcmdiYSgyNTUsIDkyLCAwLCAwLjEyKTtcbiAgLS1hY2NlbnQtc2Vjb25kYXJ5LWJvcmRlcjogcmdiYSgyNTUsIDkyLCAwLCAwLjI1KTtcbiAgLS1jYXJkLXNoYWRvdy1ob3ZlcjogcmdiYSg5OSwgMTA3LCA0NywgMC4wOCk7XG4gIC0tZ2xhc3MtYm9yZGVyOiByZ2JhKDk5LCAxMDcsIDQ3LCAwLjE1KTtcbiAgLS1nbGFzcy1ob3Zlci1ib3JkZXI6IHJnYmEoOTksIDEwNywgNDcsIDAuMik7XG4gIC0tc2VhcmNoLWZvY3VzLWJvcmRlcjogcmdiYSg5OSwgMTA3LCA0NywgMC40KTtcblxuICAtLXNjaGVtZS1oZXJvLXRhZ2xpbmU6ICM2MzZCMkY7XG4gIC0tc2NoZW1lLXNjcm9sbC10aHVtYjogcmdiYSg5OSwgMTA3LCA0NywgMC40KTtcbiAgLS1zY2hlbWUtZm9jdXMtcmluZzogIzYzNkIyRjtcbiAgLS1zY2hlbWUtaGVyby1sb2dvLWJnOiByZ2JhKDk5LCAxMDcsIDQ3LCAwLjA4KTtcbiAgLS1zY2hlbWUtaGVyby1sb2dvLWJnLWRhcms6IHJnYmEoOTksIDEwNywgNDcsIDAuMik7XG4gIC0tc2NoZW1lLWhlcm8tdHJ1c3Q6ICM2RTVBNDg7XG4gIC0tc2NoZW1lLWhlcm8tc2Nyb2xsLWNvbG9yOiByZ2JhKDk5LCAxMDcsIDQ3LCAwLjYpO1xuICAtLXNjaGVtZS1mb290ZXItYWNjZW50OiAjQThCODU0O1xuICAtLXNjaGVtZS1mb290ZXItaWNvbjogcmdiYSgxNjgsIDE4NCwgODQsIDAuNik7XG4gIC0tc2NoZW1lLWZvb3Rlci1ib3JkZXI6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjEpO1xuICAtLXNjaGVtZS1zZWFyY2gtZm9jdXMtcmluZzogcmdiYSg5OSwgMTA3LCA0NywgMC4wOCk7XG4gIC0tc2NoZW1lLXNlYXJjaC1mb2N1cy1yaW5nLXN0cm9uZzogcmdiYSg5OSwgMTA3LCA0NywgMC4xKTtcbiAgLS1zY2hlbWUtdHJ1c3QtZGl2aWRlcjogcmdiYSgxNjgsIDE4NCwgODQsIDAuMyk7XG4gIC0tc2NoZW1lLXRydXN0LWRpdmlkZXItZGFyazogcmdiYSg5OSwgMTA3LCA0NywgMC4xMik7XG4gIC0tc2NoZW1lLW1hcmtldHBsYWNlLWJhZGdlLWJnOiByZ2JhKDE2OCwgMTg0LCA4NCwgMC4xNSk7XG4gIC0tc2NoZW1lLW1hcmtldHBsYWNlLWJhZGdlLWJvcmRlcjogcmdiYSgxNjgsIDE4NCwgODQsIDAuMyk7XG4gIC0tZm9vdGVyLWRpc2NsYWltZXI6IHJnYmEoMjAwLCAxOTAsIDE3NSwgMC44KTtcbiAgLS1mb290ZXItYmc6ICMxQTIxMTA7XG4gIC0tc2VsZWN0aW9uLWJnLWRhcms6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjM1KTtcbiAgLS10ZXh0LW9uLWFjY2VudDogI0ZGRkZGRjtcbn1cblxuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdLmRhcmsge1xuICBjb2xvci1zY2hlbWU6IGRhcms7XG4gIC0tYWNjZW50LXByaW1hcnk6ICNBOEI4NTQ7XG4gIC0tYWNjZW50LXByaW1hcnktaG92ZXI6ICNCOEM4NjQ7XG4gIC0tYWNjZW50LXByaW1hcnktbGlnaHQ6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjE1KTtcbiAgLS1hY2NlbnQtcHJpbWFyeS1ib3JkZXI6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjMpO1xuICAtLWFjY2VudC1wcmltYXJ5LXNoYWRvdzogcmdiYSgxNjgsIDE4NCwgODQsIDAuMjUpO1xuICAtLWNhcmQtc2hhZG93LWhvdmVyOiByZ2JhKDE2OCwgMTg0LCA4NCwgMC4wOCk7XG4gIC0tZ2xhc3MtYm9yZGVyOiByZ2JhKDE2OCwgMTg0LCA4NCwgMC4yKTtcbiAgLS1nbGFzcy1ob3Zlci1ib3JkZXI6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjIpO1xuICAtLXNlYXJjaC1mb2N1cy1ib3JkZXI6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjQpO1xuXG4gIC0tYWNjZW50LXNlY29uZGFyeTogI0ZGOEM1QTtcbiAgLS1hY2NlbnQtc2Vjb25kYXJ5LWxpZ2h0OiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4xNSk7XG4gIC0tYWNjZW50LXNlY29uZGFyeS1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjMpO1xuICAtLXRleHQtc2Vjb25kYXJ5OiAjQzVENEI4O1xuXG4gIC0tc2NoZW1lLWhlcm8tdGFnbGluZTogdmFyKC0tc2NoZW1lLWZvb3Rlci1hY2NlbnQpO1xuICAtLXNjaGVtZS1mb2N1cy1yaW5nOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIC0tZm9vdGVyLWJnOiAjMTExQTA4O1xuICAtLWZvb3Rlci1kaXNjbGFpbWVyOiByZ2JhKDIwMCwgMTkwLCAxNzUsIDAuNzUpO1xuICAtLXRleHQtb24tYWNjZW50OiAjMkMzMDE1O1xufVxuXG4vKiBMaWdodCBtb2RlIGV4cGxpY2l0IG9wdC1pbiDigJQgZm9yY2VzIG5hdGl2ZSBjb250cm9scyB0byBsaWdodCBzY2hlbWUgKi9cbi5saWdodCB7XG4gIGNvbG9yLXNjaGVtZTogbGlnaHQ7XG59XG5cbi8qIE5vbi1KUyBkYXJrIG1vZGUgZmFsbGJhY2sgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKS5cbiAqIE5PVEU6IFRoaXMgb25seSBhcHBsaWVzIHRoZSBkZWZhdWx0IEh1YlJhaXogZGFyayB0b2tlbnMuXG4gKiBVc2VycyB3aG8gc2VsZWN0ZWQgYW4gYWx0ZXJuYXRpdmUgY29sb3Igc2NoZW1lIHZpYSBKYXZhU2NyaXB0XG4gKiAoc3RvcmVkIGluIGxvY2FsU3RvcmFnZSBhcyBcImh1YnJhaXotY29sb3Itc2NoZW1lXCIpIHdpbGwgc2VlIHRoZVxuICogZGVmYXVsdCBzY2hlbWUgaWYgSmF2YVNjcmlwdCBpcyB1bmF2YWlsYWJsZSwgc2luY2VcbiAqIGRhdGEtY29sb3Itc2NoZW1lIGlzIHNldCBieSBKUyBhdCBydW50aW1lLlxuICovXG5AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gIC8qIE1pcnJvciBvZiAuZGFyayDigJQga2VlcCBpbiBzeW5jLiBXaGVuIHVwZGF0aW5nIGRhcmstbW9kZSB2YWx1ZXMsXG4gICAgIHVwZGF0ZSBCT1RIIHRoZSAuZGFyayBibG9jayAoSlMtdG9nZ2xlZCkgYW5kIHRoaXMgQG1lZGlhIGJsb2NrIChuby1KUyBmYWxsYmFjaykuICovXG4gIDpyb290Om5vdCgubGlnaHQpOm5vdCguZGFyaykge1xuICAgIGNvbG9yLXNjaGVtZTogZGFyaztcbiAgICAtLWJnLXByaW1hcnk6ICMxQTE4MTY7XG4gICAgLS10ZXh0LXByaW1hcnk6ICNFNURGRDQ7XG4gICAgLS10ZXh0LXNlY29uZGFyeTogI0Q0QzVCODtcbiAgICAtLXRleHQtbXV0ZWQ6ICNCMDlBN0U7XG4gICAgLS10ZXh0LXBsYWNlaG9sZGVyOiByZ2JhKDIwMCwgMTkwLCAxNzUsIDAuMzUpO1xuICAgIC0tZ2xhc3MtYmc6IHJnYmEoMzUsIDMyLCAyOCwgMC44OCk7XG4gICAgLS1nbGFzcy1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjIpO1xuICAgIC0tZ2xhc3MtaG92ZXItYmc6IHJnYmEoNDUsIDQwLCAzNCwgMC45Mik7XG4gICAgLS1nbGFzcy1ob3Zlci1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjIpO1xuICAgIC0tZmlsdGVyLWJhci1iZzogcmdiYSgyNiwgMjQsIDIyLCAwLjkyKTtcbiAgICAtLWZpbHRlci1iYXItYm9yZGVyOiByZ2JhKDYwLCA1NSwgNDUsIDAuNSk7XG4gICAgLS1zZWFyY2gtYmc6IHJnYmEoMzUsIDMyLCAyOCwgMC44NSk7XG4gICAgLS1zZWFyY2gtYm9yZGVyOiByZ2JhKDYwLCA1NSwgNDUsIDAuNSk7XG4gICAgLS1zZWFyY2gtZm9jdXMtYmc6IHJnYmEoNDAsIDM2LCAzMCwgMC45Mik7XG4gICAgLS1zZWFyY2gtZm9jdXMtYm9yZGVyOiByZ2JhKDI1NSwgMTQwLCA5MCwgMC40KTtcbiAgICAtLXBpbGwtaW5hY3RpdmUtYmc6IHJnYmEoMzUsIDMyLCAyOCwgMC43NSk7XG4gICAgLS1waWxsLWluYWN0aXZlLWJvcmRlcjogcmdiYSg2MCwgNTUsIDQ1LCAwLjUpO1xuICAgIC0tcGlsbC1pbmFjdGl2ZS10ZXh0OiAjRTVERkQ0O1xuICAgIC0tZHJhd2VyLXBhbmVsLWJnOiByZ2JhKDMwLCAyOCwgMjQsIDAuOTUpO1xuICAgIC0tZHJhd2VyLWJvcmRlcjogcmdiYSg2MCwgNTUsIDQ1LCAwLjUpO1xuICAgIC0tZHJhd2VyLW92ZXJsYXktYmc6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgICAtLWRlc2MtZmFkZTogcmdiYSgzNSwgMzIsIDI4LCAwLjg1KTtcbiAgICAtLWZvb3Rlci1iZzogIzEzMTIxMDtcbiAgICAtLWZvb3Rlci1kaXNjbGFpbWVyOiByZ2JhKDIwMCwgMTkwLCAxNzUsIDAuNzUpO1xuICAgIC0tYWNjZW50LXByaW1hcnk6ICNGRjhDNUE7XG4gICAgLS1hY2NlbnQtcHJpbWFyeS1ob3ZlcjogI0ZGQTA3MDtcbiAgICAtLWFjY2VudC1wcmltYXJ5LWxpZ2h0OiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4xNSk7XG4gICAgLS1hY2NlbnQtcHJpbWFyeS1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjMpO1xuICAgIC0tYWNjZW50LXByaW1hcnktc2hhZG93OiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4yNSk7XG4gICAgLS1jYXJkLXNoYWRvdy1ob3ZlcjogcmdiYSgyNTUsIDE0MCwgOTAsIDAuMDgpO1xuICAgIC0tc2NoZW1lLWhlcm8tdGFnbGluZTogdmFyKC0tc2NoZW1lLWZvb3Rlci1hY2NlbnQpO1xuICAgIC0tc2NoZW1lLWZvY3VzLXJpbmc6IHZhcigtLWFjY2VudC1wcmltYXJ5KTtcbiAgICAtLXRleHQtb24tYWNjZW50OiAjNTUxRjAwO1xuICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgMi4gUkVTRVQgJiBCQVNFXG4gICBCb3gtc2l6aW5nIHJlc2V0LCBib2R5IGRlZmF1bHRzLCBmb2N1cyBzdGF0ZXMsIHNjcm9sbGJhciwgc2VsZWN0aW9uLFxuICAgcmVkdWNlZC1tb3Rpb24sIHNraXAgbGlua1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuKiwgKjo6YmVmb3JlLCAqOjphZnRlciB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuaHRtbCB7XG4gIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICB0ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG59XG5cbmJvZHkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1wcmltYXJ5KTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIGxpbmUtaGVpZ2h0OiAxLjY1O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5cbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYge1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1oZWFkaW5nKTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICBsaW5lLWhlaWdodDogMS4xMjtcbiAgdGV4dC13cmFwOiBiYWxhbmNlO1xufVxuXG5wIHsgdGV4dC13cmFwOiBwcmV0dHk7IH1cblxuYSB7IGNvbG9yOiBpbmhlcml0OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbmltZyB7IGRpc3BsYXk6IGJsb2NrOyBtYXgtd2lkdGg6IDEwMCU7IGhlaWdodDogYXV0bzsgfVxuYnV0dG9uLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCB7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyB9XG5idXR0b24geyBjdXJzb3I6IHBvaW50ZXI7IH1cbnVsIHsgbGlzdC1zdHlsZTogbm9uZTsgfVxuXG4vKiAtLS0gVXRpbGl0eTogSGlkZGVuIGJ5IGRlZmF1bHQsIHNob3duIHZpYSBKUyAtLS0gKi9cbi5pcy1oaWRkZW4geyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cblxuLyogLS0tIFNraXAgTGluayAtLS0gKi9cbi5za2lwLWxpbmsge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTEwMCU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LW9uLWFjY2VudCk7XG4gIHBhZGRpbmc6IDAuNzVyZW0gMS41cmVtO1xuICBib3JkZXItcmFkaXVzOiAwIDAgMC43NXJlbSAwLjc1cmVtO1xuICB6LWluZGV4OiA5OTk5O1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICB0cmFuc2l0aW9uOiB0b3AgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJveC1zaGFkb3c6IDAgMCAxMnB4IHZhcigtLWNocm9tZS1zaGFkb3ctZGFyayk7XG59XG5cbi5za2lwLWxpbms6Zm9jdXMge1xuICB0b3A6IDA7XG4gIG91dGxpbmU6IDNweCBzb2xpZCB2YXIoLS1zY2hlbWUtZm9jdXMtcmluZyk7XG4gIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi8qIC0tLSBGb2N1cyBTdGF0ZXMgLS0tICovXG4qOmZvY3VzLXZpc2libGUge1xuICBvdXRsaW5lOiAzcHggc29saWQgdmFyKC0tc2NoZW1lLWZvY3VzLXJpbmcpO1xuICBvdXRsaW5lLW9mZnNldDogM3B4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG5cbi8qIC0tLSBTY3JvbGxiYXIgLS0tICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDhweDsgfVxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyB9XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZDogdmFyKC0tc2NoZW1lLXNjcm9sbC10aHVtYik7IGJvcmRlci1yYWRpdXM6IDRweDsgfVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLXNjaGVtZS1mb2N1cy1yaW5nKTsgfVxuXG4vKiAtLS0gU2VsZWN0aW9uIC0tLSAqL1xuOjpzZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtcHJpbWFyeS1saWdodCk7IGNvbG9yOiB2YXIoLS1uZXV0cmFsLTkwMCk7IH1cbi5kYXJrIDo6c2VsZWN0aW9uIHsgYmFja2dyb3VuZDogdmFyKC0tc2VsZWN0aW9uLWJnLWRhcmspOyBjb2xvcjogdmFyKC0tc3VyZmFjZS0xMDApOyB9XG5cbi8qIC0tLSBSZWR1Y2VkIE1vdGlvbiAtLS0gKi9cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICosICo6OmJlZm9yZSwgKjo6YWZ0ZXIge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4wMW1zICFpbXBvcnRhbnQ7XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMSAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50O1xuICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0byAhaW1wb3J0YW50O1xuICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgMy4gVVRJTElUSUVTXG4gICBLZXlmcmFtZXMsIHN0YWdnZXIgZGVsYXlzLCBhbmltYXRpb24gdXRpbGl0aWVzLFxuICAgaWNvbiBzaXppbmcsIHRleHQgdHJ1bmNhdGlvbiwgc2NyZWVuLXJlYWRlci1vbmx5LlxuXG4gICBUaGUgcHJldmlvdXMgVGFpbHdpbmQtaW5zcGlyZWQgYXRvbWljIGB1LSpgIHV0aWxpdHkgY2xhc3NlcyB3ZXJlIHJlbW92ZWRcbiAgIGJlY2F1c2Ugbm8gdGVtcGxhdGUsIGxheW91dCwgb3IgY29tcG9uZW50IGV2ZXIgY29uc3VtZWQgdGhlbS4gVXNlIGV4aXN0aW5nXG4gICBkZXNpZ24gdG9rZW5zIChgLS1hY2NlbnQtcHJpbWFyeWAsIGAtLXRleHQtcHJpbWFyeWAsIGAtLWdsYXNzLWJnYCwgZXRjLilcbiAgIGRpcmVjdGx5IGluIGNvbXBvbmVudCBDU1MgaW5zdGVhZCBvZiBhZGRpbmcgbmV3IGF0b21pYyB1dGlsaXRpZXMuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiAtLS0gS2V5ZnJhbWVzIC0tLSAqL1xuXG5Aa2V5ZnJhbWVzIGZhZGUtaW4ge1xuICBmcm9tIHsgb3BhY2l0eTogMDsgfVxuICB0byB7IG9wYWNpdHk6IDE7IH1cbn1cblxuQGtleWZyYW1lcyBzbGlkZS11cCB7XG4gIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCk7IH1cbiAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbn1cblxuQGtleWZyYW1lcyBmbG9hdCB7XG4gIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XG4gIDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KTsgfVxufVxuXG5Aa2V5ZnJhbWVzIGRyYXdlci1pbiB7XG4gIGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyB9XG4gIHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XG59XG5cbkBrZXlmcmFtZXMgZHJhd2VyLW91dCB7XG4gIGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cbiAgdG8geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyB9XG59XG5cbkBrZXlmcmFtZXMgZHJhd2VyLXJpZ2h0LWluIHtcbiAgZnJvbSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsgfVxuICB0byB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxufVxuXG5Aa2V5ZnJhbWVzIGRyYXdlci1yaWdodC1vdXQge1xuICBmcm9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XG4gIHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpOyB9XG59XG5cbkBrZXlmcmFtZXMgc2hlZXQtaW4ge1xuICBmcm9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOyB9XG4gIHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XG59XG5cbkBrZXlmcmFtZXMgc2hlZXQtb3V0IHtcbiAgZnJvbSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICB0byB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsgfVxufVxuXG5Aa2V5ZnJhbWVzIG92ZXJsYXktb3V0IHtcbiAgZnJvbSB7IG9wYWNpdHk6IDE7IH1cbiAgdG8geyBvcGFjaXR5OiAwOyB9XG59XG5cbi8qIC0tLSBTdGFnZ2VyIERlbGF5cyAtLS0gKi9cbi5zdGFnZ2VyLTEgeyBhbmltYXRpb24tZGVsYXk6IDAuMDVzOyB9XG4uc3RhZ2dlci0yIHsgYW5pbWF0aW9uLWRlbGF5OiAwLjFzOyB9XG4uc3RhZ2dlci0zIHsgYW5pbWF0aW9uLWRlbGF5OiAwLjE1czsgfVxuLnN0YWdnZXItNCB7IGFuaW1hdGlvbi1kZWxheTogMC4yczsgfVxuXG4vKiAtLS0gQW5pbWF0aW9uIFV0aWxpdGllcyAtLS0gKi9cbi5hbmltYXRlLWZhZGUtaW4geyBhbmltYXRpb246IGZhZGUtaW4gMC42cyBlYXNlLW91dCBib3RoOyB9XG4uYW5pbWF0ZS1zbGlkZS11cCB7IGFuaW1hdGlvbjogc2xpZGUtdXAgMC41cyBlYXNlLW91dCBib3RoOyB9XG4uYW5pbWF0ZS1mbG9hdCB7IGFuaW1hdGlvbjogZmxvYXQgNnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7IH1cblxuLyogLS0tIEljb24gU2l6aW5nIC0tLSAqL1xuLmJ0bi1pY29uIHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIC0tLSBUZXh0IFRydW5jYXRpb24gLS0tICovXG4udHJ1bmNhdGUge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLyogLS0tIFNjcmVlbiBSZWFkZXIgT25seSAtLS0gKi9cbi5zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAtMXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBib3JkZXItd2lkdGg6IDA7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgNC4gR0xBU1MgTU9SUEhJU01cbiAgIEdsYXNzIGNhcmRzLCBwYW5lbHMsIG1hcmtldHBsYWNlIGJ1dHRvbnMgKGJ0bi1tbCwgYnRuLXNob3BlZSlcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIC0tLSBHbGFzcyBDYXJkIC0tLSAqL1xuLmdsYXNzLWNhcmQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdsYXNzLWJnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogMS4yNXJlbTtcbiAgYm94LXNoYWRvdzpcbiAgICAwIDAgOHB4IHZhcigtLWNhcmQtc2hhZG93KSwgaW5zZXQgMCAwLjVweCAwIHZhcigtLWdsYXNzLWluc2V0KTtcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlO1xuICBjb250YWluOiBsYXlvdXQ7XG59XG5cbi5nbGFzcy1jYXJkOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ2xhc3MtaG92ZXItYmcpO1xuICBib3gtc2hhZG93OlxuICAgIDAgMCAxNnB4IHZhcigtLWNhcmQtc2hhZG93LWhvdmVyKSwgaW5zZXQgMCAwLjVweCAwIHZhcigtLWdsYXNzLWluc2V0LWhvdmVyKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1nbGFzcy1ob3Zlci1ib3JkZXIpO1xufVxuXG4vKiAtLS0gR2xhc3MgUGFuZWwgLS0tICovXG4uZ2xhc3MtcGFuZWwge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1iZyk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDJyZW07XG4gIGJveC1zaGFkb3c6XG4gICAgMCAwIDI0cHggdmFyKC0tY2FyZC1zaGFkb3cpLCBpbnNldCAwIDAuNXB4IDAgdmFyKC0tZ2xhc3MtaW5zZXQpO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlO1xufVxuXG4uZ2xhc3MtcGFuZWw6aG92ZXIge1xuICBib3gtc2hhZG93OlxuICAgIDAgMCAxNnB4IHZhcigtLWNhcmQtc2hhZG93LWhvdmVyKSwgaW5zZXQgMCAwLjVweCAwIHZhcigtLWdsYXNzLWluc2V0LWhvdmVyKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1nbGFzcy1ob3Zlci1ib3JkZXIpO1xufVxuXG4vKiBEYXJrIG1vZGU6IHRvbmUgZG93biB0aGUgaW5zZXQgdG9wLWhpZ2hsaWdodCBmb3IgYm90aCBjb2xvciB0aGVtZXMgKi9cbi5kYXJrIC5nbGFzcy1jYXJkIHtcbiAgYm94LXNoYWRvdzogMCAwIDhweCB2YXIoLS1jYXJkLXNoYWRvdyksIGluc2V0IDAgMC41cHggMCB2YXIoLS1nbGFzcy1pbnNldC1kYXJrKTtcbn1cbi5kYXJrIC5nbGFzcy1jYXJkOmhvdmVyIHtcbiAgYm94LXNoYWRvdzogMCAwIDE2cHggdmFyKC0tY2FyZC1zaGFkb3ctaG92ZXIpLCBpbnNldCAwIDAuNXB4IDAgdmFyKC0tZ2xhc3MtaW5zZXQtZGFyay1ob3Zlcik7XG59XG4uZGFyayAuZ2xhc3MtcGFuZWwge1xuICBib3gtc2hhZG93OiAwIDAgMjRweCB2YXIoLS1jYXJkLXNoYWRvdyksIGluc2V0IDAgMC41cHggMCB2YXIoLS1nbGFzcy1pbnNldC1kYXJrKTtcbn1cbi5kYXJrIC5nbGFzcy1wYW5lbDpob3ZlciB7XG4gIGJveC1zaGFkb3c6IDAgMCAxNnB4IHZhcigtLWNhcmQtc2hhZG93LWhvdmVyKSwgaW5zZXQgMCAwLjVweCAwIHZhcigtLWdsYXNzLWluc2V0LWRhcmstaG92ZXIpO1xufVxuXG4vKiAtLS0gU2hhcmVkIE1hcmtldHBsYWNlIEJ1dHRvbiBTdHlsZXMgLS0tICovXG4uYnRuLW1sLFxuLmJ0bi1zaG9wZWUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiAwLjVyZW07XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwLjg3NXJlbSAxLjI1cmVtO1xuICBib3JkZXItcmFkaXVzOiAwLjg3NXJlbTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMDVlbTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBtaW4taGVpZ2h0OiA0OHB4O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZSwgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4uYnRuLW1sOmhvdmVyLFxuLmJ0bi1zaG9wZWU6aG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5idG4tbWw6YWN0aXZlLFxuLmJ0bi1zaG9wZWU6YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KSB0cmFuc2xhdGVZKDApO1xufVxuXG4vKiAtLS0gTWVyY2FkbyBMaXZyZSBCdXR0b24gLS0tICovXG4uYnRuLW1sIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tbWwteWVsbG93KSAwJSwgdmFyKC0tbWwteWVsbG93LWhvdmVyKSAxMDAlKTtcbiAgY29sb3I6IHZhcigtLW1sLW5hdnkpO1xuICBib3gtc2hhZG93OiAwIDAgMTZweCB2YXIoLS1tbC1zaGFkb3cpLCBpbnNldCAwIDFweCAwIHZhcigtLW1sLWluc2V0KTtcbn1cblxuLmJ0bi1tbDpob3ZlciB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLW1sLXllbGxvdy1ob3ZlcikgMCUsIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tbC15ZWxsb3ctaG92ZXIpIDg1JSwgYmxhY2spIDEwMCUpO1xuICBib3gtc2hhZG93OiAwIDAgMjRweCB2YXIoLS1tbC1zaGFkb3ctaG92ZXIpLCBpbnNldCAwIDFweCAwIHZhcigtLW1sLWluc2V0LWhvdmVyKTtcbn1cblxuLyogLS0tIFNob3BlZSBCdXR0b24gLS0tICovXG4uYnRuLXNob3BlZSB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXNob3BlZS1vcmFuZ2UpIDAlLCB2YXIoLS1zaG9wZWUtb3JhbmdlLWhvdmVyKSAxMDAlKTtcbiAgLyogU2hvcGVlIGJyYW5kIHdoaXRlIHRleHQg4oCUIG5vdCAtLXRleHQtb24tYWNjZW50ICgzcmQtcGFydHkgYnJhbmQgY29sb3IpLlxuICAgICBXaGl0ZSBvbiAjRUU0RDJEID0gMy42NjoxIOKAlCBwYXNzZXMgbGFyZ2UtdGV4dCAoMzoxKS4gRG9jdW1lbnRlZCBleGNlcHRpb24uICovXG4gIGNvbG9yOiAjRkZGRkZGO1xuICBib3gtc2hhZG93OiAwIDAgMTZweCB2YXIoLS1zaG9wZWUtc2hhZG93KSwgaW5zZXQgMCAxcHggMCB2YXIoLS1idG4taW5zZXQpO1xufVxuXG4uYnRuLXNob3BlZTpob3ZlciB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXNob3BlZS1vcmFuZ2UtaG92ZXIpIDAlLCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tc2hvcGVlLW9yYW5nZS1ob3ZlcikgODUlLCBibGFjaykgMTAwJSk7XG4gIGJveC1zaGFkb3c6IDAgMCAyNHB4IHZhcigtLXNob3BlZS1zaGFkb3ctaG92ZXIpLCBpbnNldCAwIDFweCAwIHZhcigtLWJ0bi1pbnNldC1ob3Zlcik7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgNS4gSEVST1xuICAgSGVybyBzZWN0aW9uIGxheW91dCwgbG9nbywgdGl0bGUsIHRhZ2xpbmUsIENUQXMsIHNjcm9sbCBpbmRpY2F0b3JcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5oZXJvIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgbWluLWhlaWdodDogMTAwZHZoO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmhlcm8tZG90LWdyaWQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBvcGFjaXR5OiAwLjAyNTtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxcHggMXB4LCB2YXIoLS1uZXV0cmFsLTkwMCkgMXB4LCB0cmFuc3BhcmVudCAwKTtcbiAgYmFja2dyb3VuZC1zaXplOiAyOHB4IDI4cHg7XG59XG5cbi5kYXJrIC5oZXJvLWRvdC1ncmlkIHsgb3BhY2l0eTogMC4wMjsgfVxuXG4uaGVyby1jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogNTJyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiA1cmVtIDEuMjVyZW07XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAuaGVyby1jb250ZW50IHsgcGFkZGluZzogN3JlbSAycmVtOyB9IH1cblxuLmhlcm8tZ2xhc3Mge1xuICBwYWRkaW5nOiAycmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1heC13aWR0aDogNDNyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsgLmhlcm8tZ2xhc3MgeyBwYWRkaW5nOiAzcmVtOyB9IH1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeyAuaGVyby1nbGFzcyB7IHBhZGRpbmc6IDRyZW07IH0gfVxuXG4uaGVyby1sb2dvLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xufVxuXG4uaGVyby1sb2dvLWNvbnRhaW5lciB7XG4gIHdpZHRoOiA0Ljc1cmVtO1xuICBoZWlnaHQ6IDQuNzVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDEuMjVyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLXNjaGVtZS1oZXJvLWxvZ28tYmcpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1nbGFzcy1ib3JkZXIpO1xuICBib3gtc2hhZG93OiAwIDAgMThweCB2YXIoLS1jaHJvbWUtc2hhZG93LXNtKSwgaW5zZXQgMCAwLjVweCAwIHZhcigtLWdsYXNzLWluc2V0KTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5kYXJrIC5oZXJvLWxvZ28tY29udGFpbmVyIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1nbGFzcy1ib3JkZXIpO1xuICBib3gtc2hhZG93OiAwIDAgMThweCB2YXIoLS1jaHJvbWUtc2hhZG93LWRhcmspLCBpbnNldCAwIDAuNXB4IDAgdmFyKC0tZ2xhc3MtaW5zZXQtZGFyayk7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuaGVyby1sb2dvLWNvbnRhaW5lciB7IHdpZHRoOiA4cmVtOyBoZWlnaHQ6IDhyZW07IGJvcmRlci1yYWRpdXM6IDEuNXJlbTsgfVxufVxuXG4uaGVyby1sb2dvLWltZyB7XG4gIHdpZHRoOiA4MCU7XG4gIGhlaWdodDogODAlO1xuICBvYmplY3QtZml0OiBjb250YWluO1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCA4cHggdmFyKC0tbG9nby1kcm9wLXNoYWRvdykpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmhlcm8tbG9nby1pbWcgeyB3aWR0aDogODAlOyBoZWlnaHQ6IDgwJTsgfVxufVxuXG4uaGVyby10aXRsZSB7XG4gIGZvbnQtc2l6ZTogY2xhbXAoM3JlbSwgOHZ3LCA1LjI1cmVtKTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWRpc3BsYXkpO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDM1ZW07XG4gIGxpbmUtaGVpZ2h0OiAwLjk1O1xuICBtYXJnaW4tYm90dG9tOiAwLjg3NXJlbTtcbn1cblxuLmhlcm8tdGl0bGUtaHViIHsgY29sb3I6IHZhcigtLW5ldXRyYWwtOTAwKTsgfVxuLmRhcmsgLmhlcm8tdGl0bGUtaHViIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMTAwKTsgfVxuLmhlcm8tdGl0bGUtcmFpeiB7IGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7IH1cblxuLmhlcm8tdGFnbGluZSB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTtcbiAgZm9udC1zaXplOiBjbGFtcCgxcmVtLCAyLjR2dywgMS4yNXJlbSk7XG4gIGNvbG9yOiB2YXIoLS1zY2hlbWUtaGVyby10YWdsaW5lKTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDA1ZW07XG4gIG1hcmdpbi1ib3R0b206IDEuMjVyZW07XG59XG5cbi5oZXJvLWRlc2NyaXB0aW9uIHtcbiAgbWF4LXdpZHRoOiAzNXJlbTtcbiAgbWFyZ2luOiAwIGF1dG8gMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNzU7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTYwMCk7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbn1cblxuLmRhcmsgLmhlcm8tZGVzY3JpcHRpb24geyBjb2xvcjogdmFyKC0tc3VyZmFjZS0zMDApOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAuaGVyby1kZXNjcmlwdGlvbiB7IGZvbnQtc2l6ZTogMS4xMjVyZW07IH0gfVxuXG4uaGVyby1jdGFzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAwLjc1cmVtO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5oZXJvLWN0YXMgeyBmbGV4LWRpcmVjdGlvbjogcm93OyBnYXA6IDFyZW07IH1cbn1cblxuLmhlcm8tY3RhcyAuYnRuLW1sLFxuLmhlcm8tY3RhcyAuYnRuLXNob3BlZSB7XG4gIHdpZHRoOiBhdXRvO1xuICBwYWRkaW5nOiAxcmVtIDEuNzVyZW07XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbn1cblxuLmhlcm8tdHJ1c3QtaGludCB7XG4gIG1hcmdpbi10b3A6IDEuNzVyZW07XG4gIGNvbG9yOiB2YXIoLS1zY2hlbWUtaGVyby10cnVzdCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7IC5oZXJvLXRydXN0LWhpbnQgeyBmb250LXNpemU6IDAuODc1cmVtOyB9IH1cbi5kYXJrIC5oZXJvLXRydXN0LWhpbnQgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG5cbi5oZXJvLXNjcm9sbC1pbmRpY2F0b3Ige1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMS41cmVtO1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMS4yNXJlbTtcbiAgd2lkdGg6IDIuNXJlbTtcbiAgei1pbmRleDogMTA7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAuaGVyby1zY3JvbGwtaW5kaWNhdG9yIHsgYm90dG9tOiAycmVtOyB9IH1cblxuLmhlcm8tc2Nyb2xsLWJ0biB7XG4gIHdpZHRoOiAyLjVyZW07XG4gIGhlaWdodDogMi41cmVtO1xuICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS11aS1zdXJmYWNlLWJnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdWktc3VyZmFjZS1ib3JkZXIpO1xuICBjb2xvcjogdmFyKC0tc2NoZW1lLWhlcm8tc2Nyb2xsLWNvbG9yKTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kYXJrIC5oZXJvLXNjcm9sbC1idG4ge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS11aS1zdXJmYWNlLWJnLWRhcmspO1xuICBib3JkZXItY29sb3I6IHZhcigtLXVpLXN1cmZhY2UtYm9yZGVyLWRhcmspO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xufVxuXG4uaGVyby1zY3JvbGwtYnRuOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLXNjaGVtZS1mb2N1cy1yaW5nKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tdWktc3VyZmFjZS1ob3Zlci1iZyk7XG59XG5cbi5kYXJrIC5oZXJvLXNjcm9sbC1idG46aG92ZXIge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnktaG92ZXIpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS11aS1zdXJmYWNlLWhvdmVyLWJnLWRhcmspO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIDYuIENBVEFMT0dcbiAgIENhdGFsb2cgc2VjdGlvbiBoZWFkZXIsIHN0aWNreSBiYXIsIGZpbHRlciBiYXIsIHNlYXJjaCBpbnB1dHMsXG4gICBmaWx0ZXIgcGlsbHMsIHZpZXcgdG9nZ2xlLCBkZXNrdG9wIGZpbHRlcnMsIHJlc3VsdHMgYmFyLCBtb2JpbGUgc3VtbWFyeVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNhdGFsb2cge1xuICBwYWRkaW5nOiAyLjVyZW0gMXJlbSAzLjVyZW07XG4gIG1heC13aWR0aDogMTYwMHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxMDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5jYXRhbG9nIHsgcGFkZGluZzogNHJlbSAxLjVyZW07IH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuY2F0YWxvZyB7IHBhZGRpbmctbGVmdDogMnJlbTsgcGFkZGluZy1yaWdodDogMnJlbTsgfVxufVxuXG4uY2F0YWxvZy1oZWFkZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IDEuMTI1cmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsgLmNhdGFsb2ctaGVhZGVyIHsgbWFyZ2luLWJvdHRvbTogMnJlbTsgfSB9XG5cbi5jYXRhbG9nLXRpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC05MDApO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbiAgZm9udC1zaXplOiBjbGFtcCgxLjg1cmVtLCA0dncsIDIuNzVyZW0pO1xufVxuXG4uZGFyayAuY2F0YWxvZy10aXRsZSB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTEwMCk7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7IC5jYXRhbG9nLXRpdGxlIHsgbWFyZ2luLWJvdHRvbTogMXJlbTsgfSB9XG5cbi5jYXRhbG9nLXN1YnRpdGxlIHtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtNjAwKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjc7XG4gIG1heC13aWR0aDogNDJyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uZGFyayAuY2F0YWxvZy1zdWJ0aXRsZSB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTMwMCk7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7IC5jYXRhbG9nLXN1YnRpdGxlIHsgZm9udC1zaXplOiAxLjEyNXJlbTsgfSB9XG5cbi8qIC0tLSBTdGlja3kgQmFyIC0tLSAqL1xuLnN0aWNreS1iYXIge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDMwO1xuICBtYXJnaW4tbGVmdDogLTFyZW07XG4gIG1hcmdpbi1yaWdodDogLTFyZW07XG4gIHBhZGRpbmc6IDAuNjI1cmVtIDFyZW07XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuc3RpY2t5LWJhciB7IG1hcmdpbi1sZWZ0OiAtMS41cmVtOyBtYXJnaW4tcmlnaHQ6IC0xLjVyZW07IH1cbn1cblxuLnN0aWNreS1iYXItaGlkZGVuIHtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCB2aXNpYmlsaXR5IDBzIGxpbmVhciB2YXIoLS1kdXJhdGlvbi1zbG93KTtcbn1cblxuLnN0aWNreS1iYXItdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tc2xvdykgZWFzZSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIHZpc2liaWxpdHkgMHMgbGluZWFyIDBzO1xufVxuXG4uc3RpY2t5LWJhci1oaWRkZW4gLmZpbHRlci1iYXIge1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2U7XG59XG5cbi5zdGlja3ktYmFyLXZpc2libGUgLmZpbHRlci1iYXIge1xuICBvcGFjaXR5OiAxO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2U7XG59XG5cbi5zdGlja3ktYmFyLWlubmVyIHtcbiAgbWF4LXdpZHRoOiA0OHJlbTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMC41cmVtO1xuICBwYWRkaW5nOiAwLjYyNXJlbSAwLjc1cmVtO1xuICBib3JkZXItcmFkaXVzOiAxcmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnN0aWNreS1iYXItaW5uZXIgeyBwYWRkaW5nOiAwLjc1cmVtOyB9XG59XG5cbi8qIENvbnRyb2xzIHJvdyDilIDilIAgZmlsdGVyIGJ1dHRvbiArIHNlYXJjaCArIHZpZXcgdG9nZ2xlLlxuICAgTGl2ZXMgaW5zaWRlIC5zdGlja3ktYmFyLWlubmVyIHNvIHRoZSAuZmlsdGVyLWJhciBnbGFzcyBzdXJmYWNlIHdyYXBzIGJvdGhcbiAgIHRoaXMgcm93IGFuZCB0aGUgKGNvbmRpdGlvbmFsbHkgdmlzaWJsZSkgbW9iaWxlLWZpbHRlcnMtc3VtbWFyeSByb3cuICovXG4uc3RpY2t5LWJhci1jb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xuICB3aWR0aDogMTAwJTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5zdGlja3ktYmFyLWNvbnRyb2xzIHsgZ2FwOiAwLjc1cmVtOyB9XG59XG5cbi8qIC0tLSBGaWx0ZXIgQmFyIC0tLSAqL1xuLmZpbHRlci1iYXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1maWx0ZXItYmFyLWJnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlsdGVyLWJhci1ib3JkZXIpO1xuICBib3gtc2hhZG93OiAwIDAgMjRweCB2YXIoLS1jaHJvbWUtc2hhZG93LXNtKTtcbn1cblxuLmZpbHRlci1iYWRnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWluLXdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQpO1xuICBmb250LXNpemU6IDAuNjI1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBwYWRkaW5nOiAwIDVweDtcbn1cblxuLyogLS0tIEZpbHRlciBCdXR0b24gLS0tICovXG4uZmlsdGVyLWJ0biB7XG4gIHdpZHRoOiAyLjVyZW07XG4gIGhlaWdodDogMi41cmVtO1xuICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtcHJpbWFyeS1saWdodCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudC1wcmltYXJ5LWJvcmRlcik7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LXNocmluazogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xufVxuXG4uZmlsdGVyLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWJvcmRlcik7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5maWx0ZXItYnRuIHsgd2lkdGg6IDIuNzVyZW07IGhlaWdodDogMi43NXJlbTsgfVxufVxuXG4uZmlsdGVyLWJ0bi1iYWRnZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMC4zNzVyZW07XG4gIHJpZ2h0OiAtMC4zNzVyZW07XG4gIG1pbi13aWR0aDogMThweDtcbiAgaGVpZ2h0OiAxOHB4O1xuICBmb250LXNpemU6IDAuNTYyNXJlbTtcbn1cblxuLyogLS0tIFNlYXJjaCBGaWVsZCAoc2hhcmVkIGNvbXBvbmVudCkgLS0tXG4gICBCRU0tc3RydWN0dXJlZCBzZWFyY2ggaW5wdXQgdXNlZCBieSBib3RoIHN0aWNreSBiYXIgYW5kIGRlc2t0b3AgYmFyLlxuICAgVmFyaWFudCBtb2RpZmllcnM6IC5zZWFyY2gtZmllbGQtLXN0aWNreSAoY29tcGFjdCkgLyAuc2VhcmNoLWZpZWxkLS1kZXNrdG9wIChmdWxsLXNpemUpXG4gICBFbGltaW5hdGVzIHRoZSBwcmV2aW91cyAuc3RpY2t5LXNlYXJjaC0qIC8gLmRlc2t0b3Atc2VhcmNoLSogZHVwbGljYXRpb24uICovXG5cbi5zZWFyY2gtZmllbGQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLnNlYXJjaC1maWVsZF9faWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtNDAwKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kYXJrIC5zZWFyY2gtZmllbGRfX2ljb24ge1xuICBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApO1xufVxuXG4uc2VhcmNoLWZpZWxkX19pbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWFyY2gtYmcpO1xuICBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLXNlYXJjaC1ib3JkZXIpO1xuICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xufVxuXG4uc2VhcmNoLWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXIgeyBjb2xvcjogdmFyKC0tdGV4dC1wbGFjZWhvbGRlcik7IH1cblxuLnNlYXJjaC1maWVsZF9faW5wdXQ6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xuICBib3JkZXItY29sb3I6IHZhcigtLXNlYXJjaC1mb2N1cy1ib3JkZXIpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWFyY2gtZm9jdXMtYmcpO1xuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tc2NoZW1lLXNlYXJjaC1mb2N1cy1yaW5nLXN0cm9uZyk7XG59XG5cbi5zZWFyY2gtZmllbGRfX2NsZWFyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTMwMCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogY29sb3IgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xufVxuXG4vKiBTVkcgaW5zaWRlIHRoZSBjbGVhciBidXR0b24gZGVmYXVsdHMgdG8gMzAweDE1MCB3aXRob3V0IGV4cGxpY2l0IHNpemluZy5cbiAgIFBpbiBpdCB0byB0aGUgaWNvbiBzaXplIG9mIGVhY2ggdmFyaWFudCBzbyB0aGUgYnV0dG9uIHN0YXlzIGNvbXBhY3QuICovXG4uc2VhcmNoLWZpZWxkX19jbGVhci1zdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbn1cblxuLyog4pSA4pSAIFN0aWNreSB2YXJpYW50IChjb21wYWN0LCBtb2JpbGUtZmlyc3QpIOKUgOKUgCAqL1xuLnNlYXJjaC1maWVsZC0tc3RpY2t5IC5zZWFyY2gtZmllbGRfX2ljb24ge1xuICBsZWZ0OiAwLjc1cmVtO1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xufVxuXG4uc2VhcmNoLWZpZWxkLS1zdGlja3kgLnNlYXJjaC1maWVsZF9faW5wdXQge1xuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbSAwLjVyZW0gMi4yNXJlbTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbn1cblxuLnNlYXJjaC1maWVsZC0tc3RpY2t5IC5zZWFyY2gtZmllbGRfX2lucHV0OmZvY3VzIHtcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLXNjaGVtZS1zZWFyY2gtZm9jdXMtcmluZy1zdHJvbmcpO1xufVxuXG4uZGFyayAuc2VhcmNoLWZpZWxkLS1zdGlja3kgLnNlYXJjaC1maWVsZF9faW5wdXQ6Zm9jdXMge1xuICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tc2NoZW1lLXNlYXJjaC1mb2N1cy1yaW5nLXN0cm9uZyk7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuc2VhcmNoLWZpZWxkLS1zdGlja3kgLnNlYXJjaC1maWVsZF9faW5wdXQgeyBwYWRkaW5nOiAwLjYyNXJlbSAwLjc1cmVtIDAuNjI1cmVtIDIuMjVyZW07IH1cbn1cblxuLnNlYXJjaC1maWVsZC0tc3RpY2t5IC5zZWFyY2gtZmllbGRfX2NsZWFyIHtcbiAgcmlnaHQ6IDAuNjI1cmVtO1xuICBwYWRkaW5nOiAwLjEyNXJlbTtcbn1cblxuLnNlYXJjaC1maWVsZC0tc3RpY2t5IC5zZWFyY2gtZmllbGRfX2NsZWFyOmhvdmVyIHsgY29sb3I6IHZhcigtLW5ldXRyYWwtNTAwKTsgfVxuLmRhcmsgLnNlYXJjaC1maWVsZC0tc3RpY2t5IC5zZWFyY2gtZmllbGRfX2NsZWFyOmhvdmVyIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMzAwKTsgfVxuXG4vKiDilIDilIAgRGVza3RvcCB2YXJpYW50IChmdWxsLXNpemUsIGxhcmdlciBpY29ucyAmIHBhZGRpbmcpIOKUgOKUgCAqL1xuLnNlYXJjaC1maWVsZC0tZGVza3RvcCAuc2VhcmNoLWZpZWxkX19pY29uIHtcbiAgbGVmdDogMC44NzVyZW07XG4gIHdpZHRoOiAxLjI1cmVtO1xuICBoZWlnaHQ6IDEuMjVyZW07XG59XG5cbi5zZWFyY2gtZmllbGQtLWRlc2t0b3AgLnNlYXJjaC1maWVsZF9faW5wdXQge1xuICBwYWRkaW5nOiAwLjYyNXJlbSAxcmVtIDAuNjI1cmVtIDIuNzVyZW07XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBib3JkZXItcmFkaXVzOiAwLjg3NXJlbTtcbn1cblxuLnNlYXJjaC1maWVsZC0tZGVza3RvcCAuc2VhcmNoLWZpZWxkX19pbnB1dDpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1zY2hlbWUtc2VhcmNoLWZvY3VzLXJpbmcpO1xufVxuXG4uc2VhcmNoLWZpZWxkLS1kZXNrdG9wIC5zZWFyY2gtZmllbGRfX2NsZWFyIHtcbiAgcmlnaHQ6IDAuNzVyZW07XG4gIHBhZGRpbmc6IDAuMjVyZW07XG59XG5cbi5zZWFyY2gtZmllbGQtLWRlc2t0b3AgLnNlYXJjaC1maWVsZF9fY2xlYXI6aG92ZXIgeyBjb2xvcjogdmFyKC0tbmV1dHJhbC02MDApOyB9XG4uZGFyayAuc2VhcmNoLWZpZWxkLS1kZXNrdG9wIC5zZWFyY2gtZmllbGRfX2NsZWFyOmhvdmVyIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMjAwKTsgfVxuXG4vKiAtLS0gTW9iaWxlIEZpbHRlcnMgU3VtbWFyeSAtLS1cbiAgIFJlbmRlcmVkIGFzIGEgc2Vjb25kIHJvdyBpbnNpZGUgLnN0aWNreS1iYXItaW5uZXIgc28gaXQgaW5oZXJpdHMgdGhlXG4gICAuZmlsdGVyLWJhciBnbGFzcyBzdXJmYWNlLiBUaGUgY29sdW1uIGdhcCBvbiAuc3RpY2t5LWJhci1pbm5lciBoYW5kbGVzXG4gICB2ZXJ0aWNhbCBzcGFjaW5nOyBubyBleHRyYSBtYXJnaW4tdG9wIGlzIG5lZWRlZC4gKi9cbi5tb2JpbGUtZmlsdGVycy1zdW1tYXJ5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTUwMCk7XG59XG5cbi5tb2JpbGUtZmlsdGVycy1zdW1tYXJ5LWRvdCB7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTMwMCk7XG59XG5cbi5kYXJrIC5tb2JpbGUtZmlsdGVycy1zdW1tYXJ5IHsgY29sb3I6IHZhcigtLXN1cmZhY2UtNDAwKTsgfVxuXG4ubW9iaWxlLWZpbHRlcnMtc3VtbWFyeSBidXR0b24ge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBmb250LXdlaWdodDogNjAwO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAubW9iaWxlLWZpbHRlcnMtc3VtbWFyeSB7IGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4vKiAtLS0gRGVza3RvcCBJbmxpbmUgRmlsdGVycyAtLS0gKi9cbi5kZXNrdG9wLWZpbHRlcnMge1xuICBkaXNwbGF5OiBub25lO1xuICBtYXJnaW4tYm90dG9tOiAxLjg3NXJlbTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7IC5kZXNrdG9wLWZpbHRlcnMgeyBkaXNwbGF5OiBibG9jazsgfSB9XG5cbi5kZXNrdG9wLWZpbHRlcnMgPiAqICsgKiB7IG1hcmdpbi10b3A6IDAuODc1cmVtOyB9XG5cbi5maWx0ZXItcm93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNDM3NXJlbTtcbn1cblxuLmZpbHRlci1yb3ctbGFiZWwge1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTQwMCk7XG4gIG1hcmdpbi1yaWdodDogMC4xMjVyZW07XG59XG5cbi5kYXJrIC5maWx0ZXItcm93LWxhYmVsIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtNDAwKTsgfVxuXG4vKiAtLS0gRGVza3RvcCBTZWFyY2ggQmFyIChzZWFyY2ggZmllbGQgKyBjb250cm9scykgLS0tICovXG4vKiBNYXRjaGVzIHRoZSBzdGlja3kgYmFyJ3MgZmlsdGVyLWJhciBnbGFzcyBtb3JwaGlzbSBwYXR0ZXJuICovXG4uZGVza3RvcC1zZWFyY2gtYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjc1cmVtO1xuICBwYWRkaW5nOiAwLjc1cmVtO1xuICBib3JkZXItcmFkaXVzOiAxcmVtO1xufVxuXG4uZGVza3RvcC1zZWFyY2gtY29udHJvbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNXJlbTtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5waWxsLWNvdW50IHtcbiAgbWFyZ2luLWxlZnQ6IDAuMzc1cmVtO1xuICBvcGFjaXR5OiAwLjU1O1xufVxuXG4vKiAtLS0gRGVza3RvcCBSZXN1bHRzIEJhciAtLS0gKi9cbi5kZXNrdG9wLXJlc3VsdHMtYmFyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW4tYm90dG9tOiAxLjEyNXJlbTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7IC5kZXNrdG9wLXJlc3VsdHMtYmFyIHsgZGlzcGxheTogZmxleDsgfSB9XG5cbi5kZXNrdG9wLXJlc3VsdHMtY291bnQge1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTUwMCk7XG59XG5cbi5kYXJrIC5kZXNrdG9wLXJlc3VsdHMtY291bnQgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG5cbi5kZXNrdG9wLWNsZWFyLWJ0biB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDJweDtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGNvbG9yIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZTtcbn1cblxuLmRlc2t0b3AtY2xlYXItYnRuOmhvdmVyIHsgY29sb3I6IHZhcigtLWFjY2VudC1wcmltYXJ5LWhvdmVyKTsgfVxuXG4vKiAtLS0gRmlsdGVyIFBpbGxzIC0tLSAqL1xuLmNhdGVnb3J5LXBpbGwsIC5icmFuZC1waWxsLCAudGFnLXBpbGwge1xuICBwYWRkaW5nOiAwLjQzNzVyZW0gMC44NzVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbWluLWhlaWdodDogMzRweDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5jYXRlZ29yeS1waWxsLS1hY3RpdmUsIC5icmFuZC1waWxsLS1hY3RpdmUsIC50YWctcGlsbC0tYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQpO1xuICBib3gtc2hhZG93OiAwIDAgMTZweCB2YXIoLS1hY2NlbnQtcHJpbWFyeS1zaGFkb3cpLCBpbnNldCAwIDFweCAwIHZhcigtLWJ0bi1pbnNldCk7XG59XG5cbi5jYXRlZ29yeS1waWxsLS1pbmFjdGl2ZSwgLmJyYW5kLXBpbGwtLWluYWN0aXZlLCAudGFnLXBpbGwtLWluYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tcGlsbC1pbmFjdGl2ZS1iZyk7XG4gIGNvbG9yOiB2YXIoLS1waWxsLWluYWN0aXZlLXRleHQpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1waWxsLWluYWN0aXZlLWJvcmRlcik7XG59XG5cblxuLmNhdGVnb3J5LXBpbGwtLWluYWN0aXZlOmhvdmVyLCAuYnJhbmQtcGlsbC0taW5hY3RpdmU6aG92ZXIsIC50YWctcGlsbC0taW5hY3RpdmU6aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1ob3Zlci1iZyk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnktYm9yZGVyKTtcbn1cblxuLyogQnJhbmQgcGlsbHMgdXNlIC0tYWNjZW50LXByaW1hcnktYm9yZGVyIG9uIGhvdmVyLCBzYW1lIGFzIGNhdGVnb3J5IHBpbGxzLFxuICAgc28gYm90aCBmb2xsb3cgdGhlIGFjdGl2ZSB0aGVtZSBjb25zaXN0ZW50bHkuICovXG5cblxuLyogLS0tIFZpZXcgVG9nZ2xlIChzaW5nbGUgYnV0dG9uKSAtLS1cbiAgIFJlcGxhY2VzIHRoZSBwcmV2aW91cyB0d28tYnV0dG9uIC52aWV3LXRvZ2dsZSBjb250YWluZXIuXG4gICBPbmUgYnV0dG9uIHRvZ2dsZXMgYmV0d2VlbiBncmlkIGFuZCBsaXN0IHZpZXc7IHRoZSB2aXNpYmxlIGljb25cbiAgIHJlcHJlc2VudHMgdGhlIFRBUkdFVCB2aWV3ICh0aGUgdmlldyB5b3Ugd2lsbCBzd2l0Y2ggdG8gb24gY2xpY2spLlxuICAgSlMgKG1haW4uanMg4oaSIHN5bmNWaWV3VG9nZ2xlcykgc3dhcHMgdGhlIGljb24gKyBhcmlhLWxhYmVsLiAqL1xuLnZpZXctdG9nZ2xlLXNpbmdsZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXBpbGwtaW5hY3RpdmUtYmcpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1waWxsLWluYWN0aXZlLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgbWluLXdpZHRoOiA0MHB4O1xuICBtaW4taGVpZ2h0OiA0MHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xuICBmbGV4LXNocmluazogMDtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGNvbG9yIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZSwgYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZSwgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG59XG5cbi52aWV3LXRvZ2dsZS1zaW5nbGU6aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1ob3Zlci1iZyk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnktYm9yZGVyKTtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1wcmltYXJ5KTtcbn1cblxuLmRhcmsgLnZpZXctdG9nZ2xlLXNpbmdsZSB7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgfVxuXG4udmlldy10b2dnbGUtc2luZ2xlX19pY29uIHsgZGlzcGxheTogYmxvY2s7IH1cbi52aWV3LXRvZ2dsZS1zaW5nbGVfX2ljb24uaXMtaGlkZGVuIHsgZGlzcGxheTogbm9uZTsgfVxuXG4vKiBTdGlja3kgYmFyIHZpZXcgdG9nZ2xlIOKAlCBjb21wYWN0IG9uIG1vYmlsZSAqL1xuLnN0aWNreS1iYXIgLnZpZXctdG9nZ2xlLXNpbmdsZSB7IHBhZGRpbmc6IDZweDsgbWluLXdpZHRoOiAzNHB4OyBtaW4taGVpZ2h0OiAzNHB4OyB9XG4uc3RpY2t5LWJhciAudmlldy10b2dnbGUtc2luZ2xlX19pY29uIHsgd2lkdGg6IDE0cHg7IGhlaWdodDogMTRweDsgfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnN0aWNreS1iYXIgLnZpZXctdG9nZ2xlLXNpbmdsZSB7IG1pbi13aWR0aDogMzhweDsgbWluLWhlaWdodDogMzhweDsgcGFkZGluZzogOHB4OyB9XG4gIC5zdGlja3ktYmFyIC52aWV3LXRvZ2dsZS1zaW5nbGVfX2ljb24geyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgNy4gUFJPRFVDVCBDQVJEXG4gICBDb21wYWN0LCBwcmVtaXVtIHByb2R1Y3Qtc2hlbGYgY2FyZHMgd2l0aCBlcXVhbC1oZWlnaHQgZ3JpZCByb3dzIGFuZCByZWR1Y2VkIGhvcml6b250YWwgdGV4dCB3YXN0ZS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIC0tLSBQcm9kdWN0IENhcmQgLS0tICovXG4ucHJvZHVjdC1jYXJkIHtcbiAgLS1jYXJkLWltYWdlLWhlaWdodDogY2xhbXAoMTI0cHgsIDEydncsIDE0OHB4KTtcbiAgLS1jYXJkLWNvbnRlbnQtcGFkZGluZy1ibG9jazogMC43NXJlbTtcbiAgLS1jYXJkLWNvbnRlbnQtcGFkZGluZy1pbmxpbmU6IDAuODEyNXJlbTtcbiAgLS1jYXJkLWNvbnRlbnQtZ2FwOiAwLjRyZW07XG4gIC0tY2FyZC1jaGlwLWZvbnQtc2l6ZTogMC41OTM3NXJlbTtcbiAgLS1jYXJkLWNoaXAtcGFkZGluZy1ibG9jazogMC4xNXJlbTtcbiAgLS1jYXJkLWNoaXAtcGFkZGluZy1pbmxpbmU6IDAuNDI1cmVtO1xuICAtLWNhcmQtbmFtZS1mb250LXNpemU6IDAuOXJlbTtcbiAgLS1jYXJkLW5hbWUtbGluZS1oZWlnaHQ6IDEuMjtcbiAgLS1jYXJkLWFjdGlvbi1taW4taGVpZ2h0OiAzMHB4O1xuICAtLWNhcmQtYWN0aW9uLWZvbnQtc2l6ZTogMC43MzVyZW07XG5cbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtaW4taGVpZ2h0OiAwO1xuICBjb250YWluOiBsYXlvdXQ7XG59XG5cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ3OXB4KSB7XG4gIC5wcm9kdWN0LWNhcmQge1xuICAgIC0tY2FyZC1pbWFnZS1oZWlnaHQ6IGNsYW1wKDEyNnB4LCAzNHZ3LCAxNTJweCk7XG4gICAgLS1jYXJkLW5hbWUtZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgLS1jYXJkLWFjdGlvbi1taW4taGVpZ2h0OiAzNHB4O1xuICAgIC0tY2FyZC1hY3Rpb24tZm9udC1zaXplOiAwLjc2NXJlbTtcbiAgfVxufVxuXG4ucHJvZHVjdC1jYXJkLmxpc3QtdmlldyB7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIG1pbi1oZWlnaHQ6IDExcmVtO1xufVxuXG4ucHJvZHVjdC1jYXJkLWltYWdlLXdyYXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHZhcigtLXNjaGVtZS1pbWFnZS13cmFwLWJnKTtcbiAgZmxleC1zaHJpbms6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IHZhcigtLWNhcmQtaW1hZ2UtaGVpZ2h0KTtcbn1cblxuLmRhcmsgLnByb2R1Y3QtY2FyZC1pbWFnZS13cmFwIHsgYmFja2dyb3VuZDogdmFyKC0tc2NoZW1lLWltYWdlLXdyYXAtYmctZGFyayk7IH1cblxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtY2FyZC1pbWFnZS13cmFwIHtcbiAgd2lkdGg6IGNsYW1wKDcuNXJlbSwgMjR2dywgMTFyZW0pO1xuICBhc3BlY3QtcmF0aW86IGF1dG87XG4gIC8qIExldCB0aGUgZmxleCByb3cncyBhbGlnbi1pdGVtczogc3RyZXRjaCBmaWxsIHRoZSBmdWxsIGNhcmQgaGVpZ2h0LlxuICAgICBUaGUgYmFzZSAucHJvZHVjdC1jYXJkLWltYWdlLXdyYXAgc2V0cyBoZWlnaHQ6IHZhcigtLWNhcmQtaW1hZ2UtaGVpZ2h0KVxuICAgICB3aGljaCBpcyBjb3JyZWN0IGZvciBncmlkIHZpZXcgYnV0IHByZXZlbnRzIHN0cmV0Y2hpbmcgaW4gbGlzdCB2aWV3LFxuICAgICBsZWF2aW5nIGFuIGVtcHR5IGdsYXNzLWNhcmQgc3RyaXAgYmVsb3cgdGhlIGltYWdlLiAqL1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLmxpc3QtdmlldyAucHJvZHVjdC1jYXJkLWltYWdlLXdyYXAgeyB3aWR0aDogMTJyZW07IH1cbn1cblxuLnByb2R1Y3QtY2FyZC1pbWFnZS13cmFwIHBpY3R1cmUgeyBkaXNwbGF5OiBjb250ZW50czsgfVxuXG4ucHJvZHVjdC1jYXJkLWltYWdlLXdyYXAgaW1nIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogMC4ycmVtO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wNXMgZWFzZS1vdXQ7XG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XG59XG5cbi5wcm9kdWN0LWNhcmQ6aG92ZXIgLnByb2R1Y3QtY2FyZC1pbWFnZS13cmFwIGltZyB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7XG59XG5cbi8qIEltYWdlIGVycm9yIHBsYWNlaG9sZGVyIOKAlCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgdG8gb3ZlcmxheSBpbWFnZSBhcmVhICovXG4ucHJvZHVjdC1jYXJkLWltYWdlLWVycm9yIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogMC4yNXJlbTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtMzAwKTtcbiAgei1pbmRleDogMTtcbn1cblxuLmRhcmsgLnByb2R1Y3QtY2FyZC1pbWFnZS1lcnJvciB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTQwMCk7IH1cblxuLnByb2R1Y3QtY2FyZC1pbWFnZS1lcnJvci10ZXh0IHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xufVxuXG4ucHJvZHVjdC1jYXJkLWhvdmVyLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCB2YXIoLS1zY2hlbWUtb3ZlcmxheS1ncmFkaWVudCksIHRyYW5zcGFyZW50IDU1JSk7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tc2xvdykgZWFzZTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kYXJrIC5wcm9kdWN0LWNhcmQtaG92ZXItb3ZlcmxheSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHZhcigtLXNjaGVtZS1vdmVybGF5LWdyYWRpZW50LWRhcmspLCB0cmFuc3BhcmVudCA1NSUpOyB9XG5cbi5wcm9kdWN0LWNhcmQ6aG92ZXIgLnByb2R1Y3QtY2FyZC1ob3Zlci1vdmVybGF5IHsgb3BhY2l0eTogMTsgfVxuXG4vKiAtLS0gQ2FyZCBDb250ZW50IC0tLSAqL1xuLnByb2R1Y3QtY2FyZC1jb250ZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBzdHJldGNoO1xuICBnYXA6IHZhcigtLWNhcmQtY29udGVudC1nYXApO1xuICBmbGV4OiAxIDEgYXV0bztcbiAgbWluLXdpZHRoOiAwO1xuICBwYWRkaW5nOiB2YXIoLS1jYXJkLWNvbnRlbnQtcGFkZGluZy1ibG9jaykgdmFyKC0tY2FyZC1jb250ZW50LXBhZGRpbmctaW5saW5lKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnByb2R1Y3QtY2FyZCB7XG4gICAgLS1jYXJkLWNvbnRlbnQtcGFkZGluZy1ibG9jazogMC44MTI1cmVtO1xuICAgIC0tY2FyZC1jb250ZW50LXBhZGRpbmctaW5saW5lOiAwLjg3NXJlbTtcbiAgICAtLWNhcmQtbmFtZS1mb250LXNpemU6IDAuOTM3NXJlbTtcbiAgfVxufVxuXG4ucHJvZHVjdC1jYXJkLmxpc3QtdmlldyAucHJvZHVjdC1jYXJkLWNvbnRlbnQge1xuICBwYWRkaW5nOiAwLjg3NXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQubGlzdC12aWV3IC5wcm9kdWN0LWNhcmQtY29udGVudCB7IHBhZGRpbmc6IDFyZW0gMS4xMjVyZW07IH1cbn1cblxuLyogLS0tIFRhZ3MgLS0tICovXG4ucHJvZHVjdC10YWdzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiAwLjI3NXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtdGFncyB7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cblxuLnRhZy1icmFuZCxcbi50YWctY2F0ZWdvcnksXG4udGFnLWF0dHJpYnV0ZSxcbi50YWctbW9yZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IHZhcigtLWNhcmQtY2hpcC1mb250LXNpemUpO1xuICBsaW5lLWhlaWdodDogMS4xODtcbiAgcGFkZGluZzogdmFyKC0tY2FyZC1jaGlwLXBhZGRpbmctYmxvY2spIHZhcigtLWNhcmQtY2hpcC1wYWRkaW5nLWlubGluZSk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4udGFnLWJyYW5kIHtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnktbGlnaHQpO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hY2NlbnQtcHJpbWFyeS1ib3JkZXIpO1xufVxuXG4udGFnLWNhdGVnb3J5LFxuLnRhZy1hdHRyaWJ1dGUsXG4udGFnLW1vcmUge1xuICBmb250LXdlaWdodDogNjAwO1xuICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LXByaW1hcnktbGlnaHQpIDQ1JSwgdmFyKC0tZ2xhc3MtYmcpKTtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtcHJpbWFyeSkgNDIlLCB2YXIoLS10ZXh0LW11dGVkKSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtcHJpbWFyeS1ib3JkZXIpIDQyJSwgdmFyKC0tZ2xhc3MtYm9yZGVyKSk7XG59XG5cbi50YWctYXR0cmlidXRlLFxuLnRhZy1tb3JlIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtcHJpbWFyeSkgMzQlLCB2YXIoLS10ZXh0LW11dGVkKSk7XG59XG5cbi50YWctbW9yZSB7XG4gIG1pbi13aWR0aDogMS40NXJlbTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmctaW5saW5lOiAwLjMyNXJlbTtcbn1cblxuXG4udGFnLWJyYW5kIHsgbWF4LXdpZHRoOiA0NSU7IH1cbi50YWctY2F0ZWdvcnkgeyBtYXgtd2lkdGg6IDEwMCU7IH1cbi50YWctYXR0cmlidXRlIHsgbWF4LXdpZHRoOiA0OCU7IH1cblxuXG4vKiBDb21wYWN0LWNhcmQgYXR0cmlidXRlIGNoaXBzIGFyZSBoaWRkZW4gb24gdmVyeSBzbWFsbCBzY3JlZW5zIHRvIGtlZXAgY2FyZFxuICAgaGVpZ2h0cyB1bmlmb3JtLiBTY29wZSB0aGlzIHRvIC5wcm9kdWN0LXRhZ3MgKHRoZSBjYXJkIGNoaXAgY29udGFpbmVyKSBvbmx5LFxuICAgc28gaXQgbmV2ZXIgcmVhY2hlcyB0aGUgUXVpY2sgVmlldyBwYW5lbCwgd2hpY2ggcmV1c2VzIC50YWctYXR0cmlidXRlIGZvciBpdHNcbiAgIG93biBhdHRyaWJ1dGUgY2hpcHMgKHNlZSBwcm9kdWN0LXF1aWNrLXZpZXcuY3NzIC8gcHJvZHVjdC1xdWljay12aWV3LmpzKS4gKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA0NzlweCkge1xuICAucHJvZHVjdC10YWdzIC50YWctYXR0cmlidXRlLFxuICAucHJvZHVjdC10YWdzIC50YWctbW9yZSB7IGRpc3BsYXk6IG5vbmU7IH1cbn1cblxuLyogLS0tIFByb2R1Y3QgUXVpY2sgVmlldyBUcmlnZ2VycyAtLS0gKi9cbi5wcm9kdWN0LWNhcmQtaW1hZ2UtYnV0dG9uLFxuLnByb2R1Y3QtbmFtZS1idXR0b24ge1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udDogaW5oZXJpdDtcbn1cblxuLnByb2R1Y3QtY2FyZC1pbWFnZS1idXR0b24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nOiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5wcm9kdWN0LWNhcmQtaW1hZ2UtYnV0dG9uOmZvY3VzLXZpc2libGUsXG4ucHJvZHVjdC1uYW1lLWJ1dHRvbjpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogM3B4IHNvbGlkIHZhcigtLXNjaGVtZS1mb2N1cy1yaW5nKTtcbiAgb3V0bGluZS1vZmZzZXQ6IDNweDtcbn1cblxuLnByb2R1Y3QtY2FyZC1pbWFnZS1idXR0b246Zm9jdXMtdmlzaWJsZSB7XG4gIG91dGxpbmUtb2Zmc2V0OiAtNHB4O1xufVxuXG4vKiAtLS0gUHJvZHVjdCBOYW1lIC0tLSAqL1xuLnByb2R1Y3QtbmFtZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtaW4taGVpZ2h0OiBjYWxjKDQgKiB2YXIoLS1jYXJkLW5hbWUtbGluZS1oZWlnaHQpICogMWVtKTtcbiAgZmxleDogMSAxIGF1dG87XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTkwMCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWhlYWRpbmcpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICBmb250LXNpemU6IHZhcigtLWNhcmQtbmFtZS1mb250LXNpemUpO1xuICBsaW5lLWhlaWdodDogdmFyKC0tY2FyZC1uYW1lLWxpbmUtaGVpZ2h0KTtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5kYXJrIC5wcm9kdWN0LW5hbWUgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS0xMDApOyB9XG5cbi5wcm9kdWN0LW5hbWUtYnV0dG9uIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDQ7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIHBhZGRpbmc6IDA7XG4gIHRleHQtYWxpZ246IGluaGVyaXQ7XG4gIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICBoeXBoZW5zOiBhdXRvO1xuICB0ZXh0LXdyYXA6IHByZXR0eTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucHJvZHVjdC1uYW1lLWJ1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG59XG5cbi5wcm9kdWN0LWNhcmQubGlzdC12aWV3IC5wcm9kdWN0LW5hbWUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxleDogMCAwIGF1dG87XG4gIG1pbi1oZWlnaHQ6IDA7XG4gIC8qIEF1dG8gdG9wICsgYm90dG9tIG1hcmdpbnMgY2VudGVyIHRoZSB0aXRsZSB2ZXJ0aWNhbGx5IGJldHdlZW4gdGhlXG4gICAgIHRhZ3Mgcm93IChhYm92ZSkgYW5kIHRoZSBidXR0b25zIHJvdyAoYmVsb3cpLiBJbiBhIGZsZXggY29sdW1uLFxuICAgICBmcmVlIHNwYWNlIGlzIGRpc3RyaWJ1dGVkIGVxdWFsbHkgdG8gYXV0byBtYXJnaW5zLCBzbyB0aGUgdGl0bGVcbiAgICAgc2l0cyBhdCB0aGUgbWlkcG9pbnQgb2YgdGhlIHNwYWNlIGJldHdlZW4gdGFncyBhbmQgYnV0dG9ucyB3aGlsZVxuICAgICBidXR0b25zIHNldHRsZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBjYXJkLiAqL1xuICBtYXJnaW4tdG9wOiBhdXRvO1xuICBtYXJnaW4tYm90dG9tOiBhdXRvO1xuICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAucHJvZHVjdC1jYXJkLmxpc3QtdmlldyAucHJvZHVjdC1uYW1lIHsgZm9udC1zaXplOiAxcmVtOyB9XG59XG5cbi8qIC0tLSBQcm9kdWN0IEJ1dHRvbnMgLS0tICovXG4ucHJvZHVjdC1idXR0b25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiAwLjRyZW07XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5wcm9kdWN0LWJ1dHRvbnMgLmJ0bi1tbCxcbi5wcm9kdWN0LWJ1dHRvbnMgLmJ0bi1zaG9wZWUge1xuICBmbGV4OiAxIDEgMDtcbiAgd2lkdGg6IGF1dG87XG4gIG1pbi13aWR0aDogMDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWluLWhlaWdodDogdmFyKC0tY2FyZC1hY3Rpb24tbWluLWhlaWdodCk7XG4gIHBhZGRpbmc6IDAuMzc1cmVtIDAuNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC42NXJlbTtcbiAgZm9udC1zaXplOiB2YXIoLS1jYXJkLWFjdGlvbi1mb250LXNpemUpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG5cbi5wcm9kdWN0LWJ1dHRvbnMgLmJ0bi1tbDpob3Zlcixcbi5wcm9kdWN0LWJ1dHRvbnMgLmJ0bi1zaG9wZWU6aG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG59XG5cbi5wcm9kdWN0LWJ1dHRvbnMgLmJ0bi1tbDpmb2N1cy12aXNpYmxlLFxuLnByb2R1Y3QtYnV0dG9ucyAuYnRuLXNob3BlZTpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLXNjaGVtZS1mb2N1cy1yaW5nKTtcbiAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbn1cblxuLnByb2R1Y3QtYnV0dG9ucyAudHJ1bmNhdGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAzNTlweCkge1xuICAucHJvZHVjdC1idXR0b25zIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMC4zNzVyZW07XG4gIH1cbn1cblxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtYnV0dG9ucyB7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGdhcDogMC41cmVtO1xuICAvKiBObyBtYXJnaW4tdG9wOiBhdXRvIGhlcmUg4oCUIHRoZSB0aXRsZSdzIGF1dG8gbWFyZ2lucyAoc2VlXG4gICAgIC5wcm9kdWN0LWNhcmQubGlzdC12aWV3IC5wcm9kdWN0LW5hbWUpIGNvbnN1bWUgdGhlIGZyZWUgc3BhY2VcbiAgICAgYW5kIGNlbnRlciB0aGUgdGl0bGUgYmV0d2VlbiB0YWdzIGFuZCBidXR0b25zLiBCdXR0b25zIG5hdHVyYWxseVxuICAgICBzZXR0bGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2FyZCBhcyBhIHJlc3VsdC4gKi9cbn1cblxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtYnV0dG9ucyAuYnRuLW1sLFxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtYnV0dG9ucyAuYnRuLXNob3BlZSB7XG4gIG1pbi1oZWlnaHQ6IDMycHg7XG4gIHBhZGRpbmc6IDAuNDI1cmVtIDAuN3JlbTtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtYnV0dG9ucyAuYnRuLW1sLFxuICAucHJvZHVjdC1jYXJkLmxpc3QtdmlldyAucHJvZHVjdC1idXR0b25zIC5idG4tc2hvcGVlIHtcbiAgICBtaW4taGVpZ2h0OiAzNHB4O1xuICAgIHBhZGRpbmc6IDAuNDVyZW0gMC44cmVtO1xuICAgIGZvbnQtc2l6ZTogMC43ODc1cmVtO1xuICB9XG59XG5cbi8qIC0tLSBGZWF0dXJlZCBCYWRnZSAtLS0gKi9cbi5mZWF0dXJlZC1iYWRnZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjYyNXJlbTtcbiAgbGVmdDogMC42MjVyZW07XG4gIHotaW5kZXg6IDI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC4yNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICBwYWRkaW5nOiAwLjI1cmVtIDAuNjI1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zY2hlbWUtYmFkZ2UtYmcpO1xuICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQpO1xuICBib3gtc2hhZG93OiAwIDAgMTJweCB2YXIoLS1hY2NlbnQtcHJpbWFyeS1zaGFkb3cpO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtc2l6ZTogMC42MjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyNWVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4uZmVhdHVyZWQtYmFkZ2Ugc3ZnIHtcbiAgd2lkdGg6IDAuNjI1cmVtO1xuICBoZWlnaHQ6IDAuNjI1cmVtO1xuICBmbGV4LXNocmluazogMDtcbn1cblxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLmZlYXR1cmVkLWJhZGdlIHtcbiAgdG9wOiAwLjVyZW07XG4gIGxlZnQ6IDAuNXJlbTtcbiAgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07XG4gIGZvbnQtc2l6ZTogMC42cmVtO1xufVxuXG4uZmVhdHVyZWQtdGV4dC1mdWxsIHsgZGlzcGxheTogbm9uZTsgfVxuLmZlYXR1cmVkLXRleHQtc2hvcnQgeyBkaXNwbGF5OiBpbmxpbmU7IH1cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuZmVhdHVyZWQtdGV4dC1mdWxsIHsgZGlzcGxheTogaW5saW5lOyB9XG4gIC5mZWF0dXJlZC10ZXh0LXNob3J0IHsgZGlzcGxheTogbm9uZTsgfVxufVxuXG4vKiAtLS0gRmx1aWQgR3JpZHMgLS0tICovXG4uZmx1aWQtZ3JpZC1wcm9kdWN0cyB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdhcDogMC45NXJlbTtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDI0MnB4KSwgMWZyKSk7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuXG4ucHJvZHVjdC1saXN0IHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gIGdhcDogMXJlbTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5mbHVpZC1ncmlkLXByb2R1Y3RzIHtcbiAgICBnYXA6IDFyZW07XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDI0OHB4KSwgMWZyKSk7XG4gIH1cbiAgLnByb2R1Y3QtbGlzdCB7IGdhcDogMS4xMjVyZW07IH1cbn1cblxuLyogVHdvLWNvbHVtbiBsaXN0IHZpZXcgb24gd2lkZSBkZXNrdG9wcy5cbiAgIEF0IDEwMjRweCsgdGhlIGNhdGFsb2cgY29udGVudCBhcmVhIGlzIH45NjBweCwgd2hpY2ggZ2l2ZXMgZWFjaFxuICAgY2FyZCB+NDcxcHgg4oCUIGVub3VnaCBmb3IgdGhlIDE5MnB4IGltYWdlIHBsdXMgYSBjb21mb3J0YWJsZSBjb250ZW50XG4gICBjb2x1bW4uIEJlbG93IHRoaXMgYnJlYWtwb2ludCBjYXJkcyBzdGF5IGluIGEgc2luZ2xlIGNvbHVtbiBzbyB0aGVcbiAgIGltYWdlICsgdGV4dCBuZXZlciBmZWVsIGNyYW1wZWQuICovXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWxpc3Qge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyODBweCkge1xuICAuZmx1aWQtZ3JpZC1wcm9kdWN0cyB7XG4gICAgZ2FwOiAxLjEyNXJlbTtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMjUycHgpLCAxZnIpKTtcbiAgfVxufVxuXG4uZmx1aWQtZ3JpZC10cnVzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogMS4yNXJlbTtcbn1cblxuLmZsdWlkLWdyaWQtdHJ1c3QgPiAqIHtcbiAgZmxleDogMCAxIDI2MHB4O1xuICBtaW4td2lkdGg6IDIyMHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmZsdWlkLWdyaWQtdHJ1c3QgeyBnYXA6IDEuNXJlbTsgfVxufVxuXG4vKiAtLS0gRW1wdHkgU3RhdGUgLS0tICovXG4uZW1wdHktc3RhdGUge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDRyZW0gMi41cmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsgLmVtcHR5LXN0YXRlIHsgcGFkZGluZzogNnJlbSAyLjVyZW07IH0gfVxuXG4uZW1wdHktc3RhdGUtaWNvbiB7IGZvbnQtc2l6ZTogM3JlbTsgbWFyZ2luLWJvdHRvbTogMXJlbTsgfVxuXG4uZW1wdHktc3RhdGUtdGl0bGUge1xuICBmb250LXNpemU6IDEuMTI1cmVtO1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC02MDApO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5cbi5kYXJrIC5lbXB0eS1zdGF0ZS10aXRsZSB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTIwMCk7IH1cblxuLmVtcHR5LXN0YXRlLXRleHQge1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC00MDApO1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG59XG5cbi5kYXJrIC5lbXB0eS1zdGF0ZS10ZXh0IHsgY29sb3I6IHZhcigtLXN1cmZhY2UtNDAwKTsgfVxuXG4uZW1wdHktc3RhdGUtYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xuICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQpO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gIG1pbi1oZWlnaHQ6IDQ4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyOiBub25lO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZTtcbn1cblxuLmVtcHR5LXN0YXRlLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWhvdmVyKTsgfVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUFJPRFVDVCBRVUlDSyBWSUVXXG4gICBTdGF0aWMgcHJvZHVjdCBkZXRhaWwgZHJhd2VyIC8gbW9iaWxlIGJvdHRvbSBzaGVldC5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnByb2R1Y3QtcXVpY2stdmlld1toaWRkZW5dIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBpbnNldDogMDtcbiAgei1pbmRleDogdmFyKC0tbGF5ZXItYWN0aXZlLXBhbmVsLWJhY2tkcm9wKTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2JhY2tkcm9wIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZHJhd2VyLW92ZXJsYXktYmcpO1xuICBvcGFjaXR5OiAwO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fYmFja2Ryb3Age1xuICBhbmltYXRpb246IGZhZGUtaW4gMC4yNXMgdmFyKC0tZWFzZS1vdXQpIGJvdGg7XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2JhY2tkcm9wLS1jbG9zaW5nIHtcbiAgYW5pbWF0aW9uOiBvdmVybGF5LW91dCAwLjJzIHZhcigtLWVhc2Utb3V0KSBib3RoO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19wYW5lbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IG1pbigxMDAlLCA0NDBweCk7XG4gIGhlaWdodDogMTAwZHZoO1xuICBtYXgtaGVpZ2h0OiAxMDBkdmg7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQ6IHZhcigtLWRyYXdlci1wYW5lbC1iZyk7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tZHJhd2VyLWJvcmRlcik7XG4gIGJveC1zaGFkb3c6IDAgMCA0MHB4IHZhcigtLWNocm9tZS1zaGFkb3ctbWQpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICBjb250YWluOiBsYXlvdXQgcGFpbnQ7XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXcuaXMtb3BlbiB7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fcGFuZWwge1xuICBhbmltYXRpb246IGRyYXdlci1yaWdodC1pbiAwLjNzIHZhcigtLWVhc2Utb3V0KSBib3RoO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19wYW5lbC0tY2xvc2luZyB7XG4gIGFuaW1hdGlvbjogZHJhd2VyLXJpZ2h0LW91dCAwLjJzIHZhcigtLWVhc2Utb3V0KSBib3RoO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGdhcDogMXJlbTtcbiAgcGFkZGluZzogMXJlbTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19oZWFkZXIuZHJhd2VyLWhlYWRlciB7XG4gIHBhZGRpbmc6IDFyZW07XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2hlYWRlci1pY29uLXdyYXAge1xuICBmbGV4OiAwIDAgYXV0bztcbn1cblxuLnByb2R1Y3QtcXVpY2stdmlld19fZXllYnJvdyB7XG4gIG1hcmdpbi1ib3R0b206IDAuMTI1cmVtO1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC00MDApO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsaW5lLWhlaWdodDogMS4xNTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLmRhcmsgLnByb2R1Y3QtcXVpY2stdmlld19fZXllYnJvdyB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTQwMCk7IH1cblxuLnByb2R1Y3QtcXVpY2stdmlld19faGVhZGVyIC5wcm9kdWN0LXF1aWNrLXZpZXdfX2hlYWRlci10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbn1cblxuLnByb2R1Y3QtcXVpY2stdmlld19fY2xvc2UuZHJhd2VyLWNsb3NlLWJ0biB7XG4gIGZsZXg6IDAgMCBhdXRvO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19ib2R5IHtcbiAgZmxleDogMSAxIGF1dG87XG4gIG1pbi1oZWlnaHQ6IDA7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG4gIHBhZGRpbmc6IDFyZW07XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2ltYWdlLXdyYXAge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWluLWhlaWdodDogMjAwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLXNjaGVtZS1pbWFnZS13cmFwLWJnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRhcmsgLnByb2R1Y3QtcXVpY2stdmlld19faW1hZ2Utd3JhcCB7IGJhY2tncm91bmQ6IHZhcigtLXNjaGVtZS1pbWFnZS13cmFwLWJnLWRhcmspOyB9XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2ltYWdlLXdyYXAgaW1nIHtcbiAgd2lkdGg6IG1pbigxMDAlLCAzMjBweCk7XG4gIGhlaWdodDogbWluKDQydmgsIDMyMHB4KTtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgcGFkZGluZzogMC4wNXJlbTtcbn1cblxuLnByb2R1Y3QtcXVpY2stdmlld19fY29udGVudCB7XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19jaGlwcyxcbi5wcm9kdWN0LXF1aWNrLXZpZXdfX3RhZ3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19jaGlwcyB7XG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2NoaXBzIC50YWctYnJhbmQsXG4ucHJvZHVjdC1xdWljay12aWV3X19jaGlwcyAudGFnLWNhdGVnb3J5LFxuLnByb2R1Y3QtcXVpY2stdmlld19fdGFncyAudGFnLWF0dHJpYnV0ZSB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjE4O1xuICBwYWRkaW5nOiAwLjI1cmVtIDAuNjI1cmVtO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X190YWdzIC50YWctYXR0cmlidXRlIHtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cblxuLnByb2R1Y3QtcXVpY2stdmlld19fdGl0bGUge1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC05MDApO1xuICBmb250LXNpemU6IGNsYW1wKDEuMjVyZW0sIDN2dywgMS42NXJlbSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjE2O1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cblxuLmRhcmsgLnByb2R1Y3QtcXVpY2stdmlld19fdGl0bGUgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS0xMDApOyB9XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX3RhZy1ibG9jayxcbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2Rlc2NyaXB0aW9uLWJsb2NrIHtcbiAgcGFkZGluZy10b3A6IDFyZW07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1nbGFzcy1ib3JkZXIpO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X190YWctYmxvY2sgKyAucHJvZHVjdC1xdWljay12aWV3X19kZXNjcmlwdGlvbi1ibG9jayB7XG4gIG1hcmdpbi10b3A6IDFyZW07XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX3NlY3Rpb24tdGl0bGUge1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTUwMCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNmVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4uZGFyayAucHJvZHVjdC1xdWljay12aWV3X19zZWN0aW9uLXRpdGxlIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtNDAwKTsgfVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19kZXNjcmlwdGlvbiB7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTcwMCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTtcbiAgZm9udC1zaXplOiAwLjkyNXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNjU7XG4gIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcbn1cblxuLmRhcmsgLnByb2R1Y3QtcXVpY2stdmlld19fZGVzY3JpcHRpb24geyBjb2xvcjogdmFyKC0tc3VyZmFjZS0zMDApOyB9XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2FjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDAuNjI1cmVtO1xuICBwYWRkaW5nOiAxcmVtO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTtcbiAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRyYXdlci1wYW5lbC1iZykgOTIlLCB0cmFuc3BhcmVudCk7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19hY3Rpb25zIC5idG4tbWwsXG4ucHJvZHVjdC1xdWljay12aWV3X19hY3Rpb25zIC5idG4tc2hvcGVlIHtcbiAgZmxleDogMSAxIDA7XG4gIG1pbi13aWR0aDogMDtcbiAgbWluLWhlaWdodDogNDRweDtcbiAgcGFkZGluZzogMC42NzVyZW0gMC44NzVyZW07XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbmJvZHkucHJvZHVjdC1xdWljay12aWV3LW9wZW4gLmRhcmstdG9nZ2xlLFxuYm9keS5wcm9kdWN0LXF1aWNrLXZpZXctb3BlbiAuc2NoZW1lLXBpY2tlciB7XG4gIHotaW5kZXg6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjM5cHgpIHtcbiAgLnByb2R1Y3QtcXVpY2stdmlldyB7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB9XG5cbiAgLnByb2R1Y3QtcXVpY2stdmlld19fcGFuZWwge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogYXV0bztcbiAgICBtYXgtaGVpZ2h0OiA4NWR2aDtcbiAgICBib3JkZXItbGVmdDogMDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tZHJhd2VyLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gIH1cblxuICAucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fcGFuZWwge1xuICAgIGFuaW1hdGlvbi1uYW1lOiBzaGVldC1pbjtcbiAgfVxuXG4gIC5wcm9kdWN0LXF1aWNrLXZpZXdfX3BhbmVsLS1jbG9zaW5nIHtcbiAgICBhbmltYXRpb24tbmFtZTogc2hlZXQtb3V0O1xuICB9XG5cbiAgLnByb2R1Y3QtcXVpY2stdmlld19fYm9keSB7XG4gICAgcGFkZGluZzogMC44NzVyZW07XG4gIH1cblxuICAucHJvZHVjdC1xdWljay12aWV3X19pbWFnZS13cmFwIHtcbiAgICBtaW4taGVpZ2h0OiAxODBweDtcbiAgfVxuXG4gIC5wcm9kdWN0LXF1aWNrLXZpZXdfX2ltYWdlLXdyYXAgaW1nIHtcbiAgICBoZWlnaHQ6IG1pbigzMnZoLCAyNjBweCk7XG4gIH1cblxuICAucHJvZHVjdC1xdWljay12aWV3X19hY3Rpb25zIHtcbiAgICBwYWRkaW5nOiAwLjg3NXJlbTtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMzU5cHgpIHtcbiAgLnByb2R1Y3QtcXVpY2stdmlld19fYWN0aW9ucyB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgfVxufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fYmFja2Ryb3AsXG4gIC5wcm9kdWN0LXF1aWNrLXZpZXdfX2JhY2tkcm9wLS1jbG9zaW5nLFxuICAucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fcGFuZWwsXG4gIC5wcm9kdWN0LXF1aWNrLXZpZXdfX3BhbmVsLS1jbG9zaW5nIHtcbiAgICBhbmltYXRpb246IG5vbmU7XG4gIH1cblxuICAucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fYmFja2Ryb3AgeyBvcGFjaXR5OiAxOyB9XG4gIC5wcm9kdWN0LXF1aWNrLXZpZXcuaXMtb3BlbiAucHJvZHVjdC1xdWljay12aWV3X19wYW5lbCB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA2MzlweCkge1xuICAgIC5wcm9kdWN0LXF1aWNrLXZpZXcuaXMtb3BlbiAucHJvZHVjdC1xdWljay12aWV3X19wYW5lbCB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgOC4gRFJBV0VSXG4gICBGaWx0ZXIgZHJhd2VyIG92ZXJsYXksIHBhbmVsLCBoZWFkZXIsIHNlY3Rpb25zLCBmb290ZXIsIGRyYXdlci1vcGVuIGJvZHkgc3RhdGVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIC0tLSBEcmF3ZXIgT3ZlcmxheSAtLS0gKi9cbi5kcmF3ZXItb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDA7XG4gIGJhY2tncm91bmQ6IHZhcigtLWRyYXdlci1vdmVybGF5LWJnKTtcbiAgei1pbmRleDogdmFyKC0tbGF5ZXItYWN0aXZlLXBhbmVsLWJhY2tkcm9wKTtcbiAgYW5pbWF0aW9uOiBmYWRlLWluIDAuMjVzIHZhcigtLWVhc2Utb3V0KSBib3RoO1xufVxuXG4uZHJhd2VyLW92ZXJsYXktLWNsb3NpbmcgeyBhbmltYXRpb246IG92ZXJsYXktb3V0IDAuMnMgdmFyKC0tZWFzZS1vdXQpIGJvdGg7IH1cblxuLyogLS0tIERyYXdlciBQYW5lbCAtLS0gKi9cbi5kcmF3ZXItcGFuZWwge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogODUlO1xuICBtYXgtd2lkdGg6IDM2MHB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1kcmF3ZXItcGFuZWwtYmcpO1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1kcmF3ZXItYm9yZGVyKTtcbiAgYm94LXNoYWRvdzogMCAwIDQwcHggdmFyKC0tY2hyb21lLXNoYWRvdy1tZCk7XG4gIHotaW5kZXg6IHZhcigtLWxheWVyLWFjdGl2ZS1wYW5lbCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIGFuaW1hdGlvbjogZHJhd2VyLWluIDAuM3MgdmFyKC0tZWFzZS1vdXQpIGJvdGg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG59XG5cbi5kcmF3ZXItcGFuZWwtLWNsb3NpbmcgeyBhbmltYXRpb246IGRyYXdlci1vdXQgMC4ycyB2YXIoLS1lYXNlLW91dCkgYm90aDsgfVxuXG4vKiAtLS0gRHJhd2VyIEhlYWRlciAtLS0gKi9cbi5kcmF3ZXItaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwYWRkaW5nOiAxcmVtO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTtcbn1cblxuLmRyYXdlci1oZWFkZXItbGVmdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC42MjVyZW07XG59XG5cbi5kcmF3ZXItaGVhZGVyLWljb24td3JhcCB7XG4gIHdpZHRoOiAyLjVyZW07XG4gIGhlaWdodDogMi41cmVtO1xuICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtcHJpbWFyeS1saWdodCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudC1wcmltYXJ5LWJvcmRlcik7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZTtcbn1cblxuLmRyYXdlci1oZWFkZXItaWNvbi13cmFwOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnktYm9yZGVyKTsgfVxuXG4uZHJhd2VyLWhlYWRlci1pY29uIHsgd2lkdGg6IDEuMTI1cmVtOyBoZWlnaHQ6IDEuMTI1cmVtOyB9XG5cbi5kcmF3ZXItdGl0bGUge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtOTAwKTtcbn1cblxuLmRhcmsgLmRyYXdlci10aXRsZSB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTEwMCk7IH1cblxuLmRyYXdlci1maWx0ZXItYmFkZ2Uge1xuICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWluLXdpZHRoOiAxLjI1cmVtO1xuICBoZWlnaHQ6IDEuMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDAuNjI1cmVtO1xuICBwYWRkaW5nOiAwIDAuMzc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LW9uLWFjY2VudCk7XG59XG5cbi5kcmF3ZXItY2xvc2UtYnRuIHtcbiAgd2lkdGg6IDIuMjVyZW07XG4gIGhlaWdodDogMi4yNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1kcmF3ZXItY2xvc2UtYmcpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTQwMCk7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG59XG5cbi5kYXJrIC5kcmF3ZXItY2xvc2UtYnRuLFxuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdLmRhcmsgLmRyYXdlci1jbG9zZS1idG4geyBiYWNrZ3JvdW5kOiB2YXIoLS1kcmF3ZXItY2xvc2UtYmctZGFyayk7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTMwMCk7IH1cbi5kcmF3ZXItY2xvc2UtYnRuOmhvdmVyIHsgY29sb3I6IHZhcigtLW5ldXRyYWwtNzAwKTsgYmFja2dyb3VuZDogdmFyKC0tZ2xhc3MtaG92ZXItYmcpOyB9XG4uZGFyayAuZHJhd2VyLWNsb3NlLWJ0bjpob3ZlcixcbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXS5kYXJrIC5kcmF3ZXItY2xvc2UtYnRuOmhvdmVyIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMTAwKTsgYmFja2dyb3VuZDogdmFyKC0tZHJhd2VyLWNsb3NlLWJnLWRhcmstaG92ZXIpOyB9XG5cbi8qIC0tLSBEcmF3ZXIgU2VjdGlvbnMgLS0tICovXG4uZHJhd2VyLXNlY3Rpb24geyBwYWRkaW5nOiAxcmVtIDFyZW0gMC41cmVtOyB9XG5cbi5kcmF3ZXItc2VjdGlvbi10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtNDAwKTtcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbn1cblxuLmRhcmsgLmRyYXdlci1zZWN0aW9uLXRpdGxlIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtNDAwKTsgfVxuXG4uZHJhd2VyLXBpbGxzIHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IDAuNXJlbTsgfVxuXG4vKiAtLS0gRHJhd2VyIEZvb3RlciAtLS0gKi9cbi5kcmF3ZXItZm9vdGVyIHtcbiAgcGFkZGluZzogMXJlbTtcbiAgbWFyZ2luLXRvcDogYXV0bztcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7XG59XG5cbi5kcmF3ZXItc3VibWl0LWJ0biB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwLjc1cmVtIDFyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5KTtcbiAgY29sb3I6IHZhcigtLXRleHQtb24tYWNjZW50KTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBib3gtc2hhZG93OiAwIDAgMTZweCB2YXIoLS1hY2NlbnQtcHJpbWFyeS1zaGFkb3cpO1xuICBtaW4taGVpZ2h0OiA0OHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJvcmRlcjogbm9uZTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG59XG5cbi5kcmF3ZXItc3VibWl0LWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWhvdmVyKTsgfVxuXG4vKiAtLS0gRHJhd2VyIE9wZW46IFByZXZlbnQgcGFnZSBzaGlmdCBvbiBmaXhlZCBlbGVtZW50cyAtLS0gKi9cbmJvZHkuZHJhd2VyLW9wZW4gLmRhcmstdG9nZ2xlIHtcbiAgcmlnaHQ6IGNhbGMoMS4yNXJlbSArIHZhcigtLXNjcm9sbGJhci1jb21wZW5zYXRpb24sIDBweCkpO1xufVxuXG5ib2R5LmRyYXdlci1vcGVuIC5kYXJrLXRvZ2dsZSxcbmJvZHkuZHJhd2VyLW9wZW4gLnNjaGVtZS1waWNrZXIge1xuICB6LWluZGV4OiAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICA5LiBUUlVTVFxuICAgVHJ1c3Qgc2VjdGlvbiwgZGl2aWRlciwgaGVhZGVyLCBjYXJkcywgQ1RBXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4udHJ1c3Qtc2VjdGlvbiB7XG4gIHBhZGRpbmc6IDRyZW0gMXJlbTtcbiAgbWF4LXdpZHRoOiAxNjAwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDEwO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnRydXN0LXNlY3Rpb24geyBwYWRkaW5nOiA1cmVtIDEuNXJlbTsgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC50cnVzdC1zZWN0aW9uIHsgcGFkZGluZy1sZWZ0OiAycmVtOyBwYWRkaW5nLXJpZ2h0OiAycmVtOyB9XG59XG5cbi50cnVzdC1kaXZpZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAyLjVyZW07XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAudHJ1c3QtZGl2aWRlciB7IG1hcmdpbi1ib3R0b206IDNyZW07IH0gfVxuXG4udHJ1c3QtZGl2aWRlci1saW5lIHtcbiAgZmxleDogMTtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQsIHZhcigtLXNjaGVtZS10cnVzdC1kaXZpZGVyKSwgdHJhbnNwYXJlbnQpO1xufVxuXG4uZGFyayAudHJ1c3QtZGl2aWRlci1saW5lIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgdmFyKC0tc2NoZW1lLXRydXN0LWRpdmlkZXItZGFyayksIHRyYW5zcGFyZW50KTsgfVxuXG4udHJ1c3QtZGl2aWRlci1jaXJjbGUge1xuICB3aWR0aDogMi41cmVtO1xuICBoZWlnaHQ6IDIuNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS11aS1zdXJmYWNlLWJnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdWktc3VyZmFjZS1ib3JkZXIpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLmRhcmsgLnRydXN0LWRpdmlkZXItY2lyY2xlIHsgYmFja2dyb3VuZDogdmFyKC0tdWktc3VyZmFjZS1iZy1kYXJrKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS11aS1zdXJmYWNlLWJvcmRlci1kYXJrKTsgfVxuXG4udHJ1c3QtaGVhZGVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAyLjVyZW07XG59XG5cbi50cnVzdC10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtOTAwKTtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxNWVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtO1xuICBmb250LXNpemU6IGNsYW1wKDEuNnJlbSwgM3Z3LCAyLjE1cmVtKTtcbn1cblxuLmRhcmsgLnRydXN0LXRpdGxlIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMTAwKTsgfVxuXG4udHJ1c3Qtc3VidGl0bGUge1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC01MDApO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjc7XG4gIG1heC13aWR0aDogMjhyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uZGFyayAudHJ1c3Qtc3VidGl0bGUgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAudHJ1c3Qtc3VidGl0bGUgeyBmb250LXNpemU6IDFyZW07IH0gfVxuXG4vKiAtLS0gVHJ1c3QgQ2FyZCAtLS0gKi9cbi50cnVzdC1jYXJkIHtcbiAgcGFkZGluZzogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAudHJ1c3QtY2FyZCB7IHBhZGRpbmc6IDEuNzVyZW07IH0gfVxuXG4udHJ1c3QtY2FyZC1pY29uLXdyYXAge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAzLjVyZW07XG4gIGhlaWdodDogMy41cmVtO1xuICBib3JkZXItcmFkaXVzOiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLnRydXN0LWNhcmQtaWNvbi13cmFwLS1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnktbGlnaHQpO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudC1wcmltYXJ5LWJvcmRlcik7XG59XG5cbi50cnVzdC1jYXJkLWljb24td3JhcC0tc2Vjb25kYXJ5IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXNlY29uZGFyeS1saWdodCk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtc2Vjb25kYXJ5KTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQtc2Vjb25kYXJ5LWJvcmRlcik7XG59XG5cbi50cnVzdC1jYXJkLXRpdGxlIHtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtaGVhZGluZyk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtOTAwKTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5cbi5kYXJrIC50cnVzdC1jYXJkLXRpdGxlIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMTAwKTsgfVxuXG4udHJ1c3QtY2FyZC10ZXh0IHtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtNTAwKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBsaW5lLWhlaWdodDogMS42NTtcbn1cblxuLmRhcmsgLnRydXN0LWNhcmQtdGV4dCB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTQwMCk7IH1cblxuLyogLS0tIFRydXN0IENUQSAtLS0gKi9cbi50cnVzdC1jdGEge1xuICBtYXJnaW4tdG9wOiAyLjVyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRydXN0LWN0YS1wYW5lbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMXJlbSAycmVtO1xufVxuXG4udHJ1c3QtY3RhLXRleHQge1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC01MDApO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xufVxuXG4uZGFyayAudHJ1c3QtY3RhLXRleHQgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG5cbi50cnVzdC1jdGEtbGluayB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDJweDtcbiAgdHJhbnNpdGlvbjogY29sb3IgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xuICBtaW4taGVpZ2h0OiA0OHB4O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnRydXN0LWN0YS1saW5rOmhvdmVyIHsgY29sb3I6IHZhcigtLWFjY2VudC1wcmltYXJ5LWhvdmVyKTsgfVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIDEwLiBGT09URVJcbiAgIFNpdGUgZm9vdGVyIGdyaWQsIGJyYW5kIGNvbHVtbiwgbGlua3MsIHNlY3VyaXR5IHRleHQsIGJvdHRvbSBiYXIsXG4gICBkYXJrIG1vZGUgdG9nZ2xlIEZBQlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnNpdGUtZm9vdGVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZm9vdGVyLWJnKTtcbiAgY29sb3I6IHZhcigtLWZvb3Rlci10ZXh0KTtcbiAgcGFkZGluZzogM3JlbSAxLjI1cmVtIDJyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTA7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuc2l0ZS1mb290ZXIgeyBwYWRkaW5nLXRvcDogMy41cmVtOyBwYWRkaW5nLWxlZnQ6IDEuNXJlbTsgcGFkZGluZy1yaWdodDogMS41cmVtOyB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnNpdGUtZm9vdGVyIHsgcGFkZGluZy1sZWZ0OiAycmVtOyBwYWRkaW5nLXJpZ2h0OiAycmVtOyB9XG59XG5cbi5mb290ZXItaW5uZXIgeyBtYXgtd2lkdGg6IDE2MDBweDsgbWFyZ2luOiAwIGF1dG87IH1cblxuLmZvb3Rlci1ncmlkIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gIGdhcDogMnJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMi41cmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsgLmZvb3Rlci1ncmlkIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyB9IH1cbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHsgLmZvb3Rlci1ncmlkIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmcjsgfSB9XG5cbi5mb290ZXItYnJhbmQtdGl0bGUge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtaGVhZGluZyk7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNXJlbTtcbn1cblxuLmZvb3Rlci1sb2dvLWltZyB7XG4gIHdpZHRoOiAxLjc1cmVtO1xuICBoZWlnaHQ6IDEuNzVyZW07XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG59XG5cbi5mb290ZXItYnJhbmQtaHViIHsgY29sb3I6IHZhcigtLWZvb3Rlci10ZXh0KTsgfVxuLmZvb3Rlci1icmFuZC1yYWl6IHsgY29sb3I6IHZhcigtLXNjaGVtZS1mb290ZXItYWNjZW50KTsgfVxuXG4uZm9vdGVyLWJyYW5kLWRlc2Mge1xuICBjb2xvcjogdmFyKC0tZm9vdGVyLW11dGVkKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBsaW5lLWhlaWdodDogMS42NTtcbn1cblxuLmZvb3Rlci1oZWFkaW5nIHtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICBmb250LXNpemU6IDFyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XG59XG5cbi5mb290ZXItbGlua3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogMC41cmVtIDEuMjVyZW07XG59XG5cbi5mb290ZXItbGluayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xuICBjb2xvcjogdmFyKC0tZm9vdGVyLW11dGVkKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBtaW4taGVpZ2h0OiA0NHB4O1xuICB0cmFuc2l0aW9uOiBjb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG59XG5cbi5mb290ZXItbGluazpob3ZlciB7IGNvbG9yOiB2YXIoLS1zY2hlbWUtZm9vdGVyLWFjY2VudCk7IH1cblxuLmZvb3Rlci1saW5rLWljb24ge1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xuICBmbGV4LXNocmluazogMDtcbiAgY29sb3I6IHZhcigtLXNjaGVtZS1mb290ZXItaWNvbik7XG59XG5cbi5mb290ZXItc2VjdXJpdHktdGV4dCB7XG4gIGNvbG9yOiB2YXIoLS1mb290ZXItbXV0ZWQpO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjY1O1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuXG4uZm9vdGVyLW1hcmtldHBsYWNlLWJhZGdlcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC43NXJlbTtcbiAgY29sb3I6IHZhcigtLWZvb3Rlci1tdXRlZCk7XG59XG5cbi5mb290ZXItbWFya2V0cGxhY2UtYmFkZ2Uge1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHBhZGRpbmc6IDAuMjVyZW0gMC42MjVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuMzc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zY2hlbWUtbWFya2V0cGxhY2UtYmFkZ2UtYmcpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1zY2hlbWUtbWFya2V0cGxhY2UtYmFkZ2UtYm9yZGVyKTtcbiAgY29sb3I6IHZhcigtLXNjaGVtZS1mb290ZXItYWNjZW50KTtcbn1cblxuLmZvb3Rlci1tYXJrZXRwbGFjZS1wbHVzIHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xufVxuXG4uZm9vdGVyLWVtYWlsIHtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xufVxuXG4uZm9vdGVyLWJvdHRvbSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1zY2hlbWUtZm9vdGVyLWJvcmRlcik7XG4gIHBhZGRpbmctdG9wOiAxLjVyZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC43NXJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZm9vdGVyLWNvcHlyaWdodCB7XG4gIGNvbG9yOiB2YXIoLS1mb290ZXItbXV0ZWQpO1xuICBmb250LXNpemU6IDAuNzVyZW07XG59XG5cbi5mb290ZXItZGlzY2xhaW1lciB7XG4gIGNvbG9yOiB2YXIoLS1mb290ZXItZGlzY2xhaW1lcik7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgbWF4LXdpZHRoOiAyOHJlbTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAxMC4gREFSSyBNT0RFIFRPR0dMRSAoRkFCKSAmIENPTE9SIFNDSEVNRSBQSUNLRVJcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4uZGFyay10b2dnbGUge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogMS4yNXJlbTtcbiAgcmlnaHQ6IDEuMjVyZW07XG4gIHotaW5kZXg6IHZhcigtLWxheWVyLWZsb2F0aW5nLWNvbnRyb2wpO1xuICB3aWR0aDogM3JlbTtcbiAgaGVpZ2h0OiAzcmVtO1xuICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLXRvZ2dsZS1iZyk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRvZ2dsZS1ib3JkZXIpO1xuICBib3gtc2hhZG93OiAwIDAgMTZweCB2YXIoLS1jaHJvbWUtc2hhZG93LW1kKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tc2xvdykgZWFzZSwgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tc2xvdykgZWFzZTtcbn1cblxuLmRhcmstdG9nZ2xlOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICBib3gtc2hhZG93OiAwIDAgMjRweCB2YXIoLS1jaHJvbWUtc2hhZG93LWxnKTtcbn1cblxuLmRhcmstdG9nZ2xlOmFjdGl2ZSB7IHRyYW5zZm9ybTogc2NhbGUoMC45NSk7IH1cblxuLmRhcmsgLmRhcmstdG9nZ2xlLFxuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdLmRhcmsgLmRhcmstdG9nZ2xlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tdG9nZ2xlLWJnLWRhcmspO1xuICBib3JkZXItY29sb3I6IHZhcigtLXRvZ2dsZS1ib3JkZXItZGFyayk7XG4gIGJveC1zaGFkb3c6IDAgMCAxNnB4IHZhcigtLWNocm9tZS1zaGFkb3ctZGFyayk7XG59XG5cbi5kYXJrLXRvZ2dsZS1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMS4yNXJlbTtcbiAgaGVpZ2h0OiAxLjI1cmVtO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlO1xufVxuXG4vKiBTdW4gdmlzaWJsZSBpbiBkYXJrIG1vZGUsIGhpZGRlbiBpbiBsaWdodCAqL1xuLmRhcmstdG9nZ2xlLWljb24tLXN1biB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKSBzY2FsZSgwLjUpO1xufVxuXG4uZGFyayAuZGFyay10b2dnbGUtaWNvbi0tc3VuIHtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMCkgc2NhbGUoMSk7XG59XG5cbi8qIE1vb24gdmlzaWJsZSBpbiBsaWdodCBtb2RlLCBoaWRkZW4gaW4gZGFyayAqL1xuLmRhcmstdG9nZ2xlLWljb24tLW1vb24ge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBvcGFjaXR5OiAxO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgwKSBzY2FsZSgxKTtcbn1cblxuLmRhcmsgLmRhcmstdG9nZ2xlLWljb24tLW1vb24ge1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpIHNjYWxlKDAuNSk7XG59XG5cbi8qIOKUgOKUgCBMb25nLXByZXNzIGhpbnQgcHVsc2Ugb24gdG9nZ2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuLmRhcmstdG9nZ2xlW2RhdGEtc2NoZW1lLXBpY2tlci1oaW50XSB7XG4gIGFuaW1hdGlvbjogc2NoZW1lLWhpbnQtcHVsc2UgMC42cyBlYXNlO1xufVxuQGtleWZyYW1lcyBzY2hlbWUtaGludC1wdWxzZSB7XG4gIDAlICAgeyBib3gtc2hhZG93OiAwIDAgMCAwIHZhcigtLWFjY2VudC1wcmltYXJ5LXNoYWRvdyk7IH1cbiAgNzAlICB7IGJveC1zaGFkb3c6IDAgMCAwIDEwcHggdHJhbnNwYXJlbnQ7IH1cbiAgMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDAgdHJhbnNwYXJlbnQ7IH1cbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAxMi4gQ09MT1IgU0NIRU1FIFBJQ0tFUlxuICAgUG9wdXAgcGFuZWwgZm9yIHNlbGVjdGluZyBjb2xvciBzY2hlbWVzLCB0cmlnZ2VyZWQgYnkgbG9uZy1wcmVzc1xuICAgb24gdGhlIGRhcmsvbGlnaHQgbW9kZSB0b2dnbGUgRkFCXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiAtLS0gRHJvcGRvd24gUGFuZWwgKHNoYXJlZCBiYXNlKSAtLS1cbiAgIEdsYXNzIG1vcnBoaXNtIHBvcHVwIHdpdGggc2hvdy9oaWRlIHRyYW5zaXRpb24uXG4gICBVc2VkIGJ5IGJvdGggLnNjaGVtZS1waWNrZXIgYW5kIC5wZXItcGFnZS1wYW5lbC5cbiAgIFZhcmlhbnQgcG9zaXRpb25pbmcgaXMgYXBwbGllZCB2aWEgdGhlIGNvbmNyZXRlIGNvbXBvbmVudCBjbGFzc2VzLiAqL1xuXG4uZHJvcGRvd24tcGFuZWwge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1iZyk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDEuMjVyZW07XG4gIGJveC1zaGFkb3c6IDAgMCAzMnB4IHZhcigtLWNocm9tZS1zaGFkb3ctbGcpO1xuICBvcGFjaXR5OiAwO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg2cHgpIHNjYWxlKDAuOTcpO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCB2aXNpYmlsaXR5IDBzIGxpbmVhciB2YXIoLS1kdXJhdGlvbi1zbG93KTtcbn1cblxuLmRyb3Bkb3duLXBhbmVsLmlzLW9wZW4ge1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tc2xvdykgZWFzZSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIHZpc2liaWxpdHkgMHMgbGluZWFyIDBzO1xufVxuXG4uZHJvcGRvd24tb3B0aW9uIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDAuNjI1cmVtIDAuNzVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gIGJvcmRlcjogMS41cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG59XG5cbi5kcm9wZG93bi1vcHRpb246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1ob3Zlci1iZyk7XG59XG5cbi5kcm9wZG93bi1vcHRpb24uaXMtYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdsYXNzLWhvdmVyLWJnKTtcbn1cblxuLmRyb3Bkb3duLXRpdGxlIHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XG59XG5cbi5zY2hlbWUtcGlja2VyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBib3R0b206IDVyZW07XG4gIHJpZ2h0OiAxLjI1cmVtO1xuICB6LWluZGV4OiBjYWxjKHZhcigtLWxheWVyLWZsb2F0aW5nLWNvbnRyb2wpIC0gMSk7XG4gIHdpZHRoOiAyNjBweDtcbiAgcGFkZGluZzogMXJlbTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45NSk7XG59XG5cbi5zY2hlbWUtcGlja2VyLXRpdGxlIHtcbiAgLyogLmRyb3Bkb3duLXRpdGxlIGlzIGluaGVyaXRlZCDigJQgZXh0ZW5kcyB3aXRoIHNwYWNpbmcgKi9cbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbn1cblxuLnNjaGVtZS1waWNrZXItbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMC4zNzVyZW07XG59XG5cbi5zY2hlbWUtb3B0aW9uIHtcbiAgLyogLmRyb3Bkb3duLW9wdGlvbiBpbmhlcml0ZWQg4oCUIGV4dGVuZHMgd2l0aCBmbGV4IGxheW91dCAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNzVyZW07XG59XG5cbi5zY2hlbWUtb3B0aW9uLXN3YXRjaGVzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAzcHg7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uc2NoZW1lLXN3YXRjaCB7XG4gIHdpZHRoOiAxNHB4O1xuICBoZWlnaHQ6IDE0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc2NoZW1lLXN3YXRjaC1ib3JkZXIpO1xuICBmbGV4LXNocmluazogMDtcbn1cblxuLnNjaGVtZS1vcHRpb24taW5mbyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLnNjaGVtZS1vcHRpb24tbmFtZSB7XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBsaW5lLWhlaWdodDogMS4yO1xufVxuXG4uc2NoZW1lLW9wdGlvbi1kZXNjIHtcbiAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTtcbiAgbGluZS1oZWlnaHQ6IDEuMztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi5zY2hlbWUtb3B0aW9uLWNoZWNrIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIG9wYWNpdHk6IDA7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uc2NoZW1lLW9wdGlvbi5pcy1hY3RpdmUgLnNjaGVtZS1vcHRpb24tY2hlY2sge1xuICBvcGFjaXR5OiAxO1xufVxuIiwiLyog4pSA4pSAIEFsdGVybmF0ZSBvbGl2ZSBzY2hlbWUgb3ZlcnJpZGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgT25seSBydWxlcyB3aGVyZSB0aGUgZGVzaXJlZCBjb2xvciBkaWZmZXJzIGZyb20gd2hhdFxuICAgdmFyKC0tYWNjZW50LXByaW1hcnkpIGFuZCB2YXIoLS1hY2NlbnQtc2Vjb25kYXJ5KSByZXNvbHZlIHRvXG4gICBpbiB0aGUgYWx0ZXJuYXRlIG9saXZlIGNvbnRleHQuIE1vc3Qgc3dpdGNoaW5nIGlzIGhhbmRsZWQgYnkgdG9rZW5zLlxuICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG5cbi8qIENhcmQgc2hhZG93cyAqL1xuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdIC5maWx0ZXItYmFyIHtcbiAgYm94LXNoYWRvdzogMCAwIDI0cHggdmFyKC0tY2FyZC1zaGFkb3cpO1xufVxuXG4vKiBTZWxlY3Rpb24gKi9cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXSA6OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWxpZ2h0KTsgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7IH1cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXS5kYXJrIDo6c2VsZWN0aW9uIHsgYmFja2dyb3VuZDogdmFyKC0tc2VsZWN0aW9uLWJnLWRhcmspOyBjb2xvcjogdmFyKC0tc3VyZmFjZS0xMDApOyB9XG5cbi8qIENpcmN1bGFyIGdsYXNzIGVsZW1lbnRzIOKAlCBtYXRjaCB0aGUgc2NoZW1lLXRpbnRlZCBnbGFzcyBib3JkZXIgc28gdGhleSdyZVxuICAgY29uc2lzdGVudCB3aXRoIGdsYXNzLWNhcmQgLyBnbGFzcy1wYW5lbCBpbiB0aGUgb2xpdmUgdGhlbWUgKi9cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXSAuaGVyby1zY3JvbGwtYnRuICAgeyBib3JkZXItY29sb3I6IHZhcigtLWdsYXNzLWJvcmRlcik7IH1cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXSAudHJ1c3QtZGl2aWRlci1jaXJjbGUgeyBib3JkZXItY29sb3I6IHZhcigtLWdsYXNzLWJvcmRlcik7IH1cbi8qIGRhcmstdG9nZ2xlOiBsaWdodC1tb2RlIG9ubHkg4oCUIHRoZSBhbHQuZGFyayBzdGF0ZSBhbHJlYWR5IHVzZXMgdHJhbnNwYXJlbnQgd2hpdGUgKi9cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXTpub3QoLmRhcmspIC5kYXJrLXRvZ2dsZSB7IGJvcmRlci1jb2xvcjogdmFyKC0tZ2xhc3MtYm9yZGVyKTsgfVxuXG4vKiBBbHQgZGFyayBtb2RlOiBoZXJvIHNjcm9sbCBidXR0b24gY29uc2lzdGVudCB3aXRoIGRlZmF1bHQgZGFyayAqL1xuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdLmRhcmsgLmhlcm8tc2Nyb2xsLWJ0biB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXVpLXN1cmZhY2UtYmctZGFyayk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tdWktc3VyZmFjZS1ib3JkZXItZGFyayk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG59XG5cbi8qIEFsdCBkYXJrIG1vZGU6IHRydXN0IGRpdmlkZXIgY2lyY2xlIGNvbnNpc3RlbnQgd2l0aCBkZWZhdWx0IGRhcmsgKi9cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXS5kYXJrIC50cnVzdC1kaXZpZGVyLWNpcmNsZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXVpLXN1cmZhY2UtYmctZGFyayk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tdWktc3VyZmFjZS1ib3JkZXItZGFyayk7XG59XG5cbi8qIOKUgOKUgCBBbHRlcm5hdGUgb2xpdmUgZGFyazogQ29tcG9uZW50IG92ZXJyaWRlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cblxuLyogRGFyayB0b2dnbGUgRkFCIOKAlCBhbHJlYWR5IGNvbWJpbmVkIHdpdGggZGVmYXVsdCBkYXJrIHZpYSBzZWxlY3RvciBncm91cGluZyAqL1xuXG4vKiBMb25nLXByZXNzIGhpbnQgcHVsc2Ug4oCUIHJldXNlcyBzY2hlbWUtaGludC1wdWxzZSBrZXlmcmFtZSAoaWRlbnRpY2FsIHZhbHVlcztcbiAgIC0tYWNjZW50LXByaW1hcnktc2hhZG93IHJlc29sdmVzIGNvcnJlY3RseSBwZXItdGhlbWUgYXV0b21hdGljYWxseSkgKi9cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXS5kYXJrIC5kYXJrLXRvZ2dsZVtkYXRhLXNjaGVtZS1waWNrZXItaGludF0ge1xuICBhbmltYXRpb246IHNjaGVtZS1oaW50LXB1bHNlIDAuNnMgZWFzZTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAxMS4gNDA0IFBBR0VcbiAgIE5vdCBmb3VuZCBwYWdlIHN0eWxlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLm5vdC1mb3VuZCB7XG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICBtaW4taGVpZ2h0OiAxMDBkdmg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAycmVtIDEuMjVyZW07XG59XG5cbi5ub3QtZm91bmQtY29udGVudCB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDMycmVtO1xuICBtYXJnaW46IDAgYXV0bztcbn1cblxuLm5vdC1mb3VuZC1nbGFzcyB7XG4gIHBhZGRpbmc6IDNyZW0gMnJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ubm90LWZvdW5kLWljb24ge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG59XG5cbi5ub3QtZm91bmQtdGl0bGUge1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1oZWFkaW5nKTtcbiAgZm9udC1zaXplOiBjbGFtcCg0cmVtLCAxMHZ3LCA2cmVtKTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5cblxuLm5vdC1mb3VuZC10ZXh0IHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC04MDApO1xuICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtO1xufVxuXG4uZGFyayAubm90LWZvdW5kLXRleHQgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS0xMDApOyB9XG5cbi5ub3QtZm91bmQtc3VidGV4dCB7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTUwMCk7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBtYXJnaW4tYm90dG9tOiAycmVtO1xufVxuXG4uZGFyayAubm90LWZvdW5kLXN1YnRleHQgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG5cbi5ub3QtZm91bmQtYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHdpZHRoOiBhdXRvO1xuICBwYWRkaW5nOiAwLjg3NXJlbSAxLjc1cmVtO1xufVxuXG4vKiDilIDilIAgUGFnaW5hdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cblxuLnBhZ2UtaGlkZGVuIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbi8qIFRyaWdnZXIgYnV0dG9uIOKAlCBtYXRjaGVzIHZpZXctdG9nZ2xlIGNvbnRhaW5lciBzdHlsZSAqL1xuLnBlci1wYWdlLXdyYXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5wZXItcGFnZS10cmlnZ2VyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjM3NXJlbTtcbiAgbWluLWhlaWdodDogNDBweDtcbiAgcGFkZGluZzogMCAwLjYyNXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tcGlsbC1pbmFjdGl2ZS1iZyk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXBpbGwtaW5hY3RpdmUtYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlLCBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZTtcbn1cblxuLnBlci1wYWdlLXRyaWdnZXI6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudC1wcmltYXJ5KTsgfVxuXG4ucGVyLXBhZ2UtdHJpZ2dlclthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1ob3Zlci1iZyk7XG59XG5cbi5wZXItcGFnZS1jaGV2cm9uIHtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTtcbn1cblxuLnBlci1wYWdlLXRyaWdnZXJbYXJpYS1leHBhbmRlZD1cInRydWVcIl0gLnBlci1wYWdlLWNoZXZyb24ge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuXG4vKiDilIDilIAgU3RpY2t5IHZhcmlhbnQgKGNvbXBhY3QsIG1vYmlsZS1maXJzdCkg4pSA4pSAXG4gICBVc2VkIGluc2lkZSB0aGUgc3RpY2t5IGJhci4gU21hbGxlciBoZWlnaHQvcGFkZGluZyB0aGFuIHRoZSBkZXNrdG9wXG4gICB2YXJpYW50IHNvIGl0IGZpdHMgYWxvbmdzaWRlIHRoZSBmaWx0ZXIgYnV0dG9uLCBzZWFyY2ggZmllbGQsIGFuZFxuICAgc2luZ2xlIHZpZXctdG9nZ2xlIGJ1dHRvbiBvbiBuYXJyb3cgdmlld3BvcnRzLiAqL1xuLnBlci1wYWdlLXRyaWdnZXItLXN0aWNreSB7XG4gIG1pbi1oZWlnaHQ6IDM0cHg7XG4gIHBhZGRpbmc6IDAgMC40Mzc1cmVtO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGdhcDogMC4yNXJlbTtcbn1cblxuLnBlci1wYWdlLXRyaWdnZXItLXN0aWNreSAucGVyLXBhZ2UtdHJpZ2dlcl9faWNvbiB7XG4gIHdpZHRoOiAxM3B4O1xuICBoZWlnaHQ6IDEzcHg7XG59XG5cbi5wZXItcGFnZS10cmlnZ2VyLS1zdGlja3kgLnBlci1wYWdlLWNoZXZyb24ge1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnBlci1wYWdlLXRyaWdnZXItLXN0aWNreSB7XG4gICAgbWluLWhlaWdodDogMzhweDtcbiAgICBwYWRkaW5nOiAwIDAuNXJlbTtcbiAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgfVxuICAucGVyLXBhZ2UtdHJpZ2dlci0tc3RpY2t5IC5wZXItcGFnZS10cmlnZ2VyX19pY29uIHtcbiAgICB3aWR0aDogMTVweDtcbiAgICBoZWlnaHQ6IDE1cHg7XG4gIH1cbn1cblxuLyogUGFuZWwg4oCUIG1pcnJvcnMgLnNjaGVtZS1waWNrZXIgKi9cbi5wZXItcGFnZS1wYW5lbCB7XG4gIC8qIC5kcm9wZG93bi1wYW5lbCBpbmhlcml0ZWQg4oCUIGV4dGVuZHMgd2l0aCBwb3NpdGlvbmluZyAqL1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYygxMDAlICsgMC41cmVtKTtcbiAgcmlnaHQ6IDA7XG4gIHotaW5kZXg6IDU1O1xuICB3aWR0aDogMTYwcHg7XG4gIHBhZGRpbmc6IDAuNzVyZW07XG59XG5cbi5wZXItcGFnZS1wYW5lbC10aXRsZSB7XG4gIC8qIC5kcm9wZG93bi10aXRsZSBpbmhlcml0ZWQg4oCUIGV4dGVuZHMgd2l0aCBzcGFjaW5nICovXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgcGFkZGluZzogMCAwLjI1cmVtO1xufVxuXG4ucGVyLXBhZ2Utb3B0aW9uIHtcbiAgLyogLmRyb3Bkb3duLW9wdGlvbiBpbmhlcml0ZWQg4oCUIGV4dGVuZHMgd2l0aCB0ZXh0IHNpemluZyAqL1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMC41cmVtIDAuNzVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG5cbi5wYWdpbmF0aW9uLWNvbnRyb2xzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogMXJlbTtcbiAgbWFyZ2luLXRvcDogMi41cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbn1cblxuLnBhZ2luYXRpb24tYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC40cmVtO1xuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC42MjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW5ldXRyYWwtMjAwKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS01MCk7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTcwMCk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXdlaWdodDogNTAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMsIGJvcmRlci1jb2xvciAwLjE1cywgY29sb3IgMC4xNXM7XG59XG5cbi5wYWdpbmF0aW9uLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWxpZ2h0KTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG59XG5cbi5wYWdpbmF0aW9uLWJ0bjpkaXNhYmxlZCB7XG4gIG9wYWNpdHk6IDAuMzU7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5kYXJrIC5wYWdpbmF0aW9uLWJ0biB7XG4gIGJhY2tncm91bmQ6IHZhcigtLW5ldXRyYWwtODAwKTtcbiAgY29sb3I6IHZhcigtLXN1cmZhY2UtMzAwKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1uZXV0cmFsLTYwMCk7XG59XG5cbi5kYXJrIC5wYWdpbmF0aW9uLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWxpZ2h0KTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG59XG5cbi5wYWdpbmF0aW9uLWluZGljYXRvciB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTUwMCk7XG4gIG1pbi13aWR0aDogNXJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZGFyayAucGFnaW5hdGlvbi1pbmRpY2F0b3IgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG4iXX0= */