/* app.css (modular entrypoint)
   This file now composes modular styles. Import order preserves original cascade.
   - utilities.css (variables, scrollbar, helpers)
   - typography.css (base body font/colors)
   - layout.css (page structure)
   - buttons.css (button primitives)
   - forms.css (form controls)
   - components.css (feature components)
*/
/*
  utilities.css
  Purpose: Reusable helper classes and cross-cutting globals (e.g., scrollbar theme, small utilities).
*/
/* Theme tokens */
:root { 
  color-scheme: dark;
  /* Colors */
  --color-bg: #0a0a0a;                 /* app background */
  --color-bg-elevated: #0f0f0f;        /* elevated panels */
  --color-bg-muted: #1a1a1a;           /* muted headers/strips */
  --color-surface: #2d2d2d;            /* surfaces/cards */
  --color-surface-hover: #404040;      /* hover on surfaces */
  --color-border: #404040;             /* default border */
  --color-border-strong: #2a2a2a;      /* strong outline */
  --color-text: #e0e0e0;               /* primary text */
  --color-text-strong: #ffffff;        /* strong/white text */
  --color-text-muted: #cccccc;         /* muted text */
  --color-text-subtle: #aaaaaa;        /* subtle text */
  --color-text-dim: #999999;           /* dim text */
  --color-text-inverse: #000000;       /* on-accent text */

  --color-accent: #00ff99;             /* primary accent */
  --color-accent-hover: #00dd88;       /* accent hover */
  --green-rgb: 0,255,153;              /* keep RGB for glows */

  --color-danger: #ff4444;
  --color-danger-hover: #ff6666;
  --color-danger-deep: #cc3333;
  --color-danger-soft: #ff8b8b;        /* exact tint used for delete affordances */
  --danger-rgb: 227, 75, 75;

  --color-warning: #facc15;            /* unified amber */
  --warning-rgb: 250, 204, 21;

  --color-blue: #4285F4;               /* provider blue */
  --color-blue-hover: #357ae9;

  /* Google brand palette (for logo segments/buttons) */
  --google-blue: #4285F4;
  --google-green: #34A853;
  --google-yellow: #FBBC05;
  --google-red: #EA4335;

  /* Green token aliases (Phase 5 hygiene)
     Rationale: reduce palette fragmentation by aliasing variant greens to the
     primary accent green. If a distinct shade is needed later, reintroduce it
     with a semantic name. */
  --green-neon-rgb: var(--green-rgb);
  --green-emerald-rgb: var(--green-rgb);
  --green-spring-rgb: var(--green-rgb);
  --green-stroke-dark-rgb: var(--green-rgb);
  --green-forest-1-rgb: var(--green-rgb);
  --green-forest-2-rgb: var(--green-rgb);
  --green-forest-3-rgb: var(--green-rgb);
  --green-leaf-deep-rgb: var(--green-rgb);
  --green-forest-4-rgb: var(--green-rgb);

  /* Neutral bases */
  --black-rgb: 0, 0, 0;
  --white-rgb: 255, 255, 255;
  --dark-18-rgb: 18, 18, 18;
  --dark-10-rgb: 10, 10, 10;
  /* Aliases for legacy component gradients */
  --dark-18-26-22-rgb: var(--dark-18-rgb);
  --dark-12-18-16-rgb: var(--dark-10-rgb);
  --overlay-deep-rgb: 12, 20, 16;

  /* Brand and auxiliary accents */
  --blue-muted-rgb: 43, 98, 197;
  --blue-azure-rgb: 77, 166, 255;
  --danger-strong-rgb: 255, 82, 82;
  --danger-bright-rgb: 255, 68, 68;
  --danger-x-bright-rgb: 255, 34, 34;
  --orange-accent-rgb: 255, 102, 0;
  --red-61-rgb: 255, 61, 61;
  --danger-90-rgb: 255, 90, 90;        /* legacy danger tint used in modals */
  --mint-ice-rgb: 200, 255, 230;
  --mint-snow-rgb: 230, 255, 243;
  --mint-soft-rgb: 205, 255, 235;
  --mint-dim-rgb: 190, 230, 210;

  /* Mentions / badges */
  --color-mention: #a855f7;
  --mention-rgb: 168, 85, 247;

  /* Success/danger intensity steps (watchlist, indicators) */
  --success-100: #8dffd4;
  --success-200: #4dffc0;
  --success-300: #18f296;
  --success-400: #00d67f;
  --success-500: #00ff99;
  --danger-100: #ffb3b3;
  --danger-200: #ff9999;
  --danger-300: #ff7373;
  --danger-400: #ff5252;
  --danger-500: #ff3333;
  /* Common input backgrounds */
  --input-bg: #0d0d0d;
  --input-bg-focus: #101f16;
  /* Spacing scale (8px base) */
  --space-0: 0;
  --space-0-5: 0.0625rem;       /* 1px */
  --space-1: 0.125rem;           /* 2px */
  --space-1-5: 0.1875rem;        /* 3px */
  --space-2: 0.25rem;            /* 4px */
  --space-2-5: 0.3125rem;        /* 5px */
  --space-3: 0.375rem;           /* 6px */
  --space-4: 0.5rem;             /* 8px */
  --space-4-5: 0.5625rem;        /* 9px */
  --space-5: 0.625rem;           /* 10px */
  --space-5-5: 0.6875rem;        /* 11px */
  --space-6: 0.75rem;            /* 12px */
  --space-6-5: 0.8125rem;        /* 13px */
  --space-7: 0.875rem;           /* 14px */
  --space-7-5: 0.9375rem;        /* 15px */
  --space-8: 1rem;               /* 16px */
  --space-9: 1.125rem;           /* 18px */
  --space-10: 1.25rem;           /* 20px */
  --space-12: 1.5rem;            /* 24px */
  --space-14: 1.75rem;           /* 28px */
  --space-16: 2rem;              /* 32px */
  --space-18: 2.25rem;           /* 36px */
  --space-19: 2.375rem;          /* 38px */
  --space-20: 2.5rem;            /* 40px */
  --space-24: 3rem;              /* 48px */
  --space-32: 4rem;              /* 64px */
  --space-48: 6rem;              /* 96px */
  --space-50: 6.25rem;           /* 100px */
  --space-25: 1.5625rem;         /* 25px */
  --space-35: 2.1875rem;         /* 35px */
  --space-30: 3.75rem;           /* 60px */
  --space-40: 5rem;              /* 80px */

  /* Font sizes */
  --font-10: 0.625rem;           /* 10px */
  --font-9: 0.5625rem;           /* 9px */
  --font-11: 0.6875rem;          /* 11px */
  --font-12: 0.75rem;            /* 12px */
  --font-13: 0.8125rem;          /* 13px */
  --font-14: 0.875rem;           /* 14px */
  --font-16: 1rem;               /* 16px */
  --font-18: 1.125rem;           /* 18px */
  --font-20: 1.25rem;            /* 20px */
  --font-24: 1.5rem;             /* 24px */
  --font-28: 1.75rem;            /* 28px */
  --font-32: 2rem;               /* 32px */
  --font-36: 2.25rem;            /* 36px */
  --font-40: 2.5rem;             /* 40px */
  --font-44: 2.75rem;            /* 44px */
  --font-48: 3rem;               /* 48px */
  --font-22: 1.375rem;           /* 22px */

  /* Fluid body scale */
  --font-body-min: 0.9375rem;    /* 15px */
  --font-body-base: 0.875rem;    /* 14px */
  --font-body-max: 1rem;         /* 16px */
  --font-body-slope: 0.2vw;

  /* Radii */
  --radius-xs: 0.25rem;          /* 4px */
  --radius-sm: 0.375rem;         /* 6px */
  --radius-md: 0.5rem;           /* 8px */
  --radius-md-plus: 0.625rem;    /* 10px */
  --radius-lg: 0.75rem;          /* 12px */
  --radius-xl: 0.875rem;         /* 14px */
  --radius-2xl: 1rem;            /* 16px */
  --radius-full: 9999px;         /* pill/full */

  /* Letter-spacing refinement */
  --ls-xxxs: 0.0125rem;          /* 0.2px */

  /* Layout constants */
  --layout-header-height: 5.3125rem; /* 85px */
  --header-row-height: 3.875rem;     /* 62px */
  --stock-min-w: 18.75rem;           /* 300px */
  --search-min-w: 15.625rem;         /* 250px */
  --form-col-min: 10rem;             /* 160px */
  --max-w-modal: 31.25rem;           /* 500px */
  --popover-max-w: 26rem;            /* 416px */
  --menu-max-w: 20rem;               /* 320px */
  --menu-max-h: 20rem;               /* 320px */
  --menu-min-w: 12rem;               /* 192px */
  --max-w-input-lg: 32.5rem;         /* 520px */
  --chart-min-h: 18.75rem;           /* 300px */
  --detail-box-min-h: 4.375rem;      /* 70px */
  --reorder-panel-max-w: 93.75rem;   /* 1500px */
  --max-w-xl: 37.5rem;               /* 600px */
  --max-w-home: 47.5rem;             /* 760px */
  --max-w-home-search: 43.75rem;     /* 700px */
  --container-wide-max: 80rem;       /* 1280px */
  --price-display-min-w: 11.25rem;   /* 180px */
  --reply-preview-max-w: 18.75rem;   /* 300px */
  --min-w-btn-lg: 6.25rem;           /* 100px */
  --border-1: 1px;                   /* 1px line */
  --bio-min-h: 8rem;                 /* 128px */
  --bio-h: 10rem;                    /* 160px */
  --bio-max-h: 18rem;                /* 288px */
  /* Sidebar watchlist: compact but sufficient for price, arrow, bolt, badges */
  --watchlist-w-sm: 11rem;            /* 176px */
  --watchlist-w-lg: 14.5rem;          /* 232px */
  --watchlist-drawer-min: 18rem;      /* 288px */
  --watchlist-drawer-max: 32rem;      /* 512px */
  --watchlist-drawer-fluid: 72vw;     /* default mobile drawer width */
  --dm-convo-col-w: 20rem;             /* 320px - DM conversation column width */
  --btn-icon: 1.75rem;                /* 28px */
  --btn-icon-sm: 1.5rem;              /* 24px */
  --spinner: 1.375rem;                /* 22px */
  --reorder-toggle-size: 1.9375rem;   /* 31px */
  --reorder-col-min: 8.125rem;        /* 130px */
  --banner-height: 5.5rem;            /* 88px */
  --ls-xxs: 0.0375rem;                /* 0.6px */
  --ls-xs: 0.01875rem;                /* 0.3px */
  /* Watchlist component sizes */
  --wlq-min-w: 2.1875rem;       /* 35px */
  --wlq-max-w: 2.625rem;        /* 42px */
  --wlq-price-min-w: 1.75rem;   /* 28px */
  --wlq-change-min-w: 0.625rem; /* 10px */
  --wlq-bolt-min-w: 0.75rem;    /* 12px */
  --wl-delete-size: 1.125rem;   /* 18px */

  /* Layout small widths (tokens added to remove hard-coded rems) */
  --stats-min-w: 7.5rem;             /* 120px */
  --detail-box-min-w: 5.625rem;      /* 90px */
  --filings-company-min-w: 12rem;    /* 192px */
  --filings-live-company-min-w: 10rem; /* 160px */
  --search-grid-basis: 12rem;        /* 192px */
  --search-grid-min-w: 10rem;        /* 160px */
  --table-col-min: 12rem;            /* 192px */
  /* Viewport helpers */
  --vh-full-safe: 100svh;
  --vh-full-dynamic: 100dvh;
  --vh-pane-safe: calc(100svh - var(--header-row-height));
  --vh-pane-dynamic: calc(100dvh - var(--header-row-height));

  /* Scrollbar */
  --scrollbar-track: #121212; --scrollbar-track-hover: #161d19; --scrollbar-thumb: #00ff99; --scrollbar-thumb-hover: #1fff9f; --scrollbar-thumb-active: #0ccf75; --scrollbar-corner: #0d0d0d; --scrollbar-size: 0.5rem; /* 8px */
  /* Scrollbar accessory borders (previously inline hex) */
  --scrollbar-thumb-border: #052e1d;
  --scrollbar-thumb-border-hover: #084228;
  --scrollbar-thumb-border-active: #06311f;
  /* Theme & shadow scale (reuse --green-rgb defined above) */
  --shadow-modal: 0 0.75rem 1.5rem rgba(0,0,0,0.5);
  --shadow-raised: 0 1rem 2.125rem rgba(0, 255, 153, 0.32);
  --shadow-green-xs: 0 0.25rem 0.75rem rgba(var(--green-rgb), 0.2);
  --shadow-green-sm: 0 0.375rem 1rem rgba(var(--green-rgb), 0.14);
  --shadow-green-md: 0 0.75rem 1.75rem rgba(var(--green-rgb), 0.25);
  --shadow-green-lg: 0 1.5rem 3.5rem rgba(var(--green-rgb), 0.18);
  /* Glow scales (ambient + inset) */
  --glow-green-xs: 0 0 0.25rem rgba(var(--green-rgb), 0.25);
  --glow-green-sm: 0 0 0.375rem rgba(var(--green-rgb), 0.35);
  --glow-green-md: 0 0 0.5rem rgba(var(--green-rgb), 0.55);
  --glow-green-lg: 0 0 0.875rem rgba(var(--green-rgb), 0.25);
  --glow-green-inset-sm: 0 0 0.125rem rgba(var(--green-rgb), 0.15) inset;
  --glow-green-inset-md: 0 0 0.1875rem rgba(var(--green-rgb), 0.25) inset;
  --glow-green-inset-lg: 0 0 0.25rem rgba(var(--green-rgb), 0.35) inset;
  --outline-weak: 0 0 0 0.1875rem rgba(var(--green-rgb), 0.18);
  --outline-strong: 0 0 0 0.1875rem rgba(var(--green-rgb), 0.25);
  --focus-ring-size: 0.125rem;       /* keyboard focus outline thickness */
  --focus-ring-offset: 0.125rem;     /* consistent outline offset */
  --focus-ring-color: rgba(var(--green-rgb), 0.82);
  --focus-ring-color-strong: rgba(var(--green-rgb), 0.95);
  --focus-ring-color-danger: rgba(var(--danger-rgb), 0.8);
  --focus-ring-color-warn: rgba(var(--warning-rgb), 0.75);
  /* Text glow stacks for green */
  --text-glow-green-xs: 0 0 0.25rem rgba(var(--green-rgb), 0.45);
  --text-glow-green-sm: 0 0 0.375rem rgba(var(--green-rgb), 0.55), 0 0 0.875rem rgba(var(--green-rgb), 0.38);
  --text-glow-green-md: 0 0 0.5rem rgba(var(--green-rgb), 0.7), 0 0 1rem rgba(var(--green-rgb), 0.48), 0 0 1.875rem rgba(var(--green-rgb), 0.3);
  --text-glow-green-lg: 0 0 0.625rem rgba(var(--green-rgb), 0.8), 0 0 1.25rem rgba(var(--green-rgb), 0.55), 0 0 2.25rem rgba(var(--green-rgb), 0.35);
  /* Warning / Danger text glows */
  --amber-rgb: 255, 235, 59;
  --red-rgb: 255, 51, 51;
  --text-glow-amber-xs: 0 0 0.25rem rgba(var(--amber-rgb), 0.6);
  --text-glow-amber-sm: 0 0 0.375rem rgba(var(--amber-rgb), 0.7), 0 0 0.875rem rgba(var(--amber-rgb), 0.5);
  --text-glow-red-xs: 0 0 0.25rem rgba(var(--red-rgb), 0.6);
  --text-glow-red-sm: 0 0 0.375rem rgba(var(--red-rgb), 0.7), 0 0 0.875rem rgba(var(--red-rgb), 0.5);
  /* Blue shadows for provider buttons */
  --blue-rgb: 66, 133, 244;
  --shadow-blue-sm: 0 0.5rem 1.25rem rgba(var(--blue-rgb), 0.22);
  --shadow-blue-md: 0 0.625rem 1.375rem rgba(var(--blue-rgb), 0.22);
  /* Neutral text shadows */
  --text-shadow-dark-sm: 0 0.0625rem 0.125rem rgba(0,0,0,0.2);
  --text-shadow-dark-md: 0 0.0625rem 0.1875rem rgba(0,0,0,0.4);
  --text-glow-white-sm: 0 0 0.375rem rgba(255,255,255,0.7);
  --text-glow-white-md: 0 0 0.5rem rgba(255,255,255,0.8);
  /* Utility color alphas to avoid raw rgba in component CSS */
  --white-12a: rgba(var(--white-rgb), 0.12);
  --white-20a: rgba(var(--white-rgb), 0.2);
  --white-75a: rgba(var(--white-rgb), 0.75);
  /* Composite field glows */
  --glow-green-field: 0 0 0.375rem rgba(var(--green-rgb), 0.35), 0 0 0.75rem rgba(var(--green-rgb), 0.15) inset;
  --glow-green-field-focus: 0 0 0.4375rem rgba(var(--green-rgb), 0.55), 0 0 0.875rem rgba(var(--green-rgb), 0.25) inset;

  /* Modal + Directory shadows (exact-match tokens to preserve current visuals) */
  --shadow-modal-md-black-50: 0 0.625rem 1.875rem rgba(var(--black-rgb), 0.5);
  --shadow-green-sm-22: 0 0.375rem 1.25rem rgba(var(--green-rgb), 0.22);
  --shadow-green-md-30: 0 0.625rem 1.75rem rgba(var(--green-rgb), 0.3);
  --shadow-modal-xl-black-emerald-ring: 0 24px 64px rgba(var(--black-rgb), 0.65), 0 0 0 1px rgba(var(--green-emerald-rgb), 0.25);
  --outline-emerald-2-15: 0 0 0 2px rgba(var(--green-emerald-rgb), 0.15);
  --outline-emerald-2-18: 0 0 0 2px rgba(var(--green-emerald-rgb), 0.18);
  --outline-emerald-2-25-inset-glow: 0 0 0 2px rgba(var(--green-emerald-rgb), 0.25), inset 0 0 1.5rem rgba(var(--green-emerald-rgb), 0.25);
  --shadow-elevated-sm-black-25: 0 10px 24px rgba(var(--black-rgb), 0.25);
  --shadow-elevated-md-black-35: 0 12px 24px rgba(var(--black-rgb), 0.35);
  --shadow-directory-card: 0 20px 40px rgba(var(--black-rgb), 0.45), 0 0 32px rgba(var(--green-emerald-rgb), 0.25);
  --shadow-inset-bottom-dark-35: inset 0 -1px 0 rgba(var(--black-rgb), 0.35);
  --shadow-search-shell: inset 0 0 0 1px rgba(var(--green-emerald-rgb), 0.2), 0 12px 22px rgba(var(--black-rgb), 0.35);
  --glow-emerald-inset-xl-08: inset 0 0 0.75rem rgba(var(--green-emerald-rgb), 0.08);
  --glow-emerald-inset-lg-10: inset 0 0 0.5rem rgba(var(--green-emerald-rgb), 0.10);
  --shadow-directory-list-item: 0 12px 24px rgba(var(--black-rgb), 0.25), 0 0 14px rgba(var(--green-emerald-rgb), 0.45);

  /* M1 additions: exact-size tokens to replace rem literals while preserving visuals */
  --min-w-btn-md: 7rem;              /* 112px */
  --radius-md-tight: 0.65rem;        /* ~10.4px */
  --scrollbar-size-md: 0.6rem;       /* 9.6px */
  /* Z-layer tokens (reserved; not yet used) */
  --z-toast: 1000;
  --z-dropdown: 1100;
  --z-modal: 1200;
  /* Extended z-index tokens */
  --z-sticky: 100;                 /* local sticky headers / search shells */
  --z-backdrop: 1400;
  --z-drawer: 1500;
  --z-menu: 2100;
  --z-popover: 2200;
  --z-lightbox: 3000;
  --z-splash: 9999;

  /* Radii */
  /* duplicate removed: --radius-full declared earlier with tokens */

  /* Screen-reader offscreen helpers */
  --sr-offscreen-x: -9999px;
  --icon-xs: 1.1rem;                  /* ~17.6px */
  --outline-offset-0-06: 0.06rem;     /* ~1px */

  /* Custom breakpoint tokens (documentation only; CSS variables are not usable in media queries) */
  --bp-watchlist-wide: 81.25rem;      /* 1300px: watchlist expansion */
}
/* Global overflow guardrails to prevent stray horizontal scroll
   while allowing inner containers to scroll horizontally when needed */
html, body { max-width: 100%; overflow-x: hidden; }
/* A11y: ensure chart aria-live region stays invisible to sighted users */
#chartAriaLive, .chart-aria-live {
  position: absolute !important;
  width: var(--border-1) !important;
  height: var(--border-1) !important;
  padding: 0 !important;
  margin: calc(var(--space-1) * -1) !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  clip-path: inset(50%) !important;
  white-space: nowrap !important;
  border: 0 !important;
  display: block !important;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}
.sr-only-focusable:focus,
.sr-only-focusable:focus-visible,
.sr-only-focusable:active {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
  clip-path: none;
  white-space: normal;
}
/* Responsive header search min-width to keep top bar on one row */
/* Canonical breakpoints: mdDown (<= 56.25rem), smDown (<= 47.99rem) */
@media (max-width: 56.25rem) {
  :root { --search-min-w: 10rem; }  /* 160px */
}
@media (max-width: 47.99rem) {
  :root { --search-min-w: 8rem; }   /* 128px */
}
/* Firefox */
/* Use platform-default thickness (not thin) for consistency with sidebar/chat */
html { scrollbar-width: auto; scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); }
/* WebKit Scrollbars */
::-webkit-scrollbar { width: var(--scrollbar-size); height: var(--scrollbar-size); background: transparent; }
::-webkit-scrollbar-track { background: linear-gradient(180deg, var(--input-bg), var(--scrollbar-track)); border-radius: 24px; box-shadow: inset 0 0 0.25rem rgba(0, 255, 153, 0.04), 0 0 0 0.0625rem rgba(0,255,153,0.08); }
::-webkit-scrollbar-track:hover { background: linear-gradient(180deg, var(--input-bg-focus), var(--scrollbar-track-hover)); }
::-webkit-scrollbar-thumb { background: linear-gradient(180deg, rgba(0,255,153,0.85), rgba(0,255,153,0.55)); border-radius: 24px; box-shadow: 0 0 0.375rem rgba(0,255,153,0.45), 0 0 0 0.0625rem var(--scrollbar-thumb-border) inset; border: 2px solid var(--input-bg); }
::-webkit-scrollbar-thumb:hover { background: linear-gradient(180deg, var(--scrollbar-thumb-hover), rgba(0,255,153,0.65)); box-shadow: 0 0 0.5rem rgba(0,255,153,0.65), 0 0 0 0.0625rem var(--scrollbar-thumb-border-hover) inset; }
::-webkit-scrollbar-thumb:active { background: linear-gradient(180deg, var(--scrollbar-thumb-active), rgba(0,180,108,0.65)); box-shadow: 0 0 0.25rem rgba(0,255,153,0.35), 0 0 0 0.0625rem var(--scrollbar-thumb-border-active) inset; }
::-webkit-scrollbar-corner { background: var(--scrollbar-corner); }
::-webkit-scrollbar:horizontal { height: var(--scrollbar-size); }
/* Fluid media: prevent overflow and distortion */
img, video, canvas, svg, iframe, embed, object {
  max-width: 100%;
  height: auto;
}
iframe { display: block; }
/* Ensure media within flex/grid can shrink properly */
img, video { flex-shrink: 1; min-width: 0; }
/* Global: enforce no horizontal scroll on mobile and prevent layout shifts */
/* duplicate removed: html/body overflow-x hidden already declared above */
#appContainer, #contentWrap, #pagesWrap, .app-container, .content-wrap, .pages-wrap, main, section, aside { min-width: 0; }
/* Safe viewport height helpers (prefer classes over inline styles) */
.min-h-screen-safe { min-height: 100svh; min-height: 100dvh; }
.min-h-1\/2-screen-safe { min-height: 50svh; min-height: 50dvh; }
/* Utilities for responsive visibility: prefer Tailwind responsive classes.
   Legacy `.mobile-only` / `.desktop-only` removed in favor of `hidden`, `block`,
   and custom screens `sm-down`/`md-down` configured in tailwind.config.js. */
/* Compact scrollable regions */
.scroll-thin-compact::-webkit-scrollbar { width: calc(var(--scrollbar-size) - 0.125rem); height: calc(var(--scrollbar-size) - 0.125rem); }
html.scroll-thin-compact { scrollbar-width: thin; }
/* Keyboard focus within scroll containers */
[tabindex][data-scrollable]:focus-visible { outline: var(--space-2) solid var(--color-accent); outline-offset: var(--space-2); }
/* Simple utilities */
.flex-center { display: flex; align-items: center; justify-content: center; }
.flex-between { display: flex; align-items: center; justify-content: space-between; }
.hidden { display: none !important; }
/* Color shorthand helpers */
.text-green-400, .up { color: var(--color-accent) !important; }
.text-red-400, .down { color: var(--danger-300) !important; }
/* Flash/attention utility */
@keyframes flashPulseOutline { 0% { box-shadow: 0 0 0 0 rgba(var(--blue-rgb), 0.6); } 40% { box-shadow: 0 0 0 0.375rem rgba(var(--blue-rgb), 0.3); } 70% { box-shadow: 0 0 0 0.125rem rgba(var(--blue-rgb), 0.35); } 100% { box-shadow: 0 0 0 0.1875rem rgba(var(--blue-rgb), 0.28); } }
.flash-highlight { animation: flashPulseOutline 1200ms ease-out 1; }
/* Notification animations used globally */
@keyframes fadeIn { from { opacity: 0; transform: translateX(var(--space-10)); } to { opacity: 1; transform: translateX(0); } }
@keyframes fadeOut { from { opacity: 1; transform: translateX(0); } to { opacity: 0; transform: translateX(var(--space-10)); } }
/* Overrides for legacy arbitrary px utility classes */
.text-\[10px\] { font-size: var(--font-10) !important; }
.text-\[11px\] { font-size: var(--font-11) !important; }
.min-w-\[18px\] { min-width: var(--space-9) !important; }
.h-\[18px\] { height: var(--space-9) !important; }
/* Pseudo-class helpers (mirror Tailwind-like patterns) */
.hover\:text-accent:hover { color: var(--color-accent) !important; }
/* Reduced motion preference: minimize animations and transitions globally */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}
/* Deprecated: prefer Tailwind hover: utilities; retained here previously for gaps. */
/* Removed custom hover utilities to reduce duplication with Tailwind. */
/* Semantic utility helpers mapping tokens */
/* Prefer Tailwind colors; keep aliases without !important during transition. */
.bg-app { background-color: var(--color-bg); }
.bg-elevated { background-color: var(--color-bg-elevated); }
.bg-muted { background-color: var(--color-bg-muted); }
.bg-surface { background-color: var(--color-surface); }
.bg-accent { background-color: var(--color-accent); }
.text-app { color: var(--color-text); }
.text-strong { color: var(--color-text-strong); }
.text-muted { color: var(--color-text-muted); }
.text-subtle { color: var(--color-text-subtle); }
.text-dim { color: var(--color-text-dim); }
.text-inverse { color: var(--color-text-inverse); }
.text-accent { color: var(--color-accent); }
.border-accent { border-color: var(--color-accent); }
.border-muted { border-color: var(--color-border); }
.border-strong { border-color: var(--color-border-strong); }
/* Divider helpers (emulate Tailwind divide-*) */
.divide-muted.divide-y > :not([hidden]) ~ :not([hidden]) { border-top-width: 1px; border-color: var(--color-border); }
.divide-muted.divide-x > :not([hidden]) ~ :not([hidden]) { border-left-width: 1px; border-color: var(--color-border); }
/* Soft accent shadow that composes with existing shadows */
.shadow-accent-soft { filter: drop-shadow(0 0 0.75rem rgba(var(--green-rgb), 0.1)); }
/* Z-index utilities mapped to token values */
.z-toast { z-index: var(--z-toast); }
.z-dropdown { z-index: var(--z-dropdown); }
.z-modal { z-index: var(--z-modal); }
.z-backdrop { z-index: var(--z-backdrop); }
.z-drawer { z-index: var(--z-drawer); }
.z-menu { z-index: var(--z-menu); }
.z-popover { z-index: var(--z-popover); }
.z-lightbox { z-index: var(--z-lightbox); }
.z-sticky { z-index: var(--z-sticky); }
/*
  typography.css
  Purpose: Type-related rules: fonts, text colors, headings, paragraphs, links.
  Notes:
  - Do not rename classes/ids; preserve specificity.
*/
/* Body font and smoothing */
body {
  font-family: 'Inter', sans-serif;
  background: var(--color-bg);
  color: var(--color-text);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-size: clamp(var(--font-body-min), var(--font-body-base) + var(--font-body-slope), var(--font-body-max));
}
/*
  layout.css
  Purpose: Global layout primitives and page structure. Includes containers, sections, and page wrappers.
  Notes:
  - Mobile-first: base styles target small screens; enhance via min-width breakpoints.
  - Structure-only rules (display, grid/flex, sizing, spacing, borders) go here.
  - Preserve existing class and ID names to avoid HTML changes.
*/
/* Base reset handled by Tailwind preflight; avoid duplicating universal resets */
/* App shell layout (mobile-first) */
/* Convert main frame to CSS Grid using existing IDs to avoid HTML changes. */
#appContainer { height: auto; min-height: var(--vh-full-safe); min-height: var(--vh-full-dynamic); }
#contentWrap, .content-wrap { display: grid; grid-template-columns: 1fr; grid-template-areas: 'main'; gap: 0; min-height: 0; scrollbar-gutter: stable both-edges; }
#pagesWrap, .pages-wrap { -ms-grid-row: 1; -ms-grid-column: 1; display: block; min-height: 0; grid-area: main; scrollbar-gutter: stable both-edges; }
/* Primary sections (mobile defaults) */
.stock-section { -ms-grid-row: 1; -ms-grid-column: 1; grid-area: stock; display: none; background: var(--color-bg-elevated); padding: var(--space-10); border-right: var(--space-1) solid var(--color-accent); flex-direction: column; position: relative; /* avoid unnecessary layering */ overflow-y: auto; min-width: var(--stock-min-w); width: auto; }
.chat-section { -ms-grid-row: 1; -ms-grid-column: 1; grid-area: chat; background: var(--color-bg-elevated); display: flex; flex-direction: column; border-right: 0; min-width: 0; width: auto; }
/* Watchlist aside (default hidden on mobile). Do not show divider unless the layout opts in. */
.watchlist-section { grid-area: watch; display: none; background: var(--color-bg); border-left: 0; padding: var(--space-4) var(--space-2); overflow-y: auto; flex-direction: column; gap: var(--space-3); scrollbar-gutter: stable both-edges; }
/* Activate the divider only when the main chatboard layout is active */
#contentWrap.with-watchlist .watchlist-section { border-left: var(--space-1) solid var(--color-accent); }
/* Page containers (generic neon frame) */
.page-container, .page-container-wide { border: var(--space-1) solid var(--color-accent); border-radius: var(--radius-xs); padding: var(--space-6); }
/* Scrollable page wrappers */
.page-container { padding: var(--space-12); height: 100%; overflow-y: auto; }
.page-container-wide { padding: var(--space-10); height: 100%; overflow-y: auto; max-width: var(--container-wide-max); margin: 0 auto; }
#profilePage.page-container-wide, .profile-page.page-container-wide { padding: var(--space-6) var(--space-8); max-width: none; margin: 0; }
#directMessagesPage { padding: 0; max-width: none; margin: 0; }
/* Remove padding that interferes with flex layout */
#secBotPage.page-container-wide { max-width: none; margin: 0; width: 100%; }
/* Content-visibility hints to reduce initial rendering cost for below-the-fold sections */
#watchlistSection,
#directMessagesPage,
#profilePage,
#secBotPage,
#bookmarksPage,
.page-container,
.page-container-wide {
  content-visibility: auto;
  contain-intrinsic-size: 600px 800px; /* reasonable fallback to avoid jumpy layout */
}
/* Sidebar watchlist should use its explicit grid width immediately to avoid
   off-canvas empty state on first paint. */
#watchlistSection { content-visibility: visible; contain-intrinsic-size: auto; }
/* Direct Messages page: participate in normal app flow (no viewport binding) */
#directMessagesPage {
  /* Live inside #contentWrap/#pagesWrap like other pages */
  position: static;
  /* Two-column 30/70 grid that fills the page */
  display: grid;
  grid-template-columns: 30% 70%;
  grid-template-rows: 1fr;
  align-items: stretch;
  gap: 0;
  width: 100%;
  /* Vertically bind the page to the viewport area under the header */
  height: var(--vh-pane-safe);
  height: var(--vh-pane-dynamic);
  max-height: var(--vh-pane-safe);
  max-height: var(--vh-pane-dynamic);
  max-width: none;
  min-height: 0; /* enable inner scroll regions */
  overflow: hidden;
  /* Act as a container for layout queries if needed */
  container-type: inline-size;
  /* Render immediately to avoid measuring with fallback intrinsic size */
  content-visibility: visible;
  contain-intrinsic-size: none;
}
/* Flatten any internal wrapper so grid items are columns directly */
#directMessagesPage > .dm-layout { display: contents; }
/* Also handle builds where the wrapper lacks the .dm-layout class */
#directMessagesPage > div:not([id]) { display: contents; }
/* Profile page full width override */
#profilePage.page-container-wide {
  width: 100%;
  max-width: none;
}
/* (reverted: do not force viewport binding for profile page on desktop) */
/* Quick grids */
.detail-box-grid { display: flex; flex-wrap: wrap; gap: var(--space-4); margin-top: var(--space-5); }
.detail-box-grid > * { flex: 1 1 var(--detail-box-min-w); min-width: var(--detail-box-min-w); }
/* Responsive metrics grid using CSS Grid */
.metrics-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr)); gap: var(--space-3); width: 100%; align-items: stretch; }
/* Two-column region in stock header */
.main-content-area { display: flex; gap: var(--space-12); align-items: flex-start; flex-direction: column; }
/* Inner main layout: stock | chat grid (mobile-first) */
#mainPage { container-type: inline-size; }
#mainPage > .main-grid { display: grid; grid-template-columns: 1fr; grid-template-areas: 'chat'; gap: 0; min-height: 0; }
/* Container query: switch to two columns when the main page container is wide enough.
   Rationale: prefer container queries when supported for component-scoped
   responsiveness; retain @media fallback below for broader compatibility. */
@container (min-width: 48rem) {
  #mainPage > .main-grid {
    grid-template-columns: minmax(var(--stock-min-w), 0.8fr) minmax(0, 1fr);
    grid-template-areas: 'stock chat';
  }
}
@media (min-width: 48rem) {
  #mainPage > .main-grid {
    grid-template-columns: minmax(var(--stock-min-w), 0.8fr) minmax(0, 1fr);
    grid-template-areas: 'stock chat';
  }
  .stock-section { 
    -ms-grid-row: 1; 
    -ms-grid-column: 1;
  }
  .chat-section { 
    -ms-grid-row: 1; 
    -ms-grid-column: 2;
  }
}
/* ---------------------------------------------
   Enhancements via min-width breakpoints
   --------------------------------------------- */
/* Tablet: two columns (stock ~40% / chat ~60%), watchlist hidden */
@media (min-width: 48rem) {
  /* Leave inner layout to the existing flex wrapper inside #mainPage */
  .stock-section { display: flex; }
  .chat-section { border-right: 0; }
  .watchlist-section { display: none; }
  .main-content-area { flex-direction: column; gap: var(--space-8); }
}
/* Desktop: show watchlist and rebalance columns only when requested */
@media (min-width: 64.0625rem) {
  #contentWrap.with-watchlist {
    /* Allow watchlist column to grow to its content when needed */
    grid-template-columns: 1fr minmax(var(--watchlist-w-sm), max-content);
    grid-template-areas: 'main watch';
  }

  #contentWrap:not(.with-watchlist) {
    grid-template-columns: 1fr;
    grid-template-areas: 'main';
  }

  /* Leave inner layout to the existing flex wrapper inside #mainPage */
  .chat-section { border-right: var(--space-1) solid var(--color-accent); }
  /* Let the grid track size the sidebar; ensure a sensible floor */
  #contentWrap.with-watchlist .watchlist-section { display: flex; width: auto; min-width: var(--watchlist-w-sm); }
  #contentWrap.with-watchlist > #pagesWrap, #contentWrap.with-watchlist > .pages-wrap { 
    -ms-grid-row: 1; 
    -ms-grid-column: 1;
  }

  #contentWrap:not(.with-watchlist) > #pagesWrap, #contentWrap:not(.with-watchlist) > .pages-wrap { 
    -ms-grid-row: 1; 
    -ms-grid-column: 1;
  }
  .watchlist-section { 
    -ms-grid-row: 1; 
    -ms-grid-column: 2;
  }
}
/* Large desktops: widen watchlist */
@media (min-width: 100rem) {
  /* Prefer wider floor but still allow content to dictate max as needed */
  #contentWrap.with-watchlist {
    grid-template-columns: 1fr minmax(var(--watchlist-w-lg), max-content);
  }
}
/* Mobile view toggle: show stock details panel instead of chat when explicitly requested */
/* Applies only on narrow screens (default mobile layout) */
@media (max-width: 47.99rem) {
  /* When the main container signals stock view, reveal stock panel at full width */
  #mainPage.view-stock .stock-section { display: flex; width: 100%; min-width: 0; border-right: 0; }
  #mainPage.view-stock .chat-section { display: none; }
}
/* ---------------------------------------------
   Layout primitives
   --------------------------------------------- */
/* Vertical stack: evenly spaced column layout */
.stack { display: flex; flex-direction: column; gap: var(--space-4); }
/* Cluster: row layout with wrapping and gaps */
.cluster { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-4); }
/* Split: two-column minmax with gap */
.split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--space-6); }
/* Sidebar: content area with fixed-width aside on the end */
.sidebar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--space-6); }
/* ---------------------------------------------
   Viewport Height Management for Sections
   Bind primary sections to the viewport area under the header row.
   High-level container sizing belongs here to avoid duplication.
   --------------------------------------------- */
@media (min-width: 48rem) {
  :is(.chat-section, .watchlist-section, .stock-section) {
    height: var(--vh-pane-safe);
    height: var(--vh-pane-dynamic);
    max-height: var(--vh-pane-safe);
    max-height: var(--vh-pane-dynamic);
  }
  .chat-section { overflow: hidden; }
  .watchlist-section {
    overflow-y: auto;
    overflow-x: hidden;
    /* Reserve space for scrollbars on both edges for consistent inline-end measurements */
    scrollbar-gutter: stable both-edges;
  }
  .stock-section {
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-gutter: stable;
  }
}
@media (max-width: 47.99rem) {
  .chat-section,
  .stock-section {
    /* Bind key panes to the viewport area under the header on mobile too. */
    height: var(--vh-pane-safe);
    height: var(--vh-pane-dynamic);
    max-height: var(--vh-pane-safe);
    max-height: var(--vh-pane-dynamic);
  }
  .chat-section { overflow: hidden; }
  .watchlist-section {
    max-height: var(--vh-pane-safe);
    max-height: var(--vh-pane-dynamic);
    overflow-y: auto;
    scrollbar-gutter: stable;
  }
  .stock-section {
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-gutter: stable;
  }

  /* Ensure the stock info container participates fully in the column layout */
  #mainPage.view-stock #stockInfoContainer {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
  }
  #mainPage.view-stock #stockMetrics { flex: 0 0 auto; }
  #mainPage.view-stock .chart-container { flex: 1 1 auto; min-height: 0; }
  #mainPage.view-stock .chart-timeline-buttons { flex: 0 0 auto; }
}
/*
  buttons.css
  Purpose: All button styles including generic .btn and custom button-like components.
  Mobile-first, using relative units and fluid-friendly paddings.
*/
/* Generic buttons */
.btn { padding: var(--space-5) var(--space-10); border-radius: var(--radius-sm); font-weight: 700; cursor: pointer; transition: background 160ms ease; border: none; }
.btn-primary { background: var(--color-accent); color: var(--color-text-inverse); }
.btn-primary:hover { background: var(--color-accent-hover); }
.btn-secondary { background: var(--color-surface-hover); color: var(--color-text-strong); }
.btn-secondary:hover { background: var(--color-surface-hover); }
.btn-danger { background: var(--color-danger); color: var(--color-text-strong); }
.btn-danger:hover { background: var(--color-danger-deep); }
.btn-outline { background:transparent; color:var(--color-accent); border:var(--border-1) solid var(--color-accent); font-weight:700; padding:var(--space-4) var(--space-7); border-radius:var(--radius-md); }
.btn-outline:hover { background:var(--color-accent); color:var(--color-text-inverse); }
.btn-outline[disabled], .btn[disabled], button[disabled] { opacity: 0.6; cursor: not-allowed; }
/* Shared keyboard focus outline for button-like controls */
:where(
  .btn,
  .btn-primary,
  .btn-secondary,
  .btn-danger,
  .btn-outline,
  .btn-nav,
  .btn-go,
  .action-btn,
  .btn-report-bug,
  .btn-profile-page,
  #profilePageBtn,
  .profile-button,
  .search-btn,
  .search-toggle-btn,
  .btn-google,
  .chart-action-btn,
  .chart-action-btn-icon,
  .timeline-btn,
  .btn-add-to-watchlist,
  #addToWatchlistBtn,
  .btn-refresh-stock-price,
  #refresh-stock-price,
  .home-search-btn,
  .uk-filings-search-btn,
  .df-clear-btn,
  .danger-action-btn
):focus-visible {
  outline: var(--focus-ring-size, 0.125rem) solid var(--focus-ring-color, rgba(var(--green-rgb), 0.82));
  outline-offset: var(--focus-ring-offset, 0.125rem);
}
.danger-action-btn:focus-visible { outline-color: var(--focus-ring-color-danger, rgba(var(--danger-rgb), 0.8)); }
.btn-report-bug:focus-visible { outline-color: var(--focus-ring-color-warn, rgba(var(--warning-rgb), 0.75)); }
/* Generic bordered action button */
.action-btn { background: transparent; border: var(--border-1) solid var(--color-accent); color: var(--color-accent); cursor: pointer; font-size: var(--font-12); font-weight: 700; padding: var(--space-2) var(--space-5); border-radius: var(--radius-xs); transition: background 160ms ease, color 160ms ease, border-color 160ms ease, transform 160ms ease, box-shadow 160ms ease; }
.action-btn:hover { background: var(--color-accent); color: var(--color-text-inverse); }
/* Custom navigation button */
.btn-nav {
  background: transparent;
  color: var(--color-accent);
  border: var(--border-1) solid var(--color-accent);
  font-weight: 600;
  padding: var(--space-6) var(--space-6);
  line-height: 1;
  height: auto;
  border-radius: var(--radius-sm);
  font-size: var(--font-14);
}
.btn-nav:hover {
  background: var(--color-accent);
  color: var(--color-text-inverse);
}
/* Suppress hover glow temporarily after navigation */
body.no-hover .btn-nav:hover {
  background: transparent;
  color: var(--color-accent);
}
/* Go button: only flash green on active press; don't stay green on hover/focus */
.btn-go:hover,
.btn-go:focus,
.btn-go:focus-visible {
  background: transparent;
  color: var(--color-accent);
}
.btn-go:active {
  background: var(--color-accent);
  color: var(--color-text-inverse);
}
/* Mobile: make the top-right Go button larger and easier to tap */
@media (max-width: 56.25rem) {
  .btn-go {
    padding: var(--space-7) var(--space-10);
    font-size: calc(var(--font-14) * 1.15);
    border-radius: var(--radius-md);
  }
}
/* Mobile: prevent sticky hover and use green only while actively pressing
   Applies broadly to major button variants across the app. Desktop remains unchanged. */
@media (hover: none) and (pointer: coarse) {
  /* Neutralize hover/focus styling that would otherwise stick on touch (target non-primary variants) */
  .btn-nav:hover,
  .btn-nav:focus,
  .btn-nav:focus-visible,
  .action-btn:hover,
  .btn-outline:hover,
  .chart-action-btn:hover,
  .chart-action-btn-icon:hover,
  .search-btn:hover,
  .search-toggle-btn:hover,
  .uk-filings-search-btn:hover,
  .df-clear-btn:hover,
  .btn-report-bug:hover,
  .home-search-btn:hover,
  .timeline-btn:hover {
    background: transparent;
    color: var(--color-accent);
    box-shadow: none;
    transform: none;
  }

  /* While finger is down, show the green flash; release reverts instantly */
  .btn-nav:active,
  .action-btn:active,
  .btn-outline:active,
  .chart-action-btn:active,
  .chart-action-btn-icon:active,
  .search-btn:active,
  .search-toggle-btn:active,
  .uk-filings-search-btn:active,
  .df-clear-btn:active,
  .btn-report-bug:active,
  .home-search-btn:active,
  .timeline-btn:active {
    background: var(--color-accent);
    color: var(--color-text-inverse);
    border-color: var(--color-accent);
  }

  /* Respect destructive/danger variants */
  .danger-action-btn:hover,
  .danger-action-btn:active { background: var(--color-danger); color: var(--color-text-strong); }
}
/* Report bug button */
.btn-report-bug {
  background: rgba(var(--warning-rgb), 0.10);
  color: var(--color-warning);
  border: var(--border-1) solid var(--color-warning);
  font-weight: 600;
  padding: var(--space-6) var(--space-5);
  line-height: 1;
  height: auto;
  border-radius: var(--radius-sm);
  font-size: var(--font-12);
  display: inline-flex;
  align-items: center;
  gap: var(--space-2-5);
}
.btn-report-bug:hover {
  background: var(--color-warning);
  color: var(--color-text-inverse);
}
.btn-report-bug svg { width: var(--space-7); height: var(--space-7); }
/* Header full-height nav sizing handled here (class-first) */
/* Auth specific provider button */
.btn-google { width:100%; background:var(--color-blue); color:var(--color-text-strong); border:var(--border-1) solid var(--color-blue-hover); border-radius:var(--radius-md); padding:var(--space-5) var(--space-7); display:flex; align-items:center; justify-content:center; gap:var(--space-5); font-weight:700; text-shadow: var(--text-shadow-dark-sm); }
.btn-google:hover{ background:var(--color-blue-hover); }
/* Compact Action Buttons */
.chart-action-btn { background: var(--color-surface); color: var(--color-text-muted); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-xs); padding: var(--space-3) var(--space-5); font-size: var(--font-12); font-weight: 500; cursor: pointer; transition: background 160ms ease, color 160ms ease, border-color 160ms ease, transform 160ms ease, box-shadow 160ms ease; text-decoration: none; display: inline-flex; align-items: center; gap: var(--space-2); white-space: nowrap; }
.chart-action-btn:hover { background: var(--color-accent); color: var(--color-text-inverse); border-color: var(--color-accent); }
.chart-action-btn:active { transform: none; }
/* Icon-only variant */
.chart-action-btn-icon { background: var(--color-surface); color: var(--color-text-muted); border: var(--border-1) solid var(--color-border); border-radius: 50%; width: var(--btn-icon); height: var(--btn-icon); padding: 0; font-size: var(--font-12); line-height: var(--btn-icon); font-weight: 700; font-family: system-ui, sans-serif; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; transition: background 160ms ease, color 160ms ease, border-color 160ms ease, transform 160ms ease, box-shadow 160ms ease; }
.chart-action-btn-icon--sm { width: var(--btn-icon-sm); height: var(--btn-icon-sm); font-size: var(--font-11); line-height: var(--btn-icon-sm); font-weight: 700; padding: 0; }
.chart-action-btn-icon:hover { background: var(--color-accent); color: var(--color-text-inverse); border-color: var(--color-accent); }
/* Simplified compact watchlist button */
#addToWatchlistBtn, .btn-add-to-watchlist { width: var(--btn-icon); height: var(--btn-icon); line-height: var(--btn-icon); font-size: var(--font-12); font-weight: 700; text-align: center; }
/* Refresh stock price control */
#refresh-stock-price, .btn-refresh-stock-price { font-size: clamp(var(--font-28), 1.25rem + 1.5vw, var(--font-36)); line-height: 1; color: var(--color-accent); background: transparent; border: none; border-radius: var(--radius-sm); padding: 0; display: flex; align-items: center; justify-content: center; transition: color 160ms ease, transform 160ms ease, filter 160ms ease; cursor: pointer; }
#refresh-stock-price:hover, .btn-refresh-stock-price:hover { color: var(--color-accent-hover); transform: scale(1.1); filter: drop-shadow(0 0 0.375rem rgba(var(--green-rgb), 0.35)); }
/* Timeline buttons (chart period controls) */
.timeline-btn { background: var(--color-bg); color: var(--color-text-strong); border: var(--border-1) solid var(--color-border-strong); border-radius: var(--radius-md); padding: var(--space-3) var(--space-5); font-size: var(--font-12); cursor: pointer; transition: background 160ms ease-in-out, color 160ms ease-in-out, border-color 160ms ease-in-out, transform 160ms ease-in-out, box-shadow 160ms ease-in-out; text-align: center; min-width: 0; }
.timeline-btn:hover { background: var(--color-bg-elevated); border-color: var(--color-border); }
.timeline-btn.active { background: var(--color-accent); color: var(--color-text-inverse); border-color: var(--color-accent); }
.timeline-btn.loading { opacity: .6; cursor: not-allowed; }
/* Desktop (pointer: fine): green hover like top nav buttons */
@media (hover: hover) and (pointer: fine) {
  .timeline-btn:hover,
  .timeline-btn:focus,
  .timeline-btn:focus-visible {
    background: var(--color-accent);
    color: var(--color-text-inverse);
    border-color: var(--color-accent);
  }
}
/* Danger Action Button */
.danger-action-btn { background: var(--color-danger); color: var(--color-text-strong); border: var(--border-1) solid rgba(var(--danger-rgb), 0.25); border-radius: var(--radius-sm); padding: var(--space-3) var(--space-5); font-size: var(--font-16); font-weight: 700; cursor: pointer; transition: transform 160ms ease, box-shadow 160ms ease, background 160ms ease, border-color 160ms ease; text-decoration: none; display: inline-flex; align-items: center; justify-content: center; line-height: 1; }
.danger-action-btn:hover { background: var(--color-danger-hover); transform: translateY(-2px) scale(1.03); border-color: rgba(var(--danger-rgb), 0.55); box-shadow: 0 0.625rem 1.5rem rgba(var(--danger-rgb), 0.35), 0 0 0 0.1875rem rgba(var(--danger-rgb), 0.22) inset; }
.danger-action-btn:active { transform: translateY(-1px) scale(0.99); box-shadow: 0 0.375rem 0.875rem rgba(var(--danger-rgb), 0.18) inset; }
.danger-action-btn:focus-visible { outline: var(--space-1-5) solid var(--color-danger-hover); outline-offset: var(--space-1-5); }
/* Profile CTA button */
.profile-button { background: var(--color-accent); color: var(--color-text-inverse); border: none; border-radius: var(--radius-md); padding: var(--space-6); font-weight: 700; cursor: pointer; transition: background 160ms ease, transform 160ms ease, box-shadow 160ms ease, color 160ms ease; text-align: center; margin-bottom: var(--space-7-5); }
.profile-button:hover { background: var(--color-accent-hover); transform: translateY(-1px); }
/* Search buttons */
.search-btn { background: var(--color-surface-hover); color: var(--color-text); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-sm); padding: var(--space-4) var(--space-8); font-weight: 600; cursor: pointer; transition: background 160ms ease, color 160ms ease, border-color 160ms ease, transform 160ms ease, box-shadow 160ms ease; }
.search-btn:hover { background: var(--color-surface-hover); border-color: var(--color-accent); }
.search-clear-btn { background: var(--color-surface); }
.search-toggle-btn { background: transparent; border: var(--border-1) solid var(--color-accent); color: var(--color-accent); font-size: var(--font-18); cursor: pointer; padding: var(--space-2) var(--space-4); border-radius: var(--radius-sm); display: inline-flex; align-items: center; justify-content: center; line-height: 1; transition: background .18s ease, box-shadow .18s ease, color .18s ease; }
.search-toggle-btn:hover { background: var(--color-accent); color: var(--color-text-inverse); box-shadow: 0 0 0.375rem rgba(var(--green-rgb), 0.55), 0 0 0.75rem rgba(var(--green-rgb), 0.25) inset; }
.icon-magnify { width: var(--space-10); height: var(--space-10); stroke: var(--color-accent); stroke-width: 2.2; fill: none; stroke-linecap: round; stroke-linejoin: round; pointer-events: none; }
.search-toggle-btn:hover .icon-magnify { stroke: var(--color-text-inverse); }
/* Bookmark active state */
.msg-bookmark.bookmarked { background: var(--color-accent); color: var(--color-text-inverse); border: var(--border-1) solid var(--color-accent); }
/* Form Types button (unified across pages) */
.form-types-btn { padding: var(--space-4) var(--space-6); font-size: var(--font-13); line-height: 1; border-radius: var(--radius-lg); font-weight: 700; }
/* Home page prominent search CTA */
.home-search-btn { background: var(--color-accent); color: var(--color-text-inverse); border: none; border-radius: var(--radius-md); padding: var(--space-8) var(--space-12); font-size: var(--font-16); font-weight: 700; cursor: pointer; transition: background 160ms ease; }
.home-search-btn:hover { background: var(--color-accent-hover); }
/* UK filings search button */
.uk-filings-search-btn { background: transparent; color: var(--color-accent); border: var(--border-1) solid var(--color-accent); border-radius: var(--radius-sm); padding: var(--space-6) var(--space-6); font-size: var(--font-14); font-weight: 600; line-height: 1; height: auto; cursor: pointer; transition: background 160ms ease, color 160ms ease, border-color 160ms ease, transform 160ms ease, box-shadow 160ms ease; min-width: var(--min-w-btn-lg); }
.uk-filings-search-btn:hover,
.uk-filings-search-btn:focus-visible { background: var(--color-accent-hover); color: var(--color-text-inverse); }
.uk-filings-search-container .uk-filings-search-btn:hover,
.uk-filings-search-container .uk-filings-search-btn:focus-visible {
  /* Increase specificity to override Tailwind utilities like .text-accent */
  color: var(--color-text-inverse);
}
.uk-filings-search-btn:disabled { background: var(--color-surface-hover); cursor: not-allowed; opacity: 0.7; }
/* Cool Profile Button */
#profilePageBtn, .btn-profile-page {
  background: linear-gradient(135deg, var(--color-accent) 0%, var(--color-accent-hover) 50%, var(--color-accent) 100%);
  background-size: 200% 200%;
  color: var(--color-text-inverse);
  border: none;
  border-radius: var(--radius-lg);
  font-weight: 700;
  padding: var(--space-6) var(--space-8);
  line-height: 1;
  height: auto;
  position: relative;
  overflow: hidden;
  transition: transform 160ms cubic-bezier(0.175, 0.885, 0.32, 1.275), background 160ms ease, color 160ms ease, box-shadow 160ms ease;
  box-shadow: 0 0.25rem 0.9375rem rgba(var(--green-rgb), 0.2);
  animation: profilePulse 4s ease-in-out infinite;
}
/* Responsive trimming for compact headers */
@media (max-width: 80rem) {
  .btn-nav,
  #profilePageBtn, .btn-profile-page,
  .btn-report-bug {
    padding-left: var(--space-5);
    padding-right: var(--space-5);
    font-size: var(--font-12);
  }
}
@media (max-width: 64rem) {
  .btn-nav,
  #profilePageBtn, .btn-profile-page,
  .btn-report-bug {
    padding-left: var(--space-4);
    padding-right: var(--space-4);
  }
  .btn-report-bug span { display: none; }
}
#profilePageBtn::before, .btn-profile-page::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(var(--white-rgb),  0.3), transparent);
  transform: translateX(-100%);
  transition: transform 160ms ease;
}
#profilePageBtn:hover, .btn-profile-page:hover {
  background-position: 100% 0;
  transform: translateY(-0.125rem) scale(1.05);
  box-shadow: 0 0.5rem 1.5625rem rgba(var(--green-rgb), 0.4), 0 0 1.25rem rgba(var(--green-rgb), 0.2);
  border: var(--border-1) solid rgba(var(--green-rgb), 0.5);
  animation: profileGlow 2s ease-in-out infinite alternate;
}
#profilePageBtn:hover::before, .btn-profile-page:hover::before {
  transform: translateX(100%);
}
#profilePageBtn:active, .btn-profile-page:active {
  transform: translateY(-0.0625rem) scale(1.02);
  box-shadow: 0 0.25rem 0.9375rem rgba(var(--green-rgb), 0.3);
}
#profilePageBtn span:first-child, .btn-profile-page span:first-child {
  font-size: var(--font-16);
  display: inline-flex;
  transition: transform 0.3s ease;
}
#profilePageBtn:hover span:first-child, .btn-profile-page:hover span:first-child {
  transform: rotate(360deg) scale(1.2);
}
#profilePageBtn span:last-child, .btn-profile-page span:last-child {
  font-weight: 800;
  text-shadow: var(--text-shadow-dark-sm);
}
@keyframes profileGlow {
  0% { box-shadow: var(--shadow-green-md); }
  100% { box-shadow: var(--shadow-green-lg); }
}
@keyframes profilePulse {
  0%, 100% {
    background-position: 0% 0%;
    box-shadow: 
      0 0.25rem 0.9375rem rgba(var(--green-rgb), 0.2),
      0 0 0.625rem rgba(var(--green-rgb), 0.1);
  }
  50% {
    background-position: 100% 100%;
    box-shadow: 
      0 0.375rem 1.25rem rgba(var(--green-rgb), 0.3),
      0 0 0.9375rem rgba(var(--green-rgb), 0.2);
  }
}
/* (profileGreenFlow removed; reverted to static idle state) */
/*
  forms.css
  Purpose: All styles related to form elements (input, select, textarea, label) and focused states.
  Mobile-first, relative units, and wrapping search controls to avoid overflow.
*/
/* Neon search bar */
.ticker-input { border: var(--space-1-5) solid var(--color-accent); box-shadow: var(--glow-green-field); background: var(--input-bg); }
.ticker-input:focus { outline: none; box-shadow: var(--glow-green-field-focus); background: var(--input-bg-focus); }
/* Reusable neon input style */
:is(
  .neon-input,
  #newSubgroupInput,
  .watchlist-add-input,
  #secFilingsSearchInput,
  #ukFilingsSearchInput,
  #ukCompanyInput,
  #dmStartInput,
  #dmGroupName,
  #dmGroupMemberInput,
  #dmAddMemberInput,
  #dmInput,
  #messageInput,
  #profileBioInput,
  textarea#profileBioInput,
  textarea#notesModalTextarea,
  .input-new-subgroup,
  .input-sec-filings-search,
  .input-uk-filings-search,
  .input-uk-company,
  .input-dm-start,
  .input-dm-group-name,
  .input-dm-group-member,
  .input-dm-add-member,
  .input-dm,
  .input-message,
  .input-profile-bio,
  textarea.input-profile-bio,
  textarea.input-notes-modal
) { border: var(--space-1) solid var(--color-accent); background: var(--input-bg); box-shadow: var(--glow-green-field); transition: box-shadow .18s ease, background .18s ease; }
:is(
  .neon-input,
  #newSubgroupInput,
  .watchlist-add-input,
  #secFilingsSearchInput,
  #ukFilingsSearchInput,
  #ukCompanyInput,
  #dmStartInput,
  #dmGroupName,
  #dmGroupMemberInput,
  #dmAddMemberInput,
  #dmInput,
  #messageInput,
  #profileBioInput,
  textarea#profileBioInput,
  textarea#notesModalTextarea,
  .input-new-subgroup,
  .input-sec-filings-search,
  .input-uk-filings-search,
  .input-uk-company,
  .input-dm-start,
  .input-dm-group-name,
  .input-dm-group-member,
  .input-dm-add-member,
  .input-dm,
  .input-message,
  .input-profile-bio,
  textarea.input-profile-bio,
  textarea.input-notes-modal
):focus { outline: none; background: var(--input-bg-focus); box-shadow: var(--glow-green-field-focus); }
/* Moderation + generic forms */
.form-input, .form-textarea { width: 100%; padding: var(--space-4) var(--space-6); background-color: var(--color-bg); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-sm); color: var(--color-text); font-family: inherit; }
.form-textarea { resize: vertical; }
.form-label { display: block; margin-bottom: var(--space-2-5); font-weight: 500; color: var(--color-text-muted); }
.form-select, .form-textarea { width: 100%; background: var(--color-bg); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-sm); padding: var(--space-5); color: var(--color-text-strong); }
/* Search inputs */
.search-input,
input.search-input { background: var(--color-bg); border-width: var(--space-1-5); border-style: solid; border-color: var(--color-accent); border-radius: var(--radius-sm); padding: var(--space-4) var(--space-6); color: var(--color-text-strong); font-size: var(--font-14); box-shadow: var(--glow-green-field); }
.search-input:focus,
input.search-input:focus { outline: none; border-color: var(--color-accent); border-width: var(--space-1-5); box-shadow: var(--glow-green-field-focus); }
/* Ensure neon-styled search inputs also get thicker borders */
.search-input.neon-input { border-width: var(--space-1-5); border-color: var(--color-accent); box-shadow: var(--glow-green-field); }
/* Inline chat search specifics */
.chat-inline-search .search-input { margin: 0; }
.chat-inline-search input[type=date]::-webkit-calendar-picker-indicator { filter: invert(65%) sepia(95%) saturate(800%) hue-rotate(90deg) brightness(135%) contrast(90%); cursor: pointer; }
.chat-inline-search input[type=date]:hover::-webkit-calendar-picker-indicator, .chat-inline-search input[type=date]:focus::-webkit-calendar-picker-indicator { filter: invert(80%) sepia(60%) saturate(1200%) hue-rotate(90deg) brightness(155%) contrast(95%); }
.chat-inline-search input[type=date].search-input, .chat-inline-search input[type=date].neon-input { padding: var(--space-4) var(--space-3); font-size: var(--font-13); line-height: 1.25; }
.chat-inline-search input[type=date]::-webkit-calendar-picker-indicator { margin: 0; }
/* Make chat search controls wrap and scale on small screens */
.chat-inline-search { flex-wrap: wrap; }
.chat-inline-search input[type="text"],
.chat-inline-search input[type="date"] {
  width: auto;
  flex: 1 1 var(--form-col-min);
  min-width: var(--form-col-min);
}
.chat-inline-search > .ml-auto { flex: 0 0 auto; }
/* Ensure the nested ticker wrapper columns act like proper flex columns
   in search bars (used in Bookmarks and Profile). This avoids the ticker
   field visually overlapping the following date input on some zoom/layouts. */
.chat-inline-search > .relative { flex: 1 1 var(--form-col-min); min-width: var(--form-col-min); }
/* Keep date inputs above neighbors if borders/glow touch at tight widths */
.chat-inline-search input[type="date"] { position: relative; z-index: 1; }
.chat-inline-search .btn-outline { flex: 0 0 auto; }
/* Mobile: adopt DM layout — stable two-column grid with full-width actions row */
@media (max-width: 47.99rem) {
  .chat-inline-search {
    display: grid;
    grid-template-columns: repeat(2, minmax(var(--form-col-min), 1fr));
    -moz-column-gap: var(--space-2);
         column-gap: var(--space-2);
    row-gap: var(--space-2);
    align-items: end;
  }
  .chat-inline-search > .relative { min-width: 0; }
  .chat-inline-search .search-input { width: 100% !important; min-width: 0; }
  .chat-inline-search .actions {
    grid-column: 1 / -1;
    margin-left: 0;
    justify-content: flex-end;
  }
  /* SEC Bot: put pill row on its own full-width line above inputs */
  #secBotSearchForm .secbot-pill-row {
    grid-column: 1 / -1;
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
  }
  /* Mobile column base width */
  .chat-search-container, .bookmarks-search-container, .profile-search-container { --form-col-min: 9.5rem; }
}
/* Desktop compact: keep all fields on one row without overlap */
@media (min-width: 56.25rem) {
  /* Desktop: uniform column size for all fields, using calendar box as the standard */
  .chat-search-container, .bookmarks-search-container, .profile-search-container { --form-col-min: 10rem; }
  .chat-inline-search { -moz-column-gap: var(--space-2); column-gap: var(--space-2); }
  .chat-inline-search > .relative { flex: 0 0 var(--form-col-min); min-width: var(--form-col-min); }
  .chat-inline-search > .relative > .search-input { width: 100%; min-width: 0; }
  .chat-inline-search .actions { margin-left: 0; flex: 0 0 auto; order: 0; }
  /* Keep pill row spanning full width on desktop as well to avoid cramping */
  #secBotSearchForm .secbot-pill-row {
    grid-column: 1 / -1;
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
    margin-bottom: var(--space-2);
  }
}
/* Suggestion menu should respect container padding on search bars */
.chat-search-container .suggestion-menu,
.bookmarks-search-container .suggestion-menu,
.profile-search-container .suggestion-menu {
  left: var(--space-2);
  right: var(--space-2);
  max-width: calc(100% - (var(--space-2) * 2));
}
/* File upload input/button */
#fileUploadLabel,
#dmFileUploadLabel,
.file-upload-label,
.dm-file-upload-label { padding: var(--space-4) var(--space-6); font-size: var(--font-16); border: var(--space-1) solid var(--color-accent); border-radius: var(--radius-sm); background: var(--input-bg); color: var(--color-accent); box-shadow: 0 0 0.375rem rgba(var(--green-rgb), 0.35), 0 0 0.625rem rgba(var(--green-rgb), 0.18) inset; transition: background .18s ease, box-shadow .18s ease, color .18s ease; }
/* Paperclip icon */
#fileUploadLabel .paperclip-icon, #dmFileUploadLabel .paperclip-icon, .file-upload-label .paperclip-icon, .dm-file-upload-label .paperclip-icon { width: var(--space-10); height: var(--space-10); stroke: var(--color-accent); stroke-width: 2.1; filter: drop-shadow(0 0 0.25rem rgba(var(--green-rgb), 0.6)); transition: stroke 160ms ease, filter 160ms ease; }
/* DM uses same inline SVG as chat; no background hacks needed */
#fileUploadLabel:hover,
#dmFileUploadLabel:hover,
.file-upload-label:hover,
.dm-file-upload-label:hover { background: var(--input-bg-focus); box-shadow: 0 0 0.5rem rgba(var(--green-rgb), 0.55), 0 0 0.875rem rgba(var(--green-rgb), 0.25) inset; color: var(--success-100); }
#fileUploadLabel:hover .paperclip-icon, #dmFileUploadLabel:hover .paperclip-icon, .file-upload-label:hover .paperclip-icon, .dm-file-upload-label:hover .paperclip-icon { stroke: var(--success-100); filter: drop-shadow(0 0 0.375rem rgba(var(--green-rgb), 0.8)); }
/* Hover icon color handled above */
/* Persistent upload size hint next to attach buttons */
.upload-hint { align-self: center; font-size: var(--font-11); color: var(--color-text-subtle); letter-spacing: var(--ls-xxxs); }
/* Base components (legacy, will be overridden below where extracted) */
/*
  components.css
  Purpose: Styles for reusable UI components and feature pages (auth, header, chat, watchlist, modals, charts, profile, filings, etc.).
  Notes:
  - Complex selectors keep comments from original for clarity.
  - Some animations are defined alongside their components to maintain readability.
*/
/* Auth: background and banner */
#authContainer, .auth-container { position: relative; background-image: radial-gradient(rgba(var(--white-rgb), 0.03) var(--space-1), transparent var(--space-1)), linear-gradient(rgba(var(--black-rgb), 0.35), rgba(var(--black-rgb), 0.65)), url('/images/gorilla.png'); background-position: center, center, left center; background-repeat: repeat, no-repeat, no-repeat; background-size: 1rem 1rem, cover, contain; min-height: 100svh; min-height: 100dvh; flex-direction: column; align-items: center; justify-content: center; padding: var(--space-48) var(--space-8) var(--space-10); overflow: hidden; }
/* Avoid forcing display on the ID selector so Tailwind `.hidden` can control visibility */
.auth-container { display: flex; }
#authContainer::before, .auth-container::before { content: 'Tribal Trading'; position: absolute; top: 0; left: 0; right: 0; height: var(--banner-height); display: flex; align-items: center; justify-content: center; color: var(--color-accent); font-weight: 900; font-size: var(--font-40); letter-spacing: var(--ls-xxs); text-shadow: var(--text-glow-green-sm); -webkit-text-stroke: var(--space-1) rgba(var(--green-stroke-dark-rgb), 0.65); background: linear-gradient(120deg, rgba(var(--green-rgb), 0.16) 10%, rgba(var(--white-rgb), 0) 22%, rgba(var(--green-rgb), 0.16) 34%) 0 0 / 220% 100% no-repeat, linear-gradient(180deg, rgba(var(--dark-10-rgb), 0.92), rgba(var(--dark-10-rgb), 0.66)); border-bottom: var(--space-1) solid var(--color-accent); box-shadow: 0 0.625rem 1.5rem rgba(var(--green-rgb), 0.18), 0 var(--space-1) 0 rgba(var(--green-rgb), 0.25) inset; animation: bannerSheen 7.2s linear infinite, bannerGlow 5.5s ease-in-out infinite alternate; z-index: 2; }
@keyframes bannerSheen { 0% { background-position: -220% 0, 0 0; } 100% { background-position: 220% 0, 0 0; } }
@keyframes bannerGlow { 0% { box-shadow: 0 0.625rem 1.375rem rgba(var(--green-rgb), 0.15), 0 0.0625rem 0 rgba(var(--green-rgb), 0.22) inset; text-shadow: var(--text-glow-green-sm); } 100% { box-shadow: 0 0.75rem 1.75rem rgba(var(--green-rgb), 0.22), 0 0.0625rem 0 rgba(var(--green-rgb), 0.28) inset; text-shadow: var(--text-glow-green-md); } }
/* Auth card */
@keyframes breathingScale { 0%, 100% { transform: scale(1) translateY(0); } 25% { transform: scale(1.02) translateY(-2px); } 37.5% { transform: scale(1.02) translateY(-2px); } 87.5% { transform: scale(1) translateY(0); } }
@keyframes breathingGlow { 0%, 100% { filter: drop-shadow(0 0 0.9375rem rgba(var(--green-rgb), 0.4)) drop-shadow(0 0 1.875rem rgba(var(--green-rgb), 0.3)) drop-shadow(0 0 2.8125rem rgba(var(--green-rgb), 0.2)); border-color: rgba(var(--green-rgb), 0.6); } 25% { filter: drop-shadow(0 0 2.5rem rgba(var(--green-rgb), 0.8)) drop-shadow(0 0 5rem rgba(var(--green-rgb), 0.6)) drop-shadow(0 0 7.5rem rgba(var(--green-rgb), 0.4)); border-color: rgba(var(--green-rgb), 0.9); } 37.5% { filter: drop-shadow(0 0 2.5rem rgba(var(--green-rgb), 0.8)) drop-shadow(0 0 5rem rgba(var(--green-rgb), 0.6)) drop-shadow(0 0 7.5rem rgba(var(--green-rgb), 0.4)); border-color: rgba(var(--green-rgb), 0.9); } 87.5% { filter: drop-shadow(0 0 0.9375rem rgba(var(--green-rgb), 0.4)) drop-shadow(0 0 1.875rem rgba(var(--green-rgb), 0.3)) drop-shadow(0 0 2.8125rem rgba(var(--green-rgb), 0.2)); border-color: rgba(var(--green-rgb), 0.6); } }
#authContent, .auth-content { margin-top: 0; align-self: center; width: min(var(--max-w-xl), 98%); margin-right: 0; background: linear-gradient(180deg, rgba(var(--dark-18-26-22-rgb), 0.95), rgba(var(--dark-12-18-16-rgb), 0.95)); border: var(--border-1) solid rgba(var(--green-rgb), 0.35); border-radius: var(--radius-xl); padding: var(--space-9) var(--space-8) var(--space-8); box-shadow: 0 1.125rem 2.625rem rgba(var(--green-rgb), 0.14), 0 0.375rem 1.25rem rgba(var(--black-rgb),  0.6), 0 0 0 var(--space-3) rgba(var(--green-rgb), 0.10) inset; backdrop-filter: blur(6px) saturate(1.02); -webkit-backdrop-filter: blur(6px) saturate(1.02); transition: box-shadow 180ms ease, transform 180ms ease, border-color 180ms ease; animation: breathingScale 8s ease-in-out infinite, breathingGlow 8s ease-in-out infinite; }
#authContent:hover, .auth-content:hover { box-shadow: 0 1.5rem 3.5rem rgba(var(--green-rgb), 0.18), 0 0.5rem 1.75rem rgba(var(--black-rgb),  0.65), 0 0 0 0.1875rem rgba(var(--green-rgb), 0.16) inset; border-color: rgba(var(--green-rgb), 0.55); transform: translateY(-1px); }
#authContent .auth-input, .auth-content .auth-input { background: var(--input-bg); border: var(--border-1) solid var(--color-border-strong); color: var(--color-text-strong); }
#authContent .auth-input:focus, .auth-content .auth-input:focus { border-color: var(--color-accent); box-shadow: var(--outline-weak); }
#authContent .btn-google, .auth-content .btn-google { border-color: rgba(var(--blue-muted-rgb), 0.6); box-shadow: var(--shadow-blue-md); }
#authContent .auth-submit, .auth-content .auth-submit { background: var(--color-accent); color: var(--color-text-inverse); border: var(--border-1) solid rgba(var(--green-rgb), 0.45); box-shadow: var(--shadow-green-md), var(--outline-weak) inset; transition: transform 150ms ease, box-shadow 150ms ease, background 150ms ease; }
#authContent .auth-submit:hover, .auth-content .auth-submit:hover { background: var(--color-accent-hover); transform: translateY(-1px); box-shadow: 0 1rem 2.125rem rgba(var(--green-rgb), 0.32), 0 0 0 0.1875rem rgba(var(--green-rgb), 0.25) inset; }
#authContent .auth-submit:active, .auth-content .auth-submit:active { transform: translateY(0); box-shadow: 0 0.375rem 1rem rgba(var(--green-rgb), 0.22) inset; }
#authContainer::after, .auth-container::after { content: ''; position: absolute; inset: 0; background-image: url('/images/gorilla.png'); background-repeat: no-repeat; background-position: left center; background-size: cover; filter: blur(18px) saturate(1.05) brightness(0.9); transform: scale(1.04); opacity: 0.9; pointer-events: none; z-index: 0; -webkit-mask-image: linear-gradient(to right, rgba(var(--black-rgb), 0) 0%, rgba(var(--black-rgb), 0) 58%, rgba(var(--black-rgb), 1) 78%, rgba(var(--black-rgb), 1) 100%); mask-image: linear-gradient(to right, rgba(var(--black-rgb), 0) 0%, rgba(var(--black-rgb), 0) 58%, rgba(var(--black-rgb), 1) 78%, rgba(var(--black-rgb), 1) 100%); }
#authContainer > *, .auth-container > * { position: relative; z-index: 1; }
@media (min-width: 56.25rem) { #authContainer, .auth-container { flex-direction: row; background-position: center, center, left center; padding: var(--space-50) var(--space-24) var(--space-10); } #authContent, .auth-content { width: min(var(--max-w-xl), 94%); margin-left: auto; margin-right: min(8vw, 6rem); padding: var(--space-10) var(--space-10) var(--space-9); } }
/* Auth callback static shell */
.auth-callback-screen {
  min-height: 100svh;
  min-height: 100dvh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-10);
  background: var(--color-bg-muted);
}
.auth-callback-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-6);
  text-align: center;
  padding: var(--space-8);
  max-width: var(--max-w-modal);
  width: 100%;
  border-radius: var(--radius-md);
  border: var(--border-1) solid var(--color-border-strong);
  background: var(--color-bg-elevated);
  color: var(--color-text-strong);
  box-shadow: 0 1.25rem 2.5rem rgba(var(--black-rgb),  0.35);
}
.auth-callback-card .spinner {
  width: var(--space-20);
  height: var(--space-20);
  border-width: var(--space-2);
  border-color: var(--color-border);
  border-top-color: var(--color-accent);
}
/* Badge on Messages button */
.message-count-badge{ 
  position: absolute; 
  top: calc(var(--space-4) * -1); 
  right: calc(var(--space-4) * -1); 
  background: var(--color-accent); 
  color: var(--color-text-inverse); 
  border-radius: var(--radius-full); 
  min-width: var(--space-10); 
  height: var(--space-10); 
  font-size: var(--font-12); 
  font-weight: 700; 
  display: inline-flex; 
  align-items: center; 
  justify-content: center; 
  transition: transform 160ms ease, box-shadow 160ms ease;
  box-shadow: 
    0 0.125rem 0.5rem rgba(var(--green-neon-rgb), 0.3),
    0 0 0.75rem rgba(var(--green-neon-rgb), 0.2);
}
.message-count-badge.new-message {
  animation: messageNotificationPulse 4s ease-in-out, messageNotificationBounce 1.2s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
.message-count-badge.active-notifications {
  animation: messageNotificationBreathing 4s ease-in-out infinite;
}
#directMessagesBtn.has-notifications:hover .message-count-badge, .btn-direct-messages.has-notifications:hover .message-count-badge {
  transform: scale(1.1) rotate(5deg);
  animation: messageNotificationHover 0.6s ease-in-out infinite alternate;
}
@keyframes messageNotificationHover {
  0% {
    box-shadow: 
      0 0.1875rem 0.75rem rgba(var(--green-neon-rgb), 0.5),
      0 0 1.125rem rgba(var(--green-neon-rgb), 0.3),
      0 0 0 0.125rem rgba(var(--green-neon-rgb), 0.15);
  }
  100% {
    box-shadow: 
      0 0.25rem 1rem rgba(var(--green-neon-rgb), 0.7),
      0 0 1.5rem rgba(var(--green-neon-rgb), 0.5),
      0 0 0 0.1875rem rgba(var(--green-neon-rgb), 0.25);
  }
}
/* Direct Messages (Messages) nav button: reduce horizontal padding so total visual width (including badge) matches siblings */
#directMessagesBtn, .btn-direct-messages { position: relative; padding-left: var(--space-4); padding-right: var(--space-4); flex: 0 0 auto; width: auto; }
/* Place badge just inside the top-right corner instead of far outside to preserve uniform flex gap */
#directMessagesBtn .message-count-badge, .btn-direct-messages .message-count-badge { right: var(--space-1); top: calc(var(--space-4) * -1); }
/* Status inline banner in header */
.status-banner { margin-left: var(--space-12); padding: var(--space-3) var(--space-8); border-radius: var(--radius-sm); font-size: var(--font-14); font-weight: 700; }
.status-banner.error { background: var(--color-danger); color: var(--color-text-strong); }
.status-banner.warn { background: var(--color-warning); color: var(--color-text-inverse); }
.status-banner.success { background: var(--color-accent); color: var(--color-text-inverse); }
.status-banner.info { background: var(--color-bg-muted); color: var(--color-text-strong); }
/* Moderation Dashboard */
.status-open { background-color: var(--color-warning); color: var(--color-text-inverse); }
.status-in_review { background-color: var(--color-blue); color: var(--color-text-strong); }
.status-closed { background-color: var(--color-surface-hover); color: var(--color-text); }
.action-warn { background-color: var(--color-warning); color: var(--color-text-inverse); }
.action-suspend { background-color: var(--color-warning); color: var(--color-text-inverse); }
.action-ban { background-color: var(--color-danger); color: var(--color-text-strong); }
.action-reinstate { background-color: var(--color-accent); color: var(--color-text-inverse); }
/* (modal base colors consolidated into full modal block below) */
/* Auth screens (component fields) */
.auth-title { text-align:center; font-size: clamp(1.5rem, 1.25rem + 1vw, 1.75rem); font-weight: 800; color:var(--color-accent); margin-bottom: var(--space-7); }
.auth-form { display:flex; flex-direction:column; gap:var(--space-6); }
.auth-input { width:100%; background:var(--input-bg); border:var(--border-1) solid var(--color-border-strong); border-radius:var(--radius-md); padding:var(--space-6) var(--space-7); color:var(--color-text-strong); }
.auth-input:focus{ outline:none; border-color:var(--color-accent); }
.auth-submit { width:100%; margin-top: var(--space-2); padding:var(--space-6) var(--space-7); border-radius:var(--radius-md); font-weight:800; }
.auth-divider { display:flex; align-items:center; gap:var(--space-7); margin: var(--space-9) 0; }
.auth-divider .line { flex:1; height:var(--space-0-5); background:var(--color-border-strong); }
.auth-divider .auth-or { color:var(--color-text-subtle); font-weight:600; font-size:var(--font-12); letter-spacing:.1em; }
.auth-links-row { display:flex; align-items:center; justify-content:space-between; margin-top:var(--space-7); color:var(--color-text-muted); font-size:var(--font-14); }
.auth-link { background:transparent; border:none; color:var(--color-text-muted); cursor:pointer; padding:0; }
.auth-link:hover { color:var(--color-accent); }
.auth-guest { text-align:center; margin-top: var(--space-5); }
.auth-guest-link { background:transparent; border:none; color:var(--color-accent-hover); font-weight:600; cursor:pointer; }
.auth-guest-link:hover{ color:var(--color-text-strong); }
/* Chart Components */
.chart-container { position: relative; height: clamp(16rem, 42svh, 28rem); min-height: var(--chart-min-h); background: var(--color-bg); border: var(--border-1) solid var(--color-border-strong); border-radius: var(--radius-md-plus); padding: var(--space-4); flex-grow: 1; }
.chart-timeline-buttons {
  /* Neutralize the wrapper visuals and make it a pure layout row */
  border: 0;
  background: transparent;
  border-radius: 0;
  /* Full width row aligned with chart */
  display: flex;
  flex-wrap: nowrap;
  justify-content: flex-start;
  align-items: stretch;
  gap: var(--space-2);
  padding: 0;
  width: 100%;
}
/* A11y: ensure chart aria-live region stays invisible to sighted users even if Tailwind styles are missing */
/* moved to utilities.css: #chartAriaLive rules (a11y) */
/* moved to watchlist.css: Watchlist Drawer (mobile) */
@keyframes wlBoltPulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.12); } }
/* SEC Bot header scaling (title + magnifier) */
#secBotPage .sec-bot-header h3 { font-size: var(--font-28); line-height: 1.1; }
#secBotPage .sec-bot-header .icon-magnify { width: var(--space-14); height: var(--space-14); }
/* New filings chip beneath header */
#secBotPage .sec-bot-new-chip { margin: var(--space-4) auto var(--space-2); background: rgba(var(--green-rgb), 0.12); border: var(--border-1) solid rgba(var(--green-rgb), 0.35); color: var(--color-text-strong); }
#secBotPage .sec-bot-new-chip:hover { box-shadow: var(--shadow-green-sm); transform: translateY(-1px); }
@media (max-width: 47.99rem) {
  /* Stock chart: on mobile, allow the chart to flex and fill remaining space */
  #mainPage.view-stock .stock-section { display: flex; flex-direction: column; min-height: 0; }
  #mainPage.view-stock .stock-section .chart-container {
    height: auto;           /* remove fixed clamp height */
    min-height: 0;          /* allow to shrink if needed */
    flex: 1 1 auto;         /* fill the column between header/metrics and timeline */
  }
  #mainPage.view-stock .stock-section .chart-container canvas,
  #mainPage.view-stock .stock-section #stockChart {
    width: 100% !important;
    height: 100% !important;
    display: block;
  }
}
/* Detail Box */
.detail-box { background: var(--color-bg-muted); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-sm); padding: var(--space-4) var(--space-5); text-align: center; min-height: var(--detail-box-min-h); display: flex; flex-direction: column; justify-content: center; }
.detail-box:hover { border-color: var(--color-accent); }
.detail-box .label { font-size: var(--font-11); color: var(--color-text-dim); display: block; margin-bottom: var(--space-1); text-transform: uppercase; font-weight: 600; }
.detail-box .value { font-size: var(--font-14); font-weight: 600; color: var(--color-text-strong); display: block; margin-bottom: var(--space-0-5); }
.detail-box .value.is-na { color: var(--color-text-subtle); }
.detail-box .value-secondary { display: block; font-size: var(--font-11); color: var(--color-text-dim); font-weight: 400; }
/* Stock section-only overrides to match original tiles */
.stock-section .detail-box { background: var(--color-bg); border: var(--border-1) solid var(--color-border-strong); border-radius: var(--radius-md); }
.stock-section .detail-box .label { color: var(--color-text-muted); }
/* Stock Header */
#stockHeader, .stock-header { background: linear-gradient(180deg, rgba(var(--dark-18-rgb), 0.92), rgba(var(--dark-10-rgb), 0.82)); border: var(--border-1) solid var(--color-border-strong); border-radius: var(--radius-md-plus); padding: var(--space-8) var(--space-8) var(--space-4); box-shadow: 0 0.625rem 1.875rem rgba(var(--black-rgb), 0.3), inset 0 var(--space-1) 0 rgba(var(--white-rgb), 0.06); }
.header-top-bar { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-8); padding-bottom: var(--space-8); border-bottom: var(--border-1) solid var(--color-border); }
.stock-identity h2 { font-size: var(--font-28); font-weight: 700; color: var(--color-accent); margin: 0; line-height: 1; }
.stock-identity .company-name { font-size: var(--font-13); color: var(--color-text-subtle); margin-top: var(--space-2); }
.stock-actions { display: flex; gap: var(--space-3); }
.price-display-area { display: flex; flex-direction: column; align-items: flex-start; flex-shrink: 0; min-width: var(--price-display-min-w); }
.price-display-area .price { font-size: var(--font-44); font-weight: 700; color: var(--color-text-strong); line-height: 1; }
.price-display-area .delta { font-size: var(--font-16); font-weight: 600; margin-top: var(--space-4); }
.price-display-area .delta.up { color: var(--success-400); }
.price-display-area .delta.down { color: var(--danger-400); }
.stats-grid { display: flex; flex-wrap: wrap; gap: var(--space-6) var(--space-10); width: 100%; }
.stats-grid > * { flex: 1 1 var(--stats-min-w); min-width: var(--stats-min-w); }
.stat { display: flex; justify-content: space-between; font-size: var(--font-12); line-height: 1.4; }
.stat-label { color: var(--color-text-subtle); }
.stat-value { color: var(--color-text-strong); font-weight: 600; }
.stat-value.high { color: var(--success-400); }
.stat-value.low { color: var(--danger-400); }
.stat-value.volume { color: var(--color-blue); }
.stat-value.neutral { color: var(--color-text-muted); }
/* Other Pages (DM, Filings, Home) */
#homePage:not(.hidden) { display: flex; height: 100%; flex-direction: column; justify-content: center; align-items: center; padding: var(--space-10); }
.home-search-center { display: flex; align-items: center; justify-content: center; width: 100%; max-width: var(--max-w-home); margin: 0 auto; }
.home-title { font-size: clamp(2rem, 1.2rem + 4vw, 3rem); font-weight: bold; color: var(--color-accent); margin-bottom: var(--space-20); text-align: center; }
.home-search-container { display: flex; gap: var(--space-6); align-items: center; max-width: var(--max-w-home-search); width: 100%; position: relative; }
.home-search-container #homeSearchSuggestions { position: absolute; top: calc(100% + var(--space-3)); left: 0; width: 100%; }
.home-search-input { width: 100%; flex: 1; background: var(--color-bg-elevated); border: var(--space-1) solid var(--color-accent); border-radius: var(--radius-md); padding: var(--space-8) var(--space-10); color: var(--color-text-strong); font-size: var(--font-16); transition: box-shadow .18s ease, background .18s ease; box-shadow: 0 0 0.25rem rgba(var(--green-rgb), 0.25), 0 0 0.625rem rgba(var(--green-rgb), 0.15) inset; }
.home-search-input:focus { outline: none; background:var(--input-bg-focus); box-shadow: 0 0 0.4375rem rgba(var(--green-rgb), 0.55), 0 0 0.875rem rgba(var(--green-rgb), 0.25) inset; }
/* moved to buttons.css: .home-search-btn */
/* Notification containers */
#notificationContainer { position: fixed; top: calc(var(--layout-header-height) + var(--space-2-5)); right: var(--space-10); z-index: var(--z-toast); display: flex; flex-direction: column; gap: var(--space-5); }
#notificationContainer .notification { padding: var(--space-7-5); border-radius: var(--radius-md); margin: var(--space-4); color: var(--color-text-strong); font-weight: 700; box-shadow: var(--shadow-modal); border: var(--border-1) solid currentColor; animation: fadeIn 0.3s ease-out, fadeOut 0.3s ease-in 4.7s forwards; }
.notification.error { background: var(--color-danger); border-color: var(--color-danger-hover); }
.notification.success { background: var(--color-accent); color: var(--color-text-inverse); border-color: var(--color-accent); }
/* Search suggestions menu */
.suggestions { background: var(--color-surface); border: var(--border-1) solid var(--color-border); border-radius: 0 0 var(--radius-md) var(--radius-md); margin-top: calc(var(--space-1) * -1); max-height: var(--bio-max-h); overflow-y: auto; }
.suggestion-item { padding: var(--space-6) var(--space-8); cursor: pointer; border-bottom: var(--border-1) solid var(--color-border); display: flex; justify-content: space-between; align-items: center; }
.suggestion-item:last-child { border-bottom: none; }
.suggestion-item:hover { background: var(--color-surface-hover); }
.suggestion-item.selected { background: var(--color-accent); color: var(--color-text-inverse); }
.suggestion-ticker { font-weight: bold; }
.suggestion-name { color: var(--color-text-muted); }
.suggestion-item.selected .suggestion-name { color: var(--color-border-strong); }
/* Status popover */
.status-popover { position: fixed; z-index: var(--z-popover); background: var(--color-bg-elevated); border: var(--border-1) solid var(--color-accent); border-radius: var(--radius-md); width: min(92vw, var(--popover-max-w)); padding: var(--space-6) var(--space-7); box-shadow: 0 0.75rem 1.75rem rgba(var(--black-rgb), 0.6); color: var(--color-text-strong); }
.status-popover .sp-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); }
.status-popover .sp-note { color: var(--color-warning); font-size: var(--font-12); }
.status-popover .sp-title { font-weight: 700; color: var(--color-accent); font-size: clamp(1rem, 0.95rem + 0.25vw, 1.125rem); }
.status-popover .sp-close { background: transparent; border: none; color: var(--color-text-muted); font-size: var(--font-22); cursor: pointer; }
.status-popover .sp-row { display: flex; gap: var(--space-4); font-size: var(--font-13); margin-top: var(--space-4); }
.status-popover .sp-row > :first-child { flex: 0 0 12rem; }
.status-popover .sp-row > :nth-child(2) { flex: 1 1 auto; min-width: 0; }
.status-popover .sp-label { color: var(--color-text-muted); font-weight: 600; font-size: var(--font-11); text-transform: uppercase; letter-spacing: .02em; }
.status-popover .sp-actions { display: flex; justify-content: flex-end; gap: var(--space-4); margin-top: var(--space-5); flex-wrap: wrap; }
.status-popover .sp-actions .btn-primary, .status-popover .sp-actions .btn-outline { padding: var(--space-3) var(--space-5); border-radius: var(--radius-sm); border: var(--border-1) solid currentColor; }
@media (max-width: 30rem) { .status-popover .sp-row { flex-wrap: wrap; } }
/* Ensure message overlays (timestamps, actions) aren't clipped */
.message { overflow: visible; }
.spinner { width: var(--spinner); height: var(--spinner); border: var(--space-3) solid var(--color-surface); border-top-color: var(--color-accent); border-radius: 50%; animation: spin 0.8s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
/* Watchlist management */
/* moved to watchlist.css: subgroup & table UI */
.suggestion-menu { background: var(--color-bg); border: var(--border-1) solid var(--color-accent); border-radius: var(--radius-md); box-shadow: 0 0.75rem 1.5rem rgba(var(--black-rgb), 0.5); z-index: var(--z-popover); max-height: var(--menu-max-h); overflow-y: auto; overflow-x: hidden; scrollbar-width: auto; }
.suggestion-menu .suggestion-item { padding: var(--space-4) var(--space-5); cursor: pointer; display: flex; -moz-column-gap: var(--space-5); column-gap: var(--space-5); align-items: baseline; }
.suggestion-menu .suggestion-item > :first-child { flex: 0 0 auto; }
.suggestion-menu .suggestion-item > :nth-child(2) { flex: 1 1 auto; min-width: 0; }
.suggestion-menu .suggestion-item .symbol { color: var(--color-accent); font-weight: 700; }
.suggestion-menu .suggestion-item .name { color: var(--color-text-muted); font-size: var(--font-12); }
.suggestion-menu .suggestion-item:hover { background: rgba(var(--green-rgb), 0.08); }
.suggestion-menu .suggestion-item.active { background: rgba(var(--green-rgb), 0.15); border-left: var(--space-3) solid var(--color-accent); }
.suggestion-menu .suggestion-item.suggestion-item--empty { cursor: default; opacity: 0.75; pointer-events: none; font-style: italic; }
/* Mention suggestions belong to chat module (components.chat.css) */
/* moved: .watchlist-empty-group to watchlist.css */
/* UK Filings Page */
.uk-filings-search-container { display: flex; gap: var(--space-8); align-items: center; justify-content: center; margin-bottom: var(--space-16); }
.uk-filings-input { background: var(--color-bg-muted); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-md); padding: var(--space-6) var(--space-8); color: var(--color-text-strong); font-size: var(--font-16); /* min-width removed for mobile friendliness */ transition: border-color 160ms ease; width: 100%; max-width: var(--max-w-xl); }
.uk-filings-input:focus { outline: none; border-color: var(--color-accent); }
.uk-filings-input::-moz-placeholder { color: var(--color-text-subtle); }
.uk-filings-input::placeholder { color: var(--color-text-subtle); }
/* moved to buttons.css: .uk-filings-search-btn */
.uk-filings-results { margin-top: var(--space-16); }
.uk-filings-table { background: var(--color-bg-muted); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-md); overflow: hidden; box-shadow: 0 0.25rem 0.75rem rgba(var(--black-rgb),  0.3); }
.uk-filings-table th { background: var(--color-surface); color: var(--color-accent); padding: var(--space-8); text-align: left; font-size: var(--font-14); font-weight: 600; border-bottom: var(--border-1) solid var(--color-border); }
.uk-filings-table td { padding: var(--space-8); border-bottom: var(--border-1) solid var(--color-border-strong); font-size: var(--font-14); }
.uk-filings-table tr:hover { background: var(--color-surface-hover); }
.uk-filings-table tr:last-child td { border-bottom: none; }
/* moved: watchlist unread badge styles to watchlist.css */
.sub-badge-wrap { display: inline-flex; gap: var(--space-2); margin-left: var(--space-2); }
.sub-badge { position: relative; top: 0; background:var(--color-surface); color:var(--color-text-muted); font-size:var(--font-9); padding:0 var(--space-2); border-radius:var(--radius-md-plus); line-height:var(--space-7); height:var(--space-7); display:inline-flex; align-items:center; gap:var(--space-2); }
.sub-badge.secbot-sub { background:var(--color-warning); color:var(--color-text-inverse); box-shadow:0 0 0.25rem -0.0625rem rgba(var(--amber-rgb), 0.6); }
/* Stock View Section - header area helpers already in layout/detail-box above */
.stock-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-5); }
/* Search forms grid + z-index tweaks */
.search-form-grid { display: flex; flex-wrap: wrap; gap: var(--space-4); padding: var(--space-6); background-color: var(--color-bg-muted); border-bottom: var(--border-1) solid var(--color-border); width: 100%; max-width: 100%; }
.search-form-grid > * { flex: 1 1 var(--search-grid-basis); min-width: var(--search-grid-min-w); }
.search-actions { margin-left: auto; display: flex; gap: var(--space-4); }
/* Profile page: mobile overflow protection and optional action menu */
#profileMobileMenuToggle { display: none; align-items: center; justify-content: center; width: var(--space-20); height: var(--space-20); border-radius: var(--radius-md); border: var(--border-1) solid var(--color-border-strong); background: var(--color-bg); color: var(--color-text-strong); }
#profileMobileMenuToggle svg { width: var(--btn-icon); height: var(--btn-icon); }
#profileMobileMenu { display:none; position:absolute; right: var(--space-4); top: 100%; background: var(--color-bg-elevated); border: var(--border-1) solid var(--color-accent); border-radius: var(--radius-md); box-shadow: var(--shadow-modal); z-index: var(--z-menu); min-width: var(--menu-min-w); }
#profileMobileMenu.open { display:block; }
#profileMobileMenu .menu-list { display:flex; flex-direction:column; padding: var(--space-3); gap: var(--space-2); }
@media (max-width: 47.99rem) {
  #profileMobileMenuToggle { display: inline-flex; }
}
/* Responsive tables: stack rows on small screens (no horizontal scroll) */
@media (max-width: 47.99rem) {
  table.watchlist-stock-table,
  table.min-w-full,
  table.w-full { display: block; width: 100%; }
  table.watchlist-stock-table thead,
  table.min-w-full thead,
  table.w-full thead { display: none; }
  table.watchlist-stock-table tbody tr,
  table.min-w-full tbody tr,
  table.w-full tbody tr { display: block; border-top: var(--border-1) solid var(--color-border); }
  table.watchlist-stock-table td,
  table.min-w-full td,
  table.w-full td { display: block; width: 100%; padding: var(--space-4) var(--space-5); box-sizing: border-box; }
  .overflow-x-auto { overflow-x: visible; }
}
/* Watchlist Manage toolbar wraps on mobile */
@media (max-width: 47.99rem) {
  #wlManageToolbar .flex { flex-wrap: wrap; gap: var(--space-3); }
}
.search-actions { display: flex; gap: var(--space-4); justify-content: flex-end; }
.chat-search-container, .dm-search-container, .profile-search-container, .bookmarks-search-container { position: relative; display: none; }
.chat-search-container.visible, .dm-search-container.visible, .profile-search-container.visible, .bookmarks-search-container.visible { display: block; }
/* Status chips and popover */
.status-chip { display: inline-flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-4); border-radius: var(--radius-sm); font-size: var(--font-13); font-weight: 700; letter-spacing: 0.02em; transition: transform 0.15s ease, box-shadow 0.15s ease; white-space: nowrap; }
.status-chip:hover { transform: translateY(-1px) scale(1.02); }
.status-chip--warning { background: var(--color-warning); color: var(--color-text-inverse); box-shadow: 0 0 0 0.125rem rgba(var(--amber-rgb), 0.45); text-shadow: var(--text-glow-amber-xs); }
.status-chip--danger { background: var(--color-danger); color: var(--color-text-strong); box-shadow: 0 0 0 0.125rem rgba(var(--danger-strong-rgb), 0.35); text-shadow: var(--text-glow-red-xs); }
.status-chip--warning:hover { box-shadow: 0 0 0 0.1875rem rgba(var(--amber-rgb), 0.65), 0 0 1.25rem rgba(var(--amber-rgb), 0.45); }
.status-chip--danger:hover { box-shadow: 0 0 0 0.1875rem rgba(var(--danger-strong-rgb), 0.6), 0 0 1.25rem rgba(var(--danger-strong-rgb), 0.4); }
.profile-status-chip { letter-spacing: 0.04em; text-transform: uppercase; }
/* ---------------------------------------------
   Responsive component refinements
   --------------------------------------------- */
/* Mobile: make grids auto-fit and inputs/buttons wrap without overflow */
@media (max-width: 47.99rem) {
  /* Stock stats grid becomes responsive to available width */
  .stats-grid > * { flex: 1 1 7.5rem; }

  /* Detail boxes already use auto-fit in layout.css; ensure consistency here too if used */
  .detail-box-grid > * { flex: 1 1 5.625rem; }

  /* UK filings search: stack controls for narrow screens */
  .uk-filings-search-container { flex-direction: column; align-items: stretch; gap: var(--space-5); }
  .uk-filings-input { width: 100%; max-width: 100%; }
  .uk-filings-search-btn { width: 100%; }
}
/* Tablet: allow 2-3 columns depending on space; keep inputs fluid */
@media (min-width: 48rem) and (max-width: 64rem) {
  .stats-grid > * { flex: 1 1 calc(33.333% - var(--space-10)); }
  .uk-filings-input { width: 100%; max-width: var(--max-w-xl); }
}
/* ---------------------------------------------------------
   Fluid / proportional sizing overrides
   Goal: prevent cramped or broken layouts when users zoom.
   Strategy:
   - Introduce a light scaling variable (--tt-scale) based on vw.
   - Convert key fixed pixel widths/heights to clamp() or relative units.
   - Allow wrapping in tight horizontal regions (.header-top-bar, timeline buttons).
   - Use auto-fit grids so cards reflow instead of overflow.
   These overrides are additive and sit at end of file for cascade priority.
---------------------------------------------------------- */
:root {
  /* Scale gently with viewport width (between ~0.85x and ~1.05x root size) */
  --tt-scale: clamp(0.85, 0.25vw + 0.8, 1.05);
  --tt-space-1: calc(0.25rem * var(--tt-scale));
  --tt-space-2: calc(0.5rem * var(--tt-scale));
  --tt-space-3: calc(0.75rem * var(--tt-scale));
  --tt-space-4: calc(1rem * var(--tt-scale));
}
/* Stock header top bar: allow wrapping instead of overflow when zoomed */
.header-top-bar {
  flex-wrap: wrap;
  gap: var(--tt-space-3) var(--tt-space-4);
}
/* Make identity + price text fluid */
.stock-identity h2 {
  font-size: clamp(1.25rem, 1rem + 1.2vw, 1.9rem);
}
.price-display-area {
  min-width: clamp(8.75rem, 18vw, 12.5rem);
}
.price-display-area .price {
  font-size: clamp(1.75rem, 1.2rem + 2.2vw, 2.75rem);
}
/* Stats grid auto-fits instead of staying rigid at 3 columns */
.stats-grid {
  gap: var(--tt-space-3) var(--tt-space-4);
}
/* Timeline buttons scale text & allow wrap without horizontal scroll */
.chart-timeline-buttons {
  flex-wrap: nowrap;
  row-gap: 0;
}
.timeline-btn {
  font-size: clamp(0.65rem, 0.55rem + 0.5vw, 0.8rem);
  /* Increase vertical padding by an additional ~20% */
  padding: calc(0.81em + 0.18vw) calc(0.55em + 0.35vw);
  line-height: 1.1;
  /* Expand to share available width equally */
  flex: 1 1 0;
  min-width: 0;
}
/* Action button groups in stock header can wrap gracefully */
.stock-actions {
  flex-wrap: wrap;
  row-gap: var(--tt-space-2);
}
/* Very narrow widths (e.g., user zooms to 170% making section tight) */
@media (max-width: 76.25rem) { /* ~1220px (unit normalized) */
  .price-display-area { min-width: clamp(120px, 24vw, 190px); }
}
@media (max-width: 56.25rem) { /* mdDown canonical */
  .header-top-bar { flex-direction: column; align-items: flex-start; }
  .stock-actions { width: 100%; }
  .price-display-area { order: 2; }
}
/* Reduce padding on nested components when space is tight (mdDown canonical) */
@media (max-width: 56.25rem) {
  #stockHeader, .stock-header { padding: var(--space-6) var(--space-6) 0.4rem; }
  .detail-box { padding: var(--space-3) var(--space-4); }
}
/* When user zoom pushes effective viewport < smDown (desktop zoom scenario) */
@media (max-width: 47.99rem) {
  .detail-box .label { font-size: var(--font-11); }
  .detail-box .value { font-size: var(--font-12); }
  .detail-box .value-secondary { font-size: var(--font-10); }
}
/* � Epic Bug Report Button - Unique & Impressive Design � */
#reportBugBtn, .report-bug-btn {
  background: linear-gradient(45deg,
    var(--color-danger) 0%,
    var(--color-warning) 25%,
    var(--color-danger) 50%,
    var(--color-warning) 75%,
    var(--color-danger) 100%);
  background-size: 300% 300%;
  color: var(--color-text-strong);
  border: var(--space-1) solid transparent;
  border-radius: var(--radius-2xl);
  font-weight: 800;
  padding: var(--space-4) var(--space-8);
  position: relative;
  overflow: hidden;
  transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
  box-shadow: 
    0 0.25rem 1.25rem rgba(var(--danger-bright-rgb), 0.3),
    0 0 0.9375rem rgba(var(--orange-accent-rgb), 0.2),
    inset 0 0.0625rem 0 rgba(var(--white-rgb),  0.2);
  text-shadow: var(--text-shadow-dark-md);
  animation: bugReportPulse 4s ease-in-out infinite;
}
#reportBugBtn::before, .report-bug-btn::before {
  content: '🪲';
  position: absolute;
  top: 50%;
  left: calc(100% + var(--space-10));
  transform: translateY(-50%) scale(1.3) rotate(-90deg);
  font-size: var(--font-24);
  transition: none;
  opacity: 0;
  z-index: 3;
  filter: brightness(0.3) contrast(2);
}
#reportBugBtn::after, .report-bug-btn::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: linear-gradient(
    90deg,
    transparent,
    rgba(var(--white-rgb),  0.4),
    transparent
  );
  transform: translateX(-100%);
  transition: transform 160ms ease;
}
#reportBugBtn:hover, .report-bug-btn:hover {
  background-position: 100% 0;
  transform: translateY(-3px) scale(1.08) rotate(1deg);
  box-shadow: 
    0 0.75rem 2.1875rem rgba(var(--danger-bright-rgb), 0.5),
    0 0 1.875rem rgba(var(--orange-accent-rgb), 0.4),
    inset 0 0.0625rem 0 rgba(var(--white-rgb),  0.3),
    0 0 0 0.1875rem rgba(var(--danger-bright-rgb), 0.2);
  border-color: rgba(var(--white-rgb),  0.3);
  animation: bugReportGlow 1.5s ease-in-out infinite alternate;
}
#reportBugBtn:hover::before, .report-bug-btn:hover::before {
  opacity: 1;
  animation: bugCrawl 3s ease-in-out forwards;
}
#reportBugBtn:hover::after, .report-bug-btn:hover::after {
  transform: translateX(100%);
}
#reportBugBtn:hover span, .report-bug-btn:hover span {
  color: var(--color-text-strong);
  text-shadow: var(--text-glow-white-md);
}
@media (hover: none) and (pointer: coarse) {
  #reportBugBtn:hover, .report-bug-btn:hover {
    transform: none; box-shadow: none; animation: none; border-color: rgba(var(--danger-bright-rgb), 0.5);
  }
  #reportBugBtn:hover::before, .report-bug-btn:hover::before { opacity: 0; animation: none; }
  #reportBugBtn:hover::after, .report-bug-btn:hover::after { left: -100%; }
  #reportBugBtn:hover span, .report-bug-btn:hover span { color: inherit; text-shadow: none; }
}
#reportBugBtn:active, .report-bug-btn:active {
  transform: translateY(-1px) scale(1.05) rotate(0deg);
  box-shadow: 
    0 0.375rem 1.25rem rgba(var(--danger-bright-rgb), 0.4),
    inset 0 0.1875rem 0.625rem rgba(var(--black-rgb),  0.3);
}
#reportBugBtn span, .report-bug-btn span {
  display: inline-flex;
  transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
  font-weight: 900;
  letter-spacing: var(--ls-xxs);
  position: relative;
  z-index: 2;
}
@keyframes bugReportPulse {
  0%, 100% {
    background-position: 0% 0%;
    box-shadow: 
      0 0.25rem 1.25rem rgba(var(--danger-bright-rgb), 0.3),
      0 0 0.9375rem rgba(var(--orange-accent-rgb), 0.2),
      inset 0 0.0625rem 0 rgba(var(--white-rgb),  0.2);
  }
  50% {
    background-position: 100% 100%;
    box-shadow: 
      0 0.375rem 1.5625rem rgba(var(--danger-bright-rgb), 0.4),
      0 0 1.25rem rgba(var(--orange-accent-rgb), 0.3),
      inset 0 0.0625rem 0 rgba(var(--white-rgb),  0.3);
  }
}
@keyframes bugReportGlow {
  0% {
    box-shadow: 
      0 0.75rem 2.1875rem rgba(var(--danger-bright-rgb), 0.5),
      0 0 1.875rem rgba(var(--orange-accent-rgb), 0.4),
      inset 0 0.0625rem 0 rgba(var(--white-rgb),  0.3),
      0 0 0 0.1875rem rgba(var(--danger-bright-rgb), 0.2);
  }
  100% {
    box-shadow: 
      0 1rem 2.8125rem rgba(var(--danger-bright-rgb), 0.7),
      0 0 2.5rem rgba(var(--orange-accent-rgb), 0.6),
      inset 0 0.0625rem 0 rgba(var(--white-rgb),  0.4),
      0 0 0 0.3125rem rgba(var(--danger-bright-rgb), 0.3);
  }
}
@keyframes bugCrawl {
  0% {
    left: calc(100% + 20px);
    transform: translateY(-50%) scale(1.3) rotate(-90deg);
  }
  10% {
    transform: translateY(-50%) scale(1.35) rotate(-88deg);
  }
  20% {
    transform: translateY(-50%) scale(1.25) rotate(-92deg);
  }
  30% {
    transform: translateY(-50%) scale(1.4) rotate(-87deg);
  }
  40% {
    transform: translateY(-50%) scale(1.2) rotate(-93deg);
  }
  50% {
    transform: translateY(-50%) scale(1.35) rotate(-89deg);
  }
  60% {
    transform: translateY(-50%) scale(1.25) rotate(-91deg);
  }
  70% {
    transform: translateY(-50%) scale(1.4) rotate(-88deg);
  }
  80% {
    transform: translateY(-50%) scale(1.2) rotate(-92deg);
  }
  90% {
    transform: translateY(-50%) scale(1.3) rotate(-90deg);
  }
  100% {
  left: calc(var(--space-20) * -1);
    transform: translateY(-50%) scale(1.3) rotate(-90deg);
  }
}
/* Message notification animations */
@keyframes messageNotificationPulse {
  0%, 100% {
    box-shadow: 
      0 0.125rem 0.5rem rgba(var(--green-neon-rgb), 0.3),
      0 0 0.75rem rgba(var(--green-neon-rgb), 0.2);
    background: var(--color-accent);
  }
  25%, 75% {
    box-shadow: 
      0 0.25rem 1rem rgba(var(--green-neon-rgb), 0.6),
      0 0 1.5rem rgba(var(--green-neon-rgb), 0.4),
      0 0 0 0.25rem rgba(var(--green-neon-rgb), 0.2);
    background: var(--color-accent-hover);
  }
  50% {
    box-shadow: 
      0 0.375rem 1.5rem rgba(var(--green-neon-rgb), 0.8),
      0 0 2rem rgba(var(--green-neon-rgb), 0.6),
      0 0 0 0.375rem rgba(var(--green-neon-rgb), 0.3);
    background: var(--color-accent);
  }
}
@keyframes messageNotificationBounce {
  0% {
    transform: scale(1);
  }
  15% {
    transform: scale(1.4) rotate(15deg);
  }
  30% {
    transform: scale(1.1) rotate(-10deg);
  }
  45% {
    transform: scale(1.3) rotate(8deg);
  }
  60% {
    transform: scale(1.05) rotate(-5deg);
  }
  75% {
    transform: scale(1.2) rotate(3deg);
  }
  90% {
    transform: scale(1.02) rotate(-1deg);
  }
  100% {
    transform: scale(1) rotate(0deg);
  }
}
@keyframes messageNotificationBreathing {
  0%, 100% {
    transform: scale(1);
    box-shadow: 
      0 0.125rem 0.5rem rgba(var(--green-neon-rgb), 0.4),
      0 0 0.75rem rgba(var(--green-neon-rgb), 0.3);
    background: var(--color-accent);
  }
  50% {
    transform: scale(1.1);
    box-shadow: 
      0 0.25rem 1rem rgba(var(--green-neon-rgb), 0.7),
      0 0 1.5rem rgba(var(--green-neon-rgb), 0.5),
      0 0 0 0.1875rem rgba(var(--green-neon-rgb), 0.2);
    background: var(--color-accent-hover);
  }
}
/* Message button special effects when notifications are active */
#directMessagesBtn.has-notifications, .btn-direct-messages.has-notifications {
  animation: messageButtonBreathing 5s ease-in-out infinite;
}
#directMessagesBtn.has-notifications:hover, .btn-direct-messages.has-notifications:hover {
  transform: scale(1.05);
  box-shadow: 
    0 0 1.25rem rgba(var(--green-neon-rgb), 0.4),
    inset 0 0 0.9375rem rgba(var(--green-neon-rgb), 0.15);
}
#directMessagesBtn.has-notifications:active, .btn-direct-messages.has-notifications:active {
  transform: scale(0.98);
  animation: messageButtonClick 0.3s ease-out;
}
@keyframes messageButtonBreathing {
  0%, 100% {
    box-shadow: 
      0 0 0.3125rem rgba(var(--green-neon-rgb), 0.2),
      inset 0 0 0.3125rem rgba(var(--green-neon-rgb), 0.1);
    border-color: rgba(var(--green-neon-rgb), 0.2);
  }
  50% {
    box-shadow: 
      0 0 1.25rem rgba(var(--green-neon-rgb), 0.4),
      inset 0 0 0.9375rem rgba(var(--green-neon-rgb), 0.2);
    border-color: rgba(var(--green-neon-rgb), 0.4);
  }
}
@keyframes messageButtonClick {
  0% {
    box-shadow: 
      0 0 1.5625rem rgba(var(--green-neon-rgb), 0.6),
      inset 0 0 1.25rem rgba(var(--green-neon-rgb), 0.2);
  }
  100% {
    box-shadow: 
      0 0 0.3125rem rgba(var(--green-neon-rgb), 0.2),
      inset 0 0 0.3125rem rgba(var(--green-neon-rgb), 0.1);
  }
}
/* SEC Directory modal extracted to modals.css */
/* Header compactness + autoscale anchors to prevent wrapping */
.message-with-reaction {
  position: relative;
  padding-right: calc(var(--space-6) + 1.75rem);
}
.message-reaction {
  position: absolute;
  top: 50%;
  right: var(--space-3);
  transform: translateY(-50%);
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  opacity: 0;
  transition: opacity 0.18s ease, transform 0.18s ease;
  pointer-events: auto;
}
.message-with-reaction:hover .message-reaction,
.message-reaction:focus-within {
  opacity: 1;
}
.message-reaction--has-count {
  opacity: 1;
}
.message-reaction__button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--btn-icon);
  height: var(--btn-icon);
  border-radius: var(--radius-full);
  border: none;
  background: transparent;
  color: var(--color-text-muted);
  cursor: pointer;
  transition: color 0.18s ease, transform 0.18s ease;
}
.message-reaction__button:hover,
.message-reaction__button:focus-visible {
  color: var(--color-accent);
}
.message-reaction__button:focus-visible {
  outline: 0.125rem solid var(--color-accent);
  outline-offset: var(--space-1);
}
.message-reaction__button--active {
  color: var(--color-accent);
}
.message-reaction__icon {
  width: var(--icon-xs);
  height: var(--icon-xs);
  pointer-events: none;
}
.message-reaction__count {
  font-size: var(--font-12);
  font-weight: 600;
  color: var(--color-text-muted);
  pointer-events: none;
}
.message-reaction--active .message-reaction__count {
  color: var(--color-accent);
}
.message-reaction--mine .message-reaction__button {
  cursor: default;
  opacity: 0.4;
}
.message-reaction--mine.message-reaction--has-count .message-reaction__button {
  opacity: 1;
}
.message-reaction--pending .message-reaction__button {
  cursor: wait;
  opacity: 0.7;
}
@media (max-width: 40rem) {
  .message-with-reaction {
    padding-right: calc(var(--space-5) + 1.5rem);
  }
  .message-reaction {
    right: var(--space-2);
  }
}
/* Chat cross-post styling */
.chat-ticker-link { color: var(--color-blue); cursor: pointer; transition: color 0.18s ease; font-weight: 600; }
.chat-ticker-link:hover, .chat-ticker-link:focus { color: var(--color-blue-hover); }
.chat-crosspost-banner {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: var(--space-1) var(--space-2);
  border: var(--border-1) solid rgba(var(--blue-rgb), 0.35);
  border-radius: var(--radius-sm);
  background: rgba(var(--blue-rgb), 0.08);
  transition: background 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
}
.chat-crosspost-banner:hover, .chat-crosspost-banner:focus {
  background: rgba(var(--blue-rgb), 0.12);
  border-color: rgba(var(--blue-rgb), 0.55);
  box-shadow: 0 0 0 0.125rem rgba(var(--blue-rgb), 0.2);


/* Removed: Mobile chat stock-info drawer and trigger */

/* Login page background on mobile: visible and scaled */
@media (max-width: 47.99rem) {
  #authContainer, .auth-container { background-size: cover; background-position: center; min-height: 100svh; min-height: 100dvh; }
}

/* DM thread height is governed by grid rows; avoid max-height caps */

/* Moderator reports flex table */
.reports-list { display: flex; flex-direction: column; }
.reports-row { display: flex; align-items: stretch; border-bottom: var(--border-1) solid var(--color-border); }
.reports-cell { padding: var(--space-6); min-width: 0; }
.reports-cell--details { flex: 1 1 28rem; }
.reports-cell--appeal { flex: 1 1 20rem; }
.reports-cell--content { flex: 1 1 20rem; }
.reports-cell--actions { flex: 0 0 14rem; display: flex; flex-direction: column; gap: var(--space-2); }

/* Guide tables (in-modal) forced to flex layout */
.guide-flex-list { display: flex; flex-direction: column; width: 100%; }
.guide-flex-row { display: flex; flex-wrap: nowrap; align-items: stretch; gap: var(--space-3); border-bottom: var(--border-1) solid var(--color-border); padding: var(--space-2) 0; }
.guide-flex-code { flex: 0 0 clamp(4.5rem, 5.5rem, 7rem); width: clamp(4.5rem, 5.5rem, 7rem); font-weight: 700; color: var(--color-accent); padding: var(--space-3) var(--space-4); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: center; background: rgba(var(--green-rgb), 0.08); border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; min-height: 100%; }
.guide-flex-desc { flex: 1 1 auto; padding: var(--space-3) var(--space-4); min-width: 0; display: flex; align-items: center; }

/* Filings: mobile filters compact grid and condensed single-row list feel */
@media (max-width: 47.99rem) {
  .daily-filters-grid { display: flex; flex-wrap: wrap; gap: var(--space-2); justify-content: center; }
  /* legacy table overrides removed in favor of flex list */
  .filings-form { font-weight: 700; font-size: var(--font-14); }
  .filings-company { font-size: var(--font-13); color: var(--color-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .filings-date { display: inline-flex; align-items: center; gap: var(--space-2); white-space: nowrap; }
  .filings-date__day { font-size: var(--font-12); color: var(--color-text-subtle); }
  .filings-date__time { font-size: var(--font-11); color: var(--color-text-muted); border: none; padding: 0; }
  .filings-date__chevron { opacity: 0.5; }

  /* SEC Filings page: ensure each entry remains a single table row on mobile.
     Override generic mobile table-stacking for this page and permit horizontal scroll if needed. */
  #secFilingsPage .filings-card__table { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  /* no special overrides for flex list on SEC page */
}

/* Bookmarks & Profile: clamp message text to 2 lines on mobile */
@media (max-width: 47.99rem) {
  .bookmark-open,
  .profile-msg-text,
  .profile-msg-content { display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; max-height: 3em; }
  #bookmarksList > div { padding: var(--space-3) var(--space-4); }
}
}
.chat-crosspost-banner:focus-visible {
  outline: 0.125rem solid var(--color-blue);
  outline-offset: var(--space-1);
}
/* Mobile-only segmented view toggle (Chat | Details) inside chat header */
@media (max-width: 47.99rem) {
  /* Force the mobile toggle visible on small screens even if a generic
     `.hidden { display:none !important; }` class is present. */
  /* moved: mobile view toggle styles extracted to components.chat.css */
}
/* Chatboard height management and scrolling */
@media (min-width: 48rem) {
  /* Chat section height management moved to layout.css */
  
  /* Messages container with proper scrolling */
  #messagesContainer,
  .messages-container {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-gutter: stable;
  }
  
  /* Chat input area should not grow */
  #chatInputArea {
    flex: 0 0 auto;
  }
  
  /* Chat header should not grow */
  .chat-header {
    flex: 0 0 auto;
  }
  
  
  /* No fixed caps; flex layout handles visible search height naturally */
}
/* Mobile chatboard height management */
@media (max-width: 47.99rem) {
  /* Let flexbox size the message list to fill available space.
     Avoid fixed max-heights which can leave unused gaps on devices
     with dynamic viewport units (address bars, safe areas). */
  #messagesContainer,
  .messages-container {
    height: auto;
    max-height: none;
    overflow-y: auto;
    scrollbar-gutter: stable;
    flex: 1 1 auto;
    min-height: 0;
  }

  /* When the inline search panel is visible, its natural height will
     reduce the flex space for #messagesContainer; no explicit cap needed. */
  .chat-search-container.visible ~ #messagesContainer { max-height: none; }
}
/* Stock price delayed-data badge (high-contrast pill under price) */
.data-delay-badge { 
  margin-top: var(--space-1);
  background: var(--color-accent);
  color: var(--color-text-inverse);
  padding: 2px 6px;
  border-radius: var(--radius-sm);
  font-size: var(--font-10);
  font-weight: 700;
  letter-spacing: .02em;
  white-space: nowrap;
}
/* Feature-scoped components (override legacy where duplicated) */
/* Header & Navigation (extracted from components.css) */
.main-header {
  background: linear-gradient(135deg, var(--color-bg-muted), var(--color-surface));
  padding: 0 var(--space-8) 0 var(--space-5); /* tighter left padding to shift logo left */
  box-shadow: 0 0.125rem 0.625rem rgba(var(--black-rgb), 0.5);
  border-bottom: var(--space-1) solid var(--color-accent);
  position: relative;
  z-index: var(--z-dropdown); /* elevate above main content so header suggestions overlay; stay below modals */
  display: flex;
  flex-wrap: nowrap;
  justify-content: space-between;
  align-items: center;
  gap: var(--space-7-5);
  height: var(--header-row-height); /* further reduced to tighten gap below buttons */
  overflow-x: auto;
  overflow-y: visible;
  overscroll-behavior-x: contain;
  -webkit-overflow-scrolling: touch;
}
/* Mobile header hamburger toggle */
#mobileMenuToggle, .mobile-menu-toggle {
  display: none;
  align-items: center;
  justify-content: center;
  width: var(--space-20);
  height: var(--space-20);
  border-radius: var(--radius-md);
  border: var(--border-1) solid var(--color-border-strong);
  background: var(--color-bg);
  color: var(--color-text-strong);
}
#mobileMenuToggle svg, .mobile-menu-toggle svg { width: var(--btn-icon); height: var(--btn-icon); }
@media (max-width: 56.25rem) {
  #mobileMenuToggle svg { width: calc(var(--btn-icon) + 2px); height: calc(var(--btn-icon) + 2px); }
}
/* (removed legacy #mobileMenuPanel pattern in favor of #mobileMainPanel drawer) */
/* On small screens, show left and right toggles and collapse header actions into panels */
@media (max-width: 56.25rem) {
  .mobile-menu-toggle, #mobileMenuToggle { display: inline-flex; }
  /* Keep search visible on mobile: show nav but hide non-search items */
  .header-nav { display: grid; grid-template-columns: 1fr; }
  .header-nav > :not(.header-search) { display: none; }
  /* Reduce header gap so search sits closer to the gorilla image */
  .main-header { gap: var(--space-2); }
  #logo { margin: 0; }
  /* Left watchlist toggle */
  #watchlistToggle { display: inline-flex; align-items: center; justify-content: center; width: var(--space-20); height: var(--space-20); border-radius: var(--radius-md); border: var(--border-1) solid var(--color-border-strong); background: var(--color-bg); color: var(--color-text-strong); }
  #watchlistToggle svg { width: var(--btn-icon); height: var(--btn-icon); }
  /* (removed unused .mobile-center-search styles; header CSS keeps search visible) */
}
/* Right-side main menu sliding drawer (mobile only) */
@media (max-width: 56.25rem) {
  /* Further reduce panel width by ~20% (was ~60vw) */
  #mobileMainPanel, .drawer-panel { display: none; position: fixed; inset: 0 0 0 auto; width: min(48vw, var(--menu-max-w)); max-width: 56vw; background: var(--color-bg-elevated); border-left: var(--border-1) solid var(--color-accent); z-index: var(--z-drawer); box-shadow: var(--shadow-modal); padding-top: env(safe-area-inset-top); padding-bottom: env(safe-area-inset-bottom); }
  #mobileMainPanel.open, .drawer-panel.open { display: flex; flex-direction: column; }
  #mobileMainPanel .menu-list, .drawer-panel .menu-list { display: flex; flex-direction: column; padding: var(--space-3) var(--space-5); gap: 0; flex: 1 1 auto; min-height: 0; overflow-y: auto; align-items: stretch; }
  /* Remove outer framing lines; per-item separators instead */
  #mobileMainPanel .menu-list::before,
  #mobileMainPanel .menu-list::after { content: none !important; display: none !important; }
  #mobileMainPanel #mobileMenuGorilla, .drawer-panel #mobileMenuGorilla { display: block; width: 100%; height: auto; -o-object-fit: cover; object-fit: cover; margin-top: auto; border-top: var(--border-1) solid var(--color-border); }

  /* Enlarge menu buttons by ~30% inside the right drawer only */
  #mobileMainPanel .menu-list button,
  #mobileMainPanel .menu-list a {
    font-size: calc(var(--font-14) * 1.3);
    padding: var(--space-4) 0;
    width: 100%;
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    border-radius: 0 !important;
    color: var(--color-accent) !important; /* green text */
    text-align: center;
    justify-content: center;
  }
  /* Horizontal separators between items, plus underline for last item (e.g., Logout) */
  #mobileMainPanel .menu-list > * { border-top: var(--border-1) solid var(--color-accent); }
  #mobileMainPanel .menu-list > *:first-child { border-top: none; }
  #mobileMainPanel .menu-list > *:last-child { border-bottom: var(--border-1) solid var(--color-accent); }

  /* First top item ('Tribal Trading') should not be boxed */
  #mobileMainPanel #menuHomeBtn {
    background: transparent;
    border: none;
    padding: var(--space-3) 0;
    color: var(--color-accent);
    font-weight: 800;
    text-align: center;
    /* Make it 40% larger than standard menu items (which are 1.3x base) → 1.3 * 1.4 ≈ 1.82 */
    font-size: calc(var(--font-14) * 1.82);
  }
  #mobileMainPanel #menuHomeBtn:hover { background: transparent; color: var(--color-accent); }
}
/* Extra small device polish */
@media (max-width: 30rem) {
  .main-header { padding-left: var(--space-4); padding-right: var(--space-4); }
  .main-header h1 { font-size: var(--font-20); }
  #mobileMenuToggle, .mobile-menu-toggle { width: var(--space-16); height: var(--space-16); }
  #mobileMenuPanel .menu-list button, .mobile-menu-panel .menu-list button { padding: var(--space-3) var(--space-4); }
}
/* Header logo: hide image on mobile to remove gorilla icon */
#logoImg { display: none; width: var(--space-10); height: var(--space-10); -o-object-fit: contain; object-fit: contain; }
@media (max-width: 56.25rem) {
  /* Keep logo image hidden on small screens */
  #logoImg { display: none; }
  /* Visually hide the logo text on mobile */
  #logoText {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
  }
}
/* Left button becomes green $ icon on mobile; right menu matches size */
@media (max-width: 56.25rem) {
  #watchlistToggle {
    color: var(--color-accent);
    background: transparent;
    border: none;
    box-shadow: none;
    width: calc(var(--header-row-height) - var(--space-6));
    height: calc(var(--header-row-height) - var(--space-6));
    border-radius: 0;
    padding: 0;
    align-self: flex-start; /* push to top */
    margin-left: calc(-1 * var(--space-5)); /* pull into far left corner */
  }
  #watchlistToggle svg { display: none; }
  #watchlistToggle::before {
    content: '$';
    font-weight: 800;
    /* Keep large but proportional to reduced button size */
    font-size: calc(var(--header-row-height) - var(--space-10));
    line-height: 1;
  }
  /* match sizes between left and right toggles */
  #mobileMenuToggle {
    width: var(--space-20);
    height: var(--space-20);
  }
}
/* Keep nav items on a single row; search input will shrink responsively */
.header-nav { flex-wrap: nowrap; row-gap: 0; overflow-x: auto; overflow-y: visible; container-type: inline-size; scrollbar-gutter: stable both-edges; -webkit-overflow-scrolling: touch; }
.header-nav .relative {
  flex-grow: 1;
  min-width: var(--search-min-w); /* Give search more base width */
  flex-shrink: 1; /* Allow search to shrink */
}
/* Add a small gap between the search input and the Go button */
.header-search {
  gap: var(--space-2);
}
.header-search #searchSuggestions {
  position: absolute;
  top: calc(100% + var(--space-2));
  left: 0;
  right: 0;
}
.header-search #searchSuggestions,
#searchSuggestions[data-portal-root="body"] {
  z-index: var(--z-popover);
  max-height: min(65vh, var(--menu-max-h));
  overflow-y: auto;
  overscroll-behavior: contain;
  background: var(--color-bg-elevated);
  border: var(--border-1) solid var(--color-accent);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-modal, 0 1.5rem 2rem rgba(0, 0, 0, 0.6));
  pointer-events: auto;
}
#searchSuggestions[data-portal-root="body"] {
  position: fixed;
  left: auto;
  right: auto;
}
.header-nav button, .header-nav a {
  flex-shrink: 0; /* Prevent buttons from shrinking */
  white-space: nowrap; /* Keep button text on one line */
}
/* Base: keep buttons inline; shift right only on wider viewports */
.header-nav > .btn-go { margin-left: 0; }
/* Let the search container truly dominate available width */
.header-nav > .relative { flex: 1 1 auto; max-width: none; }
/* Container query: when header nav is tight, reduce minimums locally without global breakpoints */
@container (max-width: 36rem) {
  .header-nav > .relative { min-width: 0; }
}
/* On wider screens, push the button group to the right */
@media (min-width: 56.25rem) {
  .header-nav > .btn-go { margin-left: auto; }
}
/* Header nav sizing: uniform vertical inset (4px) instead of stretch */
.main-header .header-left, .main-header .header-nav { flex-wrap: nowrap; row-gap: 0; overflow: visible; }
/* Apply same top/bottom margin to every immediate child for consistent height */
/* Keep header-left children aligned universally */
.main-header .header-left > * { margin-top:var(--space-1); margin-bottom:0; display:flex; align-items:center; }
/* For nav children, only assert display on desktop so we don't override
   the mobile rule that hides non-search items. */
@media (min-width: 56.25rem) {
  .main-header .header-nav > * { margin-top:var(--space-1); margin-bottom:0; display:flex; align-items:center; }
}
/* Normalize buttons: now handled in buttons.css via class-first selectors */
/* Search input: keep internal padding but align with siblings */
.main-header .ticker-input { height:auto; padding-top:var(--space-5); padding-bottom:var(--space-5); align-self:center; }
/* Strong mobile safeguard: never show full nav on small screens.
   This reinforces the earlier rule inside the mobile block in case any
   later declarations (from utilities or Tailwind resets) attempt to
   force a display value on header nav children. */
@media (max-width: 56.25rem) {
  .main-header .header-nav > :not(.header-search) { display: none !important; }
  /* Explicitly cover common direct child types in case of future class changes */
  .main-header .header-nav > a,
  .main-header .header-nav > button,
  .main-header .header-nav > [role="link"] { display: none !important; }

  /* Enlarge the Go button inside the header search on mobile for better tap target */
  .header-search .btn-go {
    /* Match search input height by stretching; center content */
    display: flex;
    align-items: center;
    justify-content: center;
    align-self: stretch;
    height: auto;
    /* Reduce width ~40% vs earlier by trimming horizontal padding */
    padding: 0 var(--space-10);
    font-size: var(--font-14);
    border-radius: var(--radius-md);
    min-width: 0;
  }
}
/* Profile Page Tweaks (extracted from components.css) */
.profile-grid { align-items: start; margin-top: 0; }
.profile-grid > *:first-child { margin-top: 0; }
/* Toggle buttons (Blocked/Public watchlists) */
.profile-section-toggle {
  transition: color 0.18s ease, text-shadow 0.18s ease;
  color: var(--color-text-muted);
}
.profile-section-toggle[aria-expanded="true"] {
  color: var(--color-accent);
  text-shadow: var(--text-glow-green-xs);
}
/* Mobile: ensure stacked columns use full width */
@media (max-width: 47.99rem) {
  .profile-grid { align-items: stretch; }
  .profile-left, .profile-main { width: 100%; max-width: none; }

  /* Mobile: make the profile filter bar behave like DM search */
  #profilePage .profile-search-container { position: sticky; top: 0; z-index: var(--z-sticky); background: var(--color-bg); display: block; }
  #profilePage .profile-search-container:not(.visible) { height: 0; max-height: 0; padding-top: 0 !important; padding-bottom: 0 !important; overflow: hidden; }
  #profileChatSearchContainer { position: relative; padding-top: var(--space-5); padding-bottom: var(--space-5); }
  #profileChatSearchContainer::before, #profileChatSearchContainer::after { content: ''; position: absolute; left: 0; right: 0; height: var(--space-1); background: var(--color-accent); box-shadow: 0 0 0.375rem rgba(var(--green-rgb), 0.6), 0 0 0.75rem rgba(var(--green-rgb), 0.3); pointer-events: none; }
  #profileChatSearchContainer::before { top: 0; }
  #profileChatSearchContainer::after { bottom: 0; }
  #profileChatSearchContainer:not(.visible)::before,
  #profileChatSearchContainer:not(.visible)::after { display: none !important; content: none !important; }
}
/* Profile page layout: proper column width distribution */
@media (min-width: 48rem) {
  /* Ensure profile grid takes full width */
  .profile-grid {
    width: 100%;
    display: flex;
    flex-direction: row;
  }
  
  .profile-left { 
    flex: 0 1 30%; 
    width: 30%;
    max-width: 30%;
    min-width: 0;
  }  /* Fixed width left column (30%) */
  .profile-main { 
    flex: 0 1 70%; 
    width: 70%;
    max-width: 70%;
    min-width: 0; 
  }             /* Remaining space for right column (70%) */
}
.profile-new-msg-highlight { position: relative; animation: profileNewMsgFlash 1800ms ease-out 1; }
@keyframes profileNewMsgFlash { 0% { box-shadow: 0 0 0 0 rgba(var(--green-rgb), 0.55); background-color: rgba(var(--green-rgb), 0.12); } 40% { box-shadow: 0 0 0 0.375rem rgba(var(--green-rgb), 0.25); } 70% { box-shadow: 0 0 0 0.125rem rgba(var(--green-rgb), 0.30); } 100% { box-shadow: 0 0 0 0 rgba(var(--green-rgb), 0); background-color:transparent; } }
#bioTextarea { min-height: var(--bio-min-h); height: var(--bio-h); max-height: var(--bio-max-h); resize: vertical; }
.profile-messages { display: flex; flex-direction: column; gap: var(--space-2); }
/* (reverted: do not force local vertical scroll on desktop) */
.profile-messages .profile-message { padding: var(--space-4) var(--space-6); margin-bottom: var(--space-2); border-radius: var(--radius-md); border: var(--border-1) solid var(--color-border); background: var(--color-surface); transition: border-color 0.2s ease, box-shadow 0.2s ease; }
.profile-messages .profile-message:hover { border-color: var(--color-accent); box-shadow: var(--shadow-green-xs); }
.profile-messages .profile-message > div:first-child { margin-bottom: var(--space-1); font-size: var(--font-14); line-height: 1.3; }
.profile-messages .profile-msg-content { font-size: var(--font-16); padding: var(--space-3) var(--space-6); line-height: 1.4; min-height: var(--space-18); display: flex; align-items: center; gap: var(--space-4); border-radius: var(--radius-sm); background: rgba(var(--green-rgb), 0.12); color: var(--color-text-strong); border: var(--border-1) solid rgba(var(--green-rgb), 0.35); transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease; }
.profile-messages .profile-message:hover .profile-msg-content { background: rgba(var(--green-rgb), 0.15); border-color: rgba(var(--green-rgb), 0.6); box-shadow: 0 0 0 0.125rem rgba(var(--green-rgb), 0.35) inset, var(--shadow-green-xs); transform: translateY(-2px); }
.profile-messages .profile-message:active .profile-msg-content { background: rgba(var(--green-rgb), 0.08); transform: translateY(-1px); box-shadow: 0 0 0 0.0625rem rgba(var(--green-rgb), 0.35) inset; }
.profile-messages .profile-msg-ticker, .profile-messages .profile-msg-username { font-size: var(--font-18); font-weight: 700; line-height: 1.2; }
.profile-messages .msg-actions button { font-size: var(--font-16); padding: var(--space-3) var(--space-5); line-height: 1.2; font-weight: 600; }
.profile-messages .profile-msg-list { display: flex; flex-direction: column; gap: var(--space-2); }
.profile-messages .profile-msg-ts { font-size: var(--font-12); opacity: 0.7; }
.profile-message .profile-msg-content--profile { align-items: flex-start; }
.profile-message .profile-msg-reaction-anchor { display: inline-flex; align-items: center; }
.profile-message .profile-msg-text { display: block; flex: 1; }
.profile-message .message-with-reaction { position: static; padding-right: 0; }
.profile-message .message-reaction { position: static; transform: none; opacity: 1; margin: 0; display: inline-flex; align-items: center; gap: var(--space-1); transition: color 0.18s ease; }
.profile-message .message-reaction__button { width: var(--btn-icon-sm); height: var(--btn-icon-sm); }
.profile-message .message-reaction__count { margin-left: var(--space-1); }
/* SEC Bot filings hover/focus states for cards in profile feed */
.profile-messages .profile-message.is-clickable { transition: background 0.2s ease, border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease; }
.profile-messages .profile-message.is-clickable:hover {
  background: rgba(var(--green-rgb), 0.06);
  border-color: rgba(var(--green-rgb), 0.55);
  box-shadow: var(--shadow-green-xs);
  transform: translateY(-1px);
}
.profile-messages .profile-message.is-clickable:focus,
.profile-messages .profile-message.is-clickable:focus-visible {
  outline: var(--focus-ring-size, 0.125rem) solid var(--focus-ring-color, rgba(var(--green-rgb), 0.82));
  outline-offset: var(--focus-ring-offset, 0.125rem);
  border-color: var(--color-accent);
  box-shadow: var(--outline-strong);
}
/* Filings UI (extracted from components.css) */
/* Daily Filings: filter pills */
.df-pill {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-3) var(--space-5);
  border-radius: var(--radius-md-plus);
  border: var(--border-1) solid var(--color-border-strong);
  background: radial-gradient(120% 120% at 50% 0%, rgba(var(--green-rgb), 0.12) 0%, rgba(var(--green-rgb), 0.06) 28%, rgba(var(--black-rgb), 0) 60%), var(--color-bg-elevated);
  color: var(--color-accent);
  font-size: var(--font-12);
  font-weight: 800;
  letter-spacing: var(--ls-xs);
  cursor: pointer;
  transition: transform 120ms ease, box-shadow 160ms ease, background 160ms ease, color 160ms ease, border-color 160ms ease;
  /* Reserve space for the largest box-shadow to prevent layout shift */
  box-shadow: 0 0 1.25rem rgba(var(--green-rgb), 0); 
  will-change: transform, box-shadow;
}
.df-pill::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(110deg, rgba(var(--white-rgb), 0) 35%, rgba(var(--white-rgb), 0.35) 50%, rgba(var(--white-rgb), 0) 65%);
  transform: translateX(-140%);
  opacity: 0; pointer-events: none;
}
.df-pill:hover::after { animation: dfSheen 900ms ease forwards; }
.df-pill:hover { transform: translateY(-1px); box-shadow: 0 0.375rem 1rem rgba(var(--green-rgb), 0.14); border-color: var(--color-accent); }
.df-pill:focus {
  outline: var(--focus-ring-size, 0.125rem) solid var(--focus-ring-color, rgba(var(--green-rgb), 0.82));
  outline-offset: var(--focus-ring-offset, 0.125rem);
  box-shadow: var(--outline-strong);
}
.df-pill:active { transform: translateY(0); }
.df-pill.is-selected {
  background: linear-gradient(180deg, var(--color-accent), var(--color-accent-hover));
  color: var(--color-text-inverse);
  border-color: var(--color-accent);
  /* The animation will take over the box-shadow property */
  animation: dfPulseBoxShadow 2000ms ease-in-out infinite;
}
.df-pill.is-selected:hover { transform: translateY(-1px); }
.df-pill.df-pressed { transform: translateY(0); }
@keyframes dfSheen { 0% { opacity: 0; transform: translateX(-140%); } 10% { opacity: 1; } 100% { opacity: 0; transform: translateX(140%); } }
/* This animation now smoothly transitions the color and size of the pre-allocated shadow space */
@keyframes dfPulseBoxShadow { 
  0%,100% { box-shadow: 0 0 0.75rem rgba(var(--green-rgb), 0.2); } 
  50% { box-shadow: 0 0 1.25rem rgba(var(--green-rgb), 0.45); } 
}
@media (prefers-reduced-motion: reduce) {
.df-pill, .df-pill:hover, .df-pill:focus, .df-pill:active { transition: none; }
.df-pill::after, .df-pill:hover::after { animation: none; }

/* Touch devices: avoid sticky hover on pills */
@media (hover: none) and (pointer: coarse) {
  .df-pill:hover { 
    transform: none; 
    box-shadow: 0 0 1.25rem rgba(var(--green-rgb), 0); 
    border-color: var(--color-border-strong);
  }
  .df-pill:hover::after { animation: none; }
}
}
/* Daily Filings header minor tweaks */
.daily-filings-header { box-shadow: 0 0.375rem 1.125rem rgba(var(--black-rgb), 0.25); overflow: visible; }
.daily-filings-header h2 { text-shadow: var(--text-glow-green-sm); }
/* Daily Filings: filters aligned right in two tight rows */
.daily-filters-grid { display: flex; align-items: center; justify-content: flex-end; gap: var(--space-3); overflow-x: hidden; overflow-y: visible; white-space: nowrap; padding-top: var(--space-1); padding-bottom: var(--space-1); scrollbar-width: auto; }
.daily-filters-grid::-webkit-scrollbar { height: var(--space-4); }
.daily-filters-grid::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: var(--radius-md); }
.daily-filters-grid .df-pill { margin: 0; padding: var(--space-4) var(--space-6); border-radius: var(--radius-lg); font-size: var(--font-13); }
/* Ensure 'Form Types:' button height matches df-pill across pages */
.daily-filters-grid .form-types-btn { padding: var(--space-4) var(--space-6); font-size: var(--font-13); line-height: 1; }
/* SEC Filings page: center Form Types and Clear on mobile */
@media (max-width: 56.25rem) {
  /* Center the top row that contains the Form Types button and the pills */
  .filings-filters .filters-top-row { justify-content: center; }
  /* Ensure the pills block (which contains Clear when date range is hidden) is also centered */
  .filings-filters .daily-filters-grid { justify-content: center; }
}
/* Daily (New) Filings page — mobile layout cleanup: make filters wrap & center */
@media (max-width: 56.25rem) {
  /* Move the right filters block under the heading and center it */
  #dailyFiltersRight { 
    margin-left: 0; 
    flex: 0 0 100%; 
    justify-content: center; 
    flex-wrap: wrap; 
    gap: var(--space-2) var(--space-3);
  }
  /* Row 1: Keep the heading on a single line and centered */
  .filings-card--live .daily-filings-header .h-8 { width: 100%; justify-content: center; }
  .filings-card--live .daily-filings-header h2 { white-space: nowrap; text-align: center; font-size: var(--font-18); }

  /* Children of #dailyFiltersRight stack into rows using flex order */
  .filings-card--live #dailyFormFilters { order: 1; flex: 0 0 100%; }
  .filings-card--live #dailyClearFilters { order: 2; flex: 0 0 100%; display: flex; justify-content: center; }

  /* Let all filter pills wrap to multiple lines, remove clipping */
  .filings-card--live .daily-filters-grid { 
    justify-content: center; 
    white-space: normal; 
    overflow: visible; 
    flex-wrap: wrap; 
    row-gap: var(--space-2); 
    -moz-column-gap: var(--space-2); 
         column-gap: var(--space-2);
    padding-top: var(--space-1);
    padding-bottom: var(--space-1);
  }
  /* Row 2: Put Form Types on its own centered row inside the grid */
  .filings-card--live .daily-filters-grid .form-types-btn { 
    flex: 0 0 100%; 
    display: flex; 
    justify-content: center; 
    order: 0; 
  }
  /* Row 3+: Pills follow after the Form Types row */
  .filings-card--live .daily-filters-grid .df-pill { order: 1; }
  /* Nudge Clear to its own line when space is tight and center it */
  #dailyClearFilters { 
    width: auto; 
    align-self: center; 
    margin-top: var(--space-2);
  }
}
/* Better looking Clear button for Daily Filings */
.df-clear-btn {
  background: rgba(var(--green-rgb), 0.12);
  color: var(--color-accent);
  border: var(--border-1) solid rgba(var(--green-rgb), 0.5);
  border-radius: var(--radius-md-plus);
  padding: var(--space-4) var(--space-6);
  font-size: var(--font-12);
  font-weight: 800;
  letter-spacing: .02em;
  transition: background .15s ease, color .15s ease, border-color .15s ease, box-shadow .15s ease, transform .12s ease;
}
.df-clear-btn:hover { background: var(--color-accent); color: var(--color-text-inverse); border-color: var(--color-accent); box-shadow: 0 0.625rem 1.5rem rgba(var(--green-rgb), 0.25); transform: translateY(-1px); }
.df-clear-btn:active { transform: translateY(0); box-shadow: none; }
/* Mobile: prevent sticky green after tap; flash green only while pressed */
@media (hover: none) and (pointer: coarse) {
  .df-clear-btn:hover,
  .df-clear-btn:focus,
  .df-clear-btn:focus-visible {
    background: rgba(var(--green-rgb), 0.12);
    color: var(--color-accent);
    border-color: rgba(var(--green-rgb), 0.5);
    box-shadow: none;
    transform: none;
  }
  .df-clear-btn:active {
    background: var(--color-accent);
    color: var(--color-text-inverse);
    border-color: var(--color-accent);
  }
}
/* Generic filings search and lists (migrated) */
.filings-search { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--space-4); }
.filings-search__input { flex: 1 1 12rem; width: min(var(--menu-max-w), 100%); background: var(--color-bg-muted); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-md); padding: var(--space-4) var(--space-6); color: var(--color-text-strong); transition: border-color 0.2s ease, box-shadow 0.2s ease; }
.filings-search__input:focus { outline: none; border-color: var(--color-accent); box-shadow: 0 0 0 0.125rem rgba(var(--green-rgb), 0.35); }
.filings-search__button { background: var(--color-surface); color: var(--color-text-strong); border: var(--border-1) solid var(--color-accent); border-radius: var(--radius-md); padding: var(--space-3) var(--space-6); font-weight: 600; flex-shrink: 0; transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease; }
.filings-search__button:hover,
.filings-search__button:focus-visible { background: var(--color-accent); color: var(--color-bg); border-color: var(--color-accent); box-shadow: 0 0.375rem 1.25rem rgba(var(--green-rgb), 0.22); }
.filings-search__button:focus-visible {
  outline: var(--focus-ring-size, 0.125rem) solid var(--focus-ring-color, rgba(var(--green-rgb), 0.82));
  outline-offset: var(--focus-ring-offset, 0.125rem);
}
.filings-search__latest { background: var(--color-surface); color: var(--color-accent); border: var(--border-1) solid var(--color-accent); border-radius: var(--radius-md); padding: var(--space-3) var(--space-6); font-weight: 600; flex-shrink: 0; transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease; }
.filings-search__latest:hover,
.filings-search__latest:focus-visible { background: var(--color-accent); color: var(--color-text-inverse); border-color: var(--color-accent); }
.filings-search__latest:focus-visible {
  outline: var(--focus-ring-size, 0.125rem) solid var(--focus-ring-color, rgba(var(--green-rgb), 0.82));
  outline-offset: var(--focus-ring-offset, 0.125rem);
}
/* UK Filings responsive adjustments */
#ukFilingsPage .uk-filings-title,
#ukFilingsPage .uk-filings-subtitle {
  max-width: min(52rem, 100%);
  margin-left: auto;
  margin-right: auto;
}
#ukFilingsPage .uk-filings-search-container {
  width: min(52rem, 100%);
  margin-left: auto;
  margin-right: auto;
  flex-wrap: nowrap;
  align-items: stretch;
}
#ukFilingsPage .uk-filings-input {
  width: 100%;
  min-width: 20rem;
  font-size: var(--font-16);
}
#ukFilingsPage .uk-filings-search-container .btn-nav {
  flex-shrink: 0;
}
#ukFilingsPage .uk-filings-suggestions {
  min-width: 100%;
  max-width: min(52rem, calc(100vw - var(--space-8)));
}
#ukFilingsPage .uk-filings-suggestions .suggestion-item {
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-1);
}
#ukFilingsPage .uk-filings-suggestions .symbol {
  font-weight: 700;
  font-size: var(--font-14);
}
#ukFilingsPage .uk-filings-suggestions .name {
  font-size: var(--font-12);
  color: var(--color-text-muted);
  white-space: normal;
}
@media (max-width: 48rem) {
  #ukFilingsPage .uk-filings-search-container {
    width: 100%;
    flex-direction: column;
    gap: var(--space-3);
  }
  #ukFilingsPage .uk-filings-input {
    min-width: 0;
  }
}
.filings-filters { background: var(--color-bg-muted); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-md); }
.filings-filters--compact { display: block; width: -moz-fit-content; width: fit-content; max-width: 100%; margin: 0 auto var(--space-6); text-align: center; }
@supports not ((width: -moz-fit-content) or (width: fit-content)) {
  /* fallback: allow full width on legacy engines */
  .filings-filters--compact { width: auto; }
}
@media (min-width: 40.0625rem) {
  .filings-filters--compact { text-align: left; }
}
@media (max-width: 40rem) {
  .filings-filters--compact { display: block; width: 100%; }
}
.filings-results { margin-top: var(--space-6); }
.filings-controls-row { display:flex; flex-direction: column; align-items: stretch; gap: var(--space-4); }
/* Keep actions next to date inputs (not far right) on medium+ screens */
@media (min-width: 48rem) {
  .filings-controls-row { flex-direction: row; align-items: center; justify-content: flex-start; }
  .filings-controls-row > .filings-controls-actions { margin-left: var(--space-6); display: flex; align-items: center; flex-wrap: nowrap; white-space: nowrap; }
}
.filings-card { position: relative; }
/* Flex-based filings list (replaces tables) */
.filings-list { width: 100%; display: flex; flex-direction: column; }
.filings-list__head { display: flex; align-items: center; gap: var(--space-2); background: var(--color-surface); color: var(--color-accent); padding: var(--space-5) var(--space-6); border-bottom: var(--border-1) solid var(--color-border-strong); font-size: var(--font-13); font-weight: 600; }
.filings-list__row { display: flex; align-items: center; gap: var(--space-4); padding: var(--space-4) var(--space-6); border-bottom: var(--border-1) solid var(--color-border-strong); cursor: pointer; }
.filings-list__row:hover { background: rgba(var(--white-rgb), 0.04); }
.filings-list__col { min-width: 0; }
.filings-list__col--form { flex: 0 0 5rem; font-weight: 700; }
.filings-list__col--company { flex: 1 1 auto; min-width: var(--filings-company-min-w); }
.filings-list__col--date { flex: 0 0 auto; white-space: nowrap; margin-left: auto; display: flex; align-items: center; gap: var(--space-3); }
.filings-list__date-day { font-weight: 600; }
.filings-list__date-time { color: var(--color-text-muted); font-size: var(--font-12); }
.filings-list__chevron { color: var(--color-text-muted); }
/* Live filings (5-column compact layout) */
.filings-live-list { width: 100%; display: flex; flex-direction: column; }
.filings-live-row { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); border-bottom: var(--border-1) solid var(--color-border-strong); }
.filings-live-cell { min-width: 0; }
.filings-live-cell--index { flex: 0 0 3rem; text-align: left; padding-right: 0; }
.filings-live-cell--ticker { flex: 0 0 6rem; font-weight: 700; color: var(--color-accent); }
.filings-live-cell--company { flex: 1 1 auto; min-width: var(--filings-live-company-min-w); }
.filings-live-cell--form { flex: 0 0 5.5rem; font-weight: 600; }
.filings-live-cell--filed { flex: 0 0 12rem; white-space: nowrap; text-align: right; margin-left: 0; }
@media (max-width: 47.99rem) {
  #dailyFilingsPage .filings-live-cell--filed { white-space: normal; }
  #dailyFilingsPage .filings-live-row { gap: 0; justify-content: flex-start; }
  #dailyFilingsPage .filings-list__head { gap: 0; justify-content: flex-start; }
  /* Ensure no inner padding adds space between Form and Filed columns */
  #dailyFilingsPage .filings-live-cell--ticker,
  #dailyFilingsPage .filings-live-cell--form { padding-left: 0; padding-right: 0; }
  /* Keep cells tight; no extra inner spacing on Filed (gap managed by fixed Form width) */
  #dailyFilingsPage .filings-live-cell--filed { padding-left: 0 !important; margin-left: 0 !important; }
  /* Mobile: allow Form and Filed to size to content and align left
     to avoid a large visual gap when Company column is hidden. */
  #dailyFilingsPage .filings-live-cell--index { flex: 0 0 2.5rem; }
  #dailyFilingsPage .filings-live-cell--ticker { flex: 0 0 4.75rem; }
  /* Keep a fixed base so Filed column starts at a consistent X across rows */
  /* Increased to 9rem for more separation from Filed */
  #dailyFilingsPage .filings-live-cell--form { flex: 0 0 9rem; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  #dailyFilingsPage .filings-live-cell--filed { flex: 0 1 auto; text-align: left; }
  /* Two-line stack within Filed should align to the left on mobile */
  #dailyFilingsPage .filings-live-filed { align-items: flex-start; }
}
/* Desktop/web: even spacing for SEC Filings columns and larger Form boundary */
@media (min-width: 56.25rem) {
  /* Use a shared grid for header and rows: [Form] [Company] [Date] */
  :root {
    --filings-form-col: 9rem;   /* increased boundary for longer form labels */
    --filings-date-col: 14rem;  /* keeps date/time stable */
  }

  #secFilingsPage .filings-list__head,
  #secFilingsPage .filings-list__row {
    display: grid;
    grid-template-columns: var(--filings-form-col) 1fr var(--filings-date-col);
    align-items: center;
    gap: var(--space-2);
  }
  #secFilingsPage .filings-list__col--form { flex: 0 0 auto; }
  #secFilingsPage .filings-list__col--date { margin-left: 0; justify-content: flex-end; }

  /* Pointer devices: green hover highlight for filings rows */
  @media (hover: hover) and (pointer: fine) {
    #secFilingsPage .filings-list__row:hover {
      background: var(--color-accent);
      color: var(--color-text-inverse);
    }
    #secFilingsPage .filings-list__row:hover .filings-form,
    #secFilingsPage .filings-list__row:hover .filings-company,
    #secFilingsPage .filings-list__row:hover .filings-list__date-day,
    #secFilingsPage .filings-list__row:hover .filings-list__date-time,
    #secFilingsPage .filings-list__row:hover .filings-list__chevron { color: var(--color-text-inverse); }
  }
}
/* Desktop/web: apply same spacing + hover for Daily (New) Filings */
@media (min-width: 56.25rem) {
  :root {
    --filings-live-index-col: 3.5rem;
    --filings-live-ticker-col: 6rem;
    --filings-live-form-col: 9rem;  /* increased boundary */
    --filings-live-filed-col: 14rem;
  }

  #dailyFilingsPage .filings-list__head {
    display: grid;
    grid-template-columns: var(--filings-live-index-col) var(--filings-live-ticker-col) 1fr var(--filings-live-form-col) var(--filings-live-filed-col);
    align-items: center;
    gap: var(--space-2);
  }
  #dailyFilingsPage .filings-live-row {
    display: grid;
    grid-template-columns: var(--filings-live-index-col) var(--filings-live-ticker-col) 1fr var(--filings-live-form-col) var(--filings-live-filed-col);
    align-items: center;
    gap: var(--space-2);
  }
  #dailyFilingsPage .filings-live-cell--filed { margin-left: 0; text-align: right; }

  /* Pointer devices: green hover highlight for live filings rows */
  @media (hover: hover) and (pointer: fine) {
    #dailyFilingsPage .filings-live-row:hover {
      background: var(--color-accent);
      color: var(--color-text-inverse);
    }
    /* Ensure ticker text switches to inverse on hover for contrast */
    #dailyFilingsPage .filings-live-row:hover .filings-live-cell--ticker {
      color: var(--color-text-inverse);
    }
    #dailyFilingsPage .filings-live-row:hover .filings-list__date-day,
    #dailyFilingsPage .filings-live-row:hover .filings-list__date-time { color: var(--color-text-inverse); }
  }
}
/* Two-line filed (date/time) stack for daily stream */
.filings-live-filed { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.15; }
/* Time top: larger & bolder; Date bottom: smaller & muted */
.filings-live-filed .filings-list__date-time { font-size: var(--font-14); font-weight: 700; color: var(--color-text-strong); }
.filings-live-filed .filings-list__date-day { font-size: var(--font-11); color: var(--color-text-muted); font-weight: 500; }
.filings-row { border-bottom: var(--border-1) solid var(--color-border-strong); background: var(--color-bg); transition: background 0.2s ease, color 0.2s ease; }
.filings-row:last-child { border-bottom: none; }
.filings-row:hover { background: var(--color-accent); color: var(--color-text-inverse); }
.filings-cell { padding: var(--space-6) var(--space-5); }
.filings-form { color: var(--color-accent); font-weight: 600; }
.filings-company { color: var(--color-text-muted); font-weight: 600; }
.filings-row:hover .filings-form,
.filings-row:hover .filings-company,
.filings-row:hover .filings-cell--company { color: var(--color-text-inverse); }
.filings-date { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); }
.filings-date__day { font-weight: 600; color: var(--color-text-muted); }
.filings-row:hover .filings-date__day { color: var(--color-text-inverse); }
.filings-date__time { font-size: var(--font-11); color: var(--color-text-subtle); border: var(--border-1) solid transparent; border-radius: var(--radius-xs); padding: var(--space-1) var(--space-2); text-transform: uppercase; letter-spacing: 0.06em; }
.filings-row:hover .filings-date__time { color: var(--color-text-inverse); border-color: rgba(var(--black-rgb), 0.4); }
.filings-date__chevron { display: flex; align-items: center; opacity: 0; transition: opacity 0.2s ease, color 0.2s ease; color: var(--color-accent); }
.filings-row:hover .filings-date__chevron { opacity: 1; color: var(--color-text-inverse); }
.filings-date__icon { width: var(--space-7); height: var(--space-7); }
.filings-row a { color: inherit; text-decoration: none; }
.filings-row a:hover { text-decoration: underline; }
.filings-row a:focus-visible { outline: var(--space-2) solid var(--color-accent); outline-offset: var(--space-2); }
.filings-empty { text-align: center; color: var(--color-text-subtle); font-size: var(--font-14); }
.filings-cell--index { width: var(--space-16); text-align: center; font-family: var(--font-mono); color: var(--color-text-subtle); }
.filings-cell--ticker { font-family: var(--font-mono); font-weight: 600; letter-spacing: 0.04em; }
.filings-cell--company { color: var(--color-text-muted); }
.filings-cell--form { font-weight: 600; }
.filings-cell--filed { font-family: var(--font-mono); font-size: var(--font-12); letter-spacing: 0.04em; }
/* SEC Filings (search page): hide Company column on mobile to improve fit */
@media (max-width: 47.99rem) {
  #secFilingsPage .filings-list__col--company { display: none; }
}
/* Daily Filings (live stream): hide Company column on mobile to improve fit */
@media (max-width: 47.99rem) {
  #dailyFilingsPage .filings-live-cell--company { display: none; }
}
/* Inline info icon in ticker cell for Daily Filings */
/* Hidden by default; only show when Company column is hidden (mobile) */
.ticker-company-btn { display: none; margin-left: var(--space-2); }
@media (max-width: 47.99rem) {
  #dailyFilingsPage .ticker-company-btn { display: inline-flex; }
}
/* Chat UI (extracted from components.css) */
/* Highlight a chat message (e.g., when linked from search) */
.message.is-highlighted {
  outline: var(--space-3) solid var(--color-accent);
  background-color: rgba(var(--green-rgb), 0.08);
  box-shadow: var(--outline-strong) inset, 0 0 0.75rem rgba(var(--green-rgb), 0.2);
}
/* Reply preview (inline composer context) */
.reply-preview-container {
  padding: var(--space-5);
  background: var(--color-bg-muted);
  border-top: var(--border-1) solid var(--color-border);
  display: flex; justify-content: space-between; align-items: center;
  font-size: var(--font-13);
}
.reply-preview-content { border-left: var(--space-3) solid var(--color-warning); padding-left: var(--space-5); }
.reply-preview-header { font-weight: bold; color: var(--color-warning); }
.reply-preview-body { color: var(--color-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: var(--reply-preview-max-w); }
.reply-preview-cancel { background: transparent; color: var(--color-text-dim); border: none; font-size: var(--font-24); cursor: pointer; padding: 0 var(--space-5); line-height: 1; }
.reply-preview-cancel:hover { color: var(--color-text-strong); }
#replyPreviewContainer, .reply-preview-container {
  background: rgba(var(--warning-rgb), 0.08);
  border-left: var(--space-3) solid var(--color-warning);
  border-radius: var(--radius-sm);
  padding: var(--space-3) var(--space-4);
}
#replyPreviewContainer .reply-context, .reply-preview-container .reply-context { border-left: 0; background: transparent; padding: 0; }
.reply-close { background: transparent; border: none; color: var(--color-text-muted); font-size: var(--font-18); line-height: 1; padding: 0 var(--space-4); cursor: pointer; }
.reply-close:hover { color: var(--color-text-strong); }
/* File uploads and attachments */
#fileUploadPreview, #dmFilePreview { display: flex; gap: var(--space-4); margin-top: var(--space-4); flex-wrap: wrap; }
.file-preview-item {
  background: var(--color-surface);
  border: var(--border-1) solid var(--color-border-strong);
  border-radius: var(--radius-xs);
  padding: var(--space-3) var(--space-4);
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  box-shadow: var(--shadow-green-xs);
}
.file-preview-item .file-name { max-width: 12rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.file-preview-item .file-meta { color: var(--color-text-muted); }
.file-preview-item button { background: transparent; border: none; color: var(--color-text-dim); cursor: pointer; font-size: var(--font-14); }
.file-preview-item button:hover { color: var(--color-text-strong); }
.message-attachment { background: var(--color-bg-muted); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-sm); padding: var(--space-4); margin-top: var(--space-4); display: inline-flex; align-items: center; gap: var(--space-3); max-width: 100%; }
.msg-image { display: inline-flex; margin: 0 0 var(--space-2) 0; }
.message-attachment a { color: var(--color-accent); text-decoration: none; display: flex; align-items: center; gap: var(--space-3); }
.message-attachment a:hover { text-decoration: underline; }
.message-attachment img { max-width: 100%; max-height: 60svh; border-radius: var(--radius-xs); margin-top: var(--space-4); cursor: pointer; }
/* Show X on blocked upload (guest/restricted) */
.upload-blocked { position: relative; }
.upload-blocked:hover .paperclip-icon { opacity: 0; }
.upload-blocked::after {
  content: '';
  position: absolute;
  inset: 0;
  display: none;
  align-items: center;
  justify-content: center;
}
.upload-blocked:hover::after {
  content: '×';
  display: flex;
  color: var(--color-danger);
  font-weight: 900;
  font-size: 1.25rem;
  text-shadow: var(--text-shadow-dark-md);
}
.action-blocked,
.guest-restricted,
.guest-disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
.guest-restricted * {
  pointer-events: auto;
}
/* Guest click denial feedback */
.guest-block-flash::after {
  content: '×';
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  color: var(--color-danger);
  font-weight: 900;
  font-size: 1.25rem;
  text-shadow: var(--text-shadow-dark-md);
  animation: guest-flash-fade 480ms ease;
  pointer-events: none;
}
.guest-block-flash::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: var(--radius-md);
  box-shadow: 0 0 0 0.25rem rgba(var(--red-rgb), 0.25);
  animation: guest-flash-pulse 480ms ease;
  pointer-events: none;
}
.guest-block-flash {
  position: relative;
  animation: guest-flash-shake 240ms ease;
}
@keyframes guest-flash-fade {
  0% { opacity: 1; transform: scale(1); }
  100% { opacity: 0; transform: scale(1.15); }
}
@keyframes guest-flash-pulse {
  0% { opacity: 0.6; transform: scale(0.95); }
  100% { opacity: 0; transform: scale(1.15); }
}
@keyframes guest-flash-shake {
  0% { transform: translateX(0); }
  25% { transform: translateX(-3px); }
  50% { transform: translateX(3px); }
  75% { transform: translateX(-2px); }
  100% { transform: translateX(0); }
}
/* Ensure overlays (timestamps/actions) are visible */
.message { overflow: visible; }
/* Chat header and containers */
.chat-header { background: var(--color-bg-muted); padding: var(--space-3) var(--space-10); border-bottom: var(--border-1) solid var(--color-border); display: flex; justify-content: space-between; align-items: center; font-size: var(--font-16); color: var(--color-accent); }
#onlineUsersCount, .online-users-count { min-width: var(--space-9); height: var(--space-9); font-size: var(--font-11); }
.chat-header #chatTitle { font-weight: bold; color: inherit; }
.messages-container { flex: 1; overflow-y: auto; padding: var(--space-10) var(--space-10) var(--space-10) var(--space-1); background: var(--color-bg); }
/* Guard against long tokens/URLs causing horizontal overflow */
#messagesContainer,
.messages-container { word-wrap: break-word; overflow-wrap: anywhere; }
.empty-chat { text-align: center; color: var(--color-text-strong); font-size: var(--font-18); padding: var(--space-30) var(--space-10); }
.empty-chat::before { content:"💬"; display:block; font-size: var(--font-48); margin-bottom: var(--space-10); }
#messagesContainer .message, .messages-container .message { border-radius: var(--radius-md-plus); padding-left: var(--space-3); padding-right: var(--space-9); }
/* Base chat message bubble */
.message { background: var(--color-surface); border: var(--border-1) solid var(--color-border); border-left: var(--space-3) solid var(--color-accent); border-radius: var(--radius-xs); padding: var(--space-4) var(--space-6); margin-bottom: var(--space-3); position: relative; cursor: pointer; }
/* Message actions visibility */
.message-actions { display: none; gap: var(--space-4); margin-top: var(--space-5); justify-content: flex-start; }
.message.is-selected .message-actions { display: flex; }
/* Keyboard focus cues */
#messagesContainer .message:focus-within,
.messages-container .message:focus-within {
  outline: var(--focus-ring-size, 0.125rem) solid var(--focus-ring-color, rgba(var(--green-rgb), 0.82));
  outline-offset: var(--focus-ring-offset, 0.125rem);
}
.message-actions button:focus-visible,
.file-preview-item button:focus-visible,
.reply-preview-cancel:focus-visible,
.reply-close:focus-visible,
.message-attachment a:focus-visible {
  outline: var(--focus-ring-size, 0.125rem) solid var(--focus-ring-color, rgba(var(--green-rgb), 0.82));
  outline-offset: var(--focus-ring-offset, 0.125rem);
  border-radius: var(--radius-xs);
}
/* Message row layout */
.message-row { align-items: stretch; position: relative; display: flex; gap: 0; }
/* Mobile: ensure chat messages use flex layout and wrap within the viewport */
@media (max-width: 47.99rem) {
  #messagesContainer .message,
  .messages-container .message {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    max-width: 100%;
    overflow: hidden;
  }
  .message-row { flex-wrap: wrap; }
  #messagesContainer .message *,
  .messages-container .message * { max-width: 100%; box-sizing: border-box; }
  #messagesContainer .message .message-content,
  .messages-container .message .message-content {
    white-space: normal;
    word-break: break-word;
    overflow-wrap: anywhere;
  }
}
/* Username outline button within messages */
#messagesContainer .message .msg-username.btn-outline.chat-username-outline,
.messages-container .message .msg-username.btn-outline.chat-username-outline,
#dmThread .message .msg-username.btn-outline.chat-username-outline {
  padding: var(--space-2) var(--space-2);
  font-size: var(--font-12);
  line-height: 1.1;
  display: inline-flex;
  align-items: center;
  border-radius: var(--radius-md);
}
#messagesContainer .message .msg-username.btn-outline.chat-username-outline:hover,
.messages-container .message .msg-username.btn-outline.chat-username-outline:hover,
#dmThread .message .msg-username.btn-outline.chat-username-outline:hover {
  background: var(--color-accent);
  color: var(--color-text-inverse);
}
.message-header { display:flex; justify-content:space-between; align-items: center; margin-bottom:var(--space-2); font-size:var(--font-12); }
.message-user { color: var(--color-accent); font-weight: 600; cursor: pointer; }
.message-user:hover { color: var(--color-accent-hover); text-decoration: underline; }
.message-time { font-size:var(--font-10); color:var(--color-text-muted); }
.edited-indicator { font-style: italic; color: var(--color-text-subtle); margin-left: var(--space-2-5); font-size: var(--font-10); }
.message-content { font-size:var(--font-14); line-height:1.4; color:var(--color-text-strong); white-space: pre-wrap; word-wrap: break-word; }
.chat-mention { color: var(--color-blue); cursor: pointer; text-decoration: underline; font-weight: 600; }
.chat-mention:hover, .chat-mention:focus { color: var(--color-blue-hover); }
/* Inline mention highlight and ticker links */
.mention { background-color: rgba(var(--green-rgb), 0.2); color: var(--color-accent); padding: var(--space-1) var(--space-3); border-radius: var(--space-3); font-weight: 500; }
.ticker-link { cursor: pointer; text-decoration: underline; }
.ticker-link:hover { color: var(--color-accent-hover); }
#messagesContainer .message .timestamp, .messages-container .message .timestamp { position: absolute; top: var(--space-3); right: var(--space-5); font-size: var(--font-11); color: var(--color-text-subtle); }
/* SEC Bot header contains an inline filing chip; avoid overlap with timestamp */
#messagesContainer .message[data-secbot="1"] .timestamp { position: static !important; margin-left: var(--space-3); flex-shrink: 0; }
#messagesContainer .message[data-secbot="1"] .secbot-inline { display: inline-flex; flex: 1 1 auto; min-width: 0; overflow: hidden; }
/* Presence dropdown layering and safety */
.chat-header { position: relative; z-index: var(--z-sticky); }
#onlineUsersMenu { z-index: var(--z-menu); }
@media (max-width: 40rem) {
  #onlineUsersWrap { position: relative; overflow: visible; }
  #onlineUsersMenu { left: 0; right: auto; width: auto; min-width: var(--menu-min-w); max-width: calc(100vw - 1.5rem); }
}
/* Mention suggestions in composer */
.mention-suggestions { position: absolute; max-height: var(--menu-max-h, 16rem); overflow-y: auto; overflow-x: hidden; scrollbar-width: auto; left: 0; z-index: var(--z-popover); }
.mention-suggestions .suggestion-item { display: flex; align-items: center; gap: var(--space-4); padding: var(--space-4) var(--space-5); }
.mention-suggestions .suggestion-item .symbol { color: var(--color-accent); font-weight: 600; }
.mention-suggestions .suggestion-item.active { background: rgba(var(--green-rgb), 0.15); }
/* Chat search boundary lines */
#stockChatSearchContainer { position: relative; padding-top: var(--space-5); padding-bottom: var(--space-5); }
#stockChatSearchContainer::before, #stockChatSearchContainer::after { content: ''; position: absolute; left: var(--space-2); right: var(--space-2); height: var(--space-1); background: var(--color-accent); box-shadow: 0 0 0.375rem rgba(var(--green-rgb), 0.6), 0 0 0.75rem rgba(var(--green-rgb), 0.3); pointer-events: none; }
@media (max-width: 47.99rem) {
  #stockChatSearchContainer::before, #stockChatSearchContainer::after { left: var(--space-4); right: var(--space-4); box-shadow: 0 0 0.25rem rgba(var(--green-rgb), 0.5), 0 0 0.5rem rgba(var(--green-rgb), 0.25); }
}
#stockChatSearchContainer::before { top: 0; }
#stockChatSearchContainer::after { bottom: 0; }
/* Collapse chat search row when not visible (mirrors DM behavior) */
.chat-search-container { display: block; }
.chat-search-container:not(.visible) {
  height: 0;
  max-height: 0;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  overflow: hidden;
}
/* Hide decorative boundaries when collapsed */
#stockChatSearchContainer:not(.visible)::before,
#stockChatSearchContainer:not(.visible)::after { display: none !important; content: none !important; }
/* Make chatboard filter bar sticky (mirror DM sticky behavior) */
.chat-search-container { position: sticky; top: 0; z-index: var(--z-sticky); background: var(--color-bg); }
/* Reply context within messages */
.reply-context { background: rgba(var(--warning-rgb), 0.08); border-left: var(--space-3) solid var(--color-warning); border-radius: var(--radius-sm); padding: var(--space-3) var(--space-4); margin: calc(var(--space-1) * -1) calc(var(--space-3) * -1) var(--space-8) calc(var(--space-3) * -1); font-size: var(--font-13); cursor: pointer; transition: background-color 0.2s; }
.reply-context:hover { background: rgba(var(--warning-rgb), 0.14); }
.reply-context-header, .reply-context .reply-author { color: var(--color-warning); font-weight: 600; font-size: var(--font-11); margin-bottom: var(--space-1); }
.reply-context-body, .reply-context .reply-snippet { color: var(--color-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 95%; }
.reply-context .reply-deleted { color: var(--color-text-muted); font-style: italic; }
/* Mobile Chat | Details toggle */
.mobile-view-toggle { align-items: center; gap: var(--space-1); background: var(--color-bg); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-md-plus); padding: var(--space-1); }
.mobile-view-toggle [role="tab"] { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; color: var(--color-text); border: none; border-radius: var(--radius-sm); padding: var(--space-2) var(--space-4); font-size: var(--font-12); font-weight: 700; letter-spacing: var(--ls-xxs); cursor: pointer; }
.mobile-view-toggle [role="tab"][aria-selected="true"] { background: var(--color-accent); color: var(--color-text-inverse); box-shadow: var(--shadow-green-xs); }
.mobile-view-toggle [role="tab"][aria-disabled="true"] { opacity: 0.5; cursor: not-allowed; }
#stockHeader .mobile-view-toggle { margin-bottom: var(--space-3); }
/* Default: hide the mobile row container on desktop */
.mobile-view-toggle-row { display: none; }
/* Actions moved beside the mobile toggle (mobile only) */
@media (max-width: 47.99rem) {
  /* Row container holds the segmented toggle and the actions as siblings */
  .mobile-view-toggle-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); width: 100%; }
  .mobile-view-toggle { display: inline-flex; }
  .mobile-view-toggle.hidden { display: inline-flex !important; }
  .mobile-view-toggle-row .mobile-view-actions { display: inline-flex; gap: var(--space-2); flex-shrink: 0; }
}
/* Ensure the Chat | Details segmented control is actually visible on mobile
   even if a generic `.hidden` utility is present in the class list.
   This avoids relying on Tailwind's `sm-down:inline-flex` variant at runtime. */
@media (max-width: 47.99rem) {
  .mobile-view-toggle { display: inline-flex; }
  .mobile-view-toggle.hidden { display: inline-flex !important; }
}
/* Bookmarks UI (extracted from components.css) */
/* Header text */
.bookmark-title { font-size: var(--font-16); line-height: var(--space-14); font-weight: 600; color: var(--color-text-muted); }
.bookmark-time { font-size: var(--font-14); line-height: var(--space-14); color: var(--color-text-subtle); }
/* Cleaner card layout */
#bookmarksPage .bookmark-card .bookmark-open { display: block; width: 100%; text-align: left; margin-top: var(--space-3); }
#bookmarksPage .bookmark-attachments { margin-top: var(--space-3); }
@media (max-width: 47.99rem) {
  #bookmarksPage .bookmark-header { flex-wrap: wrap; row-gap: var(--space-2); }
  #bookmarksPage .bookmark-actions { flex: 1 1 100%; display: flex; justify-content: flex-end; margin-top: var(--space-2); }

  /* Mobile: make the bookmarks filter bar behave like DM search */
  #bookmarksPage .bookmarks-search-container { position: sticky; top: 0; z-index: var(--z-sticky); background: var(--color-bg); display: block; }
  #bookmarksPage .bookmarks-search-container:not(.visible) { height: 0; max-height: 0; padding-top: 0 !important; padding-bottom: 0 !important; overflow: hidden; }
  #bookmarksSearchContainer { position: relative; padding-top: var(--space-5); padding-bottom: var(--space-5); }
  #bookmarksSearchContainer::before, #bookmarksSearchContainer::after { content: ''; position: absolute; left: 0; right: 0; height: var(--space-1); background: var(--color-accent); box-shadow: 0 0 0.375rem rgba(var(--green-rgb), 0.6), 0 0 0.75rem rgba(var(--green-rgb), 0.3); pointer-events: none; }
  #bookmarksSearchContainer::before { top: 0; }
  #bookmarksSearchContainer::after { bottom: 0; }
  #bookmarksSearchContainer:not(.visible)::before,
  #bookmarksSearchContainer:not(.visible)::after { display: none !important; content: none !important; }
}
/* Direct Messages UI (extracted from components.css) */
/* Presence dropdown above other content */
#dmPresenceMenu { z-index: var(--z-menu); }
/* DM mobile menu removed in JS; legacy styles deleted */
/* DM layout adjustments inside #directMessagesPage */
#directMessagesPage #dmConvoColumn { display: flex; flex-direction: column; height: 100%; min-height: 0; overflow: hidden; }
#directMessagesPage #dmConvoList { flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden; scrollbar-gutter: stable; }
#directMessagesPage #dmThreadColumn { display: grid; grid-template-rows: auto auto 1fr auto; height: 100%; min-height: 0; overflow: hidden; align-content: stretch; align-items: stretch; }
#directMessagesPage #dmThread { min-height: 0; height: 100%; overflow-y: auto; overflow-x: hidden; scrollbar-gutter: stable; word-wrap: break-word; overflow-wrap: break-word; box-sizing: border-box; }
#directMessagesPage #dmThreadColumn > header,
#directMessagesPage #dmThreadColumn > footer,
#directMessagesPage .chat-search-container { position: sticky; top: 0; z-index: var(--z-sticky); background: var(--color-bg); }
/* Ensure the search row participates in the grid even when hidden, so the
   grid track layout (auto auto 1fr auto) is stable without requiring a click. */
#directMessagesPage .chat-search-container { display: block; }
#directMessagesPage .chat-search-container:not(.visible) {
  height: 0;
  max-height: 0;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  overflow: hidden;
}
/* Hide decorative boundary lines when collapsed */
#dmChatSearchContainer:not(.visible)::before,
#dmChatSearchContainer:not(.visible)::after { display: none !important; content: none !important; }
#directMessagesPage #dmThread { align-self: stretch; }
#directMessagesPage #dmThread.messages-container { max-height: none; }
#directMessagesPage #dmThreadColumn > header,
#directMessagesPage #dmThreadColumn > footer,
#directMessagesPage .chat-search-container {
  overflow: hidden;
  width: 100%;
  max-width: 100%;
  word-wrap: break-word;
  overflow-wrap: break-word;
}
#directMessagesPage .message,
#directMessagesPage .dm-message {
  flex-shrink: 0;
  word-wrap: break-word;
  overflow-wrap: break-word;
  max-width: 100%;
  overflow: hidden;
  box-sizing: border-box;
}
#directMessagesPage .message-content,
#directMessagesPage .dm-message .message-content {
  max-width: 100%;
  overflow: hidden;
  word-wrap: break-word;
  overflow-wrap: break-word;
  white-space: pre-wrap;
}
#directMessagesPage .message-attachment,
#directMessagesPage .dm-message .message-attachment,
#directMessagesPage #dmForm,
#directMessagesPage #dmChatSearchForm,
#directMessagesPage input,
#directMessagesPage textarea {
  max-width: 100%;
  overflow: hidden;
  box-sizing: border-box;
}
#directMessagesPage .dm-message { position: relative; padding: var(--space-4) var(--space-6); margin-bottom: var(--space-2); border-radius: var(--radius-sm); background: var(--color-surface); border: var(--border-1) solid var(--color-border); }
#directMessagesPage .dm-message .message-content { white-space: pre-wrap; word-wrap: break-word; }
#directMessagesPage .dm-message .message-attachment,
#directMessagesPage #dmForm,
#directMessagesPage #dmChatSearchForm { max-width: 100%; }
#directMessagesPage .dm-message:focus-within {
  outline: var(--focus-ring-size, 0.125rem) solid var(--focus-ring-color, rgba(var(--green-rgb), 0.82));
  outline-offset: var(--focus-ring-offset, 0.125rem);
}
/* DM search boundary lines (mirrors chatboard styling) */
#dmChatSearchContainer { position: relative; padding-top: var(--space-5); padding-bottom: var(--space-5); }
#dmChatSearchContainer::before, #dmChatSearchContainer::after { content: ''; position: absolute; left: 0; right: 0; height: var(--space-1); background: var(--color-accent); box-shadow: 0 0 0.375rem rgba(var(--green-rgb), 0.6), 0 0 0.75rem rgba(var(--green-rgb), 0.3); pointer-events: none; }
#dmChatSearchContainer::before { top: 0; }
#dmChatSearchContainer::after { bottom: 0; }
/* ------------------------------
   Mobile layout (WhatsApp-style)
   ------------------------------ */
@media (max-width: 47.99rem) {
  /* Collapse DM grid to a single column so the visible pane uses the full width */
  #directMessagesPage { grid-template-columns: 100% !important; }
  /* Default mobile: show conversations list only */
  /* Do not override wrapper display; keep layout.css flattening (display: contents)
     to preserve grid/flex behavior and avoid conflicts. We control visibility by
     toggling the columns below. */
  /* Keep the list column as flex (defined above) for proper scrolling */
  #directMessagesPage .dm-layout #dmThreadColumn { display: none; }
  /* Thread-open state: show thread, hide list */
  #directMessagesPage .dm-layout.dm--thread-open #dmConvoColumn { display: none; }
  #directMessagesPage .dm-layout.dm--thread-open #dmThreadColumn { display: grid; }
  /* Back button visible only when a thread is open */
  #directMessagesPage #dmBackBtn { display: none !important; }
  #directMessagesPage .dm-layout.dm--thread-open #dmBackBtn { display: inline-flex !important; }
  /* Ensure the visible column spans full width */
  #directMessagesPage .dm-layout:not(.dm--thread-open) #dmConvoColumn { width: 100%; }
  #directMessagesPage .dm-layout.dm--thread-open #dmThreadColumn { width: 100%; }
  /* Subtle slide-in animations when switching views */
  #directMessagesPage .dm-layout.dm--thread-open #dmThreadColumn { animation: dmSlideInRight 180ms ease-out; }
  #directMessagesPage .dm-layout:not(.dm--thread-open) #dmConvoColumn { animation: dmSlideInLeft 180ms ease-out; }
  /* Back button micro-interaction */
  #directMessagesPage #dmBackBtn { transition: transform 140ms ease, box-shadow 140ms ease, background 140ms ease; }
  #directMessagesPage #dmBackBtn:active { transform: translateX(-2px) scale(0.98); }
  /* Subtle header shadow when thread is open */
  #directMessagesPage .dm-layout.dm--thread-open #dmThreadColumn > header { box-shadow: 0 0.125rem 0.5rem rgba(var(--black-rgb), 0.35); }

  /* Reflow thread header actions to a second row so everything fits */
  #directMessagesPage #dmThreadColumn > header { flex-wrap: wrap; align-items: flex-start; gap: var(--space-2); }
  #directMessagesPage #dmTitleWrap { flex: 1 1 auto; min-width: 0; }
  #directMessagesPage #dmHeaderActions { order: 2; flex: 1 1 100%; display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-1); }
  #directMessagesPage #dmMembersWrap { order: 1; }
  #directMessagesPage #dmAddMemberForm { order: 2; display: flex !important; flex: 1 1 100%; max-width: 100%; }
  #directMessagesPage #dmAddMemberForm input { flex: 1 1 auto; min-width: 0; }
  #directMessagesPage #dmAddMemberForm button[type="submit"] { flex: 0 0 auto; }
}
/* Desktop override: always hide back button */
@media (min-width: 48rem) {
  #directMessagesPage #dmBackBtn { display: none !important; }
}
/* Keyframes + reduced-motion guard */
@keyframes dmSlideInRight { from { opacity: 0; transform: translateX(8%); } to { opacity: 1; transform: translateX(0); } }
@keyframes dmSlideInLeft  { from { opacity: 0; transform: translateX(-8%); } to { opacity: 1; transform: translateX(0); } }
@media (prefers-reduced-motion: reduce) {
  #directMessagesPage .dm-layout.dm--thread-open #dmThreadColumn,
  #directMessagesPage .dm-layout:not(.dm--thread-open) #dmConvoColumn { animation: none !important; }
}
/*
  modals.css
  Purpose: Dedicated modal styles extracted from components.css to improve isolation.
  Note: Initially duplicated from components.css to preserve visuals. Original rules remain until full extraction is verified.
*/
/* Image Modal */
#imageModal { display: none; position: fixed; z-index: var(--z-lightbox); left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(var(--black-rgb), 0.9); justify-content: center; align-items: center; }
#imageModal img { margin: auto; display: block; max-width: 90%; max-height: 90%; }
#imageModal .close-btn { position: absolute; top: var(--space-10); right: var(--space-35); color: var(--color-text-strong); font-size: var(--font-40); font-weight: bold; cursor: pointer; }
/* Base Modal */
.modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(var(--black-rgb),  0.8); display: flex; align-items: center; justify-content: center; z-index: var(--z-lightbox); }
.modal-content { background: var(--color-bg-muted); border: var(--border-1) solid var(--color-border); border-radius: var(--radius-lg); padding: var(--space-25); width: 90%; max-width: var(--max-w-modal); box-shadow: var(--shadow-modal-md-black-50); }
.modal-header { display: flex; justify-content: space-between; align-items: center; border-bottom: var(--border-1) solid var(--color-border); padding-bottom: var(--space-7-5); margin-bottom: var(--space-10); }
.modal-title { color: var(--color-accent); font-size: 1.8em; font-weight: 600; }
.modal-close-btn { background: transparent; border: none; color: var(--color-text-muted); font-size: var(--font-28); cursor: pointer; }
.modal-body { overflow-y: auto; }
.modal-content .btn-primary {
  background: var(--color-accent);
  color: var(--color-bg);
  border: var(--border-1) solid rgba(var(--green-rgb), 0.55);
  border-radius: var(--radius-md);
  padding: var(--space-4) var(--space-8);
  font-weight: 700;
  letter-spacing: var(--ls-xxs);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  min-width: var(--min-w-btn-md);
  transition: background 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
  box-shadow: var(--shadow-green-sm-22);
}
.modal-content .btn-primary:hover,
.modal-content .btn-primary:focus-visible {
  background: var(--color-accent-hover);
  border-color: rgba(var(--green-rgb), 0.75);
  box-shadow: var(--shadow-green-md-30);
  transform: translateY(-1px);
  outline: none;
}
.modal-content .btn-primary:active {
  transform: translateY(0);
}
/* Reorder Modal */
#reorderModal, .reorder-modal {
  /* Overlay */
  --reorder-panel-max-w: 1500px;
  --reorder-toggle-size: 2rem;
  --reorder-chip-h: 34px;
  --reorder-chip-gap: var(--space-4);
  position: fixed; inset:0; display:none; justify-content:center; align-items:flex-start;
  padding:4svh var(--space-8) var(--space-16);
  background: linear-gradient(180deg, rgba(var(--black-rgb), 0.7), rgba(var(--black-rgb), 0.9));
  z-index: var(--z-lightbox); overflow-y:auto; -webkit-overflow-scrolling:touch;
}
#reorderModal.flex, .reorder-modal.flex { display:flex; }
#reorderModal .reorder-modal-panel, .reorder-modal .reorder-modal-panel {
  width:min(96vw, calc(var(--max-w-modal, 31.25rem) * 2));
  max-width:min(96vw, calc(var(--max-w-modal, 31.25rem) * 2));
  background: linear-gradient(180deg, rgba(var(--green-emerald-rgb), 0.06), rgba(var(--green-emerald-rgb), 0.02) 14%, transparent 60%), var(--color-bg-muted);
  border:var(--border-1) solid rgba(var(--green-emerald-rgb), 0.45);
  border-radius:var(--radius-xl);
  box-shadow: var(--shadow-modal-xl-black-emerald-ring);
  display:flex; flex-direction:column; max-height:90svh; overflow:hidden;
}
#reorderModal .reorder-modal-header, .reorder-modal .reorder-modal-header {
  display:flex; align-items:center; justify-content: space-between;
  gap: var(--space-6);
  padding:var(--space-9) var(--space-12);
  border-bottom:1px solid rgba(var(--green-emerald-rgb), 0.35);
  background: linear-gradient(180deg, rgba(var(--green-emerald-rgb), 0.12), rgba(var(--green-emerald-rgb), 0.04));
}
#reorderModal .reorder-modal-header h2, .reorder-modal .reorder-modal-header h2 {
  color: var(--color-accent); font-weight:800; letter-spacing:0.015em;
}
#reorderModal .reorder-modal-header button, .reorder-modal .reorder-modal-header button {
  color: var(--color-accent); opacity:0.9; transition: transform .14s ease, opacity .14s ease;
}
#reorderModal .reorder-modal-header button:hover,
.reorder-modal .reorder-modal-header button:hover { opacity:1; transform: scale(1.05); }
#reorderModal .reorder-modal-body, .reorder-modal .reorder-modal-body {
  overflow-y:auto; padding:var(--space-10); flex:1; scrollbar-width:auto;
  scrollbar-color:var(--color-accent) var(--color-bg-muted);
}
#reorderModal .reorder-modal-body::-webkit-scrollbar, .reorder-modal .reorder-modal-body::-webkit-scrollbar { width: var(--scrollbar-size); }
#reorderModal .reorder-modal-body::-webkit-scrollbar-track, .reorder-modal .reorder-modal-body::-webkit-scrollbar-track { background:var(--color-bg-elevated); }
#reorderModal .reorder-modal-body::-webkit-scrollbar-thumb, .reorder-modal .reorder-modal-body::-webkit-scrollbar-thumb { background:var(--color-accent); border-radius:var(--radius-sm); }
#reorderModal .reorder-modal-footer, .reorder-modal .reorder-modal-footer {
  display:flex; justify-content:flex-end; gap:var(--space-6);
  padding:var(--space-8) var(--space-10);
  border-top:1px solid rgba(var(--green-emerald-rgb), 0.35);
  background: linear-gradient(180deg, transparent, rgba(var(--green-emerald-rgb), 0.06));
  border-radius:0 0 var(--radius-xl) var(--radius-xl);
}
#reorderModal[aria-hidden="true"], .reorder-modal[aria-hidden="true"] { visibility:hidden; }
#reorderModal[aria-hidden="false"], .reorder-modal[aria-hidden="false"] { visibility:visible; }
/* Primary/Outline buttons scoped to reorder modal */
#reorderModal .btn-primary, .reorder-modal .btn-primary {
  background: var(--color-accent);
  color: var(--color-bg);
  border: var(--border-1) solid rgba(var(--green-rgb), 0.55);
  border-radius: var(--radius-md);
  padding: var(--space-4) var(--space-8);
  font-weight: 700; letter-spacing: var(--ls-xxs);
  display:inline-flex; align-items:center; justify-content:center; gap:var(--space-3);
  min-width: var(--min-w-btn-md);
  transition: background 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
  box-shadow: 0 0.375rem 1.25rem rgba(var(--green-rgb), 0.22);
}
#reorderModal .btn-primary:hover, .reorder-modal .btn-primary:hover { background: var(--color-accent-hover); border-color: rgba(var(--green-rgb), 0.75); box-shadow: var(--shadow-green-md-30); transform: translateY(-1px); }
#reorderModal .btn-outline, .reorder-modal .btn-outline {
  color: var(--color-accent);
  border: 1px solid rgba(var(--green-emerald-rgb), 0.35);
  background: transparent; border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-7);
  font-weight: 600; letter-spacing: 0.01em;
}
#reorderModal .btn-outline:hover, .reorder-modal .btn-outline:hover { background: rgba(var(--green-emerald-rgb), 0.1); }
/* New group row */
#reorderModal .new-group-section, .reorder-modal .new-group-section {
  display:flex; flex-wrap: wrap; gap: var(--space-5); align-items:center;
  margin-bottom: var(--space-8); padding: var(--space-5) var(--space-8);
  border: 1px dashed rgba(var(--green-emerald-rgb), 0.45);
  border-radius: var(--radius-lg);
  background: rgba(var(--green-emerald-rgb), 0.06);
}
#reorderModal .group-input, .reorder-modal .group-input {
  flex:1; background: rgba(var(--black-rgb), 0.25); border: 1px solid rgba(var(--green-emerald-rgb), 0.35);
  color: var(--color-text-strong); border-radius: var(--radius-md); padding: var(--space-5) var(--space-8); font-size: var(--font-16);
}
#reorderModal .group-input:focus, .reorder-modal .group-input:focus { outline:none; background: rgba(var(--green-emerald-rgb), 0.12); border-color: var(--color-accent); box-shadow: var(--outline-emerald-2-15); }
#reorderModal .status-message, .reorder-modal .status-message { color: var(--color-accent); font-size: var(--font-14); font-weight: 500; }
/* Subgroup item card */
#reorderModal .subgroup-item, .reorder-modal .subgroup-item {
  list-style:none; background: linear-gradient(180deg, rgba(var(--black-rgb), 0.25), rgba(var(--black-rgb), 0.15));
  border: 1px solid rgba(var(--green-emerald-rgb), 0.25);
  border-radius: var(--radius-lg);
  padding: var(--space-6) var(--space-8); margin-bottom: var(--space-5);
  transition: border-color 0.2s ease, box-shadow .2s ease;
}
#reorderModal .subgroup-item:hover, .reorder-modal .subgroup-item:hover { border-color: rgba(var(--green-emerald-rgb), 0.55); box-shadow: var(--shadow-elevated-sm-black-25); }
#reorderModal .subgroup-item.dragging, .reorder-modal .subgroup-item.dragging { opacity: 0.6; }
/* Subgroup header layout */
#reorderModal .subgroup-header, .reorder-modal .subgroup-header {
  display:flex; align-items:center; justify-content: space-between;
  gap: var(--space-6);
  margin-bottom: var(--space-5);
}
#reorderModal .subgroup-name, .reorder-modal .subgroup-name { font-weight: 700; color: var(--color-text-strong); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
#reorderModal .subgroup-actions, .reorder-modal .subgroup-actions { display:flex; align-items:center; gap: var(--space-4); }
#reorderModal .visibility-badge, .reorder-modal .visibility-badge { border:1px solid rgba(var(--white-rgb), 0.15); border-radius: var(--radius-full); padding: var(--space-1) var(--space-4); text-transform:uppercase; font-weight:700; letter-spacing:.04em; }
#reorderModal .vis-toggle-btn, .reorder-modal .vis-toggle-btn { color: var(--color-accent); background: transparent; border: 1px solid rgba(var(--green-emerald-rgb), 0.35); border-radius: var(--radius-md); padding: var(--space-3) var(--space-5); font-weight: 600; }
#reorderModal .vis-toggle-btn:hover, .reorder-modal .vis-toggle-btn:hover { background: rgba(var(--green-emerald-rgb), 0.1); }
#reorderModal .delete-btn, .reorder-modal .delete-btn { color: var(--color-danger-soft); background: transparent; border: 1px solid rgba(var(--danger-90-rgb), 0.25); border-radius: var(--radius-md); padding: var(--space-3) var(--space-5); font-weight: 600; }
#reorderModal .delete-btn:hover, .reorder-modal .delete-btn:hover { background: rgba(var(--danger-90-rgb), 0.12); }
#reorderModal .drag-handle, .reorder-modal .drag-handle { cursor: grab; -webkit-user-select:none; -moz-user-select:none; user-select:none; color: rgba(var(--mint-soft-rgb), 0.85); padding: var(--space-1) var(--space-3); border-radius: var(--radius-sm); }
#reorderModal .drag-handle:hover, .reorder-modal .drag-handle:hover { background: rgba(var(--white-rgb), 0.06); }
/* Ticker list pills */
#reorderModal .ticker-list, .reorder-modal .ticker-list {
  display:flex; flex-wrap: wrap; gap: var(--reorder-chip-gap); padding: var(--space-2) 0 var(--space-4);
}
#reorderModal .ticker-item, .reorder-modal .ticker-item {
  display:inline-flex; align-items:center; gap: var(--space-3);
  height: var(--reorder-chip-h);
  padding: 0 var(--space-4);
  background: rgba(var(--mint-ice-rgb), 0.1);
  color: var(--color-text-strong);
  border: 1px solid rgba(var(--mint-ice-rgb), 0.25);
  border-radius: var(--radius-full); cursor: grab; -webkit-user-select:none; -moz-user-select:none; user-select:none;
}
#reorderModal .ticker-item:hover, .reorder-modal .ticker-item:hover { border-color: rgba(var(--mint-ice-rgb), 0.45); background: rgba(var(--mint-ice-rgb), 0.16); }
#reorderModal .ticker-item.dragging, .reorder-modal .ticker-item.dragging { opacity: .7; }
#reorderModal .ticker-symbol, .reorder-modal .ticker-symbol { font-weight:800; letter-spacing: .03em; }
#reorderModal .remove-btn, .reorder-modal .remove-btn { width: var(--space-12); height: var(--space-12); border-radius: var(--radius-full); border: var(--border-1) solid var(--white-20a); background: transparent; color: var(--white-75a); display:inline-flex; align-items:center; justify-content:center; cursor:pointer; }
#reorderModal .remove-btn:hover, .reorder-modal .remove-btn:hover { background: var(--white-12a); }
/* Add ticker row */
#reorderModal .add-ticker-section, .reorder-modal .add-ticker-section {
  display:flex; gap: var(--space-4);
  margin-top: var(--space-4);
}
#reorderModal .add-ticker-section .ticker-input, .reorder-modal .add-ticker-section .ticker-input { flex: 1 1 auto; min-width: 0; }
#reorderModal .add-ticker-section .add-btn, .reorder-modal .add-ticker-section .add-btn { flex: 0 0 auto; }
#reorderModal .ticker-input, .reorder-modal .ticker-input {
  background: rgba(var(--black-rgb), 0.3);
  border: 1px solid rgba(var(--green-emerald-rgb), 0.3);
  border-radius: var(--radius-md);
  padding: var(--space-4) var(--space-6);
  color: var(--color-text-strong);
}
#reorderModal .ticker-input:focus, .reorder-modal .ticker-input:focus { outline:none; border-color: var(--color-accent); background: rgba(var(--green-emerald-rgb), 0.12); box-shadow: var(--outline-emerald-2-18); }
#reorderModal .add-btn, .reorder-modal .add-btn { border:1px solid rgba(var(--green-emerald-rgb), 0.35); color: var(--color-accent); background: transparent; border-radius: var(--radius-md); padding: var(--space-3) var(--space-6); font-weight: 700; }
#reorderModal .add-btn:hover, .reorder-modal .add-btn:hover { background: rgba(var(--green-emerald-rgb), 0.1); }
/* Suggestions dropdown (reuses search widget, but scoped here for safe defaults) */
#reorderModal .suggestion-menu, .reorder-modal .suggestion-menu {
  position: relative;
}
#reorderModal .suggestion-menu:not(.hidden) > *, .reorder-modal .suggestion-menu:not(.hidden) > * { position:absolute; z-index: var(--z-menu); top: calc(100% + 6px); left:0; right:0; background: var(--color-bg-elevated); border: 1px solid rgba(var(--green-emerald-rgb), 0.25); border-radius: var(--radius-md); box-shadow: var(--shadow-elevated-md-black-35); }
/* Responsive */
@media (max-width: 40rem) {
  #reorderModal .reorder-modal-panel, .reorder-modal .reorder-modal-panel { border-radius: var(--radius-lg); }
  #reorderModal .reorder-modal-header, .reorder-modal .reorder-modal-header { padding: var(--space-8) var(--space-8); flex-wrap: wrap; }
  #reorderModal .reorder-modal-body, .reorder-modal .reorder-modal-body { padding: var(--space-8); }

  /* Make subgroup header breathe and avoid crammed actions */
  #reorderModal .subgroup-header, .reorder-modal .subgroup-header { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); }
  #reorderModal .subgroup-header .subgroup-actions, .reorder-modal .subgroup-header .subgroup-actions { flex: 1 1 100%; display: flex; flex-wrap: wrap; gap: var(--space-3); }

  /* New group row: keep status on its own line to prevent crowding */
  #reorderModal .new-group-section, .reorder-modal .new-group-section { display: flex; gap: var(--space-4); flex-wrap: wrap; }
  #reorderModal .new-group-section .status-message, .reorder-modal .new-group-section .status-message { flex: 1 0 100%; }

  /* Footer: permit wrapping controls gracefully on small screens */
  #reorderModal .reorder-modal-footer, .reorder-modal .reorder-modal-footer { flex-wrap: wrap; row-gap: var(--space-4); }
}
/* SEC Directory Modal */
/* stylelint-disable declaration-property-value-disallowed-list */
#secDirectoryModal, .sec-directory-modal {
  --directory-green-950: #031610;
  --directory-green-900: #05271b;
  --directory-green-800: #073926;
  --directory-green-700: #0b5034;
  --directory-green-500: #15c979;
  --directory-green-400: #38e298;
  --directory-green-glow: 0 0 2rem rgba(var(--green-emerald-rgb), 0.35);
}
#secDirectoryModal .sticky, .sec-directory-modal .sticky { position: sticky; }
#secDirectoryModal .min-h-0, .sec-directory-modal .min-h-0 { min-height: 0; }
#secDirectoryModal .directory-modal-card, .sec-directory-modal .directory-modal-card {
  background: radial-gradient(circle at top, rgba(var(--green-emerald-rgb), 0.15), transparent 55%),
    linear-gradient(140deg, var(--directory-green-950) 0%, var(--directory-green-900) 35%, var(--directory-green-800) 100%);
  /* Minimal contrast bump via border only (surgical fix) */
  border-color: rgba(var(--green-emerald-rgb), 0.5);
  box-shadow: var(--shadow-directory-card);
  backdrop-filter: blur(10px);
}
#secDirectoryModal .directory-modal-header, .sec-directory-modal .directory-modal-header {
  background: linear-gradient(135deg, rgba(var(--green-emerald-rgb), 0.12) 0%, rgba(var(--green-spring-rgb), 0.08) 100%);
  /* Slightly stronger divider for clarity */
  border-bottom-color: rgba(var(--green-emerald-rgb), 0.45);
  box-shadow: var(--shadow-inset-bottom-dark-35);
}
#secDirectoryModal .directory-modal-close, .sec-directory-modal .directory-modal-close {
  color: rgba(var(--white-rgb),  0.6);
  transition: color 160ms ease, transform 160ms ease, text-shadow 160ms ease;
}
#secDirectoryModal .directory-modal-close:hover,
#secDirectoryModal .directory-modal-close:focus-visible,
.sec-directory-modal .directory-modal-close:hover,
.sec-directory-modal .directory-modal-close:focus-visible {
  color: var(--directory-green-400);
  text-shadow: 0 0 12px rgba(var(--green-emerald-rgb), 0.75);
  transform: scale(1.08);
}
#secDirectoryModal .directory-modal-body, .sec-directory-modal .directory-modal-body {
  background: linear-gradient(135deg, rgba(var(--green-forest-4-rgb), 0.75) 0%, rgba(var(--green-forest-3-rgb), 0.9) 65%),
    radial-gradient(circle at bottom, rgba(var(--green-spring-rgb), 0.12), transparent 60%);
}
#secDirectoryModal .directory-modal-search-shell, .sec-directory-modal .directory-modal-search-shell {
  background: rgba(var(--green-forest-3-rgb), 0.8);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-search-shell);
  padding: var(--space-3);
}
#secDirectoryModal .directory-modal-search, .sec-directory-modal .directory-modal-search {
  background: rgba(var(--black-rgb),  0.4);
  border: 1px solid rgba(var(--green-emerald-rgb), 0.35);
  box-shadow: var(--glow-emerald-inset-xl-08);
  color: rgba(var(--white-rgb),  0.88);
  transition: border-color 160ms ease, box-shadow 160ms ease, background 160ms ease;
}
#secDirectoryModal .directory-modal-search::-moz-placeholder, .sec-directory-modal .directory-modal-search::-moz-placeholder {
  color: rgba(var(--mint-ice-rgb), 0.45);
  letter-spacing: 0.04em;
}
#secDirectoryModal .directory-modal-search::placeholder, .sec-directory-modal .directory-modal-search::placeholder {
  color: rgba(var(--mint-ice-rgb), 0.45);
  letter-spacing: 0.04em;
}
#secDirectoryModal .directory-modal-search:focus, .sec-directory-modal .directory-modal-search:focus {
  outline: none;
  background: rgba(var(--green-leaf-deep-rgb), 0.75);
  border-color: var(--directory-green-400);
  box-shadow: var(--outline-emerald-2-25-inset-glow);
}
#secDirectoryModal .directory-modal-list, .sec-directory-modal .directory-modal-list {
  background: rgba(var(--green-forest-3-rgb), 0.6);
  border-radius: var(--radius-lg);
  border: 1px solid rgba(var(--green-emerald-rgb), 0.18);
  box-shadow: var(--glow-emerald-inset-lg-10);
}
#secDirectoryModal .directory-modal-list > div,
#secDirectoryModal .directory-modal-list > button,
#secDirectoryModal .directory-modal-list button[data-sym],
.sec-directory-modal .directory-modal-list > div,
.sec-directory-modal .directory-modal-list > button,
.sec-directory-modal .directory-modal-list button[data-sym] {
  border-color: rgba(var(--green-emerald-rgb), 0.1);
}
#secDirectoryModal .directory-modal-list button[data-sym], .sec-directory-modal .directory-modal-list button[data-sym] {
  background: linear-gradient(90deg, rgba(var(--green-forest-1-rgb), 0.5) 0%, rgba(var(--green-forest-2-rgb), 0.2) 100%);
  color: rgba(var(--mint-snow-rgb), 0.92);
  border-radius: var(--radius-md-tight);
  border: var(--border-1) solid transparent;
  transition: transform 160ms ease, background 160ms ease, border-color 160ms ease, box-shadow 160ms ease;
}
#secDirectoryModal .directory-modal-list button[data-sym]:hover,
#secDirectoryModal .directory-modal-list button[data-sym]:focus-visible,
.sec-directory-modal .directory-modal-list button[data-sym]:hover,
.sec-directory-modal .directory-modal-list button[data-sym]:focus-visible {
  background: linear-gradient(95deg, rgba(var(--green-spring-rgb), 0.35) 0%, rgba(var(--green-emerald-rgb), 0.2) 100%);
  border-color: rgba(var(--green-emerald-rgb), 0.4);
  transform: translateY(-1px) scale(1.01);
  box-shadow: var(--shadow-directory-list-item);
  outline: none;
}
#secDirectoryModal .directory-modal-list button[data-sym] span.font-semibold, .sec-directory-modal .directory-modal-list button[data-sym] span.font-semibold {
  color: var(--directory-green-400);
  text-shadow: 0 0 6px rgba(var(--green-emerald-rgb), 0.55);
}
#secDirectoryModal .directory-modal-list button[data-sym] span.text-xs, .sec-directory-modal .directory-modal-list button[data-sym] span.text-xs {
  color: rgba(var(--mint-soft-rgb), 0.65);
}
#secDirectoryModal .directory-modal-list .text-gray-400, .sec-directory-modal .directory-modal-list .text-gray-400 {
  color: rgba(var(--mint-dim-rgb), 0.7);
}
#secDirectoryModal .directory-modal-body::-webkit-scrollbar, .sec-directory-modal .directory-modal-body::-webkit-scrollbar {
  width: var(--scrollbar-size);
}
#secDirectoryModal .directory-modal-body::-webkit-scrollbar-thumb, .sec-directory-modal .directory-modal-body::-webkit-scrollbar-thumb {
  background: linear-gradient(180deg, rgba(var(--green-emerald-rgb), 0.5), rgba(var(--green-forest-1-rgb), 0.6));
  border-radius: var(--radius-full);
}
#secDirectoryModal .directory-modal-body::-webkit-scrollbar-track, .sec-directory-modal .directory-modal-body::-webkit-scrollbar-track {
  background: rgba(var(--green-forest-2-rgb), 0.5);
}
/* stylelint-enable declaration-property-value-disallowed-list */
/* Status Details Modal: use modal token layer */
#statusDetailsModal { z-index: var(--z-modal); }
/* -----------------------------------------------------
   SEC Directory Modal — Plain Black & White overrides
   Scope: #secDirectoryModal only (no other modals).
   Intent: maximize contrast using base tokens; avoid theme greens.
   Minimal, surgical overrides; no layout changes.
   ----------------------------------------------------- */
#secDirectoryModal .directory-modal-card {
  background: var(--color-bg);
  border-color: var(--color-border-strong);
  box-shadow: var(--shadow-modal-md-black-50);
  color: var(--color-text-strong);
}
#secDirectoryModal .directory-modal-header {
  background: var(--color-bg-muted);
  border-bottom-color: var(--color-border-strong);
  box-shadow: none;
}
#secDirectoryModal .directory-modal-header h2,
#secDirectoryModal .text-accent { color: var(--color-text-strong); text-shadow: none; }
#secDirectoryModal .directory-modal-search-shell { background: var(--color-bg); box-shadow: none; }
#secDirectoryModal .directory-modal-search {
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  color: var(--color-text-strong);
  box-shadow: none;
}
#secDirectoryModal .directory-modal-search::-moz-placeholder { color: var(--color-text-muted); }
#secDirectoryModal .directory-modal-search::placeholder { color: var(--color-text-muted); }
#secDirectoryModal .directory-modal-list { background: var(--color-bg); border: 1px solid var(--color-border); box-shadow: none; }
#secDirectoryModal .directory-modal-list > div,
#secDirectoryModal .directory-modal-list > button,
#secDirectoryModal .directory-modal-list button[data-sym] { border-color: var(--color-border); }
#secDirectoryModal .directory-modal-list button[data-sym] {
  background: var(--color-surface);
  color: var(--color-text-strong);
  border: var(--border-1) solid var(--color-border);
  transform: none;
  box-shadow: none;
}
#secDirectoryModal .directory-modal-list button[data-sym]:hover,
#secDirectoryModal .directory-modal-list button[data-sym]:focus-visible {
  background: var(--color-surface-hover);
  border-color: var(--color-border-strong);
}
#secDirectoryModal .directory-modal-list button[data-sym] span.font-semibold,
#secDirectoryModal .directory-modal-list button[data-sym] span.text-xs,
#secDirectoryModal .directory-modal-list .text-gray-400 { color: var(--color-text-strong); text-shadow: none; }
/* Neutralize green-tinted body gradient and scrollbar inside directory modal */
#secDirectoryModal .directory-modal-body { background: var(--color-bg); }
#secDirectoryModal .directory-modal-body::-webkit-scrollbar-thumb { background: var(--color-border); }
#secDirectoryModal .directory-modal-body::-webkit-scrollbar-track { background: var(--color-bg-muted); }
/* SEC Form Types Guide: increase modal width by ~30% (from ~56rem to ~72.8rem).
   Keep responsive via viewport cap. Targets both legacy .modal-content and
   the direct child used in the sanitized markup. */
#formTypesModal .modal-content,
#formTypesModal > div { max-width: min(72.8rem, 96vw); }
/* Profile Terms & Privacy: increase modal width by ~30% (from ~48rem to ~62.4rem) */
#tosPrivacyModal .modal-content,
#tosPrivacyModal > div { max-width: min(62.4rem, 96vw); }
/* drawer.css
   Purpose: Generic drawer/backdrop attribute hooks to enable unified JS control.
   Note: Panel positioning and full visuals remain in component-specific CSS for now. */
/* Backdrop base: positioned and safe-area aware */
[data-drawer-backdrop] {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(var(--black-rgb), 0.5);
  z-index: var(--z-backdrop);
  padding-top: env(safe-area-inset-top);
  padding-bottom: env(safe-area-inset-bottom);
}
[data-drawer-backdrop].open { display: block; }
/* Drawer panel visibility (feature CSS defines placement/sizing) */
[data-drawer] { display: none; }
[data-drawer].open { display: block; }
/* Panels opt-in to visibility via their own rules. This file intentionally
   avoids positioning so it does not conflict with existing ID-specific CSS. */
/*# sourceMappingURL=data:application/json;base64,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QUFnQixFQUFFO0FBQ2xHO0VBR0EsMkJBQUE7RUFDQSxxQ0FBQTtFQUNBLCtCQUFBO0VBQ0EsZ0JBQUE7QUFDQTtBQURBLCtEQUErRCw4QkFBOEIsRUFBRTtBQUMvRiwwREFFbUQsOEJBQUEsRUFBQTtBQUNuRCwyQ0FBQSwyQkFBQSxFQUFBLHFDQUFBLEVBQUEsZ0JBQUEsRUFBQTtBQURBOzs0REFJQSxpQ0FBQSxFQUFBO0FBREE7RUFHQSxnQ0FBQTtFQURFLCtCQUErQjtFQUMvQixpREFBaUQ7RUFHbkQsZUFBQTtFQUNBLGdCQUFBO0FBREE7QUFDQTs7RUFJRSxzQ0FBQTtFQUNBLHdDQUEwQjtBQUQ1QjtBQUNBOzswREFJOEMsK0JBQUEsRUFBQSxpQkFBQSxFQUFBO0FBQzlDLCtFQUFtRTtBQUNuRSwyQ0FBK0IsMkJBQUEsRUFBQTtBQUMvQixvRUFBcUMsK0JBQUEsRUFBQTtBQUNyQyxvRUFBQSxpQ0FBQSxFQUFBO0FBREE7O21EQUVtRDtBQUNuRDt3QkFDd0IsNkJBQTZCLEVBQUU7QUFDdkQsb0ZBQW9GO0FBQ3BGO3lCQUN5Qiw2QkFBNkIsRUFBRTtBQUN4RDs7dUZBRXVGO0FBQ3ZGLGtEQUFrRDtBQUNsRDtFQUNFLGFBQWE7RUFDYixlQUFlO0VBQ2YsUUFBUTtFQUNSLHVDQUF1QztFQUN2QywwQkFBMEI7RUFDMUIscUNBQXFDO0VBQ3JDLDJDQUEyQztBQUM3QztBQUNBLDhCQUE4QixjQUFjLEVBQUU7QUFDOUMsbUVBQW1FO0FBQ25FLGdCQUFnQixhQUFhLEVBQUU7QUFDL0IscUJBQXFCLGNBQWMsRUFBRTtBQUNyQzs4RUFDOEUiLCJmaWxlIjoiYXBwLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGFwcC5jc3MgKG1vZHVsYXIgZW50cnlwb2ludClcclxuICAgVGhpcyBmaWxlIG5vdyBjb21wb3NlcyBtb2R1bGFyIHN0eWxlcy4gSW1wb3J0IG9yZGVyIHByZXNlcnZlcyBvcmlnaW5hbCBjYXNjYWRlLlxyXG4gICAtIHV0aWxpdGllcy5jc3MgKHZhcmlhYmxlcywgc2Nyb2xsYmFyLCBoZWxwZXJzKVxyXG4gICAtIHR5cG9ncmFwaHkuY3NzIChiYXNlIGJvZHkgZm9udC9jb2xvcnMpXHJcbiAgIC0gbGF5b3V0LmNzcyAocGFnZSBzdHJ1Y3R1cmUpXHJcbiAgIC0gYnV0dG9ucy5jc3MgKGJ1dHRvbiBwcmltaXRpdmVzKVxyXG4gICAtIGZvcm1zLmNzcyAoZm9ybSBjb250cm9scylcclxuICAgLSBjb21wb25lbnRzLmNzcyAoZmVhdHVyZSBjb21wb25lbnRzKVxyXG4qL1xyXG4vKlxuICB1dGlsaXRpZXMuY3NzXG4gIFB1cnBvc2U6IFJldXNhYmxlIGhlbHBlciBjbGFzc2VzIGFuZCBjcm9zcy1jdXR0aW5nIGdsb2JhbHMgKGUuZy4sIHNjcm9sbGJhciB0aGVtZSwgc21hbGwgdXRpbGl0aWVzKS5cbiovXHJcbi8qIFRoZW1lIHRva2VucyAqL1xyXG46cm9vdCB7IFxuICBjb2xvci1zY2hlbWU6IGRhcms7XG4gIC8qIENvbG9ycyAqL1xuICAtLWNvbG9yLWJnOiAjMGEwYTBhOyAgICAgICAgICAgICAgICAgLyogYXBwIGJhY2tncm91bmQgKi9cbiAgLS1jb2xvci1iZy1lbGV2YXRlZDogIzBmMGYwZjsgICAgICAgIC8qIGVsZXZhdGVkIHBhbmVscyAqL1xuICAtLWNvbG9yLWJnLW11dGVkOiAjMWExYTFhOyAgICAgICAgICAgLyogbXV0ZWQgaGVhZGVycy9zdHJpcHMgKi9cbiAgLS1jb2xvci1zdXJmYWNlOiAjMmQyZDJkOyAgICAgICAgICAgIC8qIHN1cmZhY2VzL2NhcmRzICovXG4gIC0tY29sb3Itc3VyZmFjZS1ob3ZlcjogIzQwNDA0MDsgICAgICAvKiBob3ZlciBvbiBzdXJmYWNlcyAqL1xuICAtLWNvbG9yLWJvcmRlcjogIzQwNDA0MDsgICAgICAgICAgICAgLyogZGVmYXVsdCBib3JkZXIgKi9cbiAgLS1jb2xvci1ib3JkZXItc3Ryb25nOiAjMmEyYTJhOyAgICAgIC8qIHN0cm9uZyBvdXRsaW5lICovXG4gIC0tY29sb3ItdGV4dDogI2UwZTBlMDsgICAgICAgICAgICAgICAvKiBwcmltYXJ5IHRleHQgKi9cbiAgLS1jb2xvci10ZXh0LXN0cm9uZzogI2ZmZmZmZjsgICAgICAgIC8qIHN0cm9uZy93aGl0ZSB0ZXh0ICovXG4gIC0tY29sb3ItdGV4dC1tdXRlZDogI2NjY2NjYzsgICAgICAgICAvKiBtdXRlZCB0ZXh0ICovXG4gIC0tY29sb3ItdGV4dC1zdWJ0bGU6ICNhYWFhYWE7ICAgICAgICAvKiBzdWJ0bGUgdGV4dCAqL1xuICAtLWNvbG9yLXRleHQtZGltOiAjOTk5OTk5OyAgICAgICAgICAgLyogZGltIHRleHQgKi9cbiAgLS1jb2xvci10ZXh0LWludmVyc2U6ICMwMDAwMDA7ICAgICAgIC8qIG9uLWFjY2VudCB0ZXh0ICovXG5cbiAgLS1jb2xvci1hY2NlbnQ6ICMwMGZmOTk7ICAgICAgICAgICAgIC8qIHByaW1hcnkgYWNjZW50ICovXG4gIC0tY29sb3ItYWNjZW50LWhvdmVyOiAjMDBkZDg4OyAgICAgICAvKiBhY2NlbnQgaG92ZXIgKi9cbiAgLS1ncmVlbi1yZ2I6IDAsMjU1LDE1MzsgICAgICAgICAgICAgIC8qIGtlZXAgUkdCIGZvciBnbG93cyAqL1xuXG4gIC0tY29sb3ItZGFuZ2VyOiAjZmY0NDQ0O1xuICAtLWNvbG9yLWRhbmdlci1ob3ZlcjogI2ZmNjY2NjtcbiAgLS1jb2xvci1kYW5nZXItZGVlcDogI2NjMzMzMztcbiAgLS1jb2xvci1kYW5nZXItc29mdDogI2ZmOGI4YjsgICAgICAgIC8qIGV4YWN0IHRpbnQgdXNlZCBmb3IgZGVsZXRlIGFmZm9yZGFuY2VzICovXG4gIC0tZGFuZ2VyLXJnYjogMjI3LCA3NSwgNzU7XG5cbiAgLS1jb2xvci13YXJuaW5nOiAjZmFjYzE1OyAgICAgICAgICAgIC8qIHVuaWZpZWQgYW1iZXIgKi9cbiAgLS13YXJuaW5nLXJnYjogMjUwLCAyMDQsIDIxO1xuXG4gIC0tY29sb3ItYmx1ZTogIzQyODVGNDsgICAgICAgICAgICAgICAvKiBwcm92aWRlciBibHVlICovXG4gIC0tY29sb3ItYmx1ZS1ob3ZlcjogIzM1N2FlOTtcblxuICAvKiBHb29nbGUgYnJhbmQgcGFsZXR0ZSAoZm9yIGxvZ28gc2VnbWVudHMvYnV0dG9ucykgKi9cbiAgLS1nb29nbGUtYmx1ZTogIzQyODVGNDtcbiAgLS1nb29nbGUtZ3JlZW46ICMzNEE4NTM7XG4gIC0tZ29vZ2xlLXllbGxvdzogI0ZCQkMwNTtcbiAgLS1nb29nbGUtcmVkOiAjRUE0MzM1O1xuXG4gIC8qIEdyZWVuIHRva2VuIGFsaWFzZXMgKFBoYXNlIDUgaHlnaWVuZSlcbiAgICAgUmF0aW9uYWxlOiByZWR1Y2UgcGFsZXR0ZSBmcmFnbWVudGF0aW9uIGJ5IGFsaWFzaW5nIHZhcmlhbnQgZ3JlZW5zIHRvIHRoZVxuICAgICBwcmltYXJ5IGFjY2VudCBncmVlbi4gSWYgYSBkaXN0aW5jdCBzaGFkZSBpcyBuZWVkZWQgbGF0ZXIsIHJlaW50cm9kdWNlIGl0XG4gICAgIHdpdGggYSBzZW1hbnRpYyBuYW1lLiAqL1xuICAtLWdyZWVuLW5lb24tcmdiOiB2YXIoLS1ncmVlbi1yZ2IpO1xuICAtLWdyZWVuLWVtZXJhbGQtcmdiOiB2YXIoLS1ncmVlbi1yZ2IpO1xuICAtLWdyZWVuLXNwcmluZy1yZ2I6IHZhcigtLWdyZWVuLXJnYik7XG4gIC0tZ3JlZW4tc3Ryb2tlLWRhcmstcmdiOiB2YXIoLS1ncmVlbi1yZ2IpO1xuICAtLWdyZWVuLWZvcmVzdC0xLXJnYjogdmFyKC0tZ3JlZW4tcmdiKTtcbiAgLS1ncmVlbi1mb3Jlc3QtMi1yZ2I6IHZhcigtLWdyZWVuLXJnYik7XG4gIC0tZ3JlZW4tZm9yZXN0LTMtcmdiOiB2YXIoLS1ncmVlbi1yZ2IpO1xuICAtLWdyZWVuLWxlYWYtZGVlcC1yZ2I6IHZhcigtLWdyZWVuLXJnYik7XG4gIC0tZ3JlZW4tZm9yZXN0LTQtcmdiOiB2YXIoLS1ncmVlbi1yZ2IpO1xuXG4gIC8qIE5ldXRyYWwgYmFzZXMgKi9cbiAgLS1ibGFjay1yZ2I6IDAsIDAsIDA7XG4gIC0td2hpdGUtcmdiOiAyNTUsIDI1NSwgMjU1O1xuICAtLWRhcmstMTgtcmdiOiAxOCwgMTgsIDE4O1xuICAtLWRhcmstMTAtcmdiOiAxMCwgMTAsIDEwO1xuICAvKiBBbGlhc2VzIGZvciBsZWdhY3kgY29tcG9uZW50IGdyYWRpZW50cyAqL1xuICAtLWRhcmstMTgtMjYtMjItcmdiOiB2YXIoLS1kYXJrLTE4LXJnYik7XG4gIC0tZGFyay0xMi0xOC0xNi1yZ2I6IHZhcigtLWRhcmstMTAtcmdiKTtcbiAgLS1vdmVybGF5LWRlZXAtcmdiOiAxMiwgMjAsIDE2O1xuXG4gIC8qIEJyYW5kIGFuZCBhdXhpbGlhcnkgYWNjZW50cyAqL1xuICAtLWJsdWUtbXV0ZWQtcmdiOiA0MywgOTgsIDE5NztcbiAgLS1ibHVlLWF6dXJlLXJnYjogNzcsIDE2NiwgMjU1O1xuICAtLWRhbmdlci1zdHJvbmctcmdiOiAyNTUsIDgyLCA4MjtcbiAgLS1kYW5nZXItYnJpZ2h0LXJnYjogMjU1LCA2OCwgNjg7XG4gIC0tZGFuZ2VyLXgtYnJpZ2h0LXJnYjogMjU1LCAzNCwgMzQ7XG4gIC0tb3JhbmdlLWFjY2VudC1yZ2I6IDI1NSwgMTAyLCAwO1xuICAtLXJlZC02MS1yZ2I6IDI1NSwgNjEsIDYxO1xuICAtLWRhbmdlci05MC1yZ2I6IDI1NSwgOTAsIDkwOyAgICAgICAgLyogbGVnYWN5IGRhbmdlciB0aW50IHVzZWQgaW4gbW9kYWxzICovXG4gIC0tbWludC1pY2UtcmdiOiAyMDAsIDI1NSwgMjMwO1xuICAtLW1pbnQtc25vdy1yZ2I6IDIzMCwgMjU1LCAyNDM7XG4gIC0tbWludC1zb2Z0LXJnYjogMjA1LCAyNTUsIDIzNTtcbiAgLS1taW50LWRpbS1yZ2I6IDE5MCwgMjMwLCAyMTA7XG5cbiAgLyogTWVudGlvbnMgLyBiYWRnZXMgKi9cbiAgLS1jb2xvci1tZW50aW9uOiAjYTg1NWY3O1xuICAtLW1lbnRpb24tcmdiOiAxNjgsIDg1LCAyNDc7XG5cbiAgLyogU3VjY2Vzcy9kYW5nZXIgaW50ZW5zaXR5IHN0ZXBzICh3YXRjaGxpc3QsIGluZGljYXRvcnMpICovXG4gIC0tc3VjY2Vzcy0xMDA6ICM4ZGZmZDQ7XG4gIC0tc3VjY2Vzcy0yMDA6ICM0ZGZmYzA7XG4gIC0tc3VjY2Vzcy0zMDA6ICMxOGYyOTY7XG4gIC0tc3VjY2Vzcy00MDA6ICMwMGQ2N2Y7XG4gIC0tc3VjY2Vzcy01MDA6ICMwMGZmOTk7XG4gIC0tZGFuZ2VyLTEwMDogI2ZmYjNiMztcbiAgLS1kYW5nZXItMjAwOiAjZmY5OTk5O1xuICAtLWRhbmdlci0zMDA6ICNmZjczNzM7XG4gIC0tZGFuZ2VyLTQwMDogI2ZmNTI1MjtcbiAgLS1kYW5nZXItNTAwOiAjZmYzMzMzO1xuICAvKiBDb21tb24gaW5wdXQgYmFja2dyb3VuZHMgKi9cbiAgLS1pbnB1dC1iZzogIzBkMGQwZDtcbiAgLS1pbnB1dC1iZy1mb2N1czogIzEwMWYxNjtcbiAgLyogU3BhY2luZyBzY2FsZSAoOHB4IGJhc2UpICovXG4gIC0tc3BhY2UtMDogMDtcbiAgLS1zcGFjZS0wLTU6IDAuMDYyNXJlbTsgICAgICAgLyogMXB4ICovXG4gIC0tc3BhY2UtMTogMC4xMjVyZW07ICAgICAgICAgICAvKiAycHggKi9cbiAgLS1zcGFjZS0xLTU6IDAuMTg3NXJlbTsgICAgICAgIC8qIDNweCAqL1xuICAtLXNwYWNlLTI6IDAuMjVyZW07ICAgICAgICAgICAgLyogNHB4ICovXG4gIC0tc3BhY2UtMi01OiAwLjMxMjVyZW07ICAgICAgICAvKiA1cHggKi9cbiAgLS1zcGFjZS0zOiAwLjM3NXJlbTsgICAgICAgICAgIC8qIDZweCAqL1xuICAtLXNwYWNlLTQ6IDAuNXJlbTsgICAgICAgICAgICAgLyogOHB4ICovXG4gIC0tc3BhY2UtNC01OiAwLjU2MjVyZW07ICAgICAgICAvKiA5cHggKi9cbiAgLS1zcGFjZS01OiAwLjYyNXJlbTsgICAgICAgICAgIC8qIDEwcHggKi9cbiAgLS1zcGFjZS01LTU6IDAuNjg3NXJlbTsgICAgICAgIC8qIDExcHggKi9cbiAgLS1zcGFjZS02OiAwLjc1cmVtOyAgICAgICAgICAgIC8qIDEycHggKi9cbiAgLS1zcGFjZS02LTU6IDAuODEyNXJlbTsgICAgICAgIC8qIDEzcHggKi9cbiAgLS1zcGFjZS03OiAwLjg3NXJlbTsgICAgICAgICAgIC8qIDE0cHggKi9cbiAgLS1zcGFjZS03LTU6IDAuOTM3NXJlbTsgICAgICAgIC8qIDE1cHggKi9cbiAgLS1zcGFjZS04OiAxcmVtOyAgICAgICAgICAgICAgIC8qIDE2cHggKi9cbiAgLS1zcGFjZS05OiAxLjEyNXJlbTsgICAgICAgICAgIC8qIDE4cHggKi9cbiAgLS1zcGFjZS0xMDogMS4yNXJlbTsgICAgICAgICAgIC8qIDIwcHggKi9cbiAgLS1zcGFjZS0xMjogMS41cmVtOyAgICAgICAgICAgIC8qIDI0cHggKi9cbiAgLS1zcGFjZS0xNDogMS43NXJlbTsgICAgICAgICAgIC8qIDI4cHggKi9cbiAgLS1zcGFjZS0xNjogMnJlbTsgICAgICAgICAgICAgIC8qIDMycHggKi9cbiAgLS1zcGFjZS0xODogMi4yNXJlbTsgICAgICAgICAgIC8qIDM2cHggKi9cbiAgLS1zcGFjZS0xOTogMi4zNzVyZW07ICAgICAgICAgIC8qIDM4cHggKi9cbiAgLS1zcGFjZS0yMDogMi41cmVtOyAgICAgICAgICAgIC8qIDQwcHggKi9cbiAgLS1zcGFjZS0yNDogM3JlbTsgICAgICAgICAgICAgIC8qIDQ4cHggKi9cbiAgLS1zcGFjZS0zMjogNHJlbTsgICAgICAgICAgICAgIC8qIDY0cHggKi9cbiAgLS1zcGFjZS00ODogNnJlbTsgICAgICAgICAgICAgIC8qIDk2cHggKi9cbiAgLS1zcGFjZS01MDogNi4yNXJlbTsgICAgICAgICAgIC8qIDEwMHB4ICovXG4gIC0tc3BhY2UtMjU6IDEuNTYyNXJlbTsgICAgICAgICAvKiAyNXB4ICovXG4gIC0tc3BhY2UtMzU6IDIuMTg3NXJlbTsgICAgICAgICAvKiAzNXB4ICovXG4gIC0tc3BhY2UtMzA6IDMuNzVyZW07ICAgICAgICAgICAvKiA2MHB4ICovXG4gIC0tc3BhY2UtNDA6IDVyZW07ICAgICAgICAgICAgICAvKiA4MHB4ICovXG5cbiAgLyogRm9udCBzaXplcyAqL1xuICAtLWZvbnQtMTA6IDAuNjI1cmVtOyAgICAgICAgICAgLyogMTBweCAqL1xuICAtLWZvbnQtOTogMC41NjI1cmVtOyAgICAgICAgICAgLyogOXB4ICovXG4gIC0tZm9udC0xMTogMC42ODc1cmVtOyAgICAgICAgICAvKiAxMXB4ICovXG4gIC0tZm9udC0xMjogMC43NXJlbTsgICAgICAgICAgICAvKiAxMnB4ICovXG4gIC0tZm9udC0xMzogMC44MTI1cmVtOyAgICAgICAgICAvKiAxM3B4ICovXG4gIC0tZm9udC0xNDogMC44NzVyZW07ICAgICAgICAgICAvKiAxNHB4ICovXG4gIC0tZm9udC0xNjogMXJlbTsgICAgICAgICAgICAgICAvKiAxNnB4ICovXG4gIC0tZm9udC0xODogMS4xMjVyZW07ICAgICAgICAgICAvKiAxOHB4ICovXG4gIC0tZm9udC0yMDogMS4yNXJlbTsgICAgICAgICAgICAvKiAyMHB4ICovXG4gIC0tZm9udC0yNDogMS41cmVtOyAgICAgICAgICAgICAvKiAyNHB4ICovXG4gIC0tZm9udC0yODogMS43NXJlbTsgICAgICAgICAgICAvKiAyOHB4ICovXG4gIC0tZm9udC0zMjogMnJlbTsgICAgICAgICAgICAgICAvKiAzMnB4ICovXG4gIC0tZm9udC0zNjogMi4yNXJlbTsgICAgICAgICAgICAvKiAzNnB4ICovXG4gIC0tZm9udC00MDogMi41cmVtOyAgICAgICAgICAgICAvKiA0MHB4ICovXG4gIC0tZm9udC00NDogMi43NXJlbTsgICAgICAgICAgICAvKiA0NHB4ICovXG4gIC0tZm9udC00ODogM3JlbTsgICAgICAgICAgICAgICAvKiA0OHB4ICovXG4gIC0tZm9udC0yMjogMS4zNzVyZW07ICAgICAgICAgICAvKiAyMnB4ICovXG5cbiAgLyogRmx1aWQgYm9keSBzY2FsZSAqL1xuICAtLWZvbnQtYm9keS1taW46IDAuOTM3NXJlbTsgICAgLyogMTVweCAqL1xuICAtLWZvbnQtYm9keS1iYXNlOiAwLjg3NXJlbTsgICAgLyogMTRweCAqL1xuICAtLWZvbnQtYm9keS1tYXg6IDFyZW07ICAgICAgICAgLyogMTZweCAqL1xuICAtLWZvbnQtYm9keS1zbG9wZTogMC4ydnc7XG5cbiAgLyogUmFkaWkgKi9cbiAgLS1yYWRpdXMteHM6IDAuMjVyZW07ICAgICAgICAgIC8qIDRweCAqL1xuICAtLXJhZGl1cy1zbTogMC4zNzVyZW07ICAgICAgICAgLyogNnB4ICovXG4gIC0tcmFkaXVzLW1kOiAwLjVyZW07ICAgICAgICAgICAvKiA4cHggKi9cbiAgLS1yYWRpdXMtbWQtcGx1czogMC42MjVyZW07ICAgIC8qIDEwcHggKi9cbiAgLS1yYWRpdXMtbGc6IDAuNzVyZW07ICAgICAgICAgIC8qIDEycHggKi9cbiAgLS1yYWRpdXMteGw6IDAuODc1cmVtOyAgICAgICAgIC8qIDE0cHggKi9cbiAgLS1yYWRpdXMtMnhsOiAxcmVtOyAgICAgICAgICAgIC8qIDE2cHggKi9cbiAgLS1yYWRpdXMtZnVsbDogOTk5OXB4OyAgICAgICAgIC8qIHBpbGwvZnVsbCAqL1xuXG4gIC8qIExldHRlci1zcGFjaW5nIHJlZmluZW1lbnQgKi9cbiAgLS1scy14eHhzOiAwLjAxMjVyZW07ICAgICAgICAgIC8qIDAuMnB4ICovXG5cbiAgLyogTGF5b3V0IGNvbnN0YW50cyAqL1xuICAtLWxheW91dC1oZWFkZXItaGVpZ2h0OiA1LjMxMjVyZW07IC8qIDg1cHggKi9cbiAgLS1oZWFkZXItcm93LWhlaWdodDogMy44NzVyZW07ICAgICAvKiA2MnB4ICovXG4gIC0tc3RvY2stbWluLXc6IDE4Ljc1cmVtOyAgICAgICAgICAgLyogMzAwcHggKi9cbiAgLS1zZWFyY2gtbWluLXc6IDE1LjYyNXJlbTsgICAgICAgICAvKiAyNTBweCAqL1xuICAtLWZvcm0tY29sLW1pbjogMTByZW07ICAgICAgICAgICAgIC8qIDE2MHB4ICovXG4gIC0tbWF4LXctbW9kYWw6IDMxLjI1cmVtOyAgICAgICAgICAgLyogNTAwcHggKi9cbiAgLS1wb3BvdmVyLW1heC13OiAyNnJlbTsgICAgICAgICAgICAvKiA0MTZweCAqL1xuICAtLW1lbnUtbWF4LXc6IDIwcmVtOyAgICAgICAgICAgICAgIC8qIDMyMHB4ICovXG4gIC0tbWVudS1tYXgtaDogMjByZW07ICAgICAgICAgICAgICAgLyogMzIwcHggKi9cbiAgLS1tZW51LW1pbi13OiAxMnJlbTsgICAgICAgICAgICAgICAvKiAxOTJweCAqL1xuICAtLW1heC13LWlucHV0LWxnOiAzMi41cmVtOyAgICAgICAgIC8qIDUyMHB4ICovXG4gIC0tY2hhcnQtbWluLWg6IDE4Ljc1cmVtOyAgICAgICAgICAgLyogMzAwcHggKi9cbiAgLS1kZXRhaWwtYm94LW1pbi1oOiA0LjM3NXJlbTsgICAgICAvKiA3MHB4ICovXG4gIC0tcmVvcmRlci1wYW5lbC1tYXgtdzogNTMuNzVyZW07ICAgLyogODYwcHggKi9cbiAgLS1tYXgtdy14bDogMzcuNXJlbTsgICAgICAgICAgICAgICAvKiA2MDBweCAqL1xuICAtLW1heC13LWhvbWU6IDQ3LjVyZW07ICAgICAgICAgICAgIC8qIDc2MHB4ICovXG4gIC0tbWF4LXctaG9tZS1zZWFyY2g6IDQzLjc1cmVtOyAgICAgLyogNzAwcHggKi9cbiAgLS1jb250YWluZXItd2lkZS1tYXg6IDgwcmVtOyAgICAgICAvKiAxMjgwcHggKi9cbiAgLS1wcmljZS1kaXNwbGF5LW1pbi13OiAxMS4yNXJlbTsgICAvKiAxODBweCAqL1xuICAtLXJlcGx5LXByZXZpZXctbWF4LXc6IDE4Ljc1cmVtOyAgIC8qIDMwMHB4ICovXG4gIC0tbWluLXctYnRuLWxnOiA2LjI1cmVtOyAgICAgICAgICAgLyogMTAwcHggKi9cbiAgLS1ib3JkZXItMTogMXB4OyAgICAgICAgICAgICAgICAgICAvKiAxcHggbGluZSAqL1xuICAtLWJpby1taW4taDogOHJlbTsgICAgICAgICAgICAgICAgIC8qIDEyOHB4ICovXG4gIC0tYmlvLWg6IDEwcmVtOyAgICAgICAgICAgICAgICAgICAgLyogMTYwcHggKi9cbiAgLS1iaW8tbWF4LWg6IDE4cmVtOyAgICAgICAgICAgICAgICAvKiAyODhweCAqL1xuICAvKiBTaWRlYmFyIHdhdGNobGlzdDogY29tcGFjdCBidXQgc3VmZmljaWVudCBmb3IgcHJpY2UsIGFycm93LCBib2x0LCBiYWRnZXMgKi9cbiAgLS13YXRjaGxpc3Qtdy1zbTogMTFyZW07ICAgICAgICAgICAgLyogMTc2cHggKi9cbiAgLS13YXRjaGxpc3Qtdy1sZzogMTQuNXJlbTsgICAgICAgICAgLyogMjMycHggKi9cbiAgLS13YXRjaGxpc3QtZHJhd2VyLW1pbjogMThyZW07ICAgICAgLyogMjg4cHggKi9cbiAgLS13YXRjaGxpc3QtZHJhd2VyLW1heDogMzJyZW07ICAgICAgLyogNTEycHggKi9cbiAgLS13YXRjaGxpc3QtZHJhd2VyLWZsdWlkOiA3MnZ3OyAgICAgLyogZGVmYXVsdCBtb2JpbGUgZHJhd2VyIHdpZHRoICovXG4gIC0tZG0tY29udm8tY29sLXc6IDIwcmVtOyAgICAgICAgICAgICAvKiAzMjBweCAtIERNIGNvbnZlcnNhdGlvbiBjb2x1bW4gd2lkdGggKi9cbiAgLS1idG4taWNvbjogMS43NXJlbTsgICAgICAgICAgICAgICAgLyogMjhweCAqL1xuICAtLWJ0bi1pY29uLXNtOiAxLjVyZW07ICAgICAgICAgICAgICAvKiAyNHB4ICovXG4gIC0tc3Bpbm5lcjogMS4zNzVyZW07ICAgICAgICAgICAgICAgIC8qIDIycHggKi9cbiAgLS1yZW9yZGVyLXRvZ2dsZS1zaXplOiAxLjkzNzVyZW07ICAgLyogMzFweCAqL1xuICAtLXJlb3JkZXItY29sLW1pbjogOC4xMjVyZW07ICAgICAgICAvKiAxMzBweCAqL1xuICAtLWJhbm5lci1oZWlnaHQ6IDUuNXJlbTsgICAgICAgICAgICAvKiA4OHB4ICovXG4gIC0tbHMteHhzOiAwLjAzNzVyZW07ICAgICAgICAgICAgICAgIC8qIDAuNnB4ICovXG4gIC0tbHMteHM6IDAuMDE4NzVyZW07ICAgICAgICAgICAgICAgIC8qIDAuM3B4ICovXG4gIC8qIFdhdGNobGlzdCBjb21wb25lbnQgc2l6ZXMgKi9cbiAgLS13bHEtbWluLXc6IDIuMTg3NXJlbTsgICAgICAgLyogMzVweCAqL1xuICAtLXdscS1tYXgtdzogMi42MjVyZW07ICAgICAgICAvKiA0MnB4ICovXG4gIC0td2xxLXByaWNlLW1pbi13OiAxLjc1cmVtOyAgIC8qIDI4cHggKi9cbiAgLS13bHEtY2hhbmdlLW1pbi13OiAwLjYyNXJlbTsgLyogMTBweCAqL1xuICAtLXdscS1ib2x0LW1pbi13OiAwLjc1cmVtOyAgICAvKiAxMnB4ICovXG4gIC0td2wtZGVsZXRlLXNpemU6IDEuMTI1cmVtOyAgIC8qIDE4cHggKi9cblxuICAvKiBMYXlvdXQgc21hbGwgd2lkdGhzICh0b2tlbnMgYWRkZWQgdG8gcmVtb3ZlIGhhcmQtY29kZWQgcmVtcykgKi9cbiAgLS1zdGF0cy1taW4tdzogNy41cmVtOyAgICAgICAgICAgICAvKiAxMjBweCAqL1xuICAtLWRldGFpbC1ib3gtbWluLXc6IDUuNjI1cmVtOyAgICAgIC8qIDkwcHggKi9cbiAgLS1maWxpbmdzLWNvbXBhbnktbWluLXc6IDEycmVtOyAgICAvKiAxOTJweCAqL1xuICAtLWZpbGluZ3MtbGl2ZS1jb21wYW55LW1pbi13OiAxMHJlbTsgLyogMTYwcHggKi9cbiAgLS1zZWFyY2gtZ3JpZC1iYXNpczogMTJyZW07ICAgICAgICAvKiAxOTJweCAqL1xuICAtLXNlYXJjaC1ncmlkLW1pbi13OiAxMHJlbTsgICAgICAgIC8qIDE2MHB4ICovXG4gIC0tdGFibGUtY29sLW1pbjogMTJyZW07ICAgICAgICAgICAgLyogMTkycHggKi9cbiAgLyogVmlld3BvcnQgaGVscGVycyAqL1xuICAtLXZoLWZ1bGwtc2FmZTogMTAwc3ZoO1xuICAtLXZoLWZ1bGwtZHluYW1pYzogMTAwZHZoO1xuICAtLXZoLXBhbmUtc2FmZTogY2FsYygxMDBzdmggLSB2YXIoLS1oZWFkZXItcm93LWhlaWdodCkpO1xuICAtLXZoLXBhbmUtZHluYW1pYzogY2FsYygxMDBkdmggLSB2YXIoLS1oZWFkZXItcm93LWhlaWdodCkpO1xuXG4gIC8qIFNjcm9sbGJhciAqL1xuICAtLXNjcm9sbGJhci10cmFjazogIzEyMTIxMjsgLS1zY3JvbGxiYXItdHJhY2staG92ZXI6ICMxNjFkMTk7IC0tc2Nyb2xsYmFyLXRodW1iOiAjMDBmZjk5OyAtLXNjcm9sbGJhci10aHVtYi1ob3ZlcjogIzFmZmY5ZjsgLS1zY3JvbGxiYXItdGh1bWItYWN0aXZlOiAjMGNjZjc1OyAtLXNjcm9sbGJhci1jb3JuZXI6ICMwZDBkMGQ7IC0tc2Nyb2xsYmFyLXNpemU6IDAuNXJlbTsgLyogOHB4ICovXG4gIC8qIFNjcm9sbGJhciBhY2Nlc3NvcnkgYm9yZGVycyAocHJldmlvdXNseSBpbmxpbmUgaGV4KSAqL1xuICAtLXNjcm9sbGJhci10aHVtYi1ib3JkZXI6ICMwNTJlMWQ7XG4gIC0tc2Nyb2xsYmFyLXRodW1iLWJvcmRlci1ob3ZlcjogIzA4NDIyODtcbiAgLS1zY3JvbGxiYXItdGh1bWItYm9yZGVyLWFjdGl2ZTogIzA2MzExZjtcbiAgLyogVGhlbWUgJiBzaGFkb3cgc2NhbGUgKHJldXNlIC0tZ3JlZW4tcmdiIGRlZmluZWQgYWJvdmUpICovXG4gIC0tc2hhZG93LW1vZGFsOiAwIDAuNzVyZW0gMS41cmVtIHJnYmEoMCwwLDAsMC41KTtcbiAgLS1zaGFkb3ctcmFpc2VkOiAwIDFyZW0gMi4xMjVyZW0gcmdiYSgwLCAyNTUsIDE1MywgMC4zMik7XG4gIC0tc2hhZG93LWdyZWVuLXhzOiAwIDAuMjVyZW0gMC43NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMik7XG4gIC0tc2hhZG93LWdyZWVuLXNtOiAwIDAuMzc1cmVtIDFyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjE0KTtcbiAgLS1zaGFkb3ctZ3JlZW4tbWQ6IDAgMC43NXJlbSAxLjc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yNSk7XG4gIC0tc2hhZG93LWdyZWVuLWxnOiAwIDEuNXJlbSAzLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjE4KTtcbiAgLyogR2xvdyBzY2FsZXMgKGFtYmllbnQgKyBpbnNldCkgKi9cbiAgLS1nbG93LWdyZWVuLXhzOiAwIDAgMC4yNXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMjUpO1xuICAtLWdsb3ctZ3JlZW4tc206IDAgMCAwLjM3NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMzUpO1xuICAtLWdsb3ctZ3JlZW4tbWQ6IDAgMCAwLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjU1KTtcbiAgLS1nbG93LWdyZWVuLWxnOiAwIDAgMC44NzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjI1KTtcbiAgLS1nbG93LWdyZWVuLWluc2V0LXNtOiAwIDAgMC4xMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjE1KSBpbnNldDtcbiAgLS1nbG93LWdyZWVuLWluc2V0LW1kOiAwIDAgMC4xODc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yNSkgaW5zZXQ7XG4gIC0tZ2xvdy1ncmVlbi1pbnNldC1sZzogMCAwIDAuMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjM1KSBpbnNldDtcbiAgLS1vdXRsaW5lLXdlYWs6IDAgMCAwIDAuMTg3NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTgpO1xuICAtLW91dGxpbmUtc3Ryb25nOiAwIDAgMCAwLjE4NzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjI1KTtcbiAgLS1mb2N1cy1yaW5nLXNpemU6IDAuMTI1cmVtOyAgICAgICAvKiBrZXlib2FyZCBmb2N1cyBvdXRsaW5lIHRoaWNrbmVzcyAqL1xuICAtLWZvY3VzLXJpbmctb2Zmc2V0OiAwLjEyNXJlbTsgICAgIC8qIGNvbnNpc3RlbnQgb3V0bGluZSBvZmZzZXQgKi9cbiAgLS1mb2N1cy1yaW5nLWNvbG9yOiByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuODIpO1xuICAtLWZvY3VzLXJpbmctY29sb3Itc3Ryb25nOiByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuOTUpO1xuICAtLWZvY3VzLXJpbmctY29sb3ItZGFuZ2VyOiByZ2JhKHZhcigtLWRhbmdlci1yZ2IpLCAwLjgpO1xuICAtLWZvY3VzLXJpbmctY29sb3Itd2FybjogcmdiYSh2YXIoLS13YXJuaW5nLXJnYiksIDAuNzUpO1xuICAvKiBUZXh0IGdsb3cgc3RhY2tzIGZvciBncmVlbiAqL1xuICAtLXRleHQtZ2xvdy1ncmVlbi14czogMCAwIDAuMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjQ1KTtcbiAgLS10ZXh0LWdsb3ctZ3JlZW4tc206IDAgMCAwLjM3NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuNTUpLCAwIDAgMC44NzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjM4KTtcbiAgLS10ZXh0LWdsb3ctZ3JlZW4tbWQ6IDAgMCAwLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjcpLCAwIDAgMXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuNDgpLCAwIDAgMS44NzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjMpO1xuICAtLXRleHQtZ2xvdy1ncmVlbi1sZzogMCAwIDAuNjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC44KSwgMCAwIDEuMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjU1KSwgMCAwIDIuMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjM1KTtcbiAgLyogV2FybmluZyAvIERhbmdlciB0ZXh0IGdsb3dzICovXG4gIC0tYW1iZXItcmdiOiAyNTUsIDIzNSwgNTk7XG4gIC0tcmVkLXJnYjogMjU1LCA1MSwgNTE7XG4gIC0tdGV4dC1nbG93LWFtYmVyLXhzOiAwIDAgMC4yNXJlbSByZ2JhKHZhcigtLWFtYmVyLXJnYiksIDAuNik7XG4gIC0tdGV4dC1nbG93LWFtYmVyLXNtOiAwIDAgMC4zNzVyZW0gcmdiYSh2YXIoLS1hbWJlci1yZ2IpLCAwLjcpLCAwIDAgMC44NzVyZW0gcmdiYSh2YXIoLS1hbWJlci1yZ2IpLCAwLjUpO1xuICAtLXRleHQtZ2xvdy1yZWQteHM6IDAgMCAwLjI1cmVtIHJnYmEodmFyKC0tcmVkLXJnYiksIDAuNik7XG4gIC0tdGV4dC1nbG93LXJlZC1zbTogMCAwIDAuMzc1cmVtIHJnYmEodmFyKC0tcmVkLXJnYiksIDAuNyksIDAgMCAwLjg3NXJlbSByZ2JhKHZhcigtLXJlZC1yZ2IpLCAwLjUpO1xuICAvKiBCbHVlIHNoYWRvd3MgZm9yIHByb3ZpZGVyIGJ1dHRvbnMgKi9cbiAgLS1ibHVlLXJnYjogNjYsIDEzMywgMjQ0O1xuICAtLXNoYWRvdy1ibHVlLXNtOiAwIDAuNXJlbSAxLjI1cmVtIHJnYmEodmFyKC0tYmx1ZS1yZ2IpLCAwLjIyKTtcbiAgLS1zaGFkb3ctYmx1ZS1tZDogMCAwLjYyNXJlbSAxLjM3NXJlbSByZ2JhKHZhcigtLWJsdWUtcmdiKSwgMC4yMik7XG4gIC8qIE5ldXRyYWwgdGV4dCBzaGFkb3dzICovXG4gIC0tdGV4dC1zaGFkb3ctZGFyay1zbTogMCAwLjA2MjVyZW0gMC4xMjVyZW0gcmdiYSgwLDAsMCwwLjIpO1xuICAtLXRleHQtc2hhZG93LWRhcmstbWQ6IDAgMC4wNjI1cmVtIDAuMTg3NXJlbSByZ2JhKDAsMCwwLDAuNCk7XG4gIC0tdGV4dC1nbG93LXdoaXRlLXNtOiAwIDAgMC4zNzVyZW0gcmdiYSgyNTUsMjU1LDI1NSwwLjcpO1xuICAtLXRleHQtZ2xvdy13aGl0ZS1tZDogMCAwIDAuNXJlbSByZ2JhKDI1NSwyNTUsMjU1LDAuOCk7XG4gIC8qIFV0aWxpdHkgY29sb3IgYWxwaGFzIHRvIGF2b2lkIHJhdyByZ2JhIGluIGNvbXBvbmVudCBDU1MgKi9cbiAgLS13aGl0ZS0xMmE6IHJnYmEodmFyKC0td2hpdGUtcmdiKSwgMC4xMik7XG4gIC0td2hpdGUtMjBhOiByZ2JhKHZhcigtLXdoaXRlLXJnYiksIDAuMik7XG4gIC0td2hpdGUtNzVhOiByZ2JhKHZhcigtLXdoaXRlLXJnYiksIDAuNzUpO1xuICAvKiBDb21wb3NpdGUgZmllbGQgZ2xvd3MgKi9cbiAgLS1nbG93LWdyZWVuLWZpZWxkOiAwIDAgMC4zNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjM1KSwgMCAwIDAuNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjE1KSBpbnNldDtcbiAgLS1nbG93LWdyZWVuLWZpZWxkLWZvY3VzOiAwIDAgMC40Mzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC41NSksIDAgMCAwLjg3NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMjUpIGluc2V0O1xuXG4gIC8qIE1vZGFsICsgRGlyZWN0b3J5IHNoYWRvd3MgKGV4YWN0LW1hdGNoIHRva2VucyB0byBwcmVzZXJ2ZSBjdXJyZW50IHZpc3VhbHMpICovXG4gIC0tc2hhZG93LW1vZGFsLW1kLWJsYWNrLTUwOiAwIDAuNjI1cmVtIDEuODc1cmVtIHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMC41KTtcbiAgLS1zaGFkb3ctZ3JlZW4tc20tMjI6IDAgMC4zNzVyZW0gMS4yNXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMjIpO1xuICAtLXNoYWRvdy1ncmVlbi1tZC0zMDogMCAwLjYyNXJlbSAxLjc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4zKTtcbiAgLS1zaGFkb3ctbW9kYWwteGwtYmxhY2stZW1lcmFsZC1yaW5nOiAwIDI0cHggNjRweCByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDAuNjUpLCAwIDAgMCAxcHggcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMjUpO1xuICAtLW91dGxpbmUtZW1lcmFsZC0yLTE1OiAwIDAgMCAycHggcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMTUpO1xuICAtLW91dGxpbmUtZW1lcmFsZC0yLTE4OiAwIDAgMCAycHggcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMTgpO1xuICAtLW91dGxpbmUtZW1lcmFsZC0yLTI1LWluc2V0LWdsb3c6IDAgMCAwIDJweCByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC4yNSksIGluc2V0IDAgMCAxLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMjUpO1xuICAtLXNoYWRvdy1lbGV2YXRlZC1zbS1ibGFjay0yNTogMCAxMHB4IDI0cHggcmdiYSh2YXIoLS1ibGFjay1yZ2IpLCAwLjI1KTtcbiAgLS1zaGFkb3ctZWxldmF0ZWQtbWQtYmxhY2stMzU6IDAgMTJweCAyNHB4IHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMC4zNSk7XG4gIC0tc2hhZG93LWRpcmVjdG9yeS1jYXJkOiAwIDIwcHggNDBweCByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDAuNDUpLCAwIDAgMzJweCByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC4yNSk7XG4gIC0tc2hhZG93LWluc2V0LWJvdHRvbS1kYXJrLTM1OiBpbnNldCAwIC0xcHggMCByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDAuMzUpO1xuICAtLXNoYWRvdy1zZWFyY2gtc2hlbGw6IGluc2V0IDAgMCAwIDFweCByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC4yKSwgMCAxMnB4IDIycHggcmdiYSh2YXIoLS1ibGFjay1yZ2IpLCAwLjM1KTtcbiAgLS1nbG93LWVtZXJhbGQtaW5zZXQteGwtMDg6IGluc2V0IDAgMCAwLjc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tZW1lcmFsZC1yZ2IpLCAwLjA4KTtcbiAgLS1nbG93LWVtZXJhbGQtaW5zZXQtbGctMTA6IGluc2V0IDAgMCAwLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMTApO1xuICAtLXNoYWRvdy1kaXJlY3RvcnktbGlzdC1pdGVtOiAwIDEycHggMjRweCByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDAuMjUpLCAwIDAgMTRweCByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC40NSk7XG5cbiAgLyogTTEgYWRkaXRpb25zOiBleGFjdC1zaXplIHRva2VucyB0byByZXBsYWNlIHJlbSBsaXRlcmFscyB3aGlsZSBwcmVzZXJ2aW5nIHZpc3VhbHMgKi9cbiAgLS1taW4tdy1idG4tbWQ6IDdyZW07ICAgICAgICAgICAgICAvKiAxMTJweCAqL1xuICAtLXJhZGl1cy1tZC10aWdodDogMC42NXJlbTsgICAgICAgIC8qIH4xMC40cHggKi9cbiAgLS1zY3JvbGxiYXItc2l6ZS1tZDogMC42cmVtOyAgICAgICAvKiA5LjZweCAqL1xuICAvKiBaLWxheWVyIHRva2VucyAocmVzZXJ2ZWQ7IG5vdCB5ZXQgdXNlZCkgKi9cbiAgLS16LXRvYXN0OiAxMDAwO1xuICAtLXotZHJvcGRvd246IDExMDA7XG4gIC0tei1tb2RhbDogMTIwMDtcbiAgLyogRXh0ZW5kZWQgei1pbmRleCB0b2tlbnMgKi9cbiAgLS16LXN0aWNreTogMTAwOyAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RpY2t5IGhlYWRlcnMgLyBzZWFyY2ggc2hlbGxzICovXG4gIC0tei1iYWNrZHJvcDogMTQwMDtcbiAgLS16LWRyYXdlcjogMTUwMDtcbiAgLS16LW1lbnU6IDIxMDA7XG4gIC0tei1wb3BvdmVyOiAyMjAwO1xuICAtLXotbGlnaHRib3g6IDMwMDA7XG4gIC0tei1zcGxhc2g6IDk5OTk7XG5cbiAgLyogUmFkaWkgKi9cbiAgLyogZHVwbGljYXRlIHJlbW92ZWQ6IC0tcmFkaXVzLWZ1bGwgZGVjbGFyZWQgZWFybGllciB3aXRoIHRva2VucyAqL1xuXG4gIC8qIFNjcmVlbi1yZWFkZXIgb2Zmc2NyZWVuIGhlbHBlcnMgKi9cbiAgLS1zci1vZmZzY3JlZW4teDogLTk5OTlweDtcbiAgLS1pY29uLXhzOiAxLjFyZW07ICAgICAgICAgICAgICAgICAgLyogfjE3LjZweCAqL1xuICAtLW91dGxpbmUtb2Zmc2V0LTAtMDY6IDAuMDZyZW07ICAgICAvKiB+MXB4ICovXG5cbiAgLyogQ3VzdG9tIGJyZWFrcG9pbnQgdG9rZW5zIChkb2N1bWVudGF0aW9uIG9ubHk7IENTUyB2YXJpYWJsZXMgYXJlIG5vdCB1c2FibGUgaW4gbWVkaWEgcXVlcmllcykgKi9cbiAgLS1icC13YXRjaGxpc3Qtd2lkZTogODEuMjVyZW07ICAgICAgLyogMTMwMHB4OiB3YXRjaGxpc3QgZXhwYW5zaW9uICovXG59XHJcbi8qIEdsb2JhbCBvdmVyZmxvdyBndWFyZHJhaWxzIHRvIHByZXZlbnQgc3RyYXkgaG9yaXpvbnRhbCBzY3JvbGxcbiAgIHdoaWxlIGFsbG93aW5nIGlubmVyIGNvbnRhaW5lcnMgdG8gc2Nyb2xsIGhvcml6b250YWxseSB3aGVuIG5lZWRlZCAqL1xyXG5odG1sLCBib2R5IHsgbWF4LXdpZHRoOiAxMDAlOyBvdmVyZmxvdy14OiBoaWRkZW47IH1cclxuLyogQTExeTogZW5zdXJlIGNoYXJ0IGFyaWEtbGl2ZSByZWdpb24gc3RheXMgaW52aXNpYmxlIHRvIHNpZ2h0ZWQgdXNlcnMgKi9cclxuI2NoYXJ0QXJpYUxpdmUsIC5jaGFydC1hcmlhLWxpdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgd2lkdGg6IHZhcigtLWJvcmRlci0xKSAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IHZhcigtLWJvcmRlci0xKSAhaW1wb3J0YW50O1xuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gIG1hcmdpbjogY2FsYyh2YXIoLS1zcGFjZS0xKSAqIC0xKSAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCkgIWltcG9ydGFudDtcbiAgY2xpcC1wYXRoOiBpbnNldCg1MCUpICFpbXBvcnRhbnQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG59XHJcbi5zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAtMXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICBjbGlwLXBhdGg6IGluc2V0KDUwJSk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJvcmRlcjogMDtcbn1cclxuLnNyLW9ubHktZm9jdXNhYmxlOmZvY3VzLFxuLnNyLW9ubHktZm9jdXNhYmxlOmZvY3VzLXZpc2libGUsXG4uc3Itb25seS1mb2N1c2FibGU6YWN0aXZlIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgY2xpcDogYXV0bztcbiAgY2xpcC1wYXRoOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxyXG4vKiBSZXNwb25zaXZlIGhlYWRlciBzZWFyY2ggbWluLXdpZHRoIHRvIGtlZXAgdG9wIGJhciBvbiBvbmUgcm93ICovXHJcbi8qIENhbm9uaWNhbCBicmVha3BvaW50czogbWREb3duICg8PSA1Ni4yNXJlbSksIHNtRG93biAoPD0gNDcuOTlyZW0pICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA1Ni4yNXJlbSkge1xuICA6cm9vdCB7IC0tc2VhcmNoLW1pbi13OiAxMHJlbTsgfSAgLyogMTYwcHggKi9cbn1cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQ3Ljk5cmVtKSB7XG4gIDpyb290IHsgLS1zZWFyY2gtbWluLXc6IDhyZW07IH0gICAvKiAxMjhweCAqL1xufVxyXG4vKiBGaXJlZm94ICovXHJcbi8qIFVzZSBwbGF0Zm9ybS1kZWZhdWx0IHRoaWNrbmVzcyAobm90IHRoaW4pIGZvciBjb25zaXN0ZW5jeSB3aXRoIHNpZGViYXIvY2hhdCAqL1xyXG5odG1sIHsgc2Nyb2xsYmFyLXdpZHRoOiBhdXRvOyBzY3JvbGxiYXItY29sb3I6IHZhcigtLXNjcm9sbGJhci10aHVtYikgdmFyKC0tc2Nyb2xsYmFyLXRyYWNrKTsgfVxyXG4vKiBXZWJLaXQgU2Nyb2xsYmFycyAqL1xyXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IHZhcigtLXNjcm9sbGJhci1zaXplKTsgaGVpZ2h0OiB2YXIoLS1zY3JvbGxiYXItc2l6ZSk7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyB9XHJcbjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCB2YXIoLS1pbnB1dC1iZyksIHZhcigtLXNjcm9sbGJhci10cmFjaykpOyBib3JkZXItcmFkaXVzOiAyNHB4OyBib3gtc2hhZG93OiBpbnNldCAwIDAgMC4yNXJlbSByZ2JhKDAsIDI1NSwgMTUzLCAwLjA0KSwgMCAwIDAgMC4wNjI1cmVtIHJnYmEoMCwyNTUsMTUzLDAuMDgpOyB9XHJcbjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2s6aG92ZXIgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCB2YXIoLS1pbnB1dC1iZy1mb2N1cyksIHZhcigtLXNjcm9sbGJhci10cmFjay1ob3ZlcikpOyB9XHJcbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDAsMjU1LDE1MywwLjg1KSwgcmdiYSgwLDI1NSwxNTMsMC41NSkpOyBib3JkZXItcmFkaXVzOiAyNHB4OyBib3gtc2hhZG93OiAwIDAgMC4zNzVyZW0gcmdiYSgwLDI1NSwxNTMsMC40NSksIDAgMCAwIDAuMDYyNXJlbSB2YXIoLS1zY3JvbGxiYXItdGh1bWItYm9yZGVyKSBpbnNldDsgYm9yZGVyOiAycHggc29saWQgdmFyKC0taW5wdXQtYmcpOyB9XHJcbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCB2YXIoLS1zY3JvbGxiYXItdGh1bWItaG92ZXIpLCByZ2JhKDAsMjU1LDE1MywwLjY1KSk7IGJveC1zaGFkb3c6IDAgMCAwLjVyZW0gcmdiYSgwLDI1NSwxNTMsMC42NSksIDAgMCAwIDAuMDYyNXJlbSB2YXIoLS1zY3JvbGxiYXItdGh1bWItYm9yZGVyLWhvdmVyKSBpbnNldDsgfVxyXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmFjdGl2ZSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHZhcigtLXNjcm9sbGJhci10aHVtYi1hY3RpdmUpLCByZ2JhKDAsMTgwLDEwOCwwLjY1KSk7IGJveC1zaGFkb3c6IDAgMCAwLjI1cmVtIHJnYmEoMCwyNTUsMTUzLDAuMzUpLCAwIDAgMCAwLjA2MjVyZW0gdmFyKC0tc2Nyb2xsYmFyLXRodW1iLWJvcmRlci1hY3RpdmUpIGluc2V0OyB9XHJcbjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHsgYmFja2dyb3VuZDogdmFyKC0tc2Nyb2xsYmFyLWNvcm5lcik7IH1cclxuOjotd2Via2l0LXNjcm9sbGJhcjpob3Jpem9udGFsIHsgaGVpZ2h0OiB2YXIoLS1zY3JvbGxiYXItc2l6ZSk7IH1cclxuLyogRmx1aWQgbWVkaWE6IHByZXZlbnQgb3ZlcmZsb3cgYW5kIGRpc3RvcnRpb24gKi9cclxuaW1nLCB2aWRlbywgY2FudmFzLCBzdmcsIGlmcmFtZSwgZW1iZWQsIG9iamVjdCB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxyXG5pZnJhbWUgeyBkaXNwbGF5OiBibG9jazsgfVxyXG4vKiBFbnN1cmUgbWVkaWEgd2l0aGluIGZsZXgvZ3JpZCBjYW4gc2hyaW5rIHByb3Blcmx5ICovXHJcbmltZywgdmlkZW8geyBmbGV4LXNocmluazogMTsgbWluLXdpZHRoOiAwOyB9XHJcbi8qIEdsb2JhbDogZW5mb3JjZSBubyBob3Jpem9udGFsIHNjcm9sbCBvbiBtb2JpbGUgYW5kIHByZXZlbnQgbGF5b3V0IHNoaWZ0cyAqL1xyXG4vKiBkdXBsaWNhdGUgcmVtb3ZlZDogaHRtbC9ib2R5IG92ZXJmbG93LXggaGlkZGVuIGFscmVhZHkgZGVjbGFyZWQgYWJvdmUgKi9cclxuI2FwcENvbnRhaW5lciwgI2NvbnRlbnRXcmFwLCAjcGFnZXNXcmFwLCAuYXBwLWNvbnRhaW5lciwgLmNvbnRlbnQtd3JhcCwgLnBhZ2VzLXdyYXAsIG1haW4sIHNlY3Rpb24sIGFzaWRlIHsgbWluLXdpZHRoOiAwOyB9XHJcbi8qIFNhZmUgdmlld3BvcnQgaGVpZ2h0IGhlbHBlcnMgKHByZWZlciBjbGFzc2VzIG92ZXIgaW5saW5lIHN0eWxlcykgKi9cclxuLm1pbi1oLXNjcmVlbi1zYWZlIHsgbWluLWhlaWdodDogMTAwc3ZoOyBtaW4taGVpZ2h0OiAxMDBkdmg7IH1cclxuLm1pbi1oLTFcXC8yLXNjcmVlbi1zYWZlIHsgbWluLWhlaWdodDogNTBzdmg7IG1pbi1oZWlnaHQ6IDUwZHZoOyB9XHJcbi8qIFV0aWxpdGllcyBmb3IgcmVzcG9uc2l2ZSB2aXNpYmlsaXR5OiBwcmVmZXIgVGFpbHdpbmQgcmVzcG9uc2l2ZSBjbGFzc2VzLlxuICAgTGVnYWN5IGAubW9iaWxlLW9ubHlgIC8gYC5kZXNrdG9wLW9ubHlgIHJlbW92ZWQgaW4gZmF2b3Igb2YgYGhpZGRlbmAsIGBibG9ja2AsXG4gICBhbmQgY3VzdG9tIHNjcmVlbnMgYHNtLWRvd25gL2BtZC1kb3duYCBjb25maWd1cmVkIGluIHRhaWx3aW5kLmNvbmZpZy5qcy4gKi9cclxuLyogQ29tcGFjdCBzY3JvbGxhYmxlIHJlZ2lvbnMgKi9cclxuLnNjcm9sbC10aGluLWNvbXBhY3Q6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IGNhbGModmFyKC0tc2Nyb2xsYmFyLXNpemUpIC0gMC4xMjVyZW0pOyBoZWlnaHQ6IGNhbGModmFyKC0tc2Nyb2xsYmFyLXNpemUpIC0gMC4xMjVyZW0pOyB9XHJcbmh0bWwuc2Nyb2xsLXRoaW4tY29tcGFjdCB7IHNjcm9sbGJhci13aWR0aDogdGhpbjsgfVxyXG4vKiBLZXlib2FyZCBmb2N1cyB3aXRoaW4gc2Nyb2xsIGNvbnRhaW5lcnMgKi9cclxuW3RhYmluZGV4XVtkYXRhLXNjcm9sbGFibGVdOmZvY3VzLXZpc2libGUgeyBvdXRsaW5lOiB2YXIoLS1zcGFjZS0yKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyBvdXRsaW5lLW9mZnNldDogdmFyKC0tc3BhY2UtMik7IH1cclxuLyogU2ltcGxlIHV0aWxpdGllcyAqL1xyXG4uZmxleC1jZW50ZXIgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxyXG4uZmxleC1iZXR3ZWVuIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XHJcbi5oaWRkZW4geyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cclxuLyogQ29sb3Igc2hvcnRoYW5kIGhlbHBlcnMgKi9cclxuLnRleHQtZ3JlZW4tNDAwLCAudXAgeyBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KSAhaW1wb3J0YW50OyB9XHJcbi50ZXh0LXJlZC00MDAsIC5kb3duIHsgY29sb3I6IHZhcigtLWRhbmdlci0zMDApICFpbXBvcnRhbnQ7IH1cclxuLyogRmxhc2gvYXR0ZW50aW9uIHV0aWxpdHkgKi9cclxuQGtleWZyYW1lcyBmbGFzaFB1bHNlT3V0bGluZSB7IDAlIHsgYm94LXNoYWRvdzogMCAwIDAgMCByZ2JhKHZhcigtLWJsdWUtcmdiKSwgMC42KTsgfSA0MCUgeyBib3gtc2hhZG93OiAwIDAgMCAwLjM3NXJlbSByZ2JhKHZhcigtLWJsdWUtcmdiKSwgMC4zKTsgfSA3MCUgeyBib3gtc2hhZG93OiAwIDAgMCAwLjEyNXJlbSByZ2JhKHZhcigtLWJsdWUtcmdiKSwgMC4zNSk7IH0gMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDAuMTg3NXJlbSByZ2JhKHZhcigtLWJsdWUtcmdiKSwgMC4yOCk7IH0gfVxyXG4uZmxhc2gtaGlnaGxpZ2h0IHsgYW5pbWF0aW9uOiBmbGFzaFB1bHNlT3V0bGluZSAxMjAwbXMgZWFzZS1vdXQgMTsgfVxyXG4vKiBOb3RpZmljYXRpb24gYW5pbWF0aW9ucyB1c2VkIGdsb2JhbGx5ICovXHJcbkBrZXlmcmFtZXMgZmFkZUluIHsgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1zcGFjZS0xMCkpOyB9IHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9IH1cclxuQGtleWZyYW1lcyBmYWRlT3V0IHsgZnJvbSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfSB0byB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1zcGFjZS0xMCkpOyB9IH1cclxuLyogT3ZlcnJpZGVzIGZvciBsZWdhY3kgYXJiaXRyYXJ5IHB4IHV0aWxpdHkgY2xhc3NlcyAqL1xyXG4udGV4dC1cXFsxMHB4XFxdIHsgZm9udC1zaXplOiB2YXIoLS1mb250LTEwKSAhaW1wb3J0YW50OyB9XHJcbi50ZXh0LVxcWzExcHhcXF0geyBmb250LXNpemU6IHZhcigtLWZvbnQtMTEpICFpbXBvcnRhbnQ7IH1cclxuLm1pbi13LVxcWzE4cHhcXF0geyBtaW4td2lkdGg6IHZhcigtLXNwYWNlLTkpICFpbXBvcnRhbnQ7IH1cclxuLmgtXFxbMThweFxcXSB7IGhlaWdodDogdmFyKC0tc3BhY2UtOSkgIWltcG9ydGFudDsgfVxyXG4vKiBQc2V1ZG8tY2xhc3MgaGVscGVycyAobWlycm9yIFRhaWx3aW5kLWxpa2UgcGF0dGVybnMpICovXHJcbi5ob3ZlclxcOnRleHQtYWNjZW50OmhvdmVyIHsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCkgIWltcG9ydGFudDsgfVxyXG4vKiBSZWR1Y2VkIG1vdGlvbiBwcmVmZXJlbmNlOiBtaW5pbWl6ZSBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucyBnbG9iYWxseSAqL1xyXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMDAxbXMgIWltcG9ydGFudDtcbiAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxICFpbXBvcnRhbnQ7XG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4wMDFtcyAhaW1wb3J0YW50O1xuICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0byAhaW1wb3J0YW50O1xuICB9XG59XHJcbi8qIERlcHJlY2F0ZWQ6IHByZWZlciBUYWlsd2luZCBob3ZlcjogdXRpbGl0aWVzOyByZXRhaW5lZCBoZXJlIHByZXZpb3VzbHkgZm9yIGdhcHMuICovXHJcbi8qIFJlbW92ZWQgY3VzdG9tIGhvdmVyIHV0aWxpdGllcyB0byByZWR1Y2UgZHVwbGljYXRpb24gd2l0aCBUYWlsd2luZC4gKi9cclxuLyogU2VtYW50aWMgdXRpbGl0eSBoZWxwZXJzIG1hcHBpbmcgdG9rZW5zICovXHJcbi8qIFByZWZlciBUYWlsd2luZCBjb2xvcnM7IGtlZXAgYWxpYXNlcyB3aXRob3V0ICFpbXBvcnRhbnQgZHVyaW5nIHRyYW5zaXRpb24uICovXHJcbi5iZy1hcHAgeyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iZyk7IH1cclxuLmJnLWVsZXZhdGVkIHsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmctZWxldmF0ZWQpOyB9XHJcbi5iZy1tdXRlZCB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJnLW11dGVkKTsgfVxyXG4uYmctc3VyZmFjZSB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXN1cmZhY2UpOyB9XHJcbi5iZy1hY2NlbnQgeyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyB9XHJcbi50ZXh0LWFwcCB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTsgfVxyXG4udGV4dC1zdHJvbmcgeyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XHJcbi50ZXh0LW11dGVkIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyB9XHJcbi50ZXh0LXN1YnRsZSB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRsZSk7IH1cclxuLnRleHQtZGltIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtZGltKTsgfVxyXG4udGV4dC1pbnZlcnNlIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IH1cclxuLnRleHQtYWNjZW50IHsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IH1cclxuLmJvcmRlci1hY2NlbnQgeyBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IH1cclxuLmJvcmRlci1tdXRlZCB7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxyXG4uYm9yZGVyLXN0cm9uZyB7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7IH1cclxuLyogRGl2aWRlciBoZWxwZXJzIChlbXVsYXRlIFRhaWx3aW5kIGRpdmlkZS0qKSAqL1xyXG4uZGl2aWRlLW11dGVkLmRpdmlkZS15ID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSB7IGJvcmRlci10b3Atd2lkdGg6IDFweDsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1ib3JkZXIpOyB9XHJcbi5kaXZpZGUtbXV0ZWQuZGl2aWRlLXggPiA6bm90KFtoaWRkZW5dKSB+IDpub3QoW2hpZGRlbl0pIHsgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1ib3JkZXIpOyB9XHJcbi8qIFNvZnQgYWNjZW50IHNoYWRvdyB0aGF0IGNvbXBvc2VzIHdpdGggZXhpc3Rpbmcgc2hhZG93cyAqL1xyXG4uc2hhZG93LWFjY2VudC1zb2Z0IHsgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMC43NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMSkpOyB9XHJcbi8qIFotaW5kZXggdXRpbGl0aWVzIG1hcHBlZCB0byB0b2tlbiB2YWx1ZXMgKi9cclxuLnotdG9hc3QgeyB6LWluZGV4OiB2YXIoLS16LXRvYXN0KTsgfVxyXG4uei1kcm9wZG93biB7IHotaW5kZXg6IHZhcigtLXotZHJvcGRvd24pOyB9XHJcbi56LW1vZGFsIHsgei1pbmRleDogdmFyKC0tei1tb2RhbCk7IH1cclxuLnotYmFja2Ryb3AgeyB6LWluZGV4OiB2YXIoLS16LWJhY2tkcm9wKTsgfVxyXG4uei1kcmF3ZXIgeyB6LWluZGV4OiB2YXIoLS16LWRyYXdlcik7IH1cclxuLnotbWVudSB7IHotaW5kZXg6IHZhcigtLXotbWVudSk7IH1cclxuLnotcG9wb3ZlciB7IHotaW5kZXg6IHZhcigtLXotcG9wb3Zlcik7IH1cclxuLnotbGlnaHRib3ggeyB6LWluZGV4OiB2YXIoLS16LWxpZ2h0Ym94KTsgfVxyXG4uei1zdGlja3kgeyB6LWluZGV4OiB2YXIoLS16LXN0aWNreSk7IH1cclxuLypcbiAgdHlwb2dyYXBoeS5jc3NcbiAgUHVycG9zZTogVHlwZS1yZWxhdGVkIHJ1bGVzOiBmb250cywgdGV4dCBjb2xvcnMsIGhlYWRpbmdzLCBwYXJhZ3JhcGhzLCBsaW5rcy5cbiAgTm90ZXM6XG4gIC0gRG8gbm90IHJlbmFtZSBjbGFzc2VzL2lkczsgcHJlc2VydmUgc3BlY2lmaWNpdHkuXG4qL1xyXG4vKiBCb2R5IGZvbnQgYW5kIHNtb290aGluZyAqL1xyXG5ib2R5IHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcicsIHNhbnMtc2VyaWY7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgZm9udC1zaXplOiBjbGFtcCh2YXIoLS1mb250LWJvZHktbWluKSwgdmFyKC0tZm9udC1ib2R5LWJhc2UpICsgdmFyKC0tZm9udC1ib2R5LXNsb3BlKSwgdmFyKC0tZm9udC1ib2R5LW1heCkpO1xufVxyXG4vKlxuICBsYXlvdXQuY3NzXG4gIFB1cnBvc2U6IEdsb2JhbCBsYXlvdXQgcHJpbWl0aXZlcyBhbmQgcGFnZSBzdHJ1Y3R1cmUuIEluY2x1ZGVzIGNvbnRhaW5lcnMsIHNlY3Rpb25zLCBhbmQgcGFnZSB3cmFwcGVycy5cbiAgTm90ZXM6XG4gIC0gTW9iaWxlLWZpcnN0OiBiYXNlIHN0eWxlcyB0YXJnZXQgc21hbGwgc2NyZWVuczsgZW5oYW5jZSB2aWEgbWluLXdpZHRoIGJyZWFrcG9pbnRzLlxuICAtIFN0cnVjdHVyZS1vbmx5IHJ1bGVzIChkaXNwbGF5LCBncmlkL2ZsZXgsIHNpemluZywgc3BhY2luZywgYm9yZGVycykgZ28gaGVyZS5cbiAgLSBQcmVzZXJ2ZSBleGlzdGluZyBjbGFzcyBhbmQgSUQgbmFtZXMgdG8gYXZvaWQgSFRNTCBjaGFuZ2VzLlxuKi9cclxuLyogQmFzZSByZXNldCBoYW5kbGVkIGJ5IFRhaWx3aW5kIHByZWZsaWdodDsgYXZvaWQgZHVwbGljYXRpbmcgdW5pdmVyc2FsIHJlc2V0cyAqL1xyXG4vKiBBcHAgc2hlbGwgbGF5b3V0IChtb2JpbGUtZmlyc3QpICovXHJcbi8qIENvbnZlcnQgbWFpbiBmcmFtZSB0byBDU1MgR3JpZCB1c2luZyBleGlzdGluZyBJRHMgdG8gYXZvaWQgSFRNTCBjaGFuZ2VzLiAqL1xyXG4jYXBwQ29udGFpbmVyIHsgaGVpZ2h0OiBhdXRvOyBtaW4taGVpZ2h0OiB2YXIoLS12aC1mdWxsLXNhZmUpOyBtaW4taGVpZ2h0OiB2YXIoLS12aC1mdWxsLWR5bmFtaWMpOyB9XHJcbiNjb250ZW50V3JhcCwgLmNvbnRlbnQtd3JhcCB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyBncmlkLXRlbXBsYXRlLWFyZWFzOiAnbWFpbic7IGdhcDogMDsgbWluLWhlaWdodDogMDsgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlIGJvdGgtZWRnZXM7IH1cclxuI3BhZ2VzV3JhcCwgLnBhZ2VzLXdyYXAgeyBkaXNwbGF5OiBibG9jazsgbWluLWhlaWdodDogMDsgZ3JpZC1hcmVhOiBtYWluOyBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGUgYm90aC1lZGdlczsgfVxyXG4vKiBQcmltYXJ5IHNlY3Rpb25zIChtb2JpbGUgZGVmYXVsdHMpICovXHJcbi5zdG9jay1zZWN0aW9uIHsgZ3JpZC1hcmVhOiBzdG9jazsgZGlzcGxheTogbm9uZTsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctZWxldmF0ZWQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0xMCk7IGJvcmRlci1yaWdodDogdmFyKC0tc3BhY2UtMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBhdm9pZCB1bm5lY2Vzc2FyeSBsYXllcmluZyAqLyBvdmVyZmxvdy15OiBhdXRvOyBtaW4td2lkdGg6IHZhcigtLXN0b2NrLW1pbi13KTsgd2lkdGg6IGF1dG87IH1cclxuLmNoYXQtc2VjdGlvbiB7IGdyaWQtYXJlYTogY2hhdDsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctZWxldmF0ZWQpOyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBib3JkZXItcmlnaHQ6IDA7IG1pbi13aWR0aDogMDsgd2lkdGg6IGF1dG87IH1cclxuLyogV2F0Y2hsaXN0IGFzaWRlIChkZWZhdWx0IGhpZGRlbiBvbiBtb2JpbGUpLiBEbyBub3Qgc2hvdyBkaXZpZGVyIHVubGVzcyB0aGUgbGF5b3V0IG9wdHMgaW4uICovXHJcbi53YXRjaGxpc3Qtc2VjdGlvbiB7IGdyaWQtYXJlYTogd2F0Y2g7IGRpc3BsYXk6IG5vbmU7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgYm9yZGVyLWxlZnQ6IDA7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTIpOyBvdmVyZmxvdy15OiBhdXRvOyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IHZhcigtLXNwYWNlLTMpOyBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGUgYm90aC1lZGdlczsgfVxyXG4vKiBBY3RpdmF0ZSB0aGUgZGl2aWRlciBvbmx5IHdoZW4gdGhlIG1haW4gY2hhdGJvYXJkIGxheW91dCBpcyBhY3RpdmUgKi9cclxuI2NvbnRlbnRXcmFwLndpdGgtd2F0Y2hsaXN0IC53YXRjaGxpc3Qtc2VjdGlvbiB7IGJvcmRlci1sZWZ0OiB2YXIoLS1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyB9XHJcbi8qIFBhZ2UgY29udGFpbmVycyAoZ2VuZXJpYyBuZW9uIGZyYW1lKSAqL1xyXG4ucGFnZS1jb250YWluZXIsIC5wYWdlLWNvbnRhaW5lci13aWRlIHsgYm9yZGVyOiB2YXIoLS1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteHMpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTsgfVxyXG4vKiBTY3JvbGxhYmxlIHBhZ2Ugd3JhcHBlcnMgKi9cclxuLnBhZ2UtY29udGFpbmVyIHsgcGFkZGluZzogdmFyKC0tc3BhY2UtMTIpOyBoZWlnaHQ6IDEwMCU7IG92ZXJmbG93LXk6IGF1dG87IH1cclxuLnBhZ2UtY29udGFpbmVyLXdpZGUgeyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0xMCk7IGhlaWdodDogMTAwJTsgb3ZlcmZsb3cteTogYXV0bzsgbWF4LXdpZHRoOiB2YXIoLS1jb250YWluZXItd2lkZS1tYXgpOyBtYXJnaW46IDAgYXV0bzsgfVxyXG4jcHJvZmlsZVBhZ2UucGFnZS1jb250YWluZXItd2lkZSwgLnByb2ZpbGUtcGFnZS5wYWdlLWNvbnRhaW5lci13aWRlIHsgcGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtOCk7IG1heC13aWR0aDogbm9uZTsgbWFyZ2luOiAwOyB9XHJcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgeyBwYWRkaW5nOiAwOyBtYXgtd2lkdGg6IG5vbmU7IG1hcmdpbjogMDsgfVxyXG4vKiBSZW1vdmUgcGFkZGluZyB0aGF0IGludGVyZmVyZXMgd2l0aCBmbGV4IGxheW91dCAqL1xyXG4jc2VjQm90UGFnZS5wYWdlLWNvbnRhaW5lci13aWRlIHsgbWF4LXdpZHRoOiBub25lOyBtYXJnaW46IDA7IHdpZHRoOiAxMDAlOyB9XHJcbi8qIENvbnRlbnQtdmlzaWJpbGl0eSBoaW50cyB0byByZWR1Y2UgaW5pdGlhbCByZW5kZXJpbmcgY29zdCBmb3IgYmVsb3ctdGhlLWZvbGQgc2VjdGlvbnMgKi9cclxuI3dhdGNobGlzdFNlY3Rpb24sXG4jZGlyZWN0TWVzc2FnZXNQYWdlLFxuI3Byb2ZpbGVQYWdlLFxuI3NlY0JvdFBhZ2UsXG4jYm9va21hcmtzUGFnZSxcbi5wYWdlLWNvbnRhaW5lcixcbi5wYWdlLWNvbnRhaW5lci13aWRlIHtcbiAgY29udGVudC12aXNpYmlsaXR5OiBhdXRvO1xuICBjb250YWluLWludHJpbnNpYy1zaXplOiA2MDBweCA4MDBweDsgLyogcmVhc29uYWJsZSBmYWxsYmFjayB0byBhdm9pZCBqdW1weSBsYXlvdXQgKi9cbn1cclxuLyogU2lkZWJhciB3YXRjaGxpc3Qgc2hvdWxkIHVzZSBpdHMgZXhwbGljaXQgZ3JpZCB3aWR0aCBpbW1lZGlhdGVseSB0byBhdm9pZFxuICAgb2ZmLWNhbnZhcyBlbXB0eSBzdGF0ZSBvbiBmaXJzdCBwYWludC4gKi9cclxuI3dhdGNobGlzdFNlY3Rpb24geyBjb250ZW50LXZpc2liaWxpdHk6IHZpc2libGU7IGNvbnRhaW4taW50cmluc2ljLXNpemU6IGF1dG87IH1cclxuLyogRGlyZWN0IE1lc3NhZ2VzIHBhZ2U6IHBhcnRpY2lwYXRlIGluIG5vcm1hbCBhcHAgZmxvdyAobm8gdmlld3BvcnQgYmluZGluZykgKi9cclxuI2RpcmVjdE1lc3NhZ2VzUGFnZSB7XG4gIC8qIExpdmUgaW5zaWRlICNjb250ZW50V3JhcC8jcGFnZXNXcmFwIGxpa2Ugb3RoZXIgcGFnZXMgKi9cbiAgcG9zaXRpb246IHN0YXRpYztcbiAgLyogVHdvLWNvbHVtbiAzMC83MCBncmlkIHRoYXQgZmlsbHMgdGhlIHBhZ2UgKi9cbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAzMCUgNzAlO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIGdhcDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIC8qIFZlcnRpY2FsbHkgYmluZCB0aGUgcGFnZSB0byB0aGUgdmlld3BvcnQgYXJlYSB1bmRlciB0aGUgaGVhZGVyICovXG4gIGhlaWdodDogdmFyKC0tdmgtcGFuZS1zYWZlKTtcbiAgaGVpZ2h0OiB2YXIoLS12aC1wYW5lLWR5bmFtaWMpO1xuICBtYXgtaGVpZ2h0OiB2YXIoLS12aC1wYW5lLXNhZmUpO1xuICBtYXgtaGVpZ2h0OiB2YXIoLS12aC1wYW5lLWR5bmFtaWMpO1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IDA7IC8qIGVuYWJsZSBpbm5lciBzY3JvbGwgcmVnaW9ucyAqL1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAvKiBBY3QgYXMgYSBjb250YWluZXIgZm9yIGxheW91dCBxdWVyaWVzIGlmIG5lZWRlZCAqL1xuICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7XG4gIC8qIFJlbmRlciBpbW1lZGlhdGVseSB0byBhdm9pZCBtZWFzdXJpbmcgd2l0aCBmYWxsYmFjayBpbnRyaW5zaWMgc2l6ZSAqL1xuICBjb250ZW50LXZpc2liaWxpdHk6IHZpc2libGU7XG4gIGNvbnRhaW4taW50cmluc2ljLXNpemU6IG5vbmU7XG59XHJcbi8qIEZsYXR0ZW4gYW55IGludGVybmFsIHdyYXBwZXIgc28gZ3JpZCBpdGVtcyBhcmUgY29sdW1ucyBkaXJlY3RseSAqL1xyXG4jZGlyZWN0TWVzc2FnZXNQYWdlID4gLmRtLWxheW91dCB7IGRpc3BsYXk6IGNvbnRlbnRzOyB9XHJcbi8qIEFsc28gaGFuZGxlIGJ1aWxkcyB3aGVyZSB0aGUgd3JhcHBlciBsYWNrcyB0aGUgLmRtLWxheW91dCBjbGFzcyAqL1xyXG4jZGlyZWN0TWVzc2FnZXNQYWdlID4gZGl2Om5vdChbaWRdKSB7IGRpc3BsYXk6IGNvbnRlbnRzOyB9XHJcbi8qIFByb2ZpbGUgcGFnZSBmdWxsIHdpZHRoIG92ZXJyaWRlICovXHJcbiNwcm9maWxlUGFnZS5wYWdlLWNvbnRhaW5lci13aWRlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogbm9uZTtcbn1cclxuLyogKHJldmVydGVkOiBkbyBub3QgZm9yY2Ugdmlld3BvcnQgYmluZGluZyBmb3IgcHJvZmlsZSBwYWdlIG9uIGRlc2t0b3ApICovXHJcbi8qIFF1aWNrIGdyaWRzICovXHJcbi5kZXRhaWwtYm94LWdyaWQgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogdmFyKC0tc3BhY2UtNCk7IG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpOyB9XHJcbi5kZXRhaWwtYm94LWdyaWQgPiAqIHsgZmxleDogMSAxIHZhcigtLWRldGFpbC1ib3gtbWluLXcpOyBtaW4td2lkdGg6IHZhcigtLWRldGFpbC1ib3gtbWluLXcpOyB9XHJcbi8qIFJlc3BvbnNpdmUgbWV0cmljcyBncmlkIHVzaW5nIENTUyBHcmlkICovXHJcbi5tZXRyaWNzLWdyaWQgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDhyZW0sIDFmcikpOyBnYXA6IHZhcigtLXNwYWNlLTMpOyB3aWR0aDogMTAwJTsgYWxpZ24taXRlbXM6IHN0cmV0Y2g7IH1cclxuLyogVHdvLWNvbHVtbiByZWdpb24gaW4gc3RvY2sgaGVhZGVyICovXHJcbi5tYWluLWNvbnRlbnQtYXJlYSB7IGRpc3BsYXk6IGZsZXg7IGdhcDogdmFyKC0tc3BhY2UtMTIpOyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxyXG4vKiBJbm5lciBtYWluIGxheW91dDogc3RvY2sgfCBjaGF0IGdyaWQgKG1vYmlsZS1maXJzdCkgKi9cclxuI21haW5QYWdlIHsgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplOyB9XHJcbiNtYWluUGFnZSA+IC5tYWluLWdyaWQgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgZ3JpZC10ZW1wbGF0ZS1hcmVhczogJ2NoYXQnOyBnYXA6IDA7IG1pbi1oZWlnaHQ6IDA7IH1cclxuLyogQ29udGFpbmVyIHF1ZXJ5OiBzd2l0Y2ggdG8gdHdvIGNvbHVtbnMgd2hlbiB0aGUgbWFpbiBwYWdlIGNvbnRhaW5lciBpcyB3aWRlIGVub3VnaC5cbiAgIFJhdGlvbmFsZTogcHJlZmVyIGNvbnRhaW5lciBxdWVyaWVzIHdoZW4gc3VwcG9ydGVkIGZvciBjb21wb25lbnQtc2NvcGVkXG4gICByZXNwb25zaXZlbmVzczsgcmV0YWluIEBtZWRpYSBmYWxsYmFjayBiZWxvdyBmb3IgYnJvYWRlciBjb21wYXRpYmlsaXR5LiAqL1xyXG5AY29udGFpbmVyIChtaW4td2lkdGg6IDQ4cmVtKSB7XG4gICNtYWluUGFnZSA+IC5tYWluLWdyaWQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KHZhcigtLXN0b2NrLW1pbi13KSwgMC44ZnIpIG1pbm1heCgwLCAxZnIpO1xuICAgIGdyaWQtdGVtcGxhdGUtYXJlYXM6ICdzdG9jayBjaGF0JztcbiAgfVxufVxyXG5AbWVkaWEgKG1pbi13aWR0aDogNDhyZW0pIHtcbiAgI21haW5QYWdlID4gLm1haW4tZ3JpZCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgodmFyKC0tc3RvY2stbWluLXcpLCAwLjhmcikgbWlubWF4KDAsIDFmcik7XG4gICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogJ3N0b2NrIGNoYXQnO1xuICB9XG59XHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgRW5oYW5jZW1lbnRzIHZpYSBtaW4td2lkdGggYnJlYWtwb2ludHNcbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4vKiBUYWJsZXQ6IHR3byBjb2x1bW5zIChzdG9jayB+NDAlIC8gY2hhdCB+NjAlKSwgd2F0Y2hsaXN0IGhpZGRlbiAqL1xyXG5AbWVkaWEgKG1pbi13aWR0aDogNDhyZW0pIHtcbiAgLyogTGVhdmUgaW5uZXIgbGF5b3V0IHRvIHRoZSBleGlzdGluZyBmbGV4IHdyYXBwZXIgaW5zaWRlICNtYWluUGFnZSAqL1xuICAuc3RvY2stc2VjdGlvbiB7IGRpc3BsYXk6IGZsZXg7IH1cbiAgLmNoYXQtc2VjdGlvbiB7IGJvcmRlci1yaWdodDogMDsgfVxuICAud2F0Y2hsaXN0LXNlY3Rpb24geyBkaXNwbGF5OiBub25lOyB9XG4gIC5tYWluLWNvbnRlbnQtYXJlYSB7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogdmFyKC0tc3BhY2UtOCk7IH1cbn1cclxuLyogRGVza3RvcDogc2hvdyB3YXRjaGxpc3QgYW5kIHJlYmFsYW5jZSBjb2x1bW5zIG9ubHkgd2hlbiByZXF1ZXN0ZWQgKi9cclxuQG1lZGlhIChtaW4td2lkdGg6IDY0LjA2MjVyZW0pIHtcbiAgI2NvbnRlbnRXcmFwLndpdGgtd2F0Y2hsaXN0IHtcbiAgICAvKiBBbGxvdyB3YXRjaGxpc3QgY29sdW1uIHRvIGdyb3cgdG8gaXRzIGNvbnRlbnQgd2hlbiBuZWVkZWQgKi9cbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciBtaW5tYXgodmFyKC0td2F0Y2hsaXN0LXctc20pLCBtYXgtY29udGVudCk7XG4gICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogJ21haW4gd2F0Y2gnO1xuICB9XG5cbiAgI2NvbnRlbnRXcmFwOm5vdCgud2l0aC13YXRjaGxpc3QpIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbiAgICBncmlkLXRlbXBsYXRlLWFyZWFzOiAnbWFpbic7XG4gIH1cblxuICAvKiBMZWF2ZSBpbm5lciBsYXlvdXQgdG8gdGhlIGV4aXN0aW5nIGZsZXggd3JhcHBlciBpbnNpZGUgI21haW5QYWdlICovXG4gIC5jaGF0LXNlY3Rpb24geyBib3JkZXItcmlnaHQ6IHZhcigtLXNwYWNlLTEpIHNvbGlkIHZhcigtLWNvbG9yLWFjY2VudCk7IH1cbiAgLyogTGV0IHRoZSBncmlkIHRyYWNrIHNpemUgdGhlIHNpZGViYXI7IGVuc3VyZSBhIHNlbnNpYmxlIGZsb29yICovXG4gICNjb250ZW50V3JhcC53aXRoLXdhdGNobGlzdCAud2F0Y2hsaXN0LXNlY3Rpb24geyBkaXNwbGF5OiBmbGV4OyB3aWR0aDogYXV0bzsgbWluLXdpZHRoOiB2YXIoLS13YXRjaGxpc3Qtdy1zbSk7IH1cbn1cclxuLyogTGFyZ2UgZGVza3RvcHM6IHdpZGVuIHdhdGNobGlzdCAqL1xyXG5AbWVkaWEgKG1pbi13aWR0aDogMTAwcmVtKSB7XG4gIC8qIFByZWZlciB3aWRlciBmbG9vciBidXQgc3RpbGwgYWxsb3cgY29udGVudCB0byBkaWN0YXRlIG1heCBhcyBuZWVkZWQgKi9cbiAgI2NvbnRlbnRXcmFwLndpdGgtd2F0Y2hsaXN0IHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciBtaW5tYXgodmFyKC0td2F0Y2hsaXN0LXctbGcpLCBtYXgtY29udGVudCk7XG4gIH1cbn1cclxuLyogTW9iaWxlIHZpZXcgdG9nZ2xlOiBzaG93IHN0b2NrIGRldGFpbHMgcGFuZWwgaW5zdGVhZCBvZiBjaGF0IHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgKi9cclxuLyogQXBwbGllcyBvbmx5IG9uIG5hcnJvdyBzY3JlZW5zIChkZWZhdWx0IG1vYmlsZSBsYXlvdXQpICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAvKiBXaGVuIHRoZSBtYWluIGNvbnRhaW5lciBzaWduYWxzIHN0b2NrIHZpZXcsIHJldmVhbCBzdG9jayBwYW5lbCBhdCBmdWxsIHdpZHRoICovXG4gICNtYWluUGFnZS52aWV3LXN0b2NrIC5zdG9jay1zZWN0aW9uIHsgZGlzcGxheTogZmxleDsgd2lkdGg6IDEwMCU7IG1pbi13aWR0aDogMDsgYm9yZGVyLXJpZ2h0OiAwOyB9XG4gICNtYWluUGFnZS52aWV3LXN0b2NrIC5jaGF0LXNlY3Rpb24geyBkaXNwbGF5OiBub25lOyB9XG59XHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgTGF5b3V0IHByaW1pdGl2ZXNcbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4vKiBWZXJ0aWNhbCBzdGFjazogZXZlbmx5IHNwYWNlZCBjb2x1bW4gbGF5b3V0ICovXHJcbi5zdGFjayB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogdmFyKC0tc3BhY2UtNCk7IH1cclxuLyogQ2x1c3Rlcjogcm93IGxheW91dCB3aXRoIHdyYXBwaW5nIGFuZCBnYXBzICovXHJcbi5jbHVzdGVyIHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IHZhcigtLXNwYWNlLTQpOyB9XHJcbi8qIFNwbGl0OiB0d28tY29sdW1uIG1pbm1heCB3aXRoIGdhcCAqL1xyXG4uc3BsaXQgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIG1pbm1heCgwLCAxZnIpOyBnYXA6IHZhcigtLXNwYWNlLTYpOyB9XHJcbi8qIFNpZGViYXI6IGNvbnRlbnQgYXJlYSB3aXRoIGZpeGVkLXdpZHRoIGFzaWRlIG9uIHRoZSBlbmQgKi9cclxuLnNpZGViYXIgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIGF1dG87IGdhcDogdmFyKC0tc3BhY2UtNik7IH1cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICBWaWV3cG9ydCBIZWlnaHQgTWFuYWdlbWVudCBmb3IgU2VjdGlvbnNcbiAgIEJpbmQgcHJpbWFyeSBzZWN0aW9ucyB0byB0aGUgdmlld3BvcnQgYXJlYSB1bmRlciB0aGUgaGVhZGVyIHJvdy5cbiAgIEhpZ2gtbGV2ZWwgY29udGFpbmVyIHNpemluZyBiZWxvbmdzIGhlcmUgdG8gYXZvaWQgZHVwbGljYXRpb24uXG4gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuQG1lZGlhIChtaW4td2lkdGg6IDQ4cmVtKSB7XG4gIDppcyguY2hhdC1zZWN0aW9uLCAud2F0Y2hsaXN0LXNlY3Rpb24sIC5zdG9jay1zZWN0aW9uKSB7XG4gICAgaGVpZ2h0OiB2YXIoLS12aC1wYW5lLXNhZmUpO1xuICAgIGhlaWdodDogdmFyKC0tdmgtcGFuZS1keW5hbWljKTtcbiAgICBtYXgtaGVpZ2h0OiB2YXIoLS12aC1wYW5lLXNhZmUpO1xuICAgIG1heC1oZWlnaHQ6IHZhcigtLXZoLXBhbmUtZHluYW1pYyk7XG4gIH1cbiAgLmNoYXQtc2VjdGlvbiB7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgLndhdGNobGlzdC1zZWN0aW9uIHtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICAvKiBSZXNlcnZlIHNwYWNlIGZvciBzY3JvbGxiYXJzIG9uIGJvdGggZWRnZXMgZm9yIGNvbnNpc3RlbnQgaW5saW5lLWVuZCBtZWFzdXJlbWVudHMgKi9cbiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGUgYm90aC1lZGdlcztcbiAgfVxuICAuc3RvY2stc2VjdGlvbiB7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlO1xuICB9XG59XHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAuY2hhdC1zZWN0aW9uLFxuICAuc3RvY2stc2VjdGlvbiB7XG4gICAgLyogQmluZCBrZXkgcGFuZXMgdG8gdGhlIHZpZXdwb3J0IGFyZWEgdW5kZXIgdGhlIGhlYWRlciBvbiBtb2JpbGUgdG9vLiAqL1xuICAgIGhlaWdodDogdmFyKC0tdmgtcGFuZS1zYWZlKTtcbiAgICBoZWlnaHQ6IHZhcigtLXZoLXBhbmUtZHluYW1pYyk7XG4gICAgbWF4LWhlaWdodDogdmFyKC0tdmgtcGFuZS1zYWZlKTtcbiAgICBtYXgtaGVpZ2h0OiB2YXIoLS12aC1wYW5lLWR5bmFtaWMpO1xuICB9XG4gIC5jaGF0LXNlY3Rpb24geyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gIC53YXRjaGxpc3Qtc2VjdGlvbiB7XG4gICAgbWF4LWhlaWdodDogdmFyKC0tdmgtcGFuZS1zYWZlKTtcbiAgICBtYXgtaGVpZ2h0OiB2YXIoLS12aC1wYW5lLWR5bmFtaWMpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlO1xuICB9XG4gIC5zdG9jay1zZWN0aW9uIHtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7XG4gIH1cblxuICAvKiBFbnN1cmUgdGhlIHN0b2NrIGluZm8gY29udGFpbmVyIHBhcnRpY2lwYXRlcyBmdWxseSBpbiB0aGUgY29sdW1uIGxheW91dCAqL1xuICAjbWFpblBhZ2Uudmlldy1zdG9jayAjc3RvY2tJbmZvQ29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gIH1cbiAgI21haW5QYWdlLnZpZXctc3RvY2sgI3N0b2NrTWV0cmljcyB7IGZsZXg6IDAgMCBhdXRvOyB9XG4gICNtYWluUGFnZS52aWV3LXN0b2NrIC5jaGFydC1jb250YWluZXIgeyBmbGV4OiAxIDEgYXV0bzsgbWluLWhlaWdodDogMDsgfVxuICAjbWFpblBhZ2Uudmlldy1zdG9jayAuY2hhcnQtdGltZWxpbmUtYnV0dG9ucyB7IGZsZXg6IDAgMCBhdXRvOyB9XG59XHJcbi8qXHJcbiAgYnV0dG9ucy5jc3NcclxuICBQdXJwb3NlOiBBbGwgYnV0dG9uIHN0eWxlcyBpbmNsdWRpbmcgZ2VuZXJpYyAuYnRuIGFuZCBjdXN0b20gYnV0dG9uLWxpa2UgY29tcG9uZW50cy5cclxuICBNb2JpbGUtZmlyc3QsIHVzaW5nIHJlbGF0aXZlIHVuaXRzIGFuZCBmbHVpZC1mcmllbmRseSBwYWRkaW5ncy5cclxuKi9cclxuLyogR2VuZXJpYyBidXR0b25zICovXHJcbi5idG4geyBwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS0xMCk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7IGZvbnQtd2VpZ2h0OiA3MDA7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxNjBtcyBlYXNlOyBib3JkZXI6IG5vbmU7IH1cclxuLmJ0bi1wcmltYXJ5IHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IH1cclxuLmJ0bi1wcmltYXJ5OmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50LWhvdmVyKTsgfVxyXG4uYnRuLXNlY29uZGFyeSB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UtaG92ZXIpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XHJcbi5idG4tc2Vjb25kYXJ5OmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZS1ob3Zlcik7IH1cclxuLmJ0bi1kYW5nZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1kYW5nZXIpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XHJcbi5idG4tZGFuZ2VyOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZGFuZ2VyLWRlZXApOyB9XHJcbi5idG4tb3V0bGluZSB7IGJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7IGNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCk7IGJvcmRlcjp2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTsgZm9udC13ZWlnaHQ6NzAwOyBwYWRkaW5nOnZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTcpOyBib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCk7IH1cclxuLmJ0bi1vdXRsaW5lOmhvdmVyIHsgYmFja2dyb3VuZDp2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjp2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpOyB9XHJcbi5idG4tb3V0bGluZVtkaXNhYmxlZF0sIC5idG5bZGlzYWJsZWRdLCBidXR0b25bZGlzYWJsZWRdIHsgb3BhY2l0eTogMC42OyBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9XHJcbi8qIFNoYXJlZCBrZXlib2FyZCBmb2N1cyBvdXRsaW5lIGZvciBidXR0b24tbGlrZSBjb250cm9scyAqL1xyXG46d2hlcmUoXG4gIC5idG4sXG4gIC5idG4tcHJpbWFyeSxcbiAgLmJ0bi1zZWNvbmRhcnksXG4gIC5idG4tZGFuZ2VyLFxuICAuYnRuLW91dGxpbmUsXG4gIC5idG4tbmF2LFxuICAuYnRuLWdvLFxuICAuYWN0aW9uLWJ0bixcbiAgLmJ0bi1yZXBvcnQtYnVnLFxuICAuYnRuLXByb2ZpbGUtcGFnZSxcbiAgI3Byb2ZpbGVQYWdlQnRuLFxuICAucHJvZmlsZS1idXR0b24sXG4gIC5zZWFyY2gtYnRuLFxuICAuc2VhcmNoLXRvZ2dsZS1idG4sXG4gIC5idG4tZ29vZ2xlLFxuICAuY2hhcnQtYWN0aW9uLWJ0bixcbiAgLmNoYXJ0LWFjdGlvbi1idG4taWNvbixcbiAgLnRpbWVsaW5lLWJ0bixcbiAgLmJ0bi1hZGQtdG8td2F0Y2hsaXN0LFxuICAjYWRkVG9XYXRjaGxpc3RCdG4sXG4gIC5idG4tcmVmcmVzaC1zdG9jay1wcmljZSxcbiAgI3JlZnJlc2gtc3RvY2stcHJpY2UsXG4gIC5ob21lLXNlYXJjaC1idG4sXG4gIC51ay1maWxpbmdzLXNlYXJjaC1idG4sXG4gIC5kZi1jbGVhci1idG4sXG4gIC5kYW5nZXItYWN0aW9uLWJ0blxuKTpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZy1zaXplLCAwLjEyNXJlbSkgc29saWQgdmFyKC0tZm9jdXMtcmluZy1jb2xvciwgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjgyKSk7XG4gIG91dGxpbmUtb2Zmc2V0OiB2YXIoLS1mb2N1cy1yaW5nLW9mZnNldCwgMC4xMjVyZW0pO1xufVxyXG4uZGFuZ2VyLWFjdGlvbi1idG46Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmUtY29sb3I6IHZhcigtLWZvY3VzLXJpbmctY29sb3ItZGFuZ2VyLCByZ2JhKHZhcigtLWRhbmdlci1yZ2IpLCAwLjgpKTsgfVxyXG4uYnRuLXJlcG9ydC1idWc6Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmUtY29sb3I6IHZhcigtLWZvY3VzLXJpbmctY29sb3Itd2FybiwgcmdiYSh2YXIoLS13YXJuaW5nLXJnYiksIDAuNzUpKTsgfVxyXG4vKiBHZW5lcmljIGJvcmRlcmVkIGFjdGlvbiBidXR0b24gKi9cclxuLmFjdGlvbi1idG4geyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiB2YXIoLS1mb250LTEyKTsgZm9udC13ZWlnaHQ6IDcwMDsgcGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtNSk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14cyk7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMTYwbXMgZWFzZSwgY29sb3IgMTYwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDE2MG1zIGVhc2UsIHRyYW5zZm9ybSAxNjBtcyBlYXNlLCBib3gtc2hhZG93IDE2MG1zIGVhc2U7IH1cclxuLmFjdGlvbi1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgfVxyXG4vKiBDdXN0b20gbmF2aWdhdGlvbiBidXR0b24gKi9cclxuLmJ0bi1uYXYge1xyXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xyXG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWFjY2VudCk7XHJcbiAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS02KTtcclxuICBsaW5lLWhlaWdodDogMTtcclxuICBoZWlnaHQ6IGF1dG87XHJcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcclxuICBmb250LXNpemU6IHZhcigtLWZvbnQtMTQpO1xyXG59XHJcbi5idG4tbmF2OmhvdmVyIHtcclxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xyXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpO1xyXG59XHJcbi8qIFN1cHByZXNzIGhvdmVyIGdsb3cgdGVtcG9yYXJpbHkgYWZ0ZXIgbmF2aWdhdGlvbiAqL1xyXG5ib2R5Lm5vLWhvdmVyIC5idG4tbmF2OmhvdmVyIHtcclxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcclxufVxyXG4vKiBHbyBidXR0b246IG9ubHkgZmxhc2ggZ3JlZW4gb24gYWN0aXZlIHByZXNzOyBkb24ndCBzdGF5IGdyZWVuIG9uIGhvdmVyL2ZvY3VzICovXHJcbi5idG4tZ286aG92ZXIsXG4uYnRuLWdvOmZvY3VzLFxuLmJ0bi1nbzpmb2N1cy12aXNpYmxlIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xufVxyXG4uYnRuLWdvOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpO1xufVxyXG4vKiBNb2JpbGU6IG1ha2UgdGhlIHRvcC1yaWdodCBHbyBidXR0b24gbGFyZ2VyIGFuZCBlYXNpZXIgdG8gdGFwICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA1Ni4yNXJlbSkge1xuICAuYnRuLWdvIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS03KSB2YXIoLS1zcGFjZS0xMCk7XG4gICAgZm9udC1zaXplOiBjYWxjKHZhcigtLWZvbnQtMTQpICogMS4xNSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgfVxufVxyXG4vKiBNb2JpbGU6IHByZXZlbnQgc3RpY2t5IGhvdmVyIGFuZCB1c2UgZ3JlZW4gb25seSB3aGlsZSBhY3RpdmVseSBwcmVzc2luZ1xyXG4gICBBcHBsaWVzIGJyb2FkbHkgdG8gbWFqb3IgYnV0dG9uIHZhcmlhbnRzIGFjcm9zcyB0aGUgYXBwLiBEZXNrdG9wIHJlbWFpbnMgdW5jaGFuZ2VkLiAqL1xyXG5AbWVkaWEgKGhvdmVyOiBub25lKSBhbmQgKHBvaW50ZXI6IGNvYXJzZSkge1xyXG4gIC8qIE5ldXRyYWxpemUgaG92ZXIvZm9jdXMgc3R5bGluZyB0aGF0IHdvdWxkIG90aGVyd2lzZSBzdGljayBvbiB0b3VjaCAodGFyZ2V0IG5vbi1wcmltYXJ5IHZhcmlhbnRzKSAqL1xyXG4gIC5idG4tbmF2OmhvdmVyLFxyXG4gIC5idG4tbmF2OmZvY3VzLFxyXG4gIC5idG4tbmF2OmZvY3VzLXZpc2libGUsXHJcbiAgLmFjdGlvbi1idG46aG92ZXIsXHJcbiAgLmJ0bi1vdXRsaW5lOmhvdmVyLFxyXG4gIC5jaGFydC1hY3Rpb24tYnRuOmhvdmVyLFxyXG4gIC5jaGFydC1hY3Rpb24tYnRuLWljb246aG92ZXIsXHJcbiAgLnNlYXJjaC1idG46aG92ZXIsXHJcbiAgLnNlYXJjaC10b2dnbGUtYnRuOmhvdmVyLFxyXG4gIC51ay1maWxpbmdzLXNlYXJjaC1idG46aG92ZXIsXHJcbiAgLmRmLWNsZWFyLWJ0bjpob3ZlcixcclxuICAuYnRuLXJlcG9ydC1idWc6aG92ZXIsXHJcbiAgLmhvbWUtc2VhcmNoLWJ0bjpob3ZlcixcclxuICAudGltZWxpbmUtYnRuOmhvdmVyIHtcclxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7XHJcbiAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgdHJhbnNmb3JtOiBub25lO1xyXG4gIH1cclxuXHJcbiAgLyogV2hpbGUgZmluZ2VyIGlzIGRvd24sIHNob3cgdGhlIGdyZWVuIGZsYXNoOyByZWxlYXNlIHJldmVydHMgaW5zdGFudGx5ICovXHJcbiAgLmJ0bi1uYXY6YWN0aXZlLFxyXG4gIC5hY3Rpb24tYnRuOmFjdGl2ZSxcclxuICAuYnRuLW91dGxpbmU6YWN0aXZlLFxyXG4gIC5jaGFydC1hY3Rpb24tYnRuOmFjdGl2ZSxcclxuICAuY2hhcnQtYWN0aW9uLWJ0bi1pY29uOmFjdGl2ZSxcclxuICAuc2VhcmNoLWJ0bjphY3RpdmUsXHJcbiAgLnNlYXJjaC10b2dnbGUtYnRuOmFjdGl2ZSxcclxuICAudWstZmlsaW5ncy1zZWFyY2gtYnRuOmFjdGl2ZSxcclxuICAuZGYtY2xlYXItYnRuOmFjdGl2ZSxcclxuICAuYnRuLXJlcG9ydC1idWc6YWN0aXZlLFxyXG4gIC5ob21lLXNlYXJjaC1idG46YWN0aXZlLFxyXG4gIC50aW1lbGluZS1idG46YWN0aXZlIHtcclxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudCk7XHJcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTtcclxuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcclxuICB9XHJcblxyXG4gIC8qIFJlc3BlY3QgZGVzdHJ1Y3RpdmUvZGFuZ2VyIHZhcmlhbnRzICovXHJcbiAgLmRhbmdlci1hY3Rpb24tYnRuOmhvdmVyLFxyXG4gIC5kYW5nZXItYWN0aW9uLWJ0bjphY3RpdmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1kYW5nZXIpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XHJcbn1cclxuLyogUmVwb3J0IGJ1ZyBidXR0b24gKi9cclxuLmJ0bi1yZXBvcnQtYnVnIHtcclxuICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLXdhcm5pbmctcmdiKSwgMC4xMCk7XHJcbiAgY29sb3I6IHZhcigtLWNvbG9yLXdhcm5pbmcpO1xyXG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLXdhcm5pbmcpO1xyXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgcGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtNSk7XHJcbiAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgaGVpZ2h0OiBhdXRvO1xyXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XHJcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LTEyKTtcclxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGdhcDogdmFyKC0tc3BhY2UtMi01KTtcclxufVxyXG4uYnRuLXJlcG9ydC1idWc6aG92ZXIge1xyXG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXdhcm5pbmcpO1xyXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpO1xyXG59XHJcbi5idG4tcmVwb3J0LWJ1ZyBzdmcgeyB3aWR0aDogdmFyKC0tc3BhY2UtNyk7IGhlaWdodDogdmFyKC0tc3BhY2UtNyk7IH1cclxuLyogSGVhZGVyIGZ1bGwtaGVpZ2h0IG5hdiBzaXppbmcgaGFuZGxlZCBoZXJlIChjbGFzcy1maXJzdCkgKi9cclxuLyogQXV0aCBzcGVjaWZpYyBwcm92aWRlciBidXR0b24gKi9cclxuLmJ0bi1nb29nbGUgeyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOnZhcigtLWNvbG9yLWJsdWUpOyBjb2xvcjp2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IGJvcmRlcjp2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYmx1ZS1ob3Zlcik7IGJvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKTsgcGFkZGluZzp2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS03KTsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGdhcDp2YXIoLS1zcGFjZS01KTsgZm9udC13ZWlnaHQ6NzAwOyB0ZXh0LXNoYWRvdzogdmFyKC0tdGV4dC1zaGFkb3ctZGFyay1zbSk7IH1cclxuLmJ0bi1nb29nbGU6aG92ZXJ7IGJhY2tncm91bmQ6dmFyKC0tY29sb3ItYmx1ZS1ob3Zlcik7IH1cclxuLyogQ29tcGFjdCBBY3Rpb24gQnV0dG9ucyAqL1xyXG4uY2hhcnQtYWN0aW9uLWJ0biB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7IGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14cyk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTUpOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTIpOyBmb250LXdlaWdodDogNTAwOyBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMTYwbXMgZWFzZSwgY29sb3IgMTYwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDE2MG1zIGVhc2UsIHRyYW5zZm9ybSAxNjBtcyBlYXNlLCBib3gtc2hhZG93IDE2MG1zIGVhc2U7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogdmFyKC0tc3BhY2UtMik7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cclxuLmNoYXJ0LWFjdGlvbi1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyB9XHJcbi5jaGFydC1hY3Rpb24tYnRuOmFjdGl2ZSB7IHRyYW5zZm9ybTogbm9uZTsgfVxyXG4vKiBJY29uLW9ubHkgdmFyaWFudCAqL1xyXG4uY2hhcnQtYWN0aW9uLWJ0bi1pY29uIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogNTAlOyB3aWR0aDogdmFyKC0tYnRuLWljb24pOyBoZWlnaHQ6IHZhcigtLWJ0bi1pY29uKTsgcGFkZGluZzogMDsgZm9udC1zaXplOiB2YXIoLS1mb250LTEyKTsgbGluZS1oZWlnaHQ6IHZhcigtLWJ0bi1pY29uKTsgZm9udC13ZWlnaHQ6IDcwMDsgZm9udC1mYW1pbHk6IHN5c3RlbS11aSwgc2Fucy1zZXJpZjsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMTYwbXMgZWFzZSwgY29sb3IgMTYwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDE2MG1zIGVhc2UsIHRyYW5zZm9ybSAxNjBtcyBlYXNlLCBib3gtc2hhZG93IDE2MG1zIGVhc2U7IH1cclxuLmNoYXJ0LWFjdGlvbi1idG4taWNvbi0tc20geyB3aWR0aDogdmFyKC0tYnRuLWljb24tc20pOyBoZWlnaHQ6IHZhcigtLWJ0bi1pY29uLXNtKTsgZm9udC1zaXplOiB2YXIoLS1mb250LTExKTsgbGluZS1oZWlnaHQ6IHZhcigtLWJ0bi1pY29uLXNtKTsgZm9udC13ZWlnaHQ6IDcwMDsgcGFkZGluZzogMDsgfVxyXG4uY2hhcnQtYWN0aW9uLWJ0bi1pY29uOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgfVxyXG4vKiBTaW1wbGlmaWVkIGNvbXBhY3Qgd2F0Y2hsaXN0IGJ1dHRvbiAqL1xyXG4jYWRkVG9XYXRjaGxpc3RCdG4sIC5idG4tYWRkLXRvLXdhdGNobGlzdCB7IHdpZHRoOiB2YXIoLS1idG4taWNvbik7IGhlaWdodDogdmFyKC0tYnRuLWljb24pOyBsaW5lLWhlaWdodDogdmFyKC0tYnRuLWljb24pOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTIpOyBmb250LXdlaWdodDogNzAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cclxuLyogUmVmcmVzaCBzdG9jayBwcmljZSBjb250cm9sICovXHJcbiNyZWZyZXNoLXN0b2NrLXByaWNlLCAuYnRuLXJlZnJlc2gtc3RvY2stcHJpY2UgeyBmb250LXNpemU6IGNsYW1wKHZhcigtLWZvbnQtMjgpLCAxLjI1cmVtICsgMS41dncsIHZhcigtLWZvbnQtMzYpKTsgbGluZS1oZWlnaHQ6IDE7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pOyBwYWRkaW5nOiAwOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgdHJhbnNpdGlvbjogY29sb3IgMTYwbXMgZWFzZSwgdHJhbnNmb3JtIDE2MG1zIGVhc2UsIGZpbHRlciAxNjBtcyBlYXNlOyBjdXJzb3I6IHBvaW50ZXI7IH1cclxuI3JlZnJlc2gtc3RvY2stcHJpY2U6aG92ZXIsIC5idG4tcmVmcmVzaC1zdG9jay1wcmljZTpob3ZlciB7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtaG92ZXIpOyB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7IGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDAuMzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4zNSkpOyB9XHJcbi8qIFRpbWVsaW5lIGJ1dHRvbnMgKGNoYXJ0IHBlcmlvZCBjb250cm9scykgKi9cclxuLnRpbWVsaW5lLWJ0biB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTUpOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTIpOyBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMTYwbXMgZWFzZS1pbi1vdXQsIGNvbG9yIDE2MG1zIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMTYwbXMgZWFzZS1pbi1vdXQsIHRyYW5zZm9ybSAxNjBtcyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAxNjBtcyBlYXNlLWluLW91dDsgdGV4dC1hbGlnbjogY2VudGVyOyBtaW4td2lkdGg6IDA7IH1cclxuLnRpbWVsaW5lLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLWVsZXZhdGVkKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1ib3JkZXIpOyB9XHJcbi50aW1lbGluZS1idG4uYWN0aXZlIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgfVxyXG4udGltZWxpbmUtYnRuLmxvYWRpbmcgeyBvcGFjaXR5OiAuNjsgY3Vyc29yOiBub3QtYWxsb3dlZDsgfVxyXG4vKiBEZXNrdG9wIChwb2ludGVyOiBmaW5lKTogZ3JlZW4gaG92ZXIgbGlrZSB0b3AgbmF2IGJ1dHRvbnMgKi9cclxuQG1lZGlhIChob3ZlcjogaG92ZXIpIGFuZCAocG9pbnRlcjogZmluZSkge1xuICAudGltZWxpbmUtYnRuOmhvdmVyLFxuICAudGltZWxpbmUtYnRuOmZvY3VzLFxuICAudGltZWxpbmUtYnRuOmZvY3VzLXZpc2libGUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudCk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xuICB9XG59XHJcbi8qIERhbmdlciBBY3Rpb24gQnV0dG9uICovXHJcbi5kYW5nZXItYWN0aW9uLWJ0biB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWRhbmdlcik7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHJnYmEodmFyKC0tZGFuZ2VyLXJnYiksIDAuMjUpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS01KTsgZm9udC1zaXplOiB2YXIoLS1mb250LTE2KTsgZm9udC13ZWlnaHQ6IDcwMDsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTYwbXMgZWFzZSwgYm94LXNoYWRvdyAxNjBtcyBlYXNlLCBiYWNrZ3JvdW5kIDE2MG1zIGVhc2UsIGJvcmRlci1jb2xvciAxNjBtcyBlYXNlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbGluZS1oZWlnaHQ6IDE7IH1cclxuLmRhbmdlci1hY3Rpb24tYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZGFuZ2VyLWhvdmVyKTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpIHNjYWxlKDEuMDMpOyBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tZGFuZ2VyLXJnYiksIDAuNTUpOyBib3gtc2hhZG93OiAwIDAuNjI1cmVtIDEuNXJlbSByZ2JhKHZhcigtLWRhbmdlci1yZ2IpLCAwLjM1KSwgMCAwIDAgMC4xODc1cmVtIHJnYmEodmFyKC0tZGFuZ2VyLXJnYiksIDAuMjIpIGluc2V0OyB9XHJcbi5kYW5nZXItYWN0aW9uLWJ0bjphY3RpdmUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCkgc2NhbGUoMC45OSk7IGJveC1zaGFkb3c6IDAgMC4zNzVyZW0gMC44NzVyZW0gcmdiYSh2YXIoLS1kYW5nZXItcmdiKSwgMC4xOCkgaW5zZXQ7IH1cclxuLmRhbmdlci1hY3Rpb24tYnRuOmZvY3VzLXZpc2libGUgeyBvdXRsaW5lOiB2YXIoLS1zcGFjZS0xLTUpIHNvbGlkIHZhcigtLWNvbG9yLWRhbmdlci1ob3Zlcik7IG91dGxpbmUtb2Zmc2V0OiB2YXIoLS1zcGFjZS0xLTUpOyB9XHJcbi8qIFByb2ZpbGUgQ1RBIGJ1dHRvbiAqL1xyXG4ucHJvZmlsZS1idXR0b24geyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTsgZm9udC13ZWlnaHQ6IDcwMDsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDE2MG1zIGVhc2UsIHRyYW5zZm9ybSAxNjBtcyBlYXNlLCBib3gtc2hhZG93IDE2MG1zIGVhc2UsIGNvbG9yIDE2MG1zIGVhc2U7IHRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNy01KTsgfVxyXG4ucHJvZmlsZS1idXR0b246aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQtaG92ZXIpOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IH1cclxuLyogU2VhcmNoIGJ1dHRvbnMgKi9cclxuLnNlYXJjaC1idG4geyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlLWhvdmVyKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS04KTsgZm9udC13ZWlnaHQ6IDYwMDsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDE2MG1zIGVhc2UsIGNvbG9yIDE2MG1zIGVhc2UsIGJvcmRlci1jb2xvciAxNjBtcyBlYXNlLCB0cmFuc2Zvcm0gMTYwbXMgZWFzZSwgYm94LXNoYWRvdyAxNjBtcyBlYXNlOyB9XHJcbi5zZWFyY2gtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZS1ob3Zlcik7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgfVxyXG4uc2VhcmNoLWNsZWFyLWJ0biB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpOyB9XHJcbi5zZWFyY2gtdG9nZ2xlLWJ0biB7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgZm9udC1zaXplOiB2YXIoLS1mb250LTE4KTsgY3Vyc29yOiBwb2ludGVyOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS00KTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBsaW5lLWhlaWdodDogMTsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMThzIGVhc2UsIGJveC1zaGFkb3cgLjE4cyBlYXNlLCBjb2xvciAuMThzIGVhc2U7IH1cclxuLnNlYXJjaC10b2dnbGUtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IGJveC1zaGFkb3c6IDAgMCAwLjM3NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuNTUpLCAwIDAgMC43NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMjUpIGluc2V0OyB9XHJcbi5pY29uLW1hZ25pZnkgeyB3aWR0aDogdmFyKC0tc3BhY2UtMTApOyBoZWlnaHQ6IHZhcigtLXNwYWNlLTEwKTsgc3Ryb2tlOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBzdHJva2Utd2lkdGg6IDIuMjsgZmlsbDogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBzdHJva2UtbGluZWpvaW46IHJvdW5kOyBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxyXG4uc2VhcmNoLXRvZ2dsZS1idG46aG92ZXIgLmljb24tbWFnbmlmeSB7IHN0cm9rZTogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgfVxyXG4vKiBCb29rbWFyayBhY3RpdmUgc3RhdGUgKi9cclxuLm1zZy1ib29rbWFyay5ib29rbWFya2VkIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWFjY2VudCk7IH1cclxuLyogRm9ybSBUeXBlcyBidXR0b24gKHVuaWZpZWQgYWNyb3NzIHBhZ2VzKSAqL1xyXG4uZm9ybS10eXBlcy1idG4geyBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS02KTsgZm9udC1zaXplOiB2YXIoLS1mb250LTEzKTsgbGluZS1oZWlnaHQ6IDE7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7IGZvbnQtd2VpZ2h0OiA3MDA7IH1cclxuLyogSG9tZSBwYWdlIHByb21pbmVudCBzZWFyY2ggQ1RBICovXHJcbi5ob21lLXNlYXJjaC1idG4geyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS04KSB2YXIoLS1zcGFjZS0xMik7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNik7IGZvbnQtd2VpZ2h0OiA3MDA7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxNjBtcyBlYXNlOyB9XHJcbi5ob21lLXNlYXJjaC1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQtaG92ZXIpOyB9XHJcbi8qIFVLIGZpbGluZ3Mgc2VhcmNoIGJ1dHRvbiAqL1xyXG4udWstZmlsaW5ncy1zZWFyY2gtYnRuIHsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS02KTsgZm9udC1zaXplOiB2YXIoLS1mb250LTE0KTsgZm9udC13ZWlnaHQ6IDYwMDsgbGluZS1oZWlnaHQ6IDE7IGhlaWdodDogYXV0bzsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDE2MG1zIGVhc2UsIGNvbG9yIDE2MG1zIGVhc2UsIGJvcmRlci1jb2xvciAxNjBtcyBlYXNlLCB0cmFuc2Zvcm0gMTYwbXMgZWFzZSwgYm94LXNoYWRvdyAxNjBtcyBlYXNlOyBtaW4td2lkdGg6IHZhcigtLW1pbi13LWJ0bi1sZyk7IH1cclxuLnVrLWZpbGluZ3Mtc2VhcmNoLWJ0bjpob3Zlcixcbi51ay1maWxpbmdzLXNlYXJjaC1idG46Zm9jdXMtdmlzaWJsZSB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudC1ob3Zlcik7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpOyB9XHJcbi51ay1maWxpbmdzLXNlYXJjaC1jb250YWluZXIgLnVrLWZpbGluZ3Mtc2VhcmNoLWJ0bjpob3Zlcixcbi51ay1maWxpbmdzLXNlYXJjaC1jb250YWluZXIgLnVrLWZpbGluZ3Mtc2VhcmNoLWJ0bjpmb2N1cy12aXNpYmxlIHtcbiAgLyogSW5jcmVhc2Ugc3BlY2lmaWNpdHkgdG8gb3ZlcnJpZGUgVGFpbHdpbmQgdXRpbGl0aWVzIGxpa2UgLnRleHQtYWNjZW50ICovXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpO1xyXG59XHJcbi51ay1maWxpbmdzLXNlYXJjaC1idG46ZGlzYWJsZWQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlLWhvdmVyKTsgY3Vyc29yOiBub3QtYWxsb3dlZDsgb3BhY2l0eTogMC43OyB9XHJcbi8qIENvb2wgUHJvZmlsZSBCdXR0b24gKi9cclxuI3Byb2ZpbGVQYWdlQnRuLCAuYnRuLXByb2ZpbGUtcGFnZSB7XHJcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tY29sb3ItYWNjZW50KSAwJSwgdmFyKC0tY29sb3ItYWNjZW50LWhvdmVyKSA1MCUsIHZhcigtLWNvbG9yLWFjY2VudCkgMTAwJSk7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDIwMCU7XHJcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7XHJcbiAgYm9yZGVyOiBub25lO1xyXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XHJcbiAgZm9udC13ZWlnaHQ6IDcwMDtcclxuICBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS04KTtcclxuICBsaW5lLWhlaWdodDogMTtcclxuICBoZWlnaHQ6IGF1dG87XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE2MG1zIGN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMjc1KSwgYmFja2dyb3VuZCAxNjBtcyBlYXNlLCBjb2xvciAxNjBtcyBlYXNlLCBib3gtc2hhZG93IDE2MG1zIGVhc2U7XG4gIGJveC1zaGFkb3c6IDAgMC4yNXJlbSAwLjkzNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjIpO1xyXG4gIGFuaW1hdGlvbjogcHJvZmlsZVB1bHNlIDRzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xyXG59XHJcbi8qIFJlc3BvbnNpdmUgdHJpbW1pbmcgZm9yIGNvbXBhY3QgaGVhZGVycyAqL1xyXG5AbWVkaWEgKG1heC13aWR0aDogODByZW0pIHtcclxuICAuYnRuLW5hdixcclxuICAjcHJvZmlsZVBhZ2VCdG4sIC5idG4tcHJvZmlsZS1wYWdlLFxyXG4gIC5idG4tcmVwb3J0LWJ1ZyB7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLTUpO1xyXG4gICAgcGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2UtNSk7XHJcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtMTIpO1xyXG4gIH1cclxufVxyXG5AbWVkaWEgKG1heC13aWR0aDogNjRyZW0pIHtcbiAgLmJ0bi1uYXYsXHJcbiAgI3Byb2ZpbGVQYWdlQnRuLCAuYnRuLXByb2ZpbGUtcGFnZSxcclxuICAuYnRuLXJlcG9ydC1idWcge1xyXG4gICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS00KTtcclxuICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNwYWNlLTQpO1xyXG4gIH1cclxuICAuYnRuLXJlcG9ydC1idWcgc3BhbiB7IGRpc3BsYXk6IG5vbmU7IH1cclxufVxyXG4jcHJvZmlsZVBhZ2VCdG46OmJlZm9yZSwgLmJ0bi1wcm9maWxlLXBhZ2U6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSh2YXIoLS13aGl0ZS1yZ2IpLCAgMC4zKSwgdHJhbnNwYXJlbnQpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTYwbXMgZWFzZTtcbn1cclxuI3Byb2ZpbGVQYWdlQnRuOmhvdmVyLCAuYnRuLXByb2ZpbGUtcGFnZTpob3ZlciB7XHJcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAwO1xyXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMC4xMjVyZW0pIHNjYWxlKDEuMDUpO1xyXG4gIGJveC1zaGFkb3c6IDAgMC41cmVtIDEuNTYyNXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuNCksIDAgMCAxLjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yKTtcclxuICBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuNSk7XHJcbiAgYW5pbWF0aW9uOiBwcm9maWxlR2xvdyAycyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XHJcbn1cclxuI3Byb2ZpbGVQYWdlQnRuOmhvdmVyOjpiZWZvcmUsIC5idG4tcHJvZmlsZS1wYWdlOmhvdmVyOjpiZWZvcmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG59XHJcbiNwcm9maWxlUGFnZUJ0bjphY3RpdmUsIC5idG4tcHJvZmlsZS1wYWdlOmFjdGl2ZSB7XHJcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0wLjA2MjVyZW0pIHNjYWxlKDEuMDIpO1xyXG4gIGJveC1zaGFkb3c6IDAgMC4yNXJlbSAwLjkzNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjMpO1xyXG59XHJcbiNwcm9maWxlUGFnZUJ0biBzcGFuOmZpcnN0LWNoaWxkLCAuYnRuLXByb2ZpbGUtcGFnZSBzcGFuOmZpcnN0LWNoaWxkIHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LTE2KTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2U7XG59XHJcbiNwcm9maWxlUGFnZUJ0bjpob3ZlciBzcGFuOmZpcnN0LWNoaWxkLCAuYnRuLXByb2ZpbGUtcGFnZTpob3ZlciBzcGFuOmZpcnN0LWNoaWxkIHtcclxuICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHNjYWxlKDEuMik7XHJcbn1cclxuI3Byb2ZpbGVQYWdlQnRuIHNwYW46bGFzdC1jaGlsZCwgLmJ0bi1wcm9maWxlLXBhZ2Ugc3BhbjpsYXN0LWNoaWxkIHtcclxuICBmb250LXdlaWdodDogODAwO1xyXG4gIHRleHQtc2hhZG93OiB2YXIoLS10ZXh0LXNoYWRvdy1kYXJrLXNtKTtcclxufVxyXG5Aa2V5ZnJhbWVzIHByb2ZpbGVHbG93IHtcclxuICAwJSB7IGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1ncmVlbi1tZCk7IH1cclxuICAxMDAlIHsgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWdyZWVuLWxnKTsgfVxyXG59XHJcbkBrZXlmcmFtZXMgcHJvZmlsZVB1bHNlIHtcclxuICAwJSwgMTAwJSB7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSAwJTtcclxuICAgIGJveC1zaGFkb3c6IFxyXG4gICAgICAwIDAuMjVyZW0gMC45Mzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yKSxcclxuICAgICAgMCAwIDAuNjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4xKTtcclxuICB9XHJcbiAgNTAlIHtcclxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMTAwJTtcclxuICAgIGJveC1zaGFkb3c6IFxyXG4gICAgICAwIDAuMzc1cmVtIDEuMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjMpLFxyXG4gICAgICAwIDAgMC45Mzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yKTtcclxuICB9XHJcbn1cclxuLyogKHByb2ZpbGVHcmVlbkZsb3cgcmVtb3ZlZDsgcmV2ZXJ0ZWQgdG8gc3RhdGljIGlkbGUgc3RhdGUpICovXHJcbi8qXG4gIGZvcm1zLmNzc1xuICBQdXJwb3NlOiBBbGwgc3R5bGVzIHJlbGF0ZWQgdG8gZm9ybSBlbGVtZW50cyAoaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGxhYmVsKSBhbmQgZm9jdXNlZCBzdGF0ZXMuXG4gIE1vYmlsZS1maXJzdCwgcmVsYXRpdmUgdW5pdHMsIGFuZCB3cmFwcGluZyBzZWFyY2ggY29udHJvbHMgdG8gYXZvaWQgb3ZlcmZsb3cuXG4qL1xyXG4vKiBOZW9uIHNlYXJjaCBiYXIgKi9cclxuLnRpY2tlci1pbnB1dCB7IGJvcmRlcjogdmFyKC0tc3BhY2UtMS01KSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3gtc2hhZG93OiB2YXIoLS1nbG93LWdyZWVuLWZpZWxkKTsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyB9XHJcbi50aWNrZXItaW5wdXQ6Zm9jdXMgeyBvdXRsaW5lOiBub25lOyBib3gtc2hhZG93OiB2YXIoLS1nbG93LWdyZWVuLWZpZWxkLWZvY3VzKTsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmctZm9jdXMpOyB9XHJcbi8qIFJldXNhYmxlIG5lb24gaW5wdXQgc3R5bGUgKi9cclxuOmlzKFxuICAubmVvbi1pbnB1dCxcbiAgI25ld1N1Ymdyb3VwSW5wdXQsXG4gIC53YXRjaGxpc3QtYWRkLWlucHV0LFxuICAjc2VjRmlsaW5nc1NlYXJjaElucHV0LFxuICAjdWtGaWxpbmdzU2VhcmNoSW5wdXQsXG4gICN1a0NvbXBhbnlJbnB1dCxcbiAgI2RtU3RhcnRJbnB1dCxcbiAgI2RtR3JvdXBOYW1lLFxuICAjZG1Hcm91cE1lbWJlcklucHV0LFxuICAjZG1BZGRNZW1iZXJJbnB1dCxcbiAgI2RtSW5wdXQsXG4gICNtZXNzYWdlSW5wdXQsXG4gICNwcm9maWxlQmlvSW5wdXQsXG4gIHRleHRhcmVhI3Byb2ZpbGVCaW9JbnB1dCxcbiAgdGV4dGFyZWEjbm90ZXNNb2RhbFRleHRhcmVhLFxuICAuaW5wdXQtbmV3LXN1Ymdyb3VwLFxuICAuaW5wdXQtc2VjLWZpbGluZ3Mtc2VhcmNoLFxuICAuaW5wdXQtdWstZmlsaW5ncy1zZWFyY2gsXG4gIC5pbnB1dC11ay1jb21wYW55LFxuICAuaW5wdXQtZG0tc3RhcnQsXG4gIC5pbnB1dC1kbS1ncm91cC1uYW1lLFxuICAuaW5wdXQtZG0tZ3JvdXAtbWVtYmVyLFxuICAuaW5wdXQtZG0tYWRkLW1lbWJlcixcbiAgLmlucHV0LWRtLFxuICAuaW5wdXQtbWVzc2FnZSxcbiAgLmlucHV0LXByb2ZpbGUtYmlvLFxuICB0ZXh0YXJlYS5pbnB1dC1wcm9maWxlLWJpbyxcbiAgdGV4dGFyZWEuaW5wdXQtbm90ZXMtbW9kYWxcbikgeyBib3JkZXI6IHZhcigtLXNwYWNlLTEpIHNvbGlkIHZhcigtLWNvbG9yLWFjY2VudCk7IGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsgYm94LXNoYWRvdzogdmFyKC0tZ2xvdy1ncmVlbi1maWVsZCk7IHRyYW5zaXRpb246IGJveC1zaGFkb3cgLjE4cyBlYXNlLCBiYWNrZ3JvdW5kIC4xOHMgZWFzZTsgfVxyXG46aXMoXG4gIC5uZW9uLWlucHV0LFxuICAjbmV3U3ViZ3JvdXBJbnB1dCxcbiAgLndhdGNobGlzdC1hZGQtaW5wdXQsXG4gICNzZWNGaWxpbmdzU2VhcmNoSW5wdXQsXG4gICN1a0ZpbGluZ3NTZWFyY2hJbnB1dCxcbiAgI3VrQ29tcGFueUlucHV0LFxuICAjZG1TdGFydElucHV0LFxuICAjZG1Hcm91cE5hbWUsXG4gICNkbUdyb3VwTWVtYmVySW5wdXQsXG4gICNkbUFkZE1lbWJlcklucHV0LFxuICAjZG1JbnB1dCxcbiAgI21lc3NhZ2VJbnB1dCxcbiAgI3Byb2ZpbGVCaW9JbnB1dCxcbiAgdGV4dGFyZWEjcHJvZmlsZUJpb0lucHV0LFxuICB0ZXh0YXJlYSNub3Rlc01vZGFsVGV4dGFyZWEsXG4gIC5pbnB1dC1uZXctc3ViZ3JvdXAsXG4gIC5pbnB1dC1zZWMtZmlsaW5ncy1zZWFyY2gsXG4gIC5pbnB1dC11ay1maWxpbmdzLXNlYXJjaCxcbiAgLmlucHV0LXVrLWNvbXBhbnksXG4gIC5pbnB1dC1kbS1zdGFydCxcbiAgLmlucHV0LWRtLWdyb3VwLW5hbWUsXG4gIC5pbnB1dC1kbS1ncm91cC1tZW1iZXIsXG4gIC5pbnB1dC1kbS1hZGQtbWVtYmVyLFxuICAuaW5wdXQtZG0sXG4gIC5pbnB1dC1tZXNzYWdlLFxuICAuaW5wdXQtcHJvZmlsZS1iaW8sXG4gIHRleHRhcmVhLmlucHV0LXByb2ZpbGUtYmlvLFxuICB0ZXh0YXJlYS5pbnB1dC1ub3Rlcy1tb2RhbFxuKTpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnLWZvY3VzKTsgYm94LXNoYWRvdzogdmFyKC0tZ2xvdy1ncmVlbi1maWVsZC1mb2N1cyk7IH1cclxuLyogTW9kZXJhdGlvbiArIGdlbmVyaWMgZm9ybXMgKi9cclxuLmZvcm0taW5wdXQsIC5mb3JtLXRleHRhcmVhIHsgd2lkdGg6IDEwMCU7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTYpOyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iZyk7IGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTsgZm9udC1mYW1pbHk6IGluaGVyaXQ7IH1cclxuLmZvcm0tdGV4dGFyZWEgeyByZXNpemU6IHZlcnRpY2FsOyB9XHJcbi5mb3JtLWxhYmVsIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTItNSk7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgfVxyXG4uZm9ybS1zZWxlY3QsIC5mb3JtLXRleHRhcmVhIHsgd2lkdGg6IDEwMCU7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsgcGFkZGluZzogdmFyKC0tc3BhY2UtNSk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IH1cclxuLyogU2VhcmNoIGlucHV0cyAqL1xyXG4uc2VhcmNoLWlucHV0LFxuaW5wdXQuc2VhcmNoLWlucHV0IHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpOyBib3JkZXItd2lkdGg6IHZhcigtLXNwYWNlLTEtNSk7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsgcGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNCk7IGJveC1zaGFkb3c6IHZhcigtLWdsb3ctZ3JlZW4tZmllbGQpOyB9XHJcbi5zZWFyY2gtaW5wdXQ6Zm9jdXMsXG5pbnB1dC5zZWFyY2gtaW5wdXQ6Zm9jdXMgeyBvdXRsaW5lOiBub25lOyBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGJvcmRlci13aWR0aDogdmFyKC0tc3BhY2UtMS01KTsgYm94LXNoYWRvdzogdmFyKC0tZ2xvdy1ncmVlbi1maWVsZC1mb2N1cyk7IH1cclxuLyogRW5zdXJlIG5lb24tc3R5bGVkIHNlYXJjaCBpbnB1dHMgYWxzbyBnZXQgdGhpY2tlciBib3JkZXJzICovXHJcbi5zZWFyY2gtaW5wdXQubmVvbi1pbnB1dCB7IGJvcmRlci13aWR0aDogdmFyKC0tc3BhY2UtMS01KTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3gtc2hhZG93OiB2YXIoLS1nbG93LWdyZWVuLWZpZWxkKTsgfVxyXG4vKiBJbmxpbmUgY2hhdCBzZWFyY2ggc3BlY2lmaWNzICovXHJcbi5jaGF0LWlubGluZS1zZWFyY2ggLnNlYXJjaC1pbnB1dCB7IG1hcmdpbjogMDsgfVxyXG4uY2hhdC1pbmxpbmUtc2VhcmNoIGlucHV0W3R5cGU9ZGF0ZV06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7IGZpbHRlcjogaW52ZXJ0KDY1JSkgc2VwaWEoOTUlKSBzYXR1cmF0ZSg4MDAlKSBodWUtcm90YXRlKDkwZGVnKSBicmlnaHRuZXNzKDEzNSUpIGNvbnRyYXN0KDkwJSk7IGN1cnNvcjogcG9pbnRlcjsgfVxyXG4uY2hhdC1pbmxpbmUtc2VhcmNoIGlucHV0W3R5cGU9ZGF0ZV06aG92ZXI6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciwgLmNoYXQtaW5saW5lLXNlYXJjaCBpbnB1dFt0eXBlPWRhdGVdOmZvY3VzOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3IgeyBmaWx0ZXI6IGludmVydCg4MCUpIHNlcGlhKDYwJSkgc2F0dXJhdGUoMTIwMCUpIGh1ZS1yb3RhdGUoOTBkZWcpIGJyaWdodG5lc3MoMTU1JSkgY29udHJhc3QoOTUlKTsgfVxyXG4uY2hhdC1pbmxpbmUtc2VhcmNoIGlucHV0W3R5cGU9ZGF0ZV0uc2VhcmNoLWlucHV0LCAuY2hhdC1pbmxpbmUtc2VhcmNoIGlucHV0W3R5cGU9ZGF0ZV0ubmVvbi1pbnB1dCB7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTMpOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTMpOyBsaW5lLWhlaWdodDogMS4yNTsgfVxyXG4uY2hhdC1pbmxpbmUtc2VhcmNoIGlucHV0W3R5cGU9ZGF0ZV06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7IG1hcmdpbjogMDsgfVxyXG4vKiBNYWtlIGNoYXQgc2VhcmNoIGNvbnRyb2xzIHdyYXAgYW5kIHNjYWxlIG9uIHNtYWxsIHNjcmVlbnMgKi9cclxuLmNoYXQtaW5saW5lLXNlYXJjaCB7IGZsZXgtd3JhcDogd3JhcDsgfVxyXG4uY2hhdC1pbmxpbmUtc2VhcmNoIGlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxuLmNoYXQtaW5saW5lLXNlYXJjaCBpbnB1dFt0eXBlPVwiZGF0ZVwiXSB7XG4gIHdpZHRoOiBhdXRvO1xuICBmbGV4OiAxIDEgdmFyKC0tZm9ybS1jb2wtbWluKTtcbiAgbWluLXdpZHRoOiB2YXIoLS1mb3JtLWNvbC1taW4pO1xufVxyXG4uY2hhdC1pbmxpbmUtc2VhcmNoID4gLm1sLWF1dG8geyBmbGV4OiAwIDAgYXV0bzsgfVxyXG4vKiBFbnN1cmUgdGhlIG5lc3RlZCB0aWNrZXIgd3JhcHBlciBjb2x1bW5zIGFjdCBsaWtlIHByb3BlciBmbGV4IGNvbHVtbnNcbiAgIGluIHNlYXJjaCBiYXJzICh1c2VkIGluIEJvb2ttYXJrcyBhbmQgUHJvZmlsZSkuIFRoaXMgYXZvaWRzIHRoZSB0aWNrZXJcbiAgIGZpZWxkIHZpc3VhbGx5IG92ZXJsYXBwaW5nIHRoZSBmb2xsb3dpbmcgZGF0ZSBpbnB1dCBvbiBzb21lIHpvb20vbGF5b3V0cy4gKi9cclxuLmNoYXQtaW5saW5lLXNlYXJjaCA+IC5yZWxhdGl2ZSB7IGZsZXg6IDEgMSB2YXIoLS1mb3JtLWNvbC1taW4pOyBtaW4td2lkdGg6IHZhcigtLWZvcm0tY29sLW1pbik7IH1cclxuLyogS2VlcCBkYXRlIGlucHV0cyBhYm92ZSBuZWlnaGJvcnMgaWYgYm9yZGVycy9nbG93IHRvdWNoIGF0IHRpZ2h0IHdpZHRocyAqL1xyXG4uY2hhdC1pbmxpbmUtc2VhcmNoIGlucHV0W3R5cGU9XCJkYXRlXCJdIHsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxOyB9XHJcbi5jaGF0LWlubGluZS1zZWFyY2ggLmJ0bi1vdXRsaW5lIHsgZmxleDogMCAwIGF1dG87IH1cclxuLyogTW9iaWxlOiBhZG9wdCBETSBsYXlvdXQg4oCUIHN0YWJsZSB0d28tY29sdW1uIGdyaWQgd2l0aCBmdWxsLXdpZHRoIGFjdGlvbnMgcm93ICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAuY2hhdC1pbmxpbmUtc2VhcmNoIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCh2YXIoLS1mb3JtLWNvbC1taW4pLCAxZnIpKTtcbiAgICAtbW96LWNvbHVtbi1nYXA6IHZhcigtLXNwYWNlLTIpO1xuICAgICAgICAgY29sdW1uLWdhcDogdmFyKC0tc3BhY2UtMik7XG4gICAgcm93LWdhcDogdmFyKC0tc3BhY2UtMik7XG4gICAgYWxpZ24taXRlbXM6IGVuZDtcbiAgfVxuICAuY2hhdC1pbmxpbmUtc2VhcmNoID4gLnJlbGF0aXZlIHsgbWluLXdpZHRoOiAwOyB9XG4gIC5jaGF0LWlubGluZS1zZWFyY2ggLnNlYXJjaC1pbnB1dCB7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IG1pbi13aWR0aDogMDsgfVxuICAuY2hhdC1pbmxpbmUtc2VhcmNoIC5hY3Rpb25zIHtcbiAgICBncmlkLWNvbHVtbjogMSAvIC0xO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIH1cbiAgLyogU0VDIEJvdDogcHV0IHBpbGwgcm93IG9uIGl0cyBvd24gZnVsbC13aWR0aCBsaW5lIGFib3ZlIGlucHV0cyAqL1xuICAjc2VjQm90U2VhcmNoRm9ybSAuc2VjYm90LXBpbGwtcm93IHtcbiAgICBncmlkLWNvbHVtbjogMSAvIC0xO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG4gIH1cbiAgLyogTW9iaWxlIGNvbHVtbiBiYXNlIHdpZHRoICovXG4gIC5jaGF0LXNlYXJjaC1jb250YWluZXIsIC5ib29rbWFya3Mtc2VhcmNoLWNvbnRhaW5lciwgLnByb2ZpbGUtc2VhcmNoLWNvbnRhaW5lciB7IC0tZm9ybS1jb2wtbWluOiA5LjVyZW07IH1cbn1cclxuLyogRGVza3RvcCBjb21wYWN0OiBrZWVwIGFsbCBmaWVsZHMgb24gb25lIHJvdyB3aXRob3V0IG92ZXJsYXAgKi9cclxuQG1lZGlhIChtaW4td2lkdGg6IDU2LjI1cmVtKSB7XG4gIC8qIERlc2t0b3A6IHVuaWZvcm0gY29sdW1uIHNpemUgZm9yIGFsbCBmaWVsZHMsIHVzaW5nIGNhbGVuZGFyIGJveCBhcyB0aGUgc3RhbmRhcmQgKi9cbiAgLmNoYXQtc2VhcmNoLWNvbnRhaW5lciwgLmJvb2ttYXJrcy1zZWFyY2gtY29udGFpbmVyLCAucHJvZmlsZS1zZWFyY2gtY29udGFpbmVyIHsgLS1mb3JtLWNvbC1taW46IDEwcmVtOyB9XG4gIC5jaGF0LWlubGluZS1zZWFyY2ggeyAtbW96LWNvbHVtbi1nYXA6IHZhcigtLXNwYWNlLTIpOyBjb2x1bW4tZ2FwOiB2YXIoLS1zcGFjZS0yKTsgfVxuICAuY2hhdC1pbmxpbmUtc2VhcmNoID4gLnJlbGF0aXZlIHsgZmxleDogMCAwIHZhcigtLWZvcm0tY29sLW1pbik7IG1pbi13aWR0aDogdmFyKC0tZm9ybS1jb2wtbWluKTsgfVxuICAuY2hhdC1pbmxpbmUtc2VhcmNoID4gLnJlbGF0aXZlID4gLnNlYXJjaC1pbnB1dCB7IHdpZHRoOiAxMDAlOyBtaW4td2lkdGg6IDA7IH1cbiAgLmNoYXQtaW5saW5lLXNlYXJjaCAuYWN0aW9ucyB7IG1hcmdpbi1sZWZ0OiAwOyBmbGV4OiAwIDAgYXV0bzsgb3JkZXI6IDA7IH1cbiAgLyogS2VlcCBwaWxsIHJvdyBzcGFubmluZyBmdWxsIHdpZHRoIG9uIGRlc2t0b3AgYXMgd2VsbCB0byBhdm9pZCBjcmFtcGluZyAqL1xuICAjc2VjQm90U2VhcmNoRm9ybSAuc2VjYm90LXBpbGwtcm93IHtcbiAgICBncmlkLWNvbHVtbjogMSAvIC0xO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG4gIH1cbn1cclxuLyogU3VnZ2VzdGlvbiBtZW51IHNob3VsZCByZXNwZWN0IGNvbnRhaW5lciBwYWRkaW5nIG9uIHNlYXJjaCBiYXJzICovXHJcbi5jaGF0LXNlYXJjaC1jb250YWluZXIgLnN1Z2dlc3Rpb24tbWVudSxcbi5ib29rbWFya3Mtc2VhcmNoLWNvbnRhaW5lciAuc3VnZ2VzdGlvbi1tZW51LFxuLnByb2ZpbGUtc2VhcmNoLWNvbnRhaW5lciAuc3VnZ2VzdGlvbi1tZW51IHtcbiAgbGVmdDogdmFyKC0tc3BhY2UtMik7XG4gIHJpZ2h0OiB2YXIoLS1zcGFjZS0yKTtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAodmFyKC0tc3BhY2UtMikgKiAyKSk7XG59XHJcbi8qIEZpbGUgdXBsb2FkIGlucHV0L2J1dHRvbiAqL1xyXG4jZmlsZVVwbG9hZExhYmVsLFxuI2RtRmlsZVVwbG9hZExhYmVsLFxuLmZpbGUtdXBsb2FkLWxhYmVsLFxuLmRtLWZpbGUtdXBsb2FkLWxhYmVsIHsgcGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNik7IGJvcmRlcjogdmFyKC0tc3BhY2UtMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgYm94LXNoYWRvdzogMCAwIDAuMzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4zNSksIDAgMCAwLjYyNXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTgpIGluc2V0OyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4xOHMgZWFzZSwgYm94LXNoYWRvdyAuMThzIGVhc2UsIGNvbG9yIC4xOHMgZWFzZTsgfVxyXG4vKiBQYXBlcmNsaXAgaWNvbiAqL1xyXG4jZmlsZVVwbG9hZExhYmVsIC5wYXBlcmNsaXAtaWNvbiwgI2RtRmlsZVVwbG9hZExhYmVsIC5wYXBlcmNsaXAtaWNvbiwgLmZpbGUtdXBsb2FkLWxhYmVsIC5wYXBlcmNsaXAtaWNvbiwgLmRtLWZpbGUtdXBsb2FkLWxhYmVsIC5wYXBlcmNsaXAtaWNvbiB7IHdpZHRoOiB2YXIoLS1zcGFjZS0xMCk7IGhlaWdodDogdmFyKC0tc3BhY2UtMTApOyBzdHJva2U6IHZhcigtLWNvbG9yLWFjY2VudCk7IHN0cm9rZS13aWR0aDogMi4xOyBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAwLjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC42KSk7IHRyYW5zaXRpb246IHN0cm9rZSAxNjBtcyBlYXNlLCBmaWx0ZXIgMTYwbXMgZWFzZTsgfVxyXG4vKiBETSB1c2VzIHNhbWUgaW5saW5lIFNWRyBhcyBjaGF0OyBubyBiYWNrZ3JvdW5kIGhhY2tzIG5lZWRlZCAqL1xyXG4jZmlsZVVwbG9hZExhYmVsOmhvdmVyLFxuI2RtRmlsZVVwbG9hZExhYmVsOmhvdmVyLFxuLmZpbGUtdXBsb2FkLWxhYmVsOmhvdmVyLFxuLmRtLWZpbGUtdXBsb2FkLWxhYmVsOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmctZm9jdXMpOyBib3gtc2hhZG93OiAwIDAgMC41cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC41NSksIDAgMCAwLjg3NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMjUpIGluc2V0OyBjb2xvcjogdmFyKC0tc3VjY2Vzcy0xMDApOyB9XHJcbiNmaWxlVXBsb2FkTGFiZWw6aG92ZXIgLnBhcGVyY2xpcC1pY29uLCAjZG1GaWxlVXBsb2FkTGFiZWw6aG92ZXIgLnBhcGVyY2xpcC1pY29uLCAuZmlsZS11cGxvYWQtbGFiZWw6aG92ZXIgLnBhcGVyY2xpcC1pY29uLCAuZG0tZmlsZS11cGxvYWQtbGFiZWw6aG92ZXIgLnBhcGVyY2xpcC1pY29uIHsgc3Ryb2tlOiB2YXIoLS1zdWNjZXNzLTEwMCk7IGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDAuMzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC44KSk7IH1cclxuLyogSG92ZXIgaWNvbiBjb2xvciBoYW5kbGVkIGFib3ZlICovXHJcbi8qIFBlcnNpc3RlbnQgdXBsb2FkIHNpemUgaGludCBuZXh0IHRvIGF0dGFjaCBidXR0b25zICovXHJcbi51cGxvYWQtaGludCB7IGFsaWduLXNlbGY6IGNlbnRlcjsgZm9udC1zaXplOiB2YXIoLS1mb250LTExKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3VidGxlKTsgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWxzLXh4eHMpOyB9XHJcbi8qIEJhc2UgY29tcG9uZW50cyAobGVnYWN5LCB3aWxsIGJlIG92ZXJyaWRkZW4gYmVsb3cgd2hlcmUgZXh0cmFjdGVkKSAqL1xyXG4vKlxyXG4gIGNvbXBvbmVudHMuY3NzXHJcbiAgUHVycG9zZTogU3R5bGVzIGZvciByZXVzYWJsZSBVSSBjb21wb25lbnRzIGFuZCBmZWF0dXJlIHBhZ2VzIChhdXRoLCBoZWFkZXIsIGNoYXQsIHdhdGNobGlzdCwgbW9kYWxzLCBjaGFydHMsIHByb2ZpbGUsIGZpbGluZ3MsIGV0Yy4pLlxyXG4gIE5vdGVzOlxyXG4gIC0gQ29tcGxleCBzZWxlY3RvcnMga2VlcCBjb21tZW50cyBmcm9tIG9yaWdpbmFsIGZvciBjbGFyaXR5LlxyXG4gIC0gU29tZSBhbmltYXRpb25zIGFyZSBkZWZpbmVkIGFsb25nc2lkZSB0aGVpciBjb21wb25lbnRzIHRvIG1haW50YWluIHJlYWRhYmlsaXR5LlxyXG4qL1xyXG4vKiBBdXRoOiBiYWNrZ3JvdW5kIGFuZCBiYW5uZXIgKi9cclxuI2F1dGhDb250YWluZXIsIC5hdXRoLWNvbnRhaW5lciB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KHJnYmEodmFyKC0td2hpdGUtcmdiKSwgMC4wMykgdmFyKC0tc3BhY2UtMSksIHRyYW5zcGFyZW50IHZhcigtLXNwYWNlLTEpKSwgbGluZWFyLWdyYWRpZW50KHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMC4zNSksIHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMC42NSkpLCB1cmwoJy9pbWFnZXMvZ29yaWxsYS5wbmcnKTsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyLCBjZW50ZXIsIGxlZnQgY2VudGVyOyBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LCBuby1yZXBlYXQsIG5vLXJlcGVhdDsgYmFja2dyb3VuZC1zaXplOiAxcmVtIDFyZW0sIGNvdmVyLCBjb250YWluOyBtaW4taGVpZ2h0OiAxMDBzdmg7IG1pbi1oZWlnaHQ6IDEwMGR2aDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTQ4KSB2YXIoLS1zcGFjZS04KSB2YXIoLS1zcGFjZS0xMCk7IG92ZXJmbG93OiBoaWRkZW47IH1cclxuLyogQXZvaWQgZm9yY2luZyBkaXNwbGF5IG9uIHRoZSBJRCBzZWxlY3RvciBzbyBUYWlsd2luZCBgLmhpZGRlbmAgY2FuIGNvbnRyb2wgdmlzaWJpbGl0eSAqL1xyXG4uYXV0aC1jb250YWluZXIgeyBkaXNwbGF5OiBmbGV4OyB9XHJcbiNhdXRoQ29udGFpbmVyOjpiZWZvcmUsIC5hdXRoLWNvbnRhaW5lcjo6YmVmb3JlIHsgY29udGVudDogJ1RyaWJhbCBUcmFkaW5nJzsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHJpZ2h0OiAwOyBoZWlnaHQ6IHZhcigtLWJhbm5lci1oZWlnaHQpOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGZvbnQtd2VpZ2h0OiA5MDA7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC00MCk7IGxldHRlci1zcGFjaW5nOiB2YXIoLS1scy14eHMpOyB0ZXh0LXNoYWRvdzogdmFyKC0tdGV4dC1nbG93LWdyZWVuLXNtKTsgLXdlYmtpdC10ZXh0LXN0cm9rZTogdmFyKC0tc3BhY2UtMSkgcmdiYSh2YXIoLS1ncmVlbi1zdHJva2UtZGFyay1yZ2IpLCAwLjY1KTsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEyMGRlZywgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjE2KSAxMCUsIHJnYmEodmFyKC0td2hpdGUtcmdiKSwgMCkgMjIlLCByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTYpIDM0JSkgMCAwIC8gMjIwJSAxMDAlIG5vLXJlcGVhdCwgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSh2YXIoLS1kYXJrLTEwLXJnYiksIDAuOTIpLCByZ2JhKHZhcigtLWRhcmstMTAtcmdiKSwgMC42NikpOyBib3JkZXItYm90dG9tOiB2YXIoLS1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3gtc2hhZG93OiAwIDAuNjI1cmVtIDEuNXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTgpLCAwIHZhcigtLXNwYWNlLTEpIDAgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjI1KSBpbnNldDsgYW5pbWF0aW9uOiBiYW5uZXJTaGVlbiA3LjJzIGxpbmVhciBpbmZpbml0ZSwgYmFubmVyR2xvdyA1LjVzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTsgei1pbmRleDogMjsgfVxyXG5Aa2V5ZnJhbWVzIGJhbm5lclNoZWVuIHsgMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjIwJSAwLCAwIDA7IH0gMTAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDIyMCUgMCwgMCAwOyB9IH1cclxuQGtleWZyYW1lcyBiYW5uZXJHbG93IHsgMCUgeyBib3gtc2hhZG93OiAwIDAuNjI1cmVtIDEuMzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4xNSksIDAgMC4wNjI1cmVtIDAgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjIyKSBpbnNldDsgdGV4dC1zaGFkb3c6IHZhcigtLXRleHQtZ2xvdy1ncmVlbi1zbSk7IH0gMTAwJSB7IGJveC1zaGFkb3c6IDAgMC43NXJlbSAxLjc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yMiksIDAgMC4wNjI1cmVtIDAgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjI4KSBpbnNldDsgdGV4dC1zaGFkb3c6IHZhcigtLXRleHQtZ2xvdy1ncmVlbi1tZCk7IH0gfVxyXG4vKiBBdXRoIGNhcmQgKi9cclxuQGtleWZyYW1lcyBicmVhdGhpbmdTY2FsZSB7IDAlLCAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOyB9IDI1JSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wMikgdHJhbnNsYXRlWSgtMnB4KTsgfSAzNy41JSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wMikgdHJhbnNsYXRlWSgtMnB4KTsgfSA4Ny41JSB7IHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwKTsgfSB9XHJcbkBrZXlmcmFtZXMgYnJlYXRoaW5nR2xvdyB7IDAlLCAxMDAlIHsgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMC45Mzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC40KSkgZHJvcC1zaGFkb3coMCAwIDEuODc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4zKSkgZHJvcC1zaGFkb3coMCAwIDIuODEyNXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMikpOyBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC42KTsgfSAyNSUgeyBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAyLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjgpKSBkcm9wLXNoYWRvdygwIDAgNXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuNikpIGRyb3Atc2hhZG93KDAgMCA3LjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjQpKTsgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuOSk7IH0gMzcuNSUgeyBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAyLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjgpKSBkcm9wLXNoYWRvdygwIDAgNXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuNikpIGRyb3Atc2hhZG93KDAgMCA3LjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjQpKTsgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuOSk7IH0gODcuNSUgeyBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAwLjkzNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjQpKSBkcm9wLXNoYWRvdygwIDAgMS44NzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjMpKSBkcm9wLXNoYWRvdygwIDAgMi44MTI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yKSk7IGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjYpOyB9IH1cclxuI2F1dGhDb250ZW50LCAuYXV0aC1jb250ZW50IHsgbWFyZ2luLXRvcDogMDsgYWxpZ24tc2VsZjogY2VudGVyOyB3aWR0aDogbWluKHZhcigtLW1heC13LXhsKSwgOTglKTsgbWFyZ2luLXJpZ2h0OiAwOyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKHZhcigtLWRhcmstMTgtMjYtMjItcmdiKSwgMC45NSksIHJnYmEodmFyKC0tZGFyay0xMi0xOC0xNi1yZ2IpLCAwLjk1KSk7IGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4zNSk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTkpIHZhcigtLXNwYWNlLTgpIHZhcigtLXNwYWNlLTgpOyBib3gtc2hhZG93OiAwIDEuMTI1cmVtIDIuNjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4xNCksIDAgMC4zNzVyZW0gMS4yNXJlbSByZ2JhKHZhcigtLWJsYWNrLXJnYiksICAwLjYpLCAwIDAgMCB2YXIoLS1zcGFjZS0zKSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTApIGluc2V0OyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KSBzYXR1cmF0ZSgxLjAyKTsgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KSBzYXR1cmF0ZSgxLjAyKTsgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAxODBtcyBlYXNlLCB0cmFuc2Zvcm0gMTgwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDE4MG1zIGVhc2U7IGFuaW1hdGlvbjogYnJlYXRoaW5nU2NhbGUgOHMgZWFzZS1pbi1vdXQgaW5maW5pdGUsIGJyZWF0aGluZ0dsb3cgOHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7IH1cclxuI2F1dGhDb250ZW50OmhvdmVyLCAuYXV0aC1jb250ZW50OmhvdmVyIHsgYm94LXNoYWRvdzogMCAxLjVyZW0gMy41cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4xOCksIDAgMC41cmVtIDEuNzVyZW0gcmdiYSh2YXIoLS1ibGFjay1yZ2IpLCAgMC42NSksIDAgMCAwIDAuMTg3NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTYpIGluc2V0OyBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC41NSk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsgfVxyXG4jYXV0aENvbnRlbnQgLmF1dGgtaW5wdXQsIC5hdXRoLWNvbnRlbnQgLmF1dGgtaW5wdXQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlci1zdHJvbmcpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XHJcbiNhdXRoQ29udGVudCAuYXV0aC1pbnB1dDpmb2N1cywgLmF1dGgtY29udGVudCAuYXV0aC1pbnB1dDpmb2N1cyB7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgYm94LXNoYWRvdzogdmFyKC0tb3V0bGluZS13ZWFrKTsgfVxyXG4jYXV0aENvbnRlbnQgLmJ0bi1nb29nbGUsIC5hdXRoLWNvbnRlbnQgLmJ0bi1nb29nbGUgeyBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tYmx1ZS1tdXRlZC1yZ2IpLCAwLjYpOyBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctYmx1ZS1tZCk7IH1cclxuI2F1dGhDb250ZW50IC5hdXRoLXN1Ym1pdCwgLmF1dGgtY29udGVudCAuYXV0aC1zdWJtaXQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjQ1KTsgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWdyZWVuLW1kKSwgdmFyKC0tb3V0bGluZS13ZWFrKSBpbnNldDsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE1MG1zIGVhc2UsIGJveC1zaGFkb3cgMTUwbXMgZWFzZSwgYmFja2dyb3VuZCAxNTBtcyBlYXNlOyB9XHJcbiNhdXRoQ29udGVudCAuYXV0aC1zdWJtaXQ6aG92ZXIsIC5hdXRoLWNvbnRlbnQgLmF1dGgtc3VibWl0OmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50LWhvdmVyKTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyBib3gtc2hhZG93OiAwIDFyZW0gMi4xMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjMyKSwgMCAwIDAgMC4xODc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yNSkgaW5zZXQ7IH1cclxuI2F1dGhDb250ZW50IC5hdXRoLXN1Ym1pdDphY3RpdmUsIC5hdXRoLWNvbnRlbnQgLmF1dGgtc3VibWl0OmFjdGl2ZSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgYm94LXNoYWRvdzogMCAwLjM3NXJlbSAxcmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yMikgaW5zZXQ7IH1cclxuI2F1dGhDb250YWluZXI6OmFmdGVyLCAuYXV0aC1jb250YWluZXI6OmFmdGVyIHsgY29udGVudDogJyc7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgaW5zZXQ6IDA7IGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltYWdlcy9nb3JpbGxhLnBuZycpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjsgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsgZmlsdGVyOiBibHVyKDE4cHgpIHNhdHVyYXRlKDEuMDUpIGJyaWdodG5lc3MoMC45KTsgdHJhbnNmb3JtOiBzY2FsZSgxLjA0KTsgb3BhY2l0eTogMC45OyBwb2ludGVyLWV2ZW50czogbm9uZTsgei1pbmRleDogMDsgLXdlYmtpdC1tYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMCkgMCUsIHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMCkgNTglLCByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDEpIDc4JSwgcmdiYSh2YXIoLS1ibGFjay1yZ2IpLCAxKSAxMDAlKTsgbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDApIDAlLCByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDApIDU4JSwgcmdiYSh2YXIoLS1ibGFjay1yZ2IpLCAxKSA3OCUsIHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMSkgMTAwJSk7IH1cclxuI2F1dGhDb250YWluZXIgPiAqLCAuYXV0aC1jb250YWluZXIgPiAqIHsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxOyB9XHJcbkBtZWRpYSAobWluLXdpZHRoOiA1Ni4yNXJlbSkgeyAjYXV0aENvbnRhaW5lciwgLmF1dGgtY29udGFpbmVyIHsgZmxleC1kaXJlY3Rpb246IHJvdzsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyLCBjZW50ZXIsIGxlZnQgY2VudGVyOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS01MCkgdmFyKC0tc3BhY2UtMjQpIHZhcigtLXNwYWNlLTEwKTsgfSAjYXV0aENvbnRlbnQsIC5hdXRoLWNvbnRlbnQgeyB3aWR0aDogbWluKHZhcigtLW1heC13LXhsKSwgOTQlKTsgbWFyZ2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogbWluKDh2dywgNnJlbSk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTEwKSB2YXIoLS1zcGFjZS0xMCkgdmFyKC0tc3BhY2UtOSk7IH0gfVxyXG4vKiBBdXRoIGNhbGxiYWNrIHN0YXRpYyBzaGVsbCAqL1xyXG4uYXV0aC1jYWxsYmFjay1zY3JlZW4ge1xyXG4gIG1pbi1oZWlnaHQ6IDEwMHN2aDtcclxuICBtaW4taGVpZ2h0OiAxMDBkdmg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLTEwKTtcclxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZy1tdXRlZCk7XHJcbn1cclxuLmF1dGgtY2FsbGJhY2stY2FyZCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZ2FwOiB2YXIoLS1zcGFjZS02KTtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgcGFkZGluZzogdmFyKC0tc3BhY2UtOCk7XHJcbiAgbWF4LXdpZHRoOiB2YXIoLS1tYXgtdy1tb2RhbCk7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcclxuICBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXItc3Ryb25nKTtcclxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZy1lbGV2YXRlZCk7XHJcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTtcclxuICBib3gtc2hhZG93OiAwIDEuMjVyZW0gMi41cmVtIHJnYmEodmFyKC0tYmxhY2stcmdiKSwgIDAuMzUpO1xyXG59XHJcbi5hdXRoLWNhbGxiYWNrLWNhcmQgLnNwaW5uZXIge1xyXG4gIHdpZHRoOiB2YXIoLS1zcGFjZS0yMCk7XHJcbiAgaGVpZ2h0OiB2YXIoLS1zcGFjZS0yMCk7XHJcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1zcGFjZS0yKTtcclxuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWJvcmRlcik7XHJcbiAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcclxufVxyXG4vKiBCYWRnZSBvbiBNZXNzYWdlcyBidXR0b24gKi9cclxuLm1lc3NhZ2UtY291bnQtYmFkZ2V7IFxuICBwb3NpdGlvbjogYWJzb2x1dGU7IFxyXG4gIHRvcDogY2FsYyh2YXIoLS1zcGFjZS00KSAqIC0xKTsgXHJcbiAgcmlnaHQ6IGNhbGModmFyKC0tc3BhY2UtNCkgKiAtMSk7IFxyXG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudCk7IFxyXG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpOyBcclxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7IFxyXG4gIG1pbi13aWR0aDogdmFyKC0tc3BhY2UtMTApOyBcclxuICBoZWlnaHQ6IHZhcigtLXNwYWNlLTEwKTsgXHJcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LTEyKTsgXHJcbiAgZm9udC13ZWlnaHQ6IDcwMDsgXHJcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7IFxyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7IFxyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyOyBcclxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTYwbXMgZWFzZSwgYm94LXNoYWRvdyAxNjBtcyBlYXNlO1xyXG4gIGJveC1zaGFkb3c6IFxyXG4gICAgMCAwLjEyNXJlbSAwLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuMyksXHJcbiAgICAwIDAgMC43NXJlbSByZ2JhKHZhcigtLWdyZWVuLW5lb24tcmdiKSwgMC4yKTtcclxufVxyXG4ubWVzc2FnZS1jb3VudC1iYWRnZS5uZXctbWVzc2FnZSB7XHJcbiAgYW5pbWF0aW9uOiBtZXNzYWdlTm90aWZpY2F0aW9uUHVsc2UgNHMgZWFzZS1pbi1vdXQsIG1lc3NhZ2VOb3RpZmljYXRpb25Cb3VuY2UgMS4ycyBjdWJpYy1iZXppZXIoMC42OCwgLTAuNTUsIDAuMjY1LCAxLjU1KTtcclxufVxyXG4ubWVzc2FnZS1jb3VudC1iYWRnZS5hY3RpdmUtbm90aWZpY2F0aW9ucyB7XHJcbiAgYW5pbWF0aW9uOiBtZXNzYWdlTm90aWZpY2F0aW9uQnJlYXRoaW5nIDRzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xyXG59XHJcbiNkaXJlY3RNZXNzYWdlc0J0bi5oYXMtbm90aWZpY2F0aW9uczpob3ZlciAubWVzc2FnZS1jb3VudC1iYWRnZSwgLmJ0bi1kaXJlY3QtbWVzc2FnZXMuaGFzLW5vdGlmaWNhdGlvbnM6aG92ZXIgLm1lc3NhZ2UtY291bnQtYmFkZ2Uge1xyXG4gIHRyYW5zZm9ybTogc2NhbGUoMS4xKSByb3RhdGUoNWRlZyk7XHJcbiAgYW5pbWF0aW9uOiBtZXNzYWdlTm90aWZpY2F0aW9uSG92ZXIgMC42cyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XHJcbn1cclxuQGtleWZyYW1lcyBtZXNzYWdlTm90aWZpY2F0aW9uSG92ZXIge1xyXG4gIDAlIHtcclxuICAgIGJveC1zaGFkb3c6IFxyXG4gICAgICAwIDAuMTg3NXJlbSAwLjc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjUpLFxyXG4gICAgICAwIDAgMS4xMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuMyksXHJcbiAgICAgIDAgMCAwIDAuMTI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjE1KTtcclxuICB9XHJcbiAgMTAwJSB7XHJcbiAgICBib3gtc2hhZG93OiBcclxuICAgICAgMCAwLjI1cmVtIDFyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuNyksXHJcbiAgICAgIDAgMCAxLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuNSksXHJcbiAgICAgIDAgMCAwIDAuMTg3NXJlbSByZ2JhKHZhcigtLWdyZWVuLW5lb24tcmdiKSwgMC4yNSk7XHJcbiAgfVxyXG59XHJcbi8qIERpcmVjdCBNZXNzYWdlcyAoTWVzc2FnZXMpIG5hdiBidXR0b246IHJlZHVjZSBob3Jpem9udGFsIHBhZGRpbmcgc28gdG90YWwgdmlzdWFsIHdpZHRoIChpbmNsdWRpbmcgYmFkZ2UpIG1hdGNoZXMgc2libGluZ3MgKi9cclxuI2RpcmVjdE1lc3NhZ2VzQnRuLCAuYnRuLWRpcmVjdC1tZXNzYWdlcyB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgcGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS00KTsgcGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2UtNCk7IGZsZXg6IDAgMCBhdXRvOyB3aWR0aDogYXV0bzsgfVxyXG4vKiBQbGFjZSBiYWRnZSBqdXN0IGluc2lkZSB0aGUgdG9wLXJpZ2h0IGNvcm5lciBpbnN0ZWFkIG9mIGZhciBvdXRzaWRlIHRvIHByZXNlcnZlIHVuaWZvcm0gZmxleCBnYXAgKi9cclxuI2RpcmVjdE1lc3NhZ2VzQnRuIC5tZXNzYWdlLWNvdW50LWJhZGdlLCAuYnRuLWRpcmVjdC1tZXNzYWdlcyAubWVzc2FnZS1jb3VudC1iYWRnZSB7IHJpZ2h0OiB2YXIoLS1zcGFjZS0xKTsgdG9wOiBjYWxjKHZhcigtLXNwYWNlLTQpICogLTEpOyB9XHJcbi8qIFN0YXR1cyBpbmxpbmUgYmFubmVyIGluIGhlYWRlciAqL1xyXG4uc3RhdHVzLWJhbm5lciB7IG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjZS0xMik7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTgpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTQpOyBmb250LXdlaWdodDogNzAwOyB9XHJcbi5zdGF0dXMtYmFubmVyLmVycm9yIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZGFuZ2VyKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgfVxyXG4uc3RhdHVzLWJhbm5lci53YXJuIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itd2FybmluZyk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpOyB9XHJcbi5zdGF0dXMtYmFubmVyLnN1Y2Nlc3MgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgfVxyXG4uc3RhdHVzLWJhbm5lci5pbmZvIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctbXV0ZWQpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XHJcbi8qIE1vZGVyYXRpb24gRGFzaGJvYXJkICovXHJcbi5zdGF0dXMtb3BlbiB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXdhcm5pbmcpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgfVxyXG4uc3RhdHVzLWluX3JldmlldyB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJsdWUpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XHJcbi5zdGF0dXMtY2xvc2VkIHsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc3VyZmFjZS1ob3Zlcik7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTsgfVxyXG4uYWN0aW9uLXdhcm4geyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci13YXJuaW5nKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IH1cclxuLmFjdGlvbi1zdXNwZW5kIHsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itd2FybmluZyk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpOyB9XHJcbi5hY3Rpb24tYmFuIHsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgfVxyXG4uYWN0aW9uLXJlaW5zdGF0ZSB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpOyB9XHJcbi8qIChtb2RhbCBiYXNlIGNvbG9ycyBjb25zb2xpZGF0ZWQgaW50byBmdWxsIG1vZGFsIGJsb2NrIGJlbG93KSAqL1xyXG4vKiBBdXRoIHNjcmVlbnMgKGNvbXBvbmVudCBmaWVsZHMpICovXHJcbi5hdXRoLXRpdGxlIHsgdGV4dC1hbGlnbjpjZW50ZXI7IGZvbnQtc2l6ZTogY2xhbXAoMS41cmVtLCAxLjI1cmVtICsgMXZ3LCAxLjc1cmVtKTsgZm9udC13ZWlnaHQ6IDgwMDsgY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KTsgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNyk7IH1cclxuLmF1dGgtZm9ybSB7IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246Y29sdW1uOyBnYXA6dmFyKC0tc3BhY2UtNik7IH1cclxuLmF1dGgtaW5wdXQgeyB3aWR0aDoxMDAlOyBiYWNrZ3JvdW5kOnZhcigtLWlucHV0LWJnKTsgYm9yZGVyOnZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXItc3Ryb25nKTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOnZhcigtLXNwYWNlLTYpIHZhcigtLXNwYWNlLTcpOyBjb2xvcjp2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IH1cclxuLmF1dGgtaW5wdXQ6Zm9jdXN7IG91dGxpbmU6bm9uZTsgYm9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCk7IH1cclxuLmF1dGgtc3VibWl0IHsgd2lkdGg6MTAwJTsgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMik7IHBhZGRpbmc6dmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtNyk7IGJvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKTsgZm9udC13ZWlnaHQ6ODAwOyB9XHJcbi5hdXRoLWRpdmlkZXIgeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOnZhcigtLXNwYWNlLTcpOyBtYXJnaW46IHZhcigtLXNwYWNlLTkpIDA7IH1cclxuLmF1dGgtZGl2aWRlciAubGluZSB7IGZsZXg6MTsgaGVpZ2h0OnZhcigtLXNwYWNlLTAtNSk7IGJhY2tncm91bmQ6dmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7IH1cclxuLmF1dGgtZGl2aWRlciAuYXV0aC1vciB7IGNvbG9yOnZhcigtLWNvbG9yLXRleHQtc3VidGxlKTsgZm9udC13ZWlnaHQ6NjAwOyBmb250LXNpemU6dmFyKC0tZm9udC0xMik7IGxldHRlci1zcGFjaW5nOi4xZW07IH1cclxuLmF1dGgtbGlua3Mtcm93IHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBtYXJnaW4tdG9wOnZhcigtLXNwYWNlLTcpOyBjb2xvcjp2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgZm9udC1zaXplOnZhcigtLWZvbnQtMTQpOyB9XHJcbi5hdXRoLWxpbmsgeyBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50OyBib3JkZXI6bm9uZTsgY29sb3I6dmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7IGN1cnNvcjpwb2ludGVyOyBwYWRkaW5nOjA7IH1cclxuLmF1dGgtbGluazpob3ZlciB7IGNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCk7IH1cclxuLmF1dGgtZ3Vlc3QgeyB0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7IH1cclxuLmF1dGgtZ3Vlc3QtbGluayB7IGJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7IGJvcmRlcjpub25lOyBjb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQtaG92ZXIpOyBmb250LXdlaWdodDo2MDA7IGN1cnNvcjpwb2ludGVyOyB9XHJcbi5hdXRoLWd1ZXN0LWxpbms6aG92ZXJ7IGNvbG9yOnZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgfVxyXG4vKiBDaGFydCBDb21wb25lbnRzICovXHJcbi5jaGFydC1jb250YWluZXIgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogY2xhbXAoMTZyZW0sIDQyc3ZoLCAyOHJlbSk7IG1pbi1oZWlnaHQ6IHZhcigtLWNoYXJ0LW1pbi1oKTsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXItc3Ryb25nKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kLXBsdXMpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTsgZmxleC1ncm93OiAxOyB9XHJcbi5jaGFydC10aW1lbGluZS1idXR0b25zIHtcbiAgLyogTmV1dHJhbGl6ZSB0aGUgd3JhcHBlciB2aXN1YWxzIGFuZCBtYWtlIGl0IGEgcHVyZSBsYXlvdXQgcm93ICovXG4gIGJvcmRlcjogMDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIC8qIEZ1bGwgd2lkdGggcm93IGFsaWduZWQgd2l0aCBjaGFydCAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgZ2FwOiB2YXIoLS1zcGFjZS0yKTtcbiAgcGFkZGluZzogMDtcbiAgd2lkdGg6IDEwMCU7XG59XHJcbi8qIEExMXk6IGVuc3VyZSBjaGFydCBhcmlhLWxpdmUgcmVnaW9uIHN0YXlzIGludmlzaWJsZSB0byBzaWdodGVkIHVzZXJzIGV2ZW4gaWYgVGFpbHdpbmQgc3R5bGVzIGFyZSBtaXNzaW5nICovXHJcbi8qIG1vdmVkIHRvIHV0aWxpdGllcy5jc3M6ICNjaGFydEFyaWFMaXZlIHJ1bGVzIChhMTF5KSAqL1xyXG4vKiBtb3ZlZCB0byB3YXRjaGxpc3QuY3NzOiBXYXRjaGxpc3QgRHJhd2VyIChtb2JpbGUpICovXHJcbkBrZXlmcmFtZXMgd2xCb2x0UHVsc2UgeyAwJSwxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfSA1MCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMTIpOyB9IH1cclxuLyogU0VDIEJvdCBoZWFkZXIgc2NhbGluZyAodGl0bGUgKyBtYWduaWZpZXIpICovXHJcbiNzZWNCb3RQYWdlIC5zZWMtYm90LWhlYWRlciBoMyB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0yOCk7IGxpbmUtaGVpZ2h0OiAxLjE7IH1cclxuI3NlY0JvdFBhZ2UgLnNlYy1ib3QtaGVhZGVyIC5pY29uLW1hZ25pZnkgeyB3aWR0aDogdmFyKC0tc3BhY2UtMTQpOyBoZWlnaHQ6IHZhcigtLXNwYWNlLTE0KTsgfVxyXG4vKiBOZXcgZmlsaW5ncyBjaGlwIGJlbmVhdGggaGVhZGVyICovXHJcbiNzZWNCb3RQYWdlIC5zZWMtYm90LW5ldy1jaGlwIHsgbWFyZ2luOiB2YXIoLS1zcGFjZS00KSBhdXRvIHZhcigtLXNwYWNlLTIpOyBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTIpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMzUpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XHJcbiNzZWNCb3RQYWdlIC5zZWMtYm90LW5ldy1jaGlwOmhvdmVyIHsgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWdyZWVuLXNtKTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAvKiBTdG9jayBjaGFydDogb24gbW9iaWxlLCBhbGxvdyB0aGUgY2hhcnQgdG8gZmxleCBhbmQgZmlsbCByZW1haW5pbmcgc3BhY2UgKi9cbiAgI21haW5QYWdlLnZpZXctc3RvY2sgLnN0b2NrLXNlY3Rpb24geyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBtaW4taGVpZ2h0OiAwOyB9XG4gICNtYWluUGFnZS52aWV3LXN0b2NrIC5zdG9jay1zZWN0aW9uIC5jaGFydC1jb250YWluZXIge1xuICAgIGhlaWdodDogYXV0bzsgICAgICAgICAgIC8qIHJlbW92ZSBmaXhlZCBjbGFtcCBoZWlnaHQgKi9cbiAgICBtaW4taGVpZ2h0OiAwOyAgICAgICAgICAvKiBhbGxvdyB0byBzaHJpbmsgaWYgbmVlZGVkICovXG4gICAgZmxleDogMSAxIGF1dG87ICAgICAgICAgLyogZmlsbCB0aGUgY29sdW1uIGJldHdlZW4gaGVhZGVyL21ldHJpY3MgYW5kIHRpbWVsaW5lICovXG4gIH1cbiAgI21haW5QYWdlLnZpZXctc3RvY2sgLnN0b2NrLXNlY3Rpb24gLmNoYXJ0LWNvbnRhaW5lciBjYW52YXMsXG4gICNtYWluUGFnZS52aWV3LXN0b2NrIC5zdG9jay1zZWN0aW9uICNzdG9ja0NoYXJ0IHtcbiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XHJcbi8qIERldGFpbCBCb3ggKi9cclxuLmRldGFpbC1ib3ggeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZy1tdXRlZCk7IGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpOyB0ZXh0LWFsaWduOiBjZW50ZXI7IG1pbi1oZWlnaHQ6IHZhcigtLWRldGFpbC1ib3gtbWluLWgpOyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxyXG4uZGV0YWlsLWJveDpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgfVxyXG4uZGV0YWlsLWJveCAubGFiZWwgeyBmb250LXNpemU6IHZhcigtLWZvbnQtMTEpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1kaW0pOyBkaXNwbGF5OiBibG9jazsgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGZvbnQtd2VpZ2h0OiA2MDA7IH1cclxuLmRldGFpbC1ib3ggLnZhbHVlIHsgZm9udC1zaXplOiB2YXIoLS1mb250LTE0KTsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgZGlzcGxheTogYmxvY2s7IG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTAtNSk7IH1cclxuLmRldGFpbC1ib3ggLnZhbHVlLmlzLW5hIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3VidGxlKTsgfVxyXG4uZGV0YWlsLWJveCAudmFsdWUtc2Vjb25kYXJ5IHsgZGlzcGxheTogYmxvY2s7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMSk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWRpbSk7IGZvbnQtd2VpZ2h0OiA0MDA7IH1cclxuLyogU3RvY2sgc2VjdGlvbi1vbmx5IG92ZXJyaWRlcyB0byBtYXRjaCBvcmlnaW5hbCB0aWxlcyAqL1xyXG4uc3RvY2stc2VjdGlvbiAuZGV0YWlsLWJveCB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IH1cclxuLnN0b2NrLXNlY3Rpb24gLmRldGFpbC1ib3ggLmxhYmVsIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyB9XHJcbi8qIFN0b2NrIEhlYWRlciAqL1xyXG4jc3RvY2tIZWFkZXIsIC5zdG9jay1oZWFkZXIgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKHZhcigtLWRhcmstMTgtcmdiKSwgMC45MiksIHJnYmEodmFyKC0tZGFyay0xMC1yZ2IpLCAwLjgyKSk7IGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlci1zdHJvbmcpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQtcGx1cyk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpIHZhcigtLXNwYWNlLTgpIHZhcigtLXNwYWNlLTQpOyBib3gtc2hhZG93OiAwIDAuNjI1cmVtIDEuODc1cmVtIHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMC4zKSwgaW5zZXQgMCB2YXIoLS1zcGFjZS0xKSAwIHJnYmEodmFyKC0td2hpdGUtcmdiKSwgMC4wNik7IH1cclxuLmhlYWRlci10b3AtYmFyIHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTsgcGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTgpOyBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxyXG4uc3RvY2staWRlbnRpdHkgaDIgeyBmb250LXNpemU6IHZhcigtLWZvbnQtMjgpOyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgbWFyZ2luOiAwOyBsaW5lLWhlaWdodDogMTsgfVxyXG4uc3RvY2staWRlbnRpdHkgLmNvbXBhbnktbmFtZSB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMyk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRsZSk7IG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpOyB9XHJcbi5zdG9jay1hY3Rpb25zIHsgZGlzcGxheTogZmxleDsgZ2FwOiB2YXIoLS1zcGFjZS0zKTsgfVxyXG4ucHJpY2UtZGlzcGxheS1hcmVhIHsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IGZsZXgtc2hyaW5rOiAwOyBtaW4td2lkdGg6IHZhcigtLXByaWNlLWRpc3BsYXktbWluLXcpOyB9XHJcbi5wcmljZS1kaXNwbGF5LWFyZWEgLnByaWNlIHsgZm9udC1zaXplOiB2YXIoLS1mb250LTQ0KTsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgbGluZS1oZWlnaHQ6IDE7IH1cclxuLnByaWNlLWRpc3BsYXktYXJlYSAuZGVsdGEgeyBmb250LXNpemU6IHZhcigtLWZvbnQtMTYpOyBmb250LXdlaWdodDogNjAwOyBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTsgfVxyXG4ucHJpY2UtZGlzcGxheS1hcmVhIC5kZWx0YS51cCB7IGNvbG9yOiB2YXIoLS1zdWNjZXNzLTQwMCk7IH1cclxuLnByaWNlLWRpc3BsYXktYXJlYSAuZGVsdGEuZG93biB7IGNvbG9yOiB2YXIoLS1kYW5nZXItNDAwKTsgfVxyXG4uc3RhdHMtZ3JpZCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS0xMCk7IHdpZHRoOiAxMDAlOyB9XHJcbi5zdGF0cy1ncmlkID4gKiB7IGZsZXg6IDEgMSB2YXIoLS1zdGF0cy1taW4tdyk7IG1pbi13aWR0aDogdmFyKC0tc3RhdHMtbWluLXcpOyB9XHJcbi5zdGF0IHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTIpOyBsaW5lLWhlaWdodDogMS40OyB9XHJcbi5zdGF0LWxhYmVsIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3VidGxlKTsgfVxyXG4uc3RhdC12YWx1ZSB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IGZvbnQtd2VpZ2h0OiA2MDA7IH1cclxuLnN0YXQtdmFsdWUuaGlnaCB7IGNvbG9yOiB2YXIoLS1zdWNjZXNzLTQwMCk7IH1cclxuLnN0YXQtdmFsdWUubG93IHsgY29sb3I6IHZhcigtLWRhbmdlci00MDApOyB9XHJcbi5zdGF0LXZhbHVlLnZvbHVtZSB7IGNvbG9yOiB2YXIoLS1jb2xvci1ibHVlKTsgfVxyXG4uc3RhdC12YWx1ZS5uZXV0cmFsIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyB9XHJcbi8qIE90aGVyIFBhZ2VzIChETSwgRmlsaW5ncywgSG9tZSkgKi9cclxuI2hvbWVQYWdlOm5vdCguaGlkZGVuKSB7IGRpc3BsYXk6IGZsZXg7IGhlaWdodDogMTAwJTsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTEwKTsgfVxyXG4uaG9tZS1zZWFyY2gtY2VudGVyIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IHdpZHRoOiAxMDAlOyBtYXgtd2lkdGg6IHZhcigtLW1heC13LWhvbWUpOyBtYXJnaW46IDAgYXV0bzsgfVxyXG4uaG9tZS10aXRsZSB7IGZvbnQtc2l6ZTogY2xhbXAoMnJlbSwgMS4ycmVtICsgNHZ3LCAzcmVtKTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0yMCk7IHRleHQtYWxpZ246IGNlbnRlcjsgfVxyXG4uaG9tZS1zZWFyY2gtY29udGFpbmVyIHsgZGlzcGxheTogZmxleDsgZ2FwOiB2YXIoLS1zcGFjZS02KTsgYWxpZ24taXRlbXM6IGNlbnRlcjsgbWF4LXdpZHRoOiB2YXIoLS1tYXgtdy1ob21lLXNlYXJjaCk7IHdpZHRoOiAxMDAlOyBwb3NpdGlvbjogcmVsYXRpdmU7IH1cclxuLmhvbWUtc2VhcmNoLWNvbnRhaW5lciAjaG9tZVNlYXJjaFN1Z2dlc3Rpb25zIHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IGNhbGMoMTAwJSArIHZhcigtLXNwYWNlLTMpKTsgbGVmdDogMDsgd2lkdGg6IDEwMCU7IH1cclxuLmhvbWUtc2VhcmNoLWlucHV0IHsgd2lkdGg6IDEwMCU7IGZsZXg6IDE7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLWVsZXZhdGVkKTsgYm9yZGVyOiB2YXIoLS1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS04KSB2YXIoLS1zcGFjZS0xMCk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNik7IHRyYW5zaXRpb246IGJveC1zaGFkb3cgLjE4cyBlYXNlLCBiYWNrZ3JvdW5kIC4xOHMgZWFzZTsgYm94LXNoYWRvdzogMCAwIDAuMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjI1KSwgMCAwIDAuNjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4xNSkgaW5zZXQ7IH1cclxuLmhvbWUtc2VhcmNoLWlucHV0OmZvY3VzIHsgb3V0bGluZTogbm9uZTsgYmFja2dyb3VuZDp2YXIoLS1pbnB1dC1iZy1mb2N1cyk7IGJveC1zaGFkb3c6IDAgMCAwLjQzNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjU1KSwgMCAwIDAuODc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yNSkgaW5zZXQ7IH1cclxuLyogbW92ZWQgdG8gYnV0dG9ucy5jc3M6IC5ob21lLXNlYXJjaC1idG4gKi9cclxuLyogTm90aWZpY2F0aW9uIGNvbnRhaW5lcnMgKi9cclxuI25vdGlmaWNhdGlvbkNvbnRhaW5lciB7IHBvc2l0aW9uOiBmaXhlZDsgdG9wOiBjYWxjKHZhcigtLWxheW91dC1oZWFkZXItaGVpZ2h0KSArIHZhcigtLXNwYWNlLTItNSkpOyByaWdodDogdmFyKC0tc3BhY2UtMTApOyB6LWluZGV4OiB2YXIoLS16LXRvYXN0KTsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiB2YXIoLS1zcGFjZS01KTsgfVxyXG4jbm90aWZpY2F0aW9uQ29udGFpbmVyIC5ub3RpZmljYXRpb24geyBwYWRkaW5nOiB2YXIoLS1zcGFjZS03LTUpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBtYXJnaW46IHZhcigtLXNwYWNlLTQpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyBmb250LXdlaWdodDogNzAwOyBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbW9kYWwpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCBjdXJyZW50Q29sb3I7IGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQsIGZhZGVPdXQgMC4zcyBlYXNlLWluIDQuN3MgZm9yd2FyZHM7IH1cclxuLm5vdGlmaWNhdGlvbi5lcnJvciB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWRhbmdlcik7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyLWhvdmVyKTsgfVxyXG4ubm90aWZpY2F0aW9uLnN1Y2Nlc3MgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyB9XHJcbi8qIFNlYXJjaCBzdWdnZXN0aW9ucyBtZW51ICovXHJcbi5zdWdnZXN0aW9ucyB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tcmFkaXVzLW1kKSB2YXIoLS1yYWRpdXMtbWQpOyBtYXJnaW4tdG9wOiBjYWxjKHZhcigtLXNwYWNlLTEpICogLTEpOyBtYXgtaGVpZ2h0OiB2YXIoLS1iaW8tbWF4LWgpOyBvdmVyZmxvdy15OiBhdXRvOyB9XHJcbi5zdWdnZXN0aW9uLWl0ZW0geyBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS04KTsgY3Vyc29yOiBwb2ludGVyOyBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyB9XHJcbi5zdWdnZXN0aW9uLWl0ZW06bGFzdC1jaGlsZCB7IGJvcmRlci1ib3R0b206IG5vbmU7IH1cclxuLnN1Z2dlc3Rpb24taXRlbTpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UtaG92ZXIpOyB9XHJcbi5zdWdnZXN0aW9uLWl0ZW0uc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgfVxyXG4uc3VnZ2VzdGlvbi10aWNrZXIgeyBmb250LXdlaWdodDogYm9sZDsgfVxyXG4uc3VnZ2VzdGlvbi1uYW1lIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyB9XHJcbi5zdWdnZXN0aW9uLWl0ZW0uc2VsZWN0ZWQgLnN1Z2dlc3Rpb24tbmFtZSB7IGNvbG9yOiB2YXIoLS1jb2xvci1ib3JkZXItc3Ryb25nKTsgfVxyXG4vKiBTdGF0dXMgcG9wb3ZlciAqL1xyXG4uc3RhdHVzLXBvcG92ZXIgeyBwb3NpdGlvbjogZml4ZWQ7IHotaW5kZXg6IHZhcigtLXotcG9wb3Zlcik7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLWVsZXZhdGVkKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgd2lkdGg6IG1pbig5MnZ3LCB2YXIoLS1wb3BvdmVyLW1heC13KSk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIHZhcigtLXNwYWNlLTcpOyBib3gtc2hhZG93OiAwIDAuNzVyZW0gMS43NXJlbSByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDAuNik7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IH1cclxuLnN0YXR1cy1wb3BvdmVyIC5zcC1oZWFkIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBnYXA6IHZhcigtLXNwYWNlLTQpOyB9XHJcbi5zdGF0dXMtcG9wb3ZlciAuc3Atbm90ZSB7IGNvbG9yOiB2YXIoLS1jb2xvci13YXJuaW5nKTsgZm9udC1zaXplOiB2YXIoLS1mb250LTEyKTsgfVxyXG4uc3RhdHVzLXBvcG92ZXIgLnNwLXRpdGxlIHsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGZvbnQtc2l6ZTogY2xhbXAoMXJlbSwgMC45NXJlbSArIDAuMjV2dywgMS4xMjVyZW0pOyB9XHJcbi5zdGF0dXMtcG9wb3ZlciAuc3AtY2xvc2UgeyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0yMik7IGN1cnNvcjogcG9pbnRlcjsgfVxyXG4uc3RhdHVzLXBvcG92ZXIgLnNwLXJvdyB7IGRpc3BsYXk6IGZsZXg7IGdhcDogdmFyKC0tc3BhY2UtNCk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMyk7IG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpOyB9XHJcbi5zdGF0dXMtcG9wb3ZlciAuc3Atcm93ID4gOmZpcnN0LWNoaWxkIHsgZmxleDogMCAwIDEycmVtOyB9XHJcbi5zdGF0dXMtcG9wb3ZlciAuc3Atcm93ID4gOm50aC1jaGlsZCgyKSB7IGZsZXg6IDEgMSBhdXRvOyBtaW4td2lkdGg6IDA7IH1cclxuLnN0YXR1cy1wb3BvdmVyIC5zcC1sYWJlbCB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiB2YXIoLS1mb250LTExKTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IC4wMmVtOyB9XHJcbi5zdGF0dXMtcG9wb3ZlciAuc3AtYWN0aW9ucyB7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IGdhcDogdmFyKC0tc3BhY2UtNCk7IG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpOyBmbGV4LXdyYXA6IHdyYXA7IH1cclxuLnN0YXR1cy1wb3BvdmVyIC5zcC1hY3Rpb25zIC5idG4tcHJpbWFyeSwgLnN0YXR1cy1wb3BvdmVyIC5zcC1hY3Rpb25zIC5idG4tb3V0bGluZSB7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTUpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCBjdXJyZW50Q29sb3I7IH1cclxuQG1lZGlhIChtYXgtd2lkdGg6IDMwcmVtKSB7IC5zdGF0dXMtcG9wb3ZlciAuc3Atcm93IHsgZmxleC13cmFwOiB3cmFwOyB9IH1cclxuLyogRW5zdXJlIG1lc3NhZ2Ugb3ZlcmxheXMgKHRpbWVzdGFtcHMsIGFjdGlvbnMpIGFyZW4ndCBjbGlwcGVkICovXHJcbi5tZXNzYWdlIHsgb3ZlcmZsb3c6IHZpc2libGU7IH1cclxuLnNwaW5uZXIgeyB3aWR0aDogdmFyKC0tc3Bpbm5lcik7IGhlaWdodDogdmFyKC0tc3Bpbm5lcik7IGJvcmRlcjogdmFyKC0tc3BhY2UtMykgc29saWQgdmFyKC0tY29sb3Itc3VyZmFjZSk7IGJvcmRlci10b3AtY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGJvcmRlci1yYWRpdXM6IDUwJTsgYW5pbWF0aW9uOiBzcGluIDAuOHMgbGluZWFyIGluZmluaXRlOyB9XHJcbkBrZXlmcmFtZXMgc3BpbiB7IHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfSB9XHJcbi8qIFdhdGNobGlzdCBtYW5hZ2VtZW50ICovXHJcbi8qIG1vdmVkIHRvIHdhdGNobGlzdC5jc3M6IHN1Ymdyb3VwICYgdGFibGUgVUkgKi9cclxuLnN1Z2dlc3Rpb24tbWVudSB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgYm94LXNoYWRvdzogMCAwLjc1cmVtIDEuNXJlbSByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDAuNSk7IHotaW5kZXg6IHZhcigtLXotcG9wb3Zlcik7IG1heC1oZWlnaHQ6IHZhcigtLW1lbnUtbWF4LWgpOyBvdmVyZmxvdy15OiBhdXRvOyBvdmVyZmxvdy14OiBoaWRkZW47IHNjcm9sbGJhci13aWR0aDogYXV0bzsgfVxyXG4uc3VnZ2VzdGlvbi1tZW51IC5zdWdnZXN0aW9uLWl0ZW0geyBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBmbGV4OyAtbW96LWNvbHVtbi1nYXA6IHZhcigtLXNwYWNlLTUpOyBjb2x1bW4tZ2FwOiB2YXIoLS1zcGFjZS01KTsgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyB9XHJcbi5zdWdnZXN0aW9uLW1lbnUgLnN1Z2dlc3Rpb24taXRlbSA+IDpmaXJzdC1jaGlsZCB7IGZsZXg6IDAgMCBhdXRvOyB9XHJcbi5zdWdnZXN0aW9uLW1lbnUgLnN1Z2dlc3Rpb24taXRlbSA+IDpudGgtY2hpbGQoMikgeyBmbGV4OiAxIDEgYXV0bzsgbWluLXdpZHRoOiAwOyB9XHJcbi5zdWdnZXN0aW9uLW1lbnUgLnN1Z2dlc3Rpb24taXRlbSAuc3ltYm9sIHsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGZvbnQtd2VpZ2h0OiA3MDA7IH1cclxuLnN1Z2dlc3Rpb24tbWVudSAuc3VnZ2VzdGlvbi1pdGVtIC5uYW1lIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTIpOyB9XHJcbi5zdWdnZXN0aW9uLW1lbnUgLnN1Z2dlc3Rpb24taXRlbTpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4wOCk7IH1cclxuLnN1Z2dlc3Rpb24tbWVudSAuc3VnZ2VzdGlvbi1pdGVtLmFjdGl2ZSB7IGJhY2tncm91bmQ6IHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4xNSk7IGJvcmRlci1sZWZ0OiB2YXIoLS1zcGFjZS0zKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyB9XHJcbi8qIE1lbnRpb24gc3VnZ2VzdGlvbnMgYmVsb25nIHRvIGNoYXQgbW9kdWxlIChjb21wb25lbnRzLmNoYXQuY3NzKSAqL1xyXG4vKiBtb3ZlZDogLndhdGNobGlzdC1lbXB0eS1ncm91cCB0byB3YXRjaGxpc3QuY3NzICovXHJcbi8qIFVLIEZpbGluZ3MgUGFnZSAqL1xyXG4udWstZmlsaW5ncy1zZWFyY2gtY29udGFpbmVyIHsgZGlzcGxheTogZmxleDsgZ2FwOiB2YXIoLS1zcGFjZS04KTsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTE2KTsgfVxyXG4udWstZmlsaW5ncy1pbnB1dCB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLW11dGVkKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgcGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtOCk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNik7IC8qIG1pbi13aWR0aCByZW1vdmVkIGZvciBtb2JpbGUgZnJpZW5kbGluZXNzICovIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxNjBtcyBlYXNlOyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiB2YXIoLS1tYXgtdy14bCk7IH1cclxuLnVrLWZpbGluZ3MtaW5wdXQ6Zm9jdXMgeyBvdXRsaW5lOiBub25lOyBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IH1cclxuLnVrLWZpbGluZ3MtaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgeyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdWJ0bGUpOyB9XHJcbi51ay1maWxpbmdzLWlucHV0OjpwbGFjZWhvbGRlciB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRsZSk7IH1cclxuLyogbW92ZWQgdG8gYnV0dG9ucy5jc3M6IC51ay1maWxpbmdzLXNlYXJjaC1idG4gKi9cclxuLnVrLWZpbGluZ3MtcmVzdWx0cyB7IG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTE2KTsgfVxyXG4udWstZmlsaW5ncy10YWJsZSB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLW11dGVkKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgb3ZlcmZsb3c6IGhpZGRlbjsgYm94LXNoYWRvdzogMCAwLjI1cmVtIDAuNzVyZW0gcmdiYSh2YXIoLS1ibGFjay1yZ2IpLCAgMC4zKTsgfVxyXG4udWstZmlsaW5ncy10YWJsZSB0aCB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpOyBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgcGFkZGluZzogdmFyKC0tc3BhY2UtOCk7IHRleHQtYWxpZ246IGxlZnQ7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNCk7IGZvbnQtd2VpZ2h0OiA2MDA7IGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyB9XHJcbi51ay1maWxpbmdzLXRhYmxlIHRkIHsgcGFkZGluZzogdmFyKC0tc3BhY2UtOCk7IGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXItc3Ryb25nKTsgZm9udC1zaXplOiB2YXIoLS1mb250LTE0KTsgfVxyXG4udWstZmlsaW5ncy10YWJsZSB0cjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UtaG92ZXIpOyB9XHJcbi51ay1maWxpbmdzLXRhYmxlIHRyOmxhc3QtY2hpbGQgdGQgeyBib3JkZXItYm90dG9tOiBub25lOyB9XHJcbi8qIG1vdmVkOiB3YXRjaGxpc3QgdW5yZWFkIGJhZGdlIHN0eWxlcyB0byB3YXRjaGxpc3QuY3NzICovXHJcbi5zdWItYmFkZ2Utd3JhcCB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBnYXA6IHZhcigtLXNwYWNlLTIpOyBtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2UtMik7IH1cclxuLnN1Yi1iYWRnZSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgdG9wOiAwOyBiYWNrZ3JvdW5kOnZhcigtLWNvbG9yLXN1cmZhY2UpOyBjb2xvcjp2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgZm9udC1zaXplOnZhcigtLWZvbnQtOSk7IHBhZGRpbmc6MCB2YXIoLS1zcGFjZS0yKTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbWQtcGx1cyk7IGxpbmUtaGVpZ2h0OnZhcigtLXNwYWNlLTcpOyBoZWlnaHQ6dmFyKC0tc3BhY2UtNyk7IGRpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOnZhcigtLXNwYWNlLTIpOyB9XHJcbi5zdWItYmFkZ2Uuc2VjYm90LXN1YiB7IGJhY2tncm91bmQ6dmFyKC0tY29sb3Itd2FybmluZyk7IGNvbG9yOnZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IGJveC1zaGFkb3c6MCAwIDAuMjVyZW0gLTAuMDYyNXJlbSByZ2JhKHZhcigtLWFtYmVyLXJnYiksIDAuNik7IH1cclxuLyogU3RvY2sgVmlldyBTZWN0aW9uIC0gaGVhZGVyIGFyZWEgaGVscGVycyBhbHJlYWR5IGluIGxheW91dC9kZXRhaWwtYm94IGFib3ZlICovXHJcbi5zdG9jay1oZWFkZXIgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpOyB9XHJcbi8qIFNlYXJjaCBmb3JtcyBncmlkICsgei1pbmRleCB0d2Vha3MgKi9cclxuLnNlYXJjaC1mb3JtLWdyaWQgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogdmFyKC0tc3BhY2UtNCk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpOyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iZy1tdXRlZCk7IGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiAxMDAlOyB9XHJcbi5zZWFyY2gtZm9ybS1ncmlkID4gKiB7IGZsZXg6IDEgMSB2YXIoLS1zZWFyY2gtZ3JpZC1iYXNpcyk7IG1pbi13aWR0aDogdmFyKC0tc2VhcmNoLWdyaWQtbWluLXcpOyB9XHJcbi5zZWFyY2gtYWN0aW9ucyB7IG1hcmdpbi1sZWZ0OiBhdXRvOyBkaXNwbGF5OiBmbGV4OyBnYXA6IHZhcigtLXNwYWNlLTQpOyB9XHJcbi8qIFByb2ZpbGUgcGFnZTogbW9iaWxlIG92ZXJmbG93IHByb3RlY3Rpb24gYW5kIG9wdGlvbmFsIGFjdGlvbiBtZW51ICovXHJcbiNwcm9maWxlTW9iaWxlTWVudVRvZ2dsZSB7IGRpc3BsYXk6IG5vbmU7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB3aWR0aDogdmFyKC0tc3BhY2UtMjApOyBoZWlnaHQ6IHZhcigtLXNwYWNlLTIwKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgfVxyXG4jcHJvZmlsZU1vYmlsZU1lbnVUb2dnbGUgc3ZnIHsgd2lkdGg6IHZhcigtLWJ0bi1pY29uKTsgaGVpZ2h0OiB2YXIoLS1idG4taWNvbik7IH1cclxuI3Byb2ZpbGVNb2JpbGVNZW51IHsgZGlzcGxheTpub25lOyBwb3NpdGlvbjphYnNvbHV0ZTsgcmlnaHQ6IHZhcigtLXNwYWNlLTQpOyB0b3A6IDEwMCU7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLWVsZXZhdGVkKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1vZGFsKTsgei1pbmRleDogdmFyKC0tei1tZW51KTsgbWluLXdpZHRoOiB2YXIoLS1tZW51LW1pbi13KTsgfVxyXG4jcHJvZmlsZU1vYmlsZU1lbnUub3BlbiB7IGRpc3BsYXk6YmxvY2s7IH1cclxuI3Byb2ZpbGVNb2JpbGVNZW51IC5tZW51LWxpc3QgeyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgcGFkZGluZzogdmFyKC0tc3BhY2UtMyk7IGdhcDogdmFyKC0tc3BhY2UtMik7IH1cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQ3Ljk5cmVtKSB7XHJcbiAgI3Byb2ZpbGVNb2JpbGVNZW51VG9nZ2xlIHsgZGlzcGxheTogaW5saW5lLWZsZXg7IH1cclxufVxyXG4vKiBSZXNwb25zaXZlIHRhYmxlczogc3RhY2sgcm93cyBvbiBzbWFsbCBzY3JlZW5zIChubyBob3Jpem9udGFsIHNjcm9sbCkgKi9cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQ3Ljk5cmVtKSB7XHJcbiAgdGFibGUud2F0Y2hsaXN0LXN0b2NrLXRhYmxlLFxyXG4gIHRhYmxlLm1pbi13LWZ1bGwsXHJcbiAgdGFibGUudy1mdWxsIHsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyB9XHJcbiAgdGFibGUud2F0Y2hsaXN0LXN0b2NrLXRhYmxlIHRoZWFkLFxyXG4gIHRhYmxlLm1pbi13LWZ1bGwgdGhlYWQsXHJcbiAgdGFibGUudy1mdWxsIHRoZWFkIHsgZGlzcGxheTogbm9uZTsgfVxyXG4gIHRhYmxlLndhdGNobGlzdC1zdG9jay10YWJsZSB0Ym9keSB0cixcclxuICB0YWJsZS5taW4tdy1mdWxsIHRib2R5IHRyLFxyXG4gIHRhYmxlLnctZnVsbCB0Ym9keSB0ciB7IGRpc3BsYXk6IGJsb2NrOyBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxyXG4gIHRhYmxlLndhdGNobGlzdC1zdG9jay10YWJsZSB0ZCxcclxuICB0YWJsZS5taW4tdy1mdWxsIHRkLFxyXG4gIHRhYmxlLnctZnVsbCB0ZCB7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgcGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSk7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cclxuICAub3ZlcmZsb3cteC1hdXRvIHsgb3ZlcmZsb3cteDogdmlzaWJsZTsgfVxyXG59XHJcbi8qIFdhdGNobGlzdCBNYW5hZ2UgdG9vbGJhciB3cmFwcyBvbiBtb2JpbGUgKi9cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQ3Ljk5cmVtKSB7XHJcbiAgI3dsTWFuYWdlVG9vbGJhciAuZmxleCB7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiB2YXIoLS1zcGFjZS0zKTsgfVxyXG59XHJcbi5zZWFyY2gtYWN0aW9ucyB7IGRpc3BsYXk6IGZsZXg7IGdhcDogdmFyKC0tc3BhY2UtNCk7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IH1cclxuLmNoYXQtc2VhcmNoLWNvbnRhaW5lciwgLmRtLXNlYXJjaC1jb250YWluZXIsIC5wcm9maWxlLXNlYXJjaC1jb250YWluZXIsIC5ib29rbWFya3Mtc2VhcmNoLWNvbnRhaW5lciB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogbm9uZTsgfVxyXG4uY2hhdC1zZWFyY2gtY29udGFpbmVyLnZpc2libGUsIC5kbS1zZWFyY2gtY29udGFpbmVyLnZpc2libGUsIC5wcm9maWxlLXNlYXJjaC1jb250YWluZXIudmlzaWJsZSwgLmJvb2ttYXJrcy1zZWFyY2gtY29udGFpbmVyLnZpc2libGUgeyBkaXNwbGF5OiBibG9jazsgfVxyXG4vKiBTdGF0dXMgY2hpcHMgYW5kIHBvcG92ZXIgKi9cclxuLnN0YXR1cy1jaGlwIHsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogdmFyKC0tc3BhY2UtMik7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTQpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTMpOyBmb250LXdlaWdodDogNzAwOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNXMgZWFzZSwgYm94LXNoYWRvdyAwLjE1cyBlYXNlOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9XHJcbi5zdGF0dXMtY2hpcDpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSBzY2FsZSgxLjAyKTsgfVxyXG4uc3RhdHVzLWNoaXAtLXdhcm5pbmcgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci13YXJuaW5nKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IGJveC1zaGFkb3c6IDAgMCAwIDAuMTI1cmVtIHJnYmEodmFyKC0tYW1iZXItcmdiKSwgMC40NSk7IHRleHQtc2hhZG93OiB2YXIoLS10ZXh0LWdsb3ctYW1iZXIteHMpOyB9XHJcbi5zdGF0dXMtY2hpcC0tZGFuZ2VyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZGFuZ2VyKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgYm94LXNoYWRvdzogMCAwIDAgMC4xMjVyZW0gcmdiYSh2YXIoLS1kYW5nZXItc3Ryb25nLXJnYiksIDAuMzUpOyB0ZXh0LXNoYWRvdzogdmFyKC0tdGV4dC1nbG93LXJlZC14cyk7IH1cclxuLnN0YXR1cy1jaGlwLS13YXJuaW5nOmhvdmVyIHsgYm94LXNoYWRvdzogMCAwIDAgMC4xODc1cmVtIHJnYmEodmFyKC0tYW1iZXItcmdiKSwgMC42NSksIDAgMCAxLjI1cmVtIHJnYmEodmFyKC0tYW1iZXItcmdiKSwgMC40NSk7IH1cclxuLnN0YXR1cy1jaGlwLS1kYW5nZXI6aG92ZXIgeyBib3gtc2hhZG93OiAwIDAgMCAwLjE4NzVyZW0gcmdiYSh2YXIoLS1kYW5nZXItc3Ryb25nLXJnYiksIDAuNiksIDAgMCAxLjI1cmVtIHJnYmEodmFyKC0tZGFuZ2VyLXN0cm9uZy1yZ2IpLCAwLjQpOyB9XHJcbi5wcm9maWxlLXN0YXR1cy1jaGlwIHsgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgUmVzcG9uc2l2ZSBjb21wb25lbnQgcmVmaW5lbWVudHNcclxuICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbi8qIE1vYmlsZTogbWFrZSBncmlkcyBhdXRvLWZpdCBhbmQgaW5wdXRzL2J1dHRvbnMgd3JhcCB3aXRob3V0IG92ZXJmbG93ICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xyXG4gIC8qIFN0b2NrIHN0YXRzIGdyaWQgYmVjb21lcyByZXNwb25zaXZlIHRvIGF2YWlsYWJsZSB3aWR0aCAqL1xyXG4gIC5zdGF0cy1ncmlkID4gKiB7IGZsZXg6IDEgMSA3LjVyZW07IH1cclxuXHJcbiAgLyogRGV0YWlsIGJveGVzIGFscmVhZHkgdXNlIGF1dG8tZml0IGluIGxheW91dC5jc3M7IGVuc3VyZSBjb25zaXN0ZW5jeSBoZXJlIHRvbyBpZiB1c2VkICovXHJcbiAgLmRldGFpbC1ib3gtZ3JpZCA+ICogeyBmbGV4OiAxIDEgNS42MjVyZW07IH1cclxuXHJcbiAgLyogVUsgZmlsaW5ncyBzZWFyY2g6IHN0YWNrIGNvbnRyb2xzIGZvciBuYXJyb3cgc2NyZWVucyAqL1xyXG4gIC51ay1maWxpbmdzLXNlYXJjaC1jb250YWluZXIgeyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogc3RyZXRjaDsgZ2FwOiB2YXIoLS1zcGFjZS01KTsgfVxyXG4gIC51ay1maWxpbmdzLWlucHV0IHsgd2lkdGg6IDEwMCU7IG1heC13aWR0aDogMTAwJTsgfVxyXG4gIC51ay1maWxpbmdzLXNlYXJjaC1idG4geyB3aWR0aDogMTAwJTsgfVxyXG59XHJcbi8qIFRhYmxldDogYWxsb3cgMi0zIGNvbHVtbnMgZGVwZW5kaW5nIG9uIHNwYWNlOyBrZWVwIGlucHV0cyBmbHVpZCAqL1xyXG5AbWVkaWEgKG1pbi13aWR0aDogNDhyZW0pIGFuZCAobWF4LXdpZHRoOiA2NHJlbSkge1xyXG4gIC5zdGF0cy1ncmlkID4gKiB7IGZsZXg6IDEgMSBjYWxjKDMzLjMzMyUgLSB2YXIoLS1zcGFjZS0xMCkpOyB9XHJcbiAgLnVrLWZpbGluZ3MtaW5wdXQgeyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiB2YXIoLS1tYXgtdy14bCk7IH1cclxufVxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgRmx1aWQgLyBwcm9wb3J0aW9uYWwgc2l6aW5nIG92ZXJyaWRlc1xyXG4gICBHb2FsOiBwcmV2ZW50IGNyYW1wZWQgb3IgYnJva2VuIGxheW91dHMgd2hlbiB1c2VycyB6b29tLlxyXG4gICBTdHJhdGVneTpcclxuICAgLSBJbnRyb2R1Y2UgYSBsaWdodCBzY2FsaW5nIHZhcmlhYmxlICgtLXR0LXNjYWxlKSBiYXNlZCBvbiB2dy5cclxuICAgLSBDb252ZXJ0IGtleSBmaXhlZCBwaXhlbCB3aWR0aHMvaGVpZ2h0cyB0byBjbGFtcCgpIG9yIHJlbGF0aXZlIHVuaXRzLlxyXG4gICAtIEFsbG93IHdyYXBwaW5nIGluIHRpZ2h0IGhvcml6b250YWwgcmVnaW9ucyAoLmhlYWRlci10b3AtYmFyLCB0aW1lbGluZSBidXR0b25zKS5cclxuICAgLSBVc2UgYXV0by1maXQgZ3JpZHMgc28gY2FyZHMgcmVmbG93IGluc3RlYWQgb2Ygb3ZlcmZsb3cuXHJcbiAgIFRoZXNlIG92ZXJyaWRlcyBhcmUgYWRkaXRpdmUgYW5kIHNpdCBhdCBlbmQgb2YgZmlsZSBmb3IgY2FzY2FkZSBwcmlvcml0eS5cclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG46cm9vdCB7XHJcbiAgLyogU2NhbGUgZ2VudGx5IHdpdGggdmlld3BvcnQgd2lkdGggKGJldHdlZW4gfjAuODV4IGFuZCB+MS4wNXggcm9vdCBzaXplKSAqL1xyXG4gIC0tdHQtc2NhbGU6IGNsYW1wKDAuODUsIDAuMjV2dyArIDAuOCwgMS4wNSk7XHJcbiAgLS10dC1zcGFjZS0xOiBjYWxjKDAuMjVyZW0gKiB2YXIoLS10dC1zY2FsZSkpO1xyXG4gIC0tdHQtc3BhY2UtMjogY2FsYygwLjVyZW0gKiB2YXIoLS10dC1zY2FsZSkpO1xyXG4gIC0tdHQtc3BhY2UtMzogY2FsYygwLjc1cmVtICogdmFyKC0tdHQtc2NhbGUpKTtcclxuICAtLXR0LXNwYWNlLTQ6IGNhbGMoMXJlbSAqIHZhcigtLXR0LXNjYWxlKSk7XHJcbn1cclxuLyogU3RvY2sgaGVhZGVyIHRvcCBiYXI6IGFsbG93IHdyYXBwaW5nIGluc3RlYWQgb2Ygb3ZlcmZsb3cgd2hlbiB6b29tZWQgKi9cclxuLmhlYWRlci10b3AtYmFyIHtcclxuICBmbGV4LXdyYXA6IHdyYXA7XHJcbiAgZ2FwOiB2YXIoLS10dC1zcGFjZS0zKSB2YXIoLS10dC1zcGFjZS00KTtcclxufVxyXG4vKiBNYWtlIGlkZW50aXR5ICsgcHJpY2UgdGV4dCBmbHVpZCAqL1xyXG4uc3RvY2staWRlbnRpdHkgaDIge1xyXG4gIGZvbnQtc2l6ZTogY2xhbXAoMS4yNXJlbSwgMXJlbSArIDEuMnZ3LCAxLjlyZW0pO1xyXG59XHJcbi5wcmljZS1kaXNwbGF5LWFyZWEge1xyXG4gIG1pbi13aWR0aDogY2xhbXAoOC43NXJlbSwgMTh2dywgMTIuNXJlbSk7XHJcbn1cclxuLnByaWNlLWRpc3BsYXktYXJlYSAucHJpY2Uge1xyXG4gIGZvbnQtc2l6ZTogY2xhbXAoMS43NXJlbSwgMS4ycmVtICsgMi4ydncsIDIuNzVyZW0pO1xyXG59XHJcbi8qIFN0YXRzIGdyaWQgYXV0by1maXRzIGluc3RlYWQgb2Ygc3RheWluZyByaWdpZCBhdCAzIGNvbHVtbnMgKi9cclxuLnN0YXRzLWdyaWQge1xyXG4gIGdhcDogdmFyKC0tdHQtc3BhY2UtMykgdmFyKC0tdHQtc3BhY2UtNCk7XHJcbn1cclxuLyogVGltZWxpbmUgYnV0dG9ucyBzY2FsZSB0ZXh0ICYgYWxsb3cgd3JhcCB3aXRob3V0IGhvcml6b250YWwgc2Nyb2xsICovXHJcbi5jaGFydC10aW1lbGluZS1idXR0b25zIHtcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIHJvdy1nYXA6IDA7XG59XHJcbi50aW1lbGluZS1idG4ge1xuICBmb250LXNpemU6IGNsYW1wKDAuNjVyZW0sIDAuNTVyZW0gKyAwLjV2dywgMC44cmVtKTtcbiAgLyogSW5jcmVhc2UgdmVydGljYWwgcGFkZGluZyBieSBhbiBhZGRpdGlvbmFsIH4yMCUgKi9cbiAgcGFkZGluZzogY2FsYygwLjgxZW0gKyAwLjE4dncpIGNhbGMoMC41NWVtICsgMC4zNXZ3KTtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgLyogRXhwYW5kIHRvIHNoYXJlIGF2YWlsYWJsZSB3aWR0aCBlcXVhbGx5ICovXG4gIGZsZXg6IDEgMSAwO1xuICBtaW4td2lkdGg6IDA7XG59XHJcbi8qIEFjdGlvbiBidXR0b24gZ3JvdXBzIGluIHN0b2NrIGhlYWRlciBjYW4gd3JhcCBncmFjZWZ1bGx5ICovXHJcbi5zdG9jay1hY3Rpb25zIHtcclxuICBmbGV4LXdyYXA6IHdyYXA7XHJcbiAgcm93LWdhcDogdmFyKC0tdHQtc3BhY2UtMik7XHJcbn1cclxuLyogVmVyeSBuYXJyb3cgd2lkdGhzIChlLmcuLCB1c2VyIHpvb21zIHRvIDE3MCUgbWFraW5nIHNlY3Rpb24gdGlnaHQpICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA3Ni4yNXJlbSkgeyAvKiB+MTIyMHB4ICh1bml0IG5vcm1hbGl6ZWQpICovXHJcbiAgLnByaWNlLWRpc3BsYXktYXJlYSB7IG1pbi13aWR0aDogY2xhbXAoMTIwcHgsIDI0dncsIDE5MHB4KTsgfVxyXG59XHJcbkBtZWRpYSAobWF4LXdpZHRoOiA1Ni4yNXJlbSkgeyAvKiBtZERvd24gY2Fub25pY2FsICovXHJcbiAgLmhlYWRlci10b3AtYmFyIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IH1cclxuICAuc3RvY2stYWN0aW9ucyB7IHdpZHRoOiAxMDAlOyB9XHJcbiAgLnByaWNlLWRpc3BsYXktYXJlYSB7IG9yZGVyOiAyOyB9XHJcbn1cclxuLyogUmVkdWNlIHBhZGRpbmcgb24gbmVzdGVkIGNvbXBvbmVudHMgd2hlbiBzcGFjZSBpcyB0aWdodCAobWREb3duIGNhbm9uaWNhbCkgKi9cclxuQG1lZGlhIChtYXgtd2lkdGg6IDU2LjI1cmVtKSB7XHJcbiAgI3N0b2NrSGVhZGVyLCAuc3RvY2staGVhZGVyIHsgcGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtNikgMC40cmVtOyB9XHJcbiAgLmRldGFpbC1ib3ggeyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTsgfVxyXG59XHJcbi8qIFdoZW4gdXNlciB6b29tIHB1c2hlcyBlZmZlY3RpdmUgdmlld3BvcnQgPCBzbURvd24gKGRlc2t0b3Agem9vbSBzY2VuYXJpbykgKi9cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQ3Ljk5cmVtKSB7XHJcbiAgLmRldGFpbC1ib3ggLmxhYmVsIHsgZm9udC1zaXplOiB2YXIoLS1mb250LTExKTsgfVxyXG4gIC5kZXRhaWwtYm94IC52YWx1ZSB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMik7IH1cclxuICAuZGV0YWlsLWJveCAudmFsdWUtc2Vjb25kYXJ5IHsgZm9udC1zaXplOiB2YXIoLS1mb250LTEwKTsgfVxyXG59XHJcbi8qIO+/vSBFcGljIEJ1ZyBSZXBvcnQgQnV0dG9uIC0gVW5pcXVlICYgSW1wcmVzc2l2ZSBEZXNpZ24g77+9ICovXHJcbiNyZXBvcnRCdWdCdG4sIC5yZXBvcnQtYnVnLWJ0biB7XHJcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLFxyXG4gICAgdmFyKC0tY29sb3ItZGFuZ2VyKSAwJSxcclxuICAgIHZhcigtLWNvbG9yLXdhcm5pbmcpIDI1JSxcclxuICAgIHZhcigtLWNvbG9yLWRhbmdlcikgNTAlLFxyXG4gICAgdmFyKC0tY29sb3Itd2FybmluZykgNzUlLFxyXG4gICAgdmFyKC0tY29sb3ItZGFuZ2VyKSAxMDAlKTtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDMwMCUgMzAwJTtcclxuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpO1xyXG4gIGJvcmRlcjogdmFyKC0tc3BhY2UtMSkgc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLTJ4bCk7XHJcbiAgZm9udC13ZWlnaHQ6IDgwMDtcclxuICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS04KTtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB0cmFuc2l0aW9uOiBhbGwgMC40cyBjdWJpYy1iZXppZXIoMC42OCwgLTAuNTUsIDAuMjY1LCAxLjU1KTtcclxuICBib3gtc2hhZG93OiBcclxuICAgIDAgMC4yNXJlbSAxLjI1cmVtIHJnYmEodmFyKC0tZGFuZ2VyLWJyaWdodC1yZ2IpLCAwLjMpLFxyXG4gICAgMCAwIDAuOTM3NXJlbSByZ2JhKHZhcigtLW9yYW5nZS1hY2NlbnQtcmdiKSwgMC4yKSxcclxuICAgIGluc2V0IDAgMC4wNjI1cmVtIDAgcmdiYSh2YXIoLS13aGl0ZS1yZ2IpLCAgMC4yKTtcclxuICB0ZXh0LXNoYWRvdzogdmFyKC0tdGV4dC1zaGFkb3ctZGFyay1tZCk7XHJcbiAgYW5pbWF0aW9uOiBidWdSZXBvcnRQdWxzZSA0cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcclxufVxyXG4jcmVwb3J0QnVnQnRuOjpiZWZvcmUsIC5yZXBvcnQtYnVnLWJ0bjo6YmVmb3JlIHtcclxuICBjb250ZW50OiAn8J+qsic7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogNTAlO1xyXG4gIGxlZnQ6IGNhbGMoMTAwJSArIHZhcigtLXNwYWNlLTEwKSk7XHJcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEuMykgcm90YXRlKC05MGRlZyk7XHJcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LTI0KTtcclxuICB0cmFuc2l0aW9uOiBub25lO1xyXG4gIG9wYWNpdHk6IDA7XHJcbiAgei1pbmRleDogMztcclxuICBmaWx0ZXI6IGJyaWdodG5lc3MoMC4zKSBjb250cmFzdCgyKTtcclxufVxyXG4jcmVwb3J0QnVnQnRuOjphZnRlciwgLnJlcG9ydC1idWctYnRuOjphZnRlciB7XHJcbiAgY29udGVudDogJyc7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICA5MGRlZyxcclxuICAgIHRyYW5zcGFyZW50LFxyXG4gICAgcmdiYSh2YXIoLS13aGl0ZS1yZ2IpLCAgMC40KSxcclxuICAgIHRyYW5zcGFyZW50XHJcbiAgKTtcclxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xyXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNjBtcyBlYXNlO1xyXG59XHJcbiNyZXBvcnRCdWdCdG46aG92ZXIsIC5yZXBvcnQtYnVnLWJ0bjpob3ZlciB7XHJcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAwO1xyXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KSBzY2FsZSgxLjA4KSByb3RhdGUoMWRlZyk7XHJcbiAgYm94LXNoYWRvdzogXHJcbiAgICAwIDAuNzVyZW0gMi4xODc1cmVtIHJnYmEodmFyKC0tZGFuZ2VyLWJyaWdodC1yZ2IpLCAwLjUpLFxyXG4gICAgMCAwIDEuODc1cmVtIHJnYmEodmFyKC0tb3JhbmdlLWFjY2VudC1yZ2IpLCAwLjQpLFxyXG4gICAgaW5zZXQgMCAwLjA2MjVyZW0gMCByZ2JhKHZhcigtLXdoaXRlLXJnYiksICAwLjMpLFxyXG4gICAgMCAwIDAgMC4xODc1cmVtIHJnYmEodmFyKC0tZGFuZ2VyLWJyaWdodC1yZ2IpLCAwLjIpO1xyXG4gIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS13aGl0ZS1yZ2IpLCAgMC4zKTtcclxuICBhbmltYXRpb246IGJ1Z1JlcG9ydEdsb3cgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XHJcbn1cclxuI3JlcG9ydEJ1Z0J0bjpob3Zlcjo6YmVmb3JlLCAucmVwb3J0LWJ1Zy1idG46aG92ZXI6OmJlZm9yZSB7XHJcbiAgb3BhY2l0eTogMTtcclxuICBhbmltYXRpb246IGJ1Z0NyYXdsIDNzIGVhc2UtaW4tb3V0IGZvcndhcmRzO1xyXG59XHJcbiNyZXBvcnRCdWdCdG46aG92ZXI6OmFmdGVyLCAucmVwb3J0LWJ1Zy1idG46aG92ZXI6OmFmdGVyIHtcclxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XHJcbn1cclxuI3JlcG9ydEJ1Z0J0bjpob3ZlciBzcGFuLCAucmVwb3J0LWJ1Zy1idG46aG92ZXIgc3BhbiB7XHJcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTtcclxuICB0ZXh0LXNoYWRvdzogdmFyKC0tdGV4dC1nbG93LXdoaXRlLW1kKTtcclxufVxyXG5AbWVkaWEgKGhvdmVyOiBub25lKSBhbmQgKHBvaW50ZXI6IGNvYXJzZSkge1xyXG4gICNyZXBvcnRCdWdCdG46aG92ZXIsIC5yZXBvcnQtYnVnLWJ0bjpob3ZlciB7XHJcbiAgICB0cmFuc2Zvcm06IG5vbmU7IGJveC1zaGFkb3c6IG5vbmU7IGFuaW1hdGlvbjogbm9uZTsgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWRhbmdlci1icmlnaHQtcmdiKSwgMC41KTtcclxuICB9XHJcbiAgI3JlcG9ydEJ1Z0J0bjpob3Zlcjo6YmVmb3JlLCAucmVwb3J0LWJ1Zy1idG46aG92ZXI6OmJlZm9yZSB7IG9wYWNpdHk6IDA7IGFuaW1hdGlvbjogbm9uZTsgfVxyXG4gICNyZXBvcnRCdWdCdG46aG92ZXI6OmFmdGVyLCAucmVwb3J0LWJ1Zy1idG46aG92ZXI6OmFmdGVyIHsgbGVmdDogLTEwMCU7IH1cclxuICAjcmVwb3J0QnVnQnRuOmhvdmVyIHNwYW4sIC5yZXBvcnQtYnVnLWJ0bjpob3ZlciBzcGFuIHsgY29sb3I6IGluaGVyaXQ7IHRleHQtc2hhZG93OiBub25lOyB9XHJcbn1cclxuI3JlcG9ydEJ1Z0J0bjphY3RpdmUsIC5yZXBvcnQtYnVnLWJ0bjphY3RpdmUge1xyXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSBzY2FsZSgxLjA1KSByb3RhdGUoMGRlZyk7XHJcbiAgYm94LXNoYWRvdzogXHJcbiAgICAwIDAuMzc1cmVtIDEuMjVyZW0gcmdiYSh2YXIoLS1kYW5nZXItYnJpZ2h0LXJnYiksIDAuNCksXHJcbiAgICBpbnNldCAwIDAuMTg3NXJlbSAwLjYyNXJlbSByZ2JhKHZhcigtLWJsYWNrLXJnYiksICAwLjMpO1xyXG59XHJcbiNyZXBvcnRCdWdCdG4gc3BhbiwgLnJlcG9ydC1idWctYnRuIHNwYW4ge1xyXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xyXG4gIHRyYW5zaXRpb246IGFsbCAwLjRzIGN1YmljLWJlemllcigwLjY4LCAtMC41NSwgMC4yNjUsIDEuNTUpO1xyXG4gIGZvbnQtd2VpZ2h0OiA5MDA7XHJcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWxzLXh4cyk7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHotaW5kZXg6IDI7XHJcbn1cclxuQGtleWZyYW1lcyBidWdSZXBvcnRQdWxzZSB7XHJcbiAgMCUsIDEwMCUge1xyXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgMCU7XHJcbiAgICBib3gtc2hhZG93OiBcclxuICAgICAgMCAwLjI1cmVtIDEuMjVyZW0gcmdiYSh2YXIoLS1kYW5nZXItYnJpZ2h0LXJnYiksIDAuMyksXHJcbiAgICAgIDAgMCAwLjkzNzVyZW0gcmdiYSh2YXIoLS1vcmFuZ2UtYWNjZW50LXJnYiksIDAuMiksXHJcbiAgICAgIGluc2V0IDAgMC4wNjI1cmVtIDAgcmdiYSh2YXIoLS13aGl0ZS1yZ2IpLCAgMC4yKTtcclxuICB9XHJcbiAgNTAlIHtcclxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMTAwJTtcclxuICAgIGJveC1zaGFkb3c6IFxyXG4gICAgICAwIDAuMzc1cmVtIDEuNTYyNXJlbSByZ2JhKHZhcigtLWRhbmdlci1icmlnaHQtcmdiKSwgMC40KSxcclxuICAgICAgMCAwIDEuMjVyZW0gcmdiYSh2YXIoLS1vcmFuZ2UtYWNjZW50LXJnYiksIDAuMyksXHJcbiAgICAgIGluc2V0IDAgMC4wNjI1cmVtIDAgcmdiYSh2YXIoLS13aGl0ZS1yZ2IpLCAgMC4zKTtcclxuICB9XHJcbn1cclxuQGtleWZyYW1lcyBidWdSZXBvcnRHbG93IHtcclxuICAwJSB7XHJcbiAgICBib3gtc2hhZG93OiBcclxuICAgICAgMCAwLjc1cmVtIDIuMTg3NXJlbSByZ2JhKHZhcigtLWRhbmdlci1icmlnaHQtcmdiKSwgMC41KSxcclxuICAgICAgMCAwIDEuODc1cmVtIHJnYmEodmFyKC0tb3JhbmdlLWFjY2VudC1yZ2IpLCAwLjQpLFxyXG4gICAgICBpbnNldCAwIDAuMDYyNXJlbSAwIHJnYmEodmFyKC0td2hpdGUtcmdiKSwgIDAuMyksXHJcbiAgICAgIDAgMCAwIDAuMTg3NXJlbSByZ2JhKHZhcigtLWRhbmdlci1icmlnaHQtcmdiKSwgMC4yKTtcclxuICB9XHJcbiAgMTAwJSB7XHJcbiAgICBib3gtc2hhZG93OiBcclxuICAgICAgMCAxcmVtIDIuODEyNXJlbSByZ2JhKHZhcigtLWRhbmdlci1icmlnaHQtcmdiKSwgMC43KSxcclxuICAgICAgMCAwIDIuNXJlbSByZ2JhKHZhcigtLW9yYW5nZS1hY2NlbnQtcmdiKSwgMC42KSxcclxuICAgICAgaW5zZXQgMCAwLjA2MjVyZW0gMCByZ2JhKHZhcigtLXdoaXRlLXJnYiksICAwLjQpLFxyXG4gICAgICAwIDAgMCAwLjMxMjVyZW0gcmdiYSh2YXIoLS1kYW5nZXItYnJpZ2h0LXJnYiksIDAuMyk7XHJcbiAgfVxyXG59XHJcbkBrZXlmcmFtZXMgYnVnQ3Jhd2wge1xyXG4gIDAlIHtcclxuICAgIGxlZnQ6IGNhbGMoMTAwJSArIDIwcHgpO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEuMykgcm90YXRlKC05MGRlZyk7XHJcbiAgfVxyXG4gIDEwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGUoMS4zNSkgcm90YXRlKC04OGRlZyk7XHJcbiAgfVxyXG4gIDIwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGUoMS4yNSkgcm90YXRlKC05MmRlZyk7XHJcbiAgfVxyXG4gIDMwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGUoMS40KSByb3RhdGUoLTg3ZGVnKTtcclxuICB9XHJcbiAgNDAlIHtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSBzY2FsZSgxLjIpIHJvdGF0ZSgtOTNkZWcpO1xyXG4gIH1cclxuICA1MCUge1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEuMzUpIHJvdGF0ZSgtODlkZWcpO1xyXG4gIH1cclxuICA2MCUge1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEuMjUpIHJvdGF0ZSgtOTFkZWcpO1xyXG4gIH1cclxuICA3MCUge1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEuNCkgcm90YXRlKC04OGRlZyk7XHJcbiAgfVxyXG4gIDgwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGUoMS4yKSByb3RhdGUoLTkyZGVnKTtcclxuICB9XHJcbiAgOTAlIHtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSBzY2FsZSgxLjMpIHJvdGF0ZSgtOTBkZWcpO1xyXG4gIH1cclxuICAxMDAlIHtcclxuICBsZWZ0OiBjYWxjKHZhcigtLXNwYWNlLTIwKSAqIC0xKTtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSBzY2FsZSgxLjMpIHJvdGF0ZSgtOTBkZWcpO1xyXG4gIH1cclxufVxyXG4vKiBNZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmltYXRpb25zICovXHJcbkBrZXlmcmFtZXMgbWVzc2FnZU5vdGlmaWNhdGlvblB1bHNlIHtcclxuICAwJSwgMTAwJSB7XHJcbiAgICBib3gtc2hhZG93OiBcclxuICAgICAgMCAwLjEyNXJlbSAwLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuMyksXHJcbiAgICAgIDAgMCAwLjc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjIpO1xyXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTtcclxuICB9XHJcbiAgMjUlLCA3NSUge1xyXG4gICAgYm94LXNoYWRvdzogXHJcbiAgICAgIDAgMC4yNXJlbSAxcmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjYpLFxyXG4gICAgICAwIDAgMS41cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjQpLFxyXG4gICAgICAwIDAgMCAwLjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjIpO1xyXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50LWhvdmVyKTtcclxuICB9XHJcbiAgNTAlIHtcclxuICAgIGJveC1zaGFkb3c6IFxyXG4gICAgICAwIDAuMzc1cmVtIDEuNXJlbSByZ2JhKHZhcigtLWdyZWVuLW5lb24tcmdiKSwgMC44KSxcclxuICAgICAgMCAwIDJyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuNiksXHJcbiAgICAgIDAgMCAwIDAuMzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjMpO1xyXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTtcclxuICB9XHJcbn1cclxuQGtleWZyYW1lcyBtZXNzYWdlTm90aWZpY2F0aW9uQm91bmNlIHtcclxuICAwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xyXG4gIH1cclxuICAxNSUge1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjQpIHJvdGF0ZSgxNWRlZyk7XHJcbiAgfVxyXG4gIDMwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSkgcm90YXRlKC0xMGRlZyk7XHJcbiAgfVxyXG4gIDQ1JSB7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMykgcm90YXRlKDhkZWcpO1xyXG4gIH1cclxuICA2MCUge1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KSByb3RhdGUoLTVkZWcpO1xyXG4gIH1cclxuICA3NSUge1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpIHJvdGF0ZSgzZGVnKTtcclxuICB9XHJcbiAgOTAlIHtcclxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMikgcm90YXRlKC0xZGVnKTtcclxuICB9XHJcbiAgMTAwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHJvdGF0ZSgwZGVnKTtcclxuICB9XHJcbn1cclxuQGtleWZyYW1lcyBtZXNzYWdlTm90aWZpY2F0aW9uQnJlYXRoaW5nIHtcclxuICAwJSwgMTAwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xyXG4gICAgYm94LXNoYWRvdzogXHJcbiAgICAgIDAgMC4xMjVyZW0gMC41cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjQpLFxyXG4gICAgICAwIDAgMC43NXJlbSByZ2JhKHZhcigtLWdyZWVuLW5lb24tcmdiKSwgMC4zKTtcclxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudCk7XHJcbiAgfVxyXG4gIDUwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XHJcbiAgICBib3gtc2hhZG93OiBcclxuICAgICAgMCAwLjI1cmVtIDFyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuNyksXHJcbiAgICAgIDAgMCAxLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuNSksXHJcbiAgICAgIDAgMCAwIDAuMTg3NXJlbSByZ2JhKHZhcigtLWdyZWVuLW5lb24tcmdiKSwgMC4yKTtcclxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudC1ob3Zlcik7XHJcbiAgfVxyXG59XHJcbi8qIE1lc3NhZ2UgYnV0dG9uIHNwZWNpYWwgZWZmZWN0cyB3aGVuIG5vdGlmaWNhdGlvbnMgYXJlIGFjdGl2ZSAqL1xyXG4jZGlyZWN0TWVzc2FnZXNCdG4uaGFzLW5vdGlmaWNhdGlvbnMsIC5idG4tZGlyZWN0LW1lc3NhZ2VzLmhhcy1ub3RpZmljYXRpb25zIHtcclxuICBhbmltYXRpb246IG1lc3NhZ2VCdXR0b25CcmVhdGhpbmcgNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XHJcbn1cclxuI2RpcmVjdE1lc3NhZ2VzQnRuLmhhcy1ub3RpZmljYXRpb25zOmhvdmVyLCAuYnRuLWRpcmVjdC1tZXNzYWdlcy5oYXMtbm90aWZpY2F0aW9uczpob3ZlciB7XHJcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTtcclxuICBib3gtc2hhZG93OiBcclxuICAgIDAgMCAxLjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjQpLFxyXG4gICAgaW5zZXQgMCAwIDAuOTM3NXJlbSByZ2JhKHZhcigtLWdyZWVuLW5lb24tcmdiKSwgMC4xNSk7XHJcbn1cclxuI2RpcmVjdE1lc3NhZ2VzQnRuLmhhcy1ub3RpZmljYXRpb25zOmFjdGl2ZSwgLmJ0bi1kaXJlY3QtbWVzc2FnZXMuaGFzLW5vdGlmaWNhdGlvbnM6YWN0aXZlIHtcclxuICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpO1xyXG4gIGFuaW1hdGlvbjogbWVzc2FnZUJ1dHRvbkNsaWNrIDAuM3MgZWFzZS1vdXQ7XHJcbn1cclxuQGtleWZyYW1lcyBtZXNzYWdlQnV0dG9uQnJlYXRoaW5nIHtcclxuICAwJSwgMTAwJSB7XHJcbiAgICBib3gtc2hhZG93OiBcclxuICAgICAgMCAwIDAuMzEyNXJlbSByZ2JhKHZhcigtLWdyZWVuLW5lb24tcmdiKSwgMC4yKSxcclxuICAgICAgaW5zZXQgMCAwIDAuMzEyNXJlbSByZ2JhKHZhcigtLWdyZWVuLW5lb24tcmdiKSwgMC4xKTtcclxuICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuMik7XHJcbiAgfVxyXG4gIDUwJSB7XHJcbiAgICBib3gtc2hhZG93OiBcclxuICAgICAgMCAwIDEuMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuNCksXHJcbiAgICAgIGluc2V0IDAgMCAwLjkzNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuMik7XHJcbiAgICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjQpO1xyXG4gIH1cclxufVxyXG5Aa2V5ZnJhbWVzIG1lc3NhZ2VCdXR0b25DbGljayB7XHJcbiAgMCUge1xyXG4gICAgYm94LXNoYWRvdzogXHJcbiAgICAgIDAgMCAxLjU2MjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1uZW9uLXJnYiksIDAuNiksXHJcbiAgICAgIGluc2V0IDAgMCAxLjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjIpO1xyXG4gIH1cclxuICAxMDAlIHtcclxuICAgIGJveC1zaGFkb3c6IFxyXG4gICAgICAwIDAgMC4zMTI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjIpLFxyXG4gICAgICBpbnNldCAwIDAgMC4zMTI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tbmVvbi1yZ2IpLCAwLjEpO1xyXG4gIH1cclxufVxyXG4vKiBTRUMgRGlyZWN0b3J5IG1vZGFsIGV4dHJhY3RlZCB0byBtb2RhbHMuY3NzICovXHJcbi8qIEhlYWRlciBjb21wYWN0bmVzcyArIGF1dG9zY2FsZSBhbmNob3JzIHRvIHByZXZlbnQgd3JhcHBpbmcgKi9cclxuLm1lc3NhZ2Utd2l0aC1yZWFjdGlvbiB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGModmFyKC0tc3BhY2UtNikgKyAxLjc1cmVtKTtcclxufVxyXG4ubWVzc2FnZS1yZWFjdGlvbiB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogNTAlO1xyXG4gIHJpZ2h0OiB2YXIoLS1zcGFjZS0zKTtcclxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBnYXA6IHZhcigtLXNwYWNlLTIpO1xyXG4gIG9wYWNpdHk6IDA7XHJcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cyBlYXNlLCB0cmFuc2Zvcm0gMC4xOHMgZWFzZTtcclxuICBwb2ludGVyLWV2ZW50czogYXV0bztcclxufVxyXG4ubWVzc2FnZS13aXRoLXJlYWN0aW9uOmhvdmVyIC5tZXNzYWdlLXJlYWN0aW9uLFxyXG4ubWVzc2FnZS1yZWFjdGlvbjpmb2N1cy13aXRoaW4ge1xyXG4gIG9wYWNpdHk6IDE7XHJcbn1cclxuLm1lc3NhZ2UtcmVhY3Rpb24tLWhhcy1jb3VudCB7XHJcbiAgb3BhY2l0eTogMTtcclxufVxyXG4ubWVzc2FnZS1yZWFjdGlvbl9fYnV0dG9uIHtcclxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIHdpZHRoOiB2YXIoLS1idG4taWNvbik7XHJcbiAgaGVpZ2h0OiB2YXIoLS1idG4taWNvbik7XHJcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xyXG4gIGJvcmRlcjogbm9uZTtcclxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuMThzIGVhc2UsIHRyYW5zZm9ybSAwLjE4cyBlYXNlO1xyXG59XHJcbi5tZXNzYWdlLXJlYWN0aW9uX19idXR0b246aG92ZXIsXHJcbi5tZXNzYWdlLXJlYWN0aW9uX19idXR0b246Zm9jdXMtdmlzaWJsZSB7XHJcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7XHJcbn1cclxuLm1lc3NhZ2UtcmVhY3Rpb25fX2J1dHRvbjpmb2N1cy12aXNpYmxlIHtcclxuICBvdXRsaW5lOiAwLjEyNXJlbSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpO1xyXG4gIG91dGxpbmUtb2Zmc2V0OiB2YXIoLS1zcGFjZS0xKTtcclxufVxyXG4ubWVzc2FnZS1yZWFjdGlvbl9fYnV0dG9uLS1hY3RpdmUge1xyXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xyXG59XHJcbi5tZXNzYWdlLXJlYWN0aW9uX19pY29uIHtcclxuICB3aWR0aDogdmFyKC0taWNvbi14cyk7XHJcbiAgaGVpZ2h0OiB2YXIoLS1pY29uLXhzKTtcclxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxufVxyXG4ubWVzc2FnZS1yZWFjdGlvbl9fY291bnQge1xyXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMik7XHJcbiAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7XHJcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcbn1cclxuLm1lc3NhZ2UtcmVhY3Rpb24tLWFjdGl2ZSAubWVzc2FnZS1yZWFjdGlvbl9fY291bnQge1xyXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xyXG59XHJcbi5tZXNzYWdlLXJlYWN0aW9uLS1taW5lIC5tZXNzYWdlLXJlYWN0aW9uX19idXR0b24ge1xyXG4gIGN1cnNvcjogZGVmYXVsdDtcclxuICBvcGFjaXR5OiAwLjQ7XHJcbn1cclxuLm1lc3NhZ2UtcmVhY3Rpb24tLW1pbmUubWVzc2FnZS1yZWFjdGlvbi0taGFzLWNvdW50IC5tZXNzYWdlLXJlYWN0aW9uX19idXR0b24ge1xyXG4gIG9wYWNpdHk6IDE7XHJcbn1cclxuLm1lc3NhZ2UtcmVhY3Rpb24tLXBlbmRpbmcgLm1lc3NhZ2UtcmVhY3Rpb25fX2J1dHRvbiB7XHJcbiAgY3Vyc29yOiB3YWl0O1xyXG4gIG9wYWNpdHk6IDAuNztcclxufVxyXG5AbWVkaWEgKG1heC13aWR0aDogNDByZW0pIHtcclxuICAubWVzc2FnZS13aXRoLXJlYWN0aW9uIHtcclxuICAgIHBhZGRpbmctcmlnaHQ6IGNhbGModmFyKC0tc3BhY2UtNSkgKyAxLjVyZW0pO1xyXG4gIH1cclxuICAubWVzc2FnZS1yZWFjdGlvbiB7XHJcbiAgICByaWdodDogdmFyKC0tc3BhY2UtMik7XHJcbiAgfVxyXG59XHJcbi8qIENoYXQgY3Jvc3MtcG9zdCBzdHlsaW5nICovXHJcbi5jaGF0LXRpY2tlci1saW5rIHsgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUpOyBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGNvbG9yIDAuMThzIGVhc2U7IGZvbnQtd2VpZ2h0OiA2MDA7IH1cclxuLmNoYXQtdGlja2VyLWxpbms6aG92ZXIsIC5jaGF0LXRpY2tlci1saW5rOmZvY3VzIHsgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtaG92ZXIpOyB9XHJcbi5jaGF0LWNyb3NzcG9zdC1iYW5uZXIge1xyXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZ2FwOiB2YXIoLS1zcGFjZS0xKTtcclxuICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0xKSB2YXIoLS1zcGFjZS0yKTtcclxuICBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCByZ2JhKHZhcigtLWJsdWUtcmdiKSwgMC4zNSk7XHJcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcclxuICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWJsdWUtcmdiKSwgMC4wOCk7XHJcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE4cyBlYXNlLCBib3JkZXItY29sb3IgMC4xOHMgZWFzZSwgYm94LXNoYWRvdyAwLjE4cyBlYXNlO1xyXG59XHJcbi5jaGF0LWNyb3NzcG9zdC1iYW5uZXI6aG92ZXIsIC5jaGF0LWNyb3NzcG9zdC1iYW5uZXI6Zm9jdXMge1xyXG4gIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tYmx1ZS1yZ2IpLCAwLjEyKTtcclxuICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tYmx1ZS1yZ2IpLCAwLjU1KTtcclxuICBib3gtc2hhZG93OiAwIDAgMCAwLjEyNXJlbSByZ2JhKHZhcigtLWJsdWUtcmdiKSwgMC4yKTtcclxuXHJcblxyXG4vKiBSZW1vdmVkOiBNb2JpbGUgY2hhdCBzdG9jay1pbmZvIGRyYXdlciBhbmQgdHJpZ2dlciAqL1xuXHJcbi8qIExvZ2luIHBhZ2UgYmFja2dyb3VuZCBvbiBtb2JpbGU6IHZpc2libGUgYW5kIHNjYWxlZCAqL1xyXG5AbWVkaWEgKG1heC13aWR0aDogNDcuOTlyZW0pIHtcclxuICAjYXV0aENvbnRhaW5lciwgLmF1dGgtY29udGFpbmVyIHsgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyBtaW4taGVpZ2h0OiAxMDBzdmg7IG1pbi1oZWlnaHQ6IDEwMGR2aDsgfVxyXG59XHJcblxyXG4vKiBETSB0aHJlYWQgaGVpZ2h0IGlzIGdvdmVybmVkIGJ5IGdyaWQgcm93czsgYXZvaWQgbWF4LWhlaWdodCBjYXBzICovXHJcblxyXG4vKiBNb2RlcmF0b3IgcmVwb3J0cyBmbGV4IHRhYmxlICovXHJcbi5yZXBvcnRzLWxpc3QgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XHJcbi5yZXBvcnRzLXJvdyB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBzdHJldGNoOyBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxyXG4ucmVwb3J0cy1jZWxsIHsgcGFkZGluZzogdmFyKC0tc3BhY2UtNik7IG1pbi13aWR0aDogMDsgfVxyXG4ucmVwb3J0cy1jZWxsLS1kZXRhaWxzIHsgZmxleDogMSAxIDI4cmVtOyB9XHJcbi5yZXBvcnRzLWNlbGwtLWFwcGVhbCB7IGZsZXg6IDEgMSAyMHJlbTsgfVxyXG4ucmVwb3J0cy1jZWxsLS1jb250ZW50IHsgZmxleDogMSAxIDIwcmVtOyB9XHJcbi5yZXBvcnRzLWNlbGwtLWFjdGlvbnMgeyBmbGV4OiAwIDAgMTRyZW07IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogdmFyKC0tc3BhY2UtMik7IH1cclxuXHJcbi8qIEd1aWRlIHRhYmxlcyAoaW4tbW9kYWwpIGZvcmNlZCB0byBmbGV4IGxheW91dCAqL1xyXG4uZ3VpZGUtZmxleC1saXN0IHsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgd2lkdGg6IDEwMCU7IH1cclxuLmd1aWRlLWZsZXgtcm93IHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IGdhcDogdmFyKC0tc3BhY2UtNCk7IGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSAwOyBmbGV4LXdyYXA6IG5vd3JhcDsgfVxuLmd1aWRlLWZsZXgtY29kZSB7IGZsZXg6IDAgMCA1LjVyZW07IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IH1cbi5ndWlkZS1mbGV4LWRlc2MgeyBmbGV4OiAxIDEgYXV0bzsgcGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7IG1pbi13aWR0aDogMDsgfVxuXHJcbi8qIEZpbGluZ3M6IG1vYmlsZSBmaWx0ZXJzIGNvbXBhY3QgZ3JpZCBhbmQgY29uZGVuc2VkIHNpbmdsZS1yb3cgbGlzdCBmZWVsICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xyXG4gIC5kYWlseS1maWx0ZXJzLWdyaWQgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogdmFyKC0tc3BhY2UtMik7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XHJcbiAgLyogbGVnYWN5IHRhYmxlIG92ZXJyaWRlcyByZW1vdmVkIGluIGZhdm9yIG9mIGZsZXggbGlzdCAqL1xyXG4gIC5maWxpbmdzLWZvcm0geyBmb250LXdlaWdodDogNzAwOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTQpOyB9XHJcbiAgLmZpbGluZ3MtY29tcGFueSB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMyk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IH1cclxuICAuZmlsaW5ncy1kYXRlIHsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogdmFyKC0tc3BhY2UtMik7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cclxuICAuZmlsaW5ncy1kYXRlX19kYXkgeyBmb250LXNpemU6IHZhcigtLWZvbnQtMTIpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdWJ0bGUpOyB9XHJcbiAgLmZpbGluZ3MtZGF0ZV9fdGltZSB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMSk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwOyB9XHJcbiAgLmZpbGluZ3MtZGF0ZV9fY2hldnJvbiB7IG9wYWNpdHk6IDAuNTsgfVxyXG5cclxuICAvKiBTRUMgRmlsaW5ncyBwYWdlOiBlbnN1cmUgZWFjaCBlbnRyeSByZW1haW5zIGEgc2luZ2xlIHRhYmxlIHJvdyBvbiBtb2JpbGUuXHJcbiAgICAgT3ZlcnJpZGUgZ2VuZXJpYyBtb2JpbGUgdGFibGUtc3RhY2tpbmcgZm9yIHRoaXMgcGFnZSBhbmQgcGVybWl0IGhvcml6b250YWwgc2Nyb2xsIGlmIG5lZWRlZC4gKi9cclxuICAjc2VjRmlsaW5nc1BhZ2UgLmZpbGluZ3MtY2FyZF9fdGFibGUgeyBvdmVyZmxvdy14OiBhdXRvOyAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7IH1cclxuICAvKiBubyBzcGVjaWFsIG92ZXJyaWRlcyBmb3IgZmxleCBsaXN0IG9uIFNFQyBwYWdlICovXHJcbn1cclxuXHJcbi8qIEJvb2ttYXJrcyAmIFByb2ZpbGU6IGNsYW1wIG1lc3NhZ2UgdGV4dCB0byAyIGxpbmVzIG9uIG1vYmlsZSAqL1xyXG5AbWVkaWEgKG1heC13aWR0aDogNDcuOTlyZW0pIHtcclxuICAuYm9va21hcmstb3BlbixcclxuICAucHJvZmlsZS1tc2ctdGV4dCxcclxuICAucHJvZmlsZS1tc2ctY29udGVudCB7IGRpc3BsYXk6IC13ZWJraXQtYm94OyAtd2Via2l0LWxpbmUtY2xhbXA6IDI7IGxpbmUtY2xhbXA6IDI7IC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyBtYXgtaGVpZ2h0OiAzZW07IH1cclxuICAjYm9va21hcmtzTGlzdCA+IGRpdiB7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpOyB9XHJcbn1cclxufVxyXG4uY2hhdC1jcm9zc3Bvc3QtYmFubmVyOmZvY3VzLXZpc2libGUge1xyXG4gIG91dGxpbmU6IDAuMTI1cmVtIHNvbGlkIHZhcigtLWNvbG9yLWJsdWUpO1xyXG4gIG91dGxpbmUtb2Zmc2V0OiB2YXIoLS1zcGFjZS0xKTtcclxufVxyXG4vKiBNb2JpbGUtb25seSBzZWdtZW50ZWQgdmlldyB0b2dnbGUgKENoYXQgfCBEZXRhaWxzKSBpbnNpZGUgY2hhdCBoZWFkZXIgKi9cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQ3Ljk5cmVtKSB7XG4gIC8qIEZvcmNlIHRoZSBtb2JpbGUgdG9nZ2xlIHZpc2libGUgb24gc21hbGwgc2NyZWVucyBldmVuIGlmIGEgZ2VuZXJpY1xuICAgICBgLmhpZGRlbiB7IGRpc3BsYXk6bm9uZSAhaW1wb3J0YW50OyB9YCBjbGFzcyBpcyBwcmVzZW50LiAqL1xuICAvKiBtb3ZlZDogbW9iaWxlIHZpZXcgdG9nZ2xlIHN0eWxlcyBleHRyYWN0ZWQgdG8gY29tcG9uZW50cy5jaGF0LmNzcyAqL1xufVxyXG4vKiBDaGF0Ym9hcmQgaGVpZ2h0IG1hbmFnZW1lbnQgYW5kIHNjcm9sbGluZyAqL1xyXG5AbWVkaWEgKG1pbi13aWR0aDogNDhyZW0pIHtcclxuICAvKiBDaGF0IHNlY3Rpb24gaGVpZ2h0IG1hbmFnZW1lbnQgbW92ZWQgdG8gbGF5b3V0LmNzcyAqL1xyXG4gIFxyXG4gIC8qIE1lc3NhZ2VzIGNvbnRhaW5lciB3aXRoIHByb3BlciBzY3JvbGxpbmcgKi9cclxuICAjbWVzc2FnZXNDb250YWluZXIsXG4gIC5tZXNzYWdlcy1jb250YWluZXIge1xuICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlO1xuICB9XG4gIFxyXG4gIC8qIENoYXQgaW5wdXQgYXJlYSBzaG91bGQgbm90IGdyb3cgKi9cclxuICAjY2hhdElucHV0QXJlYSB7XHJcbiAgICBmbGV4OiAwIDAgYXV0bztcclxuICB9XHJcbiAgXHJcbiAgLyogQ2hhdCBoZWFkZXIgc2hvdWxkIG5vdCBncm93ICovXHJcbiAgLmNoYXQtaGVhZGVyIHtcclxuICAgIGZsZXg6IDAgMCBhdXRvO1xyXG4gIH1cclxuICBcclxuICBcclxuICAvKiBObyBmaXhlZCBjYXBzOyBmbGV4IGxheW91dCBoYW5kbGVzIHZpc2libGUgc2VhcmNoIGhlaWdodCBuYXR1cmFsbHkgKi9cbn1cclxuLyogTW9iaWxlIGNoYXRib2FyZCBoZWlnaHQgbWFuYWdlbWVudCAqL1xyXG5AbWVkaWEgKG1heC13aWR0aDogNDcuOTlyZW0pIHtcbiAgLyogTGV0IGZsZXhib3ggc2l6ZSB0aGUgbWVzc2FnZSBsaXN0IHRvIGZpbGwgYXZhaWxhYmxlIHNwYWNlLlxuICAgICBBdm9pZCBmaXhlZCBtYXgtaGVpZ2h0cyB3aGljaCBjYW4gbGVhdmUgdW51c2VkIGdhcHMgb24gZGV2aWNlc1xuICAgICB3aXRoIGR5bmFtaWMgdmlld3BvcnQgdW5pdHMgKGFkZHJlc3MgYmFycywgc2FmZSBhcmVhcykuICovXG4gICNtZXNzYWdlc0NvbnRhaW5lcixcbiAgLm1lc3NhZ2VzLWNvbnRhaW5lciB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7XG4gICAgZmxleDogMSAxIGF1dG87XG4gICAgbWluLWhlaWdodDogMDtcbiAgfVxuXG4gIC8qIFdoZW4gdGhlIGlubGluZSBzZWFyY2ggcGFuZWwgaXMgdmlzaWJsZSwgaXRzIG5hdHVyYWwgaGVpZ2h0IHdpbGxcbiAgICAgcmVkdWNlIHRoZSBmbGV4IHNwYWNlIGZvciAjbWVzc2FnZXNDb250YWluZXI7IG5vIGV4cGxpY2l0IGNhcCBuZWVkZWQuICovXG4gIC5jaGF0LXNlYXJjaC1jb250YWluZXIudmlzaWJsZSB+ICNtZXNzYWdlc0NvbnRhaW5lciB7IG1heC1oZWlnaHQ6IG5vbmU7IH1cbn1cclxuLyogU3RvY2sgcHJpY2UgZGVsYXllZC1kYXRhIGJhZGdlIChoaWdoLWNvbnRyYXN0IHBpbGwgdW5kZXIgcHJpY2UpICovXHJcbi5kYXRhLWRlbGF5LWJhZGdlIHsgXG4gIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTtcbiAgcGFkZGluZzogMnB4IDZweDtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LTEwKTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC4wMmVtO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxyXG4vKiBGZWF0dXJlLXNjb3BlZCBjb21wb25lbnRzIChvdmVycmlkZSBsZWdhY3kgd2hlcmUgZHVwbGljYXRlZCkgKi9cclxuLyogSGVhZGVyICYgTmF2aWdhdGlvbiAoZXh0cmFjdGVkIGZyb20gY29tcG9uZW50cy5jc3MpICovXHJcbi5tYWluLWhlYWRlciB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWNvbG9yLWJnLW11dGVkKSwgdmFyKC0tY29sb3Itc3VyZmFjZSkpO1xuICBwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTgpIDAgdmFyKC0tc3BhY2UtNSk7IC8qIHRpZ2h0ZXIgbGVmdCBwYWRkaW5nIHRvIHNoaWZ0IGxvZ28gbGVmdCAqL1xuICBib3gtc2hhZG93OiAwIDAuMTI1cmVtIDAuNjI1cmVtIHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMC41KTtcbiAgYm9yZGVyLWJvdHRvbTogdmFyKC0tc3BhY2UtMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiB2YXIoLS16LWRyb3Bkb3duKTsgLyogZWxldmF0ZSBhYm92ZSBtYWluIGNvbnRlbnQgc28gaGVhZGVyIHN1Z2dlc3Rpb25zIG92ZXJsYXk7IHN0YXkgYmVsb3cgbW9kYWxzICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc3BhY2UtNy01KTtcbiAgaGVpZ2h0OiB2YXIoLS1oZWFkZXItcm93LWhlaWdodCk7IC8qIGZ1cnRoZXIgcmVkdWNlZCB0byB0aWdodGVuIGdhcCBiZWxvdyBidXR0b25zICovXG59XHJcbi8qIE1vYmlsZSBoZWFkZXIgaGFtYnVyZ2VyIHRvZ2dsZSAqL1xyXG4jbW9iaWxlTWVudVRvZ2dsZSwgLm1vYmlsZS1tZW51LXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogdmFyKC0tc3BhY2UtMjApO1xuICBoZWlnaHQ6IHZhcigtLXNwYWNlLTIwKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTtcbn1cclxuI21vYmlsZU1lbnVUb2dnbGUgc3ZnLCAubW9iaWxlLW1lbnUtdG9nZ2xlIHN2ZyB7IHdpZHRoOiB2YXIoLS1idG4taWNvbik7IGhlaWdodDogdmFyKC0tYnRuLWljb24pOyB9XHJcbkBtZWRpYSAobWF4LXdpZHRoOiA1Ni4yNXJlbSkge1xuICAjbW9iaWxlTWVudVRvZ2dsZSBzdmcgeyB3aWR0aDogY2FsYyh2YXIoLS1idG4taWNvbikgKyAycHgpOyBoZWlnaHQ6IGNhbGModmFyKC0tYnRuLWljb24pICsgMnB4KTsgfVxufVxyXG4vKiAocmVtb3ZlZCBsZWdhY3kgI21vYmlsZU1lbnVQYW5lbCBwYXR0ZXJuIGluIGZhdm9yIG9mICNtb2JpbGVNYWluUGFuZWwgZHJhd2VyKSAqL1xyXG4vKiBPbiBzbWFsbCBzY3JlZW5zLCBzaG93IGxlZnQgYW5kIHJpZ2h0IHRvZ2dsZXMgYW5kIGNvbGxhcHNlIGhlYWRlciBhY3Rpb25zIGludG8gcGFuZWxzICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA1Ni4yNXJlbSkge1xuICAubW9iaWxlLW1lbnUtdG9nZ2xlLCAjbW9iaWxlTWVudVRvZ2dsZSB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyB9XG4gIC8qIEtlZXAgc2VhcmNoIHZpc2libGUgb24gbW9iaWxlOiBzaG93IG5hdiBidXQgaGlkZSBub24tc2VhcmNoIGl0ZW1zICovXG4gIC5oZWFkZXItbmF2IHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH1cbiAgLmhlYWRlci1uYXYgPiA6bm90KC5oZWFkZXItc2VhcmNoKSB7IGRpc3BsYXk6IG5vbmU7IH1cbiAgLyogUmVkdWNlIGhlYWRlciBnYXAgc28gc2VhcmNoIHNpdHMgY2xvc2VyIHRvIHRoZSBnb3JpbGxhIGltYWdlICovXG4gIC5tYWluLWhlYWRlciB7IGdhcDogdmFyKC0tc3BhY2UtMik7IH1cbiAgI2xvZ28geyBtYXJnaW46IDA7IH1cbiAgLyogTGVmdCB3YXRjaGxpc3QgdG9nZ2xlICovXG4gICN3YXRjaGxpc3RUb2dnbGUgeyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IHdpZHRoOiB2YXIoLS1zcGFjZS0yMCk7IGhlaWdodDogdmFyKC0tc3BhY2UtMjApOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXItc3Ryb25nKTsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XG4gICN3YXRjaGxpc3RUb2dnbGUgc3ZnIHsgd2lkdGg6IHZhcigtLWJ0bi1pY29uKTsgaGVpZ2h0OiB2YXIoLS1idG4taWNvbik7IH1cbiAgLyogKHJlbW92ZWQgdW51c2VkIC5tb2JpbGUtY2VudGVyLXNlYXJjaCBzdHlsZXM7IGhlYWRlciBDU1Mga2VlcHMgc2VhcmNoIHZpc2libGUpICovXG59XHJcbi8qIFJpZ2h0LXNpZGUgbWFpbiBtZW51IHNsaWRpbmcgZHJhd2VyIChtb2JpbGUgb25seSkgKi9cclxuQG1lZGlhIChtYXgtd2lkdGg6IDU2LjI1cmVtKSB7XG4gIC8qIEZ1cnRoZXIgcmVkdWNlIHBhbmVsIHdpZHRoIGJ5IH4yMCUgKHdhcyB+NjB2dykgKi9cbiAgI21vYmlsZU1haW5QYW5lbCwgLmRyYXdlci1wYW5lbCB7IGRpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBmaXhlZDsgaW5zZXQ6IDAgMCAwIGF1dG87IHdpZHRoOiBtaW4oNDh2dywgdmFyKC0tbWVudS1tYXgtdykpOyBtYXgtd2lkdGg6IDU2dnc7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLWVsZXZhdGVkKTsgYm9yZGVyLWxlZnQ6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyB6LWluZGV4OiB2YXIoLS16LWRyYXdlcik7IGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tb2RhbCk7IHBhZGRpbmctdG9wOiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCk7IHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7IH1cbiAgI21vYmlsZU1haW5QYW5lbC5vcGVuLCAuZHJhd2VyLXBhbmVsLm9wZW4geyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICNtb2JpbGVNYWluUGFuZWwgLm1lbnUtbGlzdCwgLmRyYXdlci1wYW5lbCAubWVudS1saXN0IHsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgcGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNSk7IGdhcDogMDsgZmxleDogMSAxIGF1dG87IG1pbi1oZWlnaHQ6IDA7IG92ZXJmbG93LXk6IGF1dG87IGFsaWduLWl0ZW1zOiBzdHJldGNoOyB9XG4gIC8qIFJlbW92ZSBvdXRlciBmcmFtaW5nIGxpbmVzOyBwZXItaXRlbSBzZXBhcmF0b3JzIGluc3RlYWQgKi9cbiAgI21vYmlsZU1haW5QYW5lbCAubWVudS1saXN0OjpiZWZvcmUsXG4gICNtb2JpbGVNYWluUGFuZWwgLm1lbnUtbGlzdDo6YWZ0ZXIgeyBjb250ZW50OiBub25lICFpbXBvcnRhbnQ7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuICAjbW9iaWxlTWFpblBhbmVsICNtb2JpbGVNZW51R29yaWxsYSwgLmRyYXdlci1wYW5lbCAjbW9iaWxlTWVudUdvcmlsbGEgeyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7IGhlaWdodDogYXV0bzsgLW8tb2JqZWN0LWZpdDogY292ZXI7IG9iamVjdC1maXQ6IGNvdmVyOyBtYXJnaW4tdG9wOiBhdXRvOyBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxuXG4gIC8qIEVubGFyZ2UgbWVudSBidXR0b25zIGJ5IH4zMCUgaW5zaWRlIHRoZSByaWdodCBkcmF3ZXIgb25seSAqL1xuICAjbW9iaWxlTWFpblBhbmVsIC5tZW51LWxpc3QgYnV0dG9uLFxuICAjbW9iaWxlTWFpblBhbmVsIC5tZW51LWxpc3QgYSB7XG4gICAgZm9udC1zaXplOiBjYWxjKHZhcigtLWZvbnQtMTQpICogMS4zKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KSAhaW1wb3J0YW50OyAvKiBncmVlbiB0ZXh0ICovXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB9XG4gIC8qIEhvcml6b250YWwgc2VwYXJhdG9ycyBiZXR3ZWVuIGl0ZW1zLCBwbHVzIHVuZGVybGluZSBmb3IgbGFzdCBpdGVtIChlLmcuLCBMb2dvdXQpICovXG4gICNtb2JpbGVNYWluUGFuZWwgLm1lbnUtbGlzdCA+ICogeyBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTsgfVxuICAjbW9iaWxlTWFpblBhbmVsIC5tZW51LWxpc3QgPiAqOmZpcnN0LWNoaWxkIHsgYm9yZGVyLXRvcDogbm9uZTsgfVxuICAjbW9iaWxlTWFpblBhbmVsIC5tZW51LWxpc3QgPiAqOmxhc3QtY2hpbGQgeyBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTsgfVxuXG4gIC8qIEZpcnN0IHRvcCBpdGVtICgnVHJpYmFsIFRyYWRpbmcnKSBzaG91bGQgbm90IGJlIGJveGVkICovXG4gICNtb2JpbGVNYWluUGFuZWwgI21lbnVIb21lQnRuIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMykgMDtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgICBmb250LXdlaWdodDogODAwO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAvKiBNYWtlIGl0IDQwJSBsYXJnZXIgdGhhbiBzdGFuZGFyZCBtZW51IGl0ZW1zICh3aGljaCBhcmUgMS4zeCBiYXNlKSDihpIgMS4zICogMS40IOKJiCAxLjgyICovXG4gICAgZm9udC1zaXplOiBjYWxjKHZhcigtLWZvbnQtMTQpICogMS44Mik7XG4gIH1cbiAgI21vYmlsZU1haW5QYW5lbCAjbWVudUhvbWVCdG46aG92ZXIgeyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IH1cbn1cclxuLyogRXh0cmEgc21hbGwgZGV2aWNlIHBvbGlzaCAqL1xyXG5AbWVkaWEgKG1heC13aWR0aDogMzByZW0pIHtcbiAgLm1haW4taGVhZGVyIHsgcGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS00KTsgcGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2UtNCk7IH1cbiAgLm1haW4taGVhZGVyIGgxIHsgZm9udC1zaXplOiB2YXIoLS1mb250LTIwKTsgfVxuICAjbW9iaWxlTWVudVRvZ2dsZSwgLm1vYmlsZS1tZW51LXRvZ2dsZSB7IHdpZHRoOiB2YXIoLS1zcGFjZS0xNik7IGhlaWdodDogdmFyKC0tc3BhY2UtMTYpOyB9XG4gICNtb2JpbGVNZW51UGFuZWwgLm1lbnUtbGlzdCBidXR0b24sIC5tb2JpbGUtbWVudS1wYW5lbCAubWVudS1saXN0IGJ1dHRvbiB7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpOyB9XG59XHJcbi8qIEhlYWRlciBsb2dvOiBoaWRlIGltYWdlIG9uIG1vYmlsZSB0byByZW1vdmUgZ29yaWxsYSBpY29uICovXHJcbiNsb2dvSW1nIHsgZGlzcGxheTogbm9uZTsgd2lkdGg6IHZhcigtLXNwYWNlLTEwKTsgaGVpZ2h0OiB2YXIoLS1zcGFjZS0xMCk7IC1vLW9iamVjdC1maXQ6IGNvbnRhaW47IG9iamVjdC1maXQ6IGNvbnRhaW47IH1cclxuQG1lZGlhIChtYXgtd2lkdGg6IDU2LjI1cmVtKSB7XG4gIC8qIEtlZXAgbG9nbyBpbWFnZSBoaWRkZW4gb24gc21hbGwgc2NyZWVucyAqL1xuICAjbG9nb0ltZyB7IGRpc3BsYXk6IG5vbmU7IH1cbiAgLyogVmlzdWFsbHkgaGlkZSB0aGUgbG9nbyB0ZXh0IG9uIG1vYmlsZSAqL1xuICAjbG9nb1RleHQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMXB4O1xuICAgIGhlaWdodDogMXB4O1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAtMXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgICBjbGlwLXBhdGg6IGluc2V0KDUwJSk7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBib3JkZXI6IDA7XG4gIH1cbn1cclxuLyogTGVmdCBidXR0b24gYmVjb21lcyBncmVlbiAkIGljb24gb24gbW9iaWxlOyByaWdodCBtZW51IG1hdGNoZXMgc2l6ZSAqL1xyXG5AbWVkaWEgKG1heC13aWR0aDogNTYuMjVyZW0pIHtcbiAgI3dhdGNobGlzdFRvZ2dsZSB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgd2lkdGg6IGNhbGModmFyKC0taGVhZGVyLXJvdy1oZWlnaHQpIC0gdmFyKC0tc3BhY2UtNikpO1xuICAgIGhlaWdodDogY2FsYyh2YXIoLS1oZWFkZXItcm93LWhlaWdodCkgLSB2YXIoLS1zcGFjZS02KSk7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7IC8qIHB1c2ggdG8gdG9wICovXG4gICAgbWFyZ2luLWxlZnQ6IGNhbGMoLTEgKiB2YXIoLS1zcGFjZS01KSk7IC8qIHB1bGwgaW50byBmYXIgbGVmdCBjb3JuZXIgKi9cbiAgfVxuICAjd2F0Y2hsaXN0VG9nZ2xlIHN2ZyB7IGRpc3BsYXk6IG5vbmU7IH1cbiAgI3dhdGNobGlzdFRvZ2dsZTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJCc7XG4gICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAvKiBLZWVwIGxhcmdlIGJ1dCBwcm9wb3J0aW9uYWwgdG8gcmVkdWNlZCBidXR0b24gc2l6ZSAqL1xuICAgIGZvbnQtc2l6ZTogY2FsYyh2YXIoLS1oZWFkZXItcm93LWhlaWdodCkgLSB2YXIoLS1zcGFjZS0xMCkpO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICB9XG4gIC8qIG1hdGNoIHNpemVzIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQgdG9nZ2xlcyAqL1xuICAjbW9iaWxlTWVudVRvZ2dsZSB7XG4gICAgd2lkdGg6IHZhcigtLXNwYWNlLTIwKTtcbiAgICBoZWlnaHQ6IHZhcigtLXNwYWNlLTIwKTtcbiAgfVxufVxyXG4vKiBLZWVwIG5hdiBpdGVtcyBvbiBhIHNpbmdsZSByb3c7IHNlYXJjaCBpbnB1dCB3aWxsIHNocmluayByZXNwb25zaXZlbHkgKi9cclxuLmhlYWRlci1uYXYgeyBmbGV4LXdyYXA6IG5vd3JhcDsgcm93LWdhcDogMDsgb3ZlcmZsb3cteDogYXV0bzsgb3ZlcmZsb3cteTogdmlzaWJsZTsgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplOyBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGUgYm90aC1lZGdlczsgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOyB9XHJcbi5oZWFkZXItbmF2IC5yZWxhdGl2ZSB7XG4gIGZsZXgtZ3JvdzogMTtcbiAgbWluLXdpZHRoOiB2YXIoLS1zZWFyY2gtbWluLXcpOyAvKiBHaXZlIHNlYXJjaCBtb3JlIGJhc2Ugd2lkdGggKi9cbiAgZmxleC1zaHJpbms6IDE7IC8qIEFsbG93IHNlYXJjaCB0byBzaHJpbmsgKi9cbn1cclxuLyogQWRkIGEgc21hbGwgZ2FwIGJldHdlZW4gdGhlIHNlYXJjaCBpbnB1dCBhbmQgdGhlIEdvIGJ1dHRvbiAqL1xyXG4uaGVhZGVyLXNlYXJjaCB7XG4gIGdhcDogdmFyKC0tc3BhY2UtMik7XG59XHJcbi5oZWFkZXItbmF2IGJ1dHRvbiwgLmhlYWRlci1uYXYgYSB7XG4gIGZsZXgtc2hyaW5rOiAwOyAvKiBQcmV2ZW50IGJ1dHRvbnMgZnJvbSBzaHJpbmtpbmcgKi9cbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgLyogS2VlcCBidXR0b24gdGV4dCBvbiBvbmUgbGluZSAqL1xufVxyXG4vKiBCYXNlOiBrZWVwIGJ1dHRvbnMgaW5saW5lOyBzaGlmdCByaWdodCBvbmx5IG9uIHdpZGVyIHZpZXdwb3J0cyAqL1xyXG4uaGVhZGVyLW5hdiA+IC5idG4tZ28geyBtYXJnaW4tbGVmdDogMDsgfVxyXG4vKiBMZXQgdGhlIHNlYXJjaCBjb250YWluZXIgdHJ1bHkgZG9taW5hdGUgYXZhaWxhYmxlIHdpZHRoICovXHJcbi5oZWFkZXItbmF2ID4gLnJlbGF0aXZlIHsgZmxleDogMSAxIGF1dG87IG1heC13aWR0aDogbm9uZTsgfVxyXG4vKiBDb250YWluZXIgcXVlcnk6IHdoZW4gaGVhZGVyIG5hdiBpcyB0aWdodCwgcmVkdWNlIG1pbmltdW1zIGxvY2FsbHkgd2l0aG91dCBnbG9iYWwgYnJlYWtwb2ludHMgKi9cclxuQGNvbnRhaW5lciAobWF4LXdpZHRoOiAzNnJlbSkge1xuICAuaGVhZGVyLW5hdiA+IC5yZWxhdGl2ZSB7IG1pbi13aWR0aDogMDsgfVxufVxyXG4vKiBPbiB3aWRlciBzY3JlZW5zLCBwdXNoIHRoZSBidXR0b24gZ3JvdXAgdG8gdGhlIHJpZ2h0ICovXHJcbkBtZWRpYSAobWluLXdpZHRoOiA1Ni4yNXJlbSkge1xuICAuaGVhZGVyLW5hdiA+IC5idG4tZ28geyBtYXJnaW4tbGVmdDogYXV0bzsgfVxufVxyXG4vKiBIZWFkZXIgbmF2IHNpemluZzogdW5pZm9ybSB2ZXJ0aWNhbCBpbnNldCAoNHB4KSBpbnN0ZWFkIG9mIHN0cmV0Y2ggKi9cclxuLm1haW4taGVhZGVyIC5oZWFkZXItbGVmdCwgLm1haW4taGVhZGVyIC5oZWFkZXItbmF2IHsgZmxleC13cmFwOiBub3dyYXA7IHJvdy1nYXA6IDA7IG92ZXJmbG93OiB2aXNpYmxlOyB9XHJcbi8qIEFwcGx5IHNhbWUgdG9wL2JvdHRvbSBtYXJnaW4gdG8gZXZlcnkgaW1tZWRpYXRlIGNoaWxkIGZvciBjb25zaXN0ZW50IGhlaWdodCAqL1xyXG4vKiBLZWVwIGhlYWRlci1sZWZ0IGNoaWxkcmVuIGFsaWduZWQgdW5pdmVyc2FsbHkgKi9cclxuLm1haW4taGVhZGVyIC5oZWFkZXItbGVmdCA+ICogeyBtYXJnaW4tdG9wOnZhcigtLXNwYWNlLTEpOyBtYXJnaW4tYm90dG9tOjA7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyB9XHJcbi8qIEZvciBuYXYgY2hpbGRyZW4sIG9ubHkgYXNzZXJ0IGRpc3BsYXkgb24gZGVza3RvcCBzbyB3ZSBkb24ndCBvdmVycmlkZVxuICAgdGhlIG1vYmlsZSBydWxlIHRoYXQgaGlkZXMgbm9uLXNlYXJjaCBpdGVtcy4gKi9cclxuQG1lZGlhIChtaW4td2lkdGg6IDU2LjI1cmVtKSB7XG4gIC5tYWluLWhlYWRlciAuaGVhZGVyLW5hdiA+ICogeyBtYXJnaW4tdG9wOnZhcigtLXNwYWNlLTEpOyBtYXJnaW4tYm90dG9tOjA7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyB9XG59XHJcbi8qIE5vcm1hbGl6ZSBidXR0b25zOiBub3cgaGFuZGxlZCBpbiBidXR0b25zLmNzcyB2aWEgY2xhc3MtZmlyc3Qgc2VsZWN0b3JzICovXHJcbi8qIFNlYXJjaCBpbnB1dDoga2VlcCBpbnRlcm5hbCBwYWRkaW5nIGJ1dCBhbGlnbiB3aXRoIHNpYmxpbmdzICovXHJcbi5tYWluLWhlYWRlciAudGlja2VyLWlucHV0IHsgaGVpZ2h0OmF1dG87IHBhZGRpbmctdG9wOnZhcigtLXNwYWNlLTUpOyBwYWRkaW5nLWJvdHRvbTp2YXIoLS1zcGFjZS01KTsgYWxpZ24tc2VsZjpjZW50ZXI7IH1cclxuLyogU3Ryb25nIG1vYmlsZSBzYWZlZ3VhcmQ6IG5ldmVyIHNob3cgZnVsbCBuYXYgb24gc21hbGwgc2NyZWVucy5cbiAgIFRoaXMgcmVpbmZvcmNlcyB0aGUgZWFybGllciBydWxlIGluc2lkZSB0aGUgbW9iaWxlIGJsb2NrIGluIGNhc2UgYW55XG4gICBsYXRlciBkZWNsYXJhdGlvbnMgKGZyb20gdXRpbGl0aWVzIG9yIFRhaWx3aW5kIHJlc2V0cykgYXR0ZW1wdCB0b1xuICAgZm9yY2UgYSBkaXNwbGF5IHZhbHVlIG9uIGhlYWRlciBuYXYgY2hpbGRyZW4uICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA1Ni4yNXJlbSkge1xuICAubWFpbi1oZWFkZXIgLmhlYWRlci1uYXYgPiA6bm90KC5oZWFkZXItc2VhcmNoKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuICAvKiBFeHBsaWNpdGx5IGNvdmVyIGNvbW1vbiBkaXJlY3QgY2hpbGQgdHlwZXMgaW4gY2FzZSBvZiBmdXR1cmUgY2xhc3MgY2hhbmdlcyAqL1xuICAubWFpbi1oZWFkZXIgLmhlYWRlci1uYXYgPiBhLFxuICAubWFpbi1oZWFkZXIgLmhlYWRlci1uYXYgPiBidXR0b24sXG4gIC5tYWluLWhlYWRlciAuaGVhZGVyLW5hdiA+IFtyb2xlPVwibGlua1wiXSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4gIC8qIEVubGFyZ2UgdGhlIEdvIGJ1dHRvbiBpbnNpZGUgdGhlIGhlYWRlciBzZWFyY2ggb24gbW9iaWxlIGZvciBiZXR0ZXIgdGFwIHRhcmdldCAqL1xuICAuaGVhZGVyLXNlYXJjaCAuYnRuLWdvIHtcbiAgICAvKiBNYXRjaCBzZWFyY2ggaW5wdXQgaGVpZ2h0IGJ5IHN0cmV0Y2hpbmc7IGNlbnRlciBjb250ZW50ICovXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIC8qIFJlZHVjZSB3aWR0aCB+NDAlIHZzIGVhcmxpZXIgYnkgdHJpbW1pbmcgaG9yaXpvbnRhbCBwYWRkaW5nICovXG4gICAgcGFkZGluZzogMCB2YXIoLS1zcGFjZS0xMCk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LTE0KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgIG1pbi13aWR0aDogMDtcbiAgfVxufVxyXG4vKiBQcm9maWxlIFBhZ2UgVHdlYWtzIChleHRyYWN0ZWQgZnJvbSBjb21wb25lbnRzLmNzcykgKi9cclxuLnByb2ZpbGUtZ3JpZCB7IGFsaWduLWl0ZW1zOiBzdGFydDsgbWFyZ2luLXRvcDogMDsgfVxyXG4ucHJvZmlsZS1ncmlkID4gKjpmaXJzdC1jaGlsZCB7IG1hcmdpbi10b3A6IDA7IH1cclxuLyogTW9iaWxlOiBlbnN1cmUgc3RhY2tlZCBjb2x1bW5zIHVzZSBmdWxsIHdpZHRoICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAucHJvZmlsZS1ncmlkIHsgYWxpZ24taXRlbXM6IHN0cmV0Y2g7IH1cbiAgLnByb2ZpbGUtbGVmdCwgLnByb2ZpbGUtbWFpbiB7IHdpZHRoOiAxMDAlOyBtYXgtd2lkdGg6IG5vbmU7IH1cblxuICAvKiBNb2JpbGU6IG1ha2UgdGhlIHByb2ZpbGUgZmlsdGVyIGJhciBiZWhhdmUgbGlrZSBETSBzZWFyY2ggKi9cbiAgI3Byb2ZpbGVQYWdlIC5wcm9maWxlLXNlYXJjaC1jb250YWluZXIgeyBwb3NpdGlvbjogc3RpY2t5OyB0b3A6IDA7IHotaW5kZXg6IHZhcigtLXotc3RpY2t5KTsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpOyBkaXNwbGF5OiBibG9jazsgfVxuICAjcHJvZmlsZVBhZ2UgLnByb2ZpbGUtc2VhcmNoLWNvbnRhaW5lcjpub3QoLnZpc2libGUpIHsgaGVpZ2h0OiAwOyBtYXgtaGVpZ2h0OiAwOyBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OyBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICNwcm9maWxlQ2hhdFNlYXJjaENvbnRhaW5lciB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgcGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTUpOyBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7IH1cbiAgI3Byb2ZpbGVDaGF0U2VhcmNoQ29udGFpbmVyOjpiZWZvcmUsICNwcm9maWxlQ2hhdFNlYXJjaENvbnRhaW5lcjo6YWZ0ZXIgeyBjb250ZW50OiAnJzsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyByaWdodDogMDsgaGVpZ2h0OiB2YXIoLS1zcGFjZS0xKTsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTsgYm94LXNoYWRvdzogMCAwIDAuMzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC42KSwgMCAwIDAuNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjMpOyBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxuICAjcHJvZmlsZUNoYXRTZWFyY2hDb250YWluZXI6OmJlZm9yZSB7IHRvcDogMDsgfVxuICAjcHJvZmlsZUNoYXRTZWFyY2hDb250YWluZXI6OmFmdGVyIHsgYm90dG9tOiAwOyB9XG4gICNwcm9maWxlQ2hhdFNlYXJjaENvbnRhaW5lcjpub3QoLnZpc2libGUpOjpiZWZvcmUsXG4gICNwcm9maWxlQ2hhdFNlYXJjaENvbnRhaW5lcjpub3QoLnZpc2libGUpOjphZnRlciB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgY29udGVudDogbm9uZSAhaW1wb3J0YW50OyB9XG59XHJcbi8qIFByb2ZpbGUgcGFnZSBsYXlvdXQ6IHByb3BlciBjb2x1bW4gd2lkdGggZGlzdHJpYnV0aW9uICovXHJcbkBtZWRpYSAobWluLXdpZHRoOiA0OHJlbSkge1xuICAvKiBFbnN1cmUgcHJvZmlsZSBncmlkIHRha2VzIGZ1bGwgd2lkdGggKi9cbiAgLnByb2ZpbGUtZ3JpZCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG4gIFxuICAucHJvZmlsZS1sZWZ0IHsgXG4gICAgZmxleDogMCAxIDMwJTsgXG4gICAgd2lkdGg6IDMwJTtcbiAgICBtYXgtd2lkdGg6IDMwJTtcbiAgICBtaW4td2lkdGg6IDA7XG4gIH0gIC8qIEZpeGVkIHdpZHRoIGxlZnQgY29sdW1uICgzMCUpICovXG4gIC5wcm9maWxlLW1haW4geyBcbiAgICBmbGV4OiAwIDEgNzAlOyBcbiAgICB3aWR0aDogNzAlO1xuICAgIG1heC13aWR0aDogNzAlO1xuICAgIG1pbi13aWR0aDogMDsgXG4gIH0gICAgICAgICAgICAgLyogUmVtYWluaW5nIHNwYWNlIGZvciByaWdodCBjb2x1bW4gKDcwJSkgKi9cbn1cclxuLnByb2ZpbGUtbmV3LW1zZy1oaWdobGlnaHQgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGFuaW1hdGlvbjogcHJvZmlsZU5ld01zZ0ZsYXNoIDE4MDBtcyBlYXNlLW91dCAxOyB9XHJcbkBrZXlmcmFtZXMgcHJvZmlsZU5ld01zZ0ZsYXNoIHsgMCUgeyBib3gtc2hhZG93OiAwIDAgMCAwIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC41NSk7IGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4xMik7IH0gNDAlIHsgYm94LXNoYWRvdzogMCAwIDAgMC4zNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjI1KTsgfSA3MCUgeyBib3gtc2hhZG93OiAwIDAgMCAwLjEyNXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMzApOyB9IDEwMCUgeyBib3gtc2hhZG93OiAwIDAgMCAwIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMCk7IGJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7IH0gfVxyXG4jYmlvVGV4dGFyZWEgeyBtaW4taGVpZ2h0OiB2YXIoLS1iaW8tbWluLWgpOyBoZWlnaHQ6IHZhcigtLWJpby1oKTsgbWF4LWhlaWdodDogdmFyKC0tYmlvLW1heC1oKTsgcmVzaXplOiB2ZXJ0aWNhbDsgfVxyXG4ucHJvZmlsZS1tZXNzYWdlcyB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogdmFyKC0tc3BhY2UtMik7IH1cclxuLyogKHJldmVydGVkOiBkbyBub3QgZm9yY2UgbG9jYWwgdmVydGljYWwgc2Nyb2xsIG9uIGRlc2t0b3ApICovXHJcbi5wcm9maWxlLW1lc3NhZ2VzIC5wcm9maWxlLW1lc3NhZ2UgeyBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS02KTsgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpOyB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZTsgfVxyXG4ucHJvZmlsZS1tZXNzYWdlcyAucHJvZmlsZS1tZXNzYWdlOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctZ3JlZW4teHMpOyB9XHJcbi5wcm9maWxlLW1lc3NhZ2VzIC5wcm9maWxlLW1lc3NhZ2UgPiBkaXY6Zmlyc3QtY2hpbGQgeyBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0xKTsgZm9udC1zaXplOiB2YXIoLS1mb250LTE0KTsgbGluZS1oZWlnaHQ6IDEuMzsgfVxyXG4ucHJvZmlsZS1tZXNzYWdlcyAucHJvZmlsZS1tc2ctY29udGVudCB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNik7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTYpOyBsaW5lLWhlaWdodDogMS40OyBtaW4taGVpZ2h0OiB2YXIoLS1zcGFjZS0xOCk7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogdmFyKC0tc3BhY2UtNCk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7IGJhY2tncm91bmQ6IHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4xMik7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4zNSk7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlLCBib3JkZXItY29sb3IgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlOyB9XHJcbi5wcm9maWxlLW1lc3NhZ2VzIC5wcm9maWxlLW1lc3NhZ2U6aG92ZXIgLnByb2ZpbGUtbXNnLWNvbnRlbnQgeyBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTUpOyBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC42KTsgYm94LXNoYWRvdzogMCAwIDAgMC4xMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjM1KSBpbnNldCwgdmFyKC0tc2hhZG93LWdyZWVuLXhzKTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOyB9XHJcbi5wcm9maWxlLW1lc3NhZ2VzIC5wcm9maWxlLW1lc3NhZ2U6YWN0aXZlIC5wcm9maWxlLW1zZy1jb250ZW50IHsgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjA4KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyBib3gtc2hhZG93OiAwIDAgMCAwLjA2MjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjM1KSBpbnNldDsgfVxyXG4ucHJvZmlsZS1tZXNzYWdlcyAucHJvZmlsZS1tc2ctdGlja2VyLCAucHJvZmlsZS1tZXNzYWdlcyAucHJvZmlsZS1tc2ctdXNlcm5hbWUgeyBmb250LXNpemU6IHZhcigtLWZvbnQtMTgpOyBmb250LXdlaWdodDogNzAwOyBsaW5lLWhlaWdodDogMS4yOyB9XHJcbi5wcm9maWxlLW1lc3NhZ2VzIC5tc2ctYWN0aW9ucyBidXR0b24geyBmb250LXNpemU6IHZhcigtLWZvbnQtMTYpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS01KTsgbGluZS1oZWlnaHQ6IDEuMjsgZm9udC13ZWlnaHQ6IDYwMDsgfVxyXG4ucHJvZmlsZS1tZXNzYWdlcyAucHJvZmlsZS1tc2ctbGlzdCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogdmFyKC0tc3BhY2UtMik7IH1cclxuLnByb2ZpbGUtbWVzc2FnZXMgLnByb2ZpbGUtbXNnLXRzIHsgZm9udC1zaXplOiB2YXIoLS1mb250LTEyKTsgb3BhY2l0eTogMC43OyB9XHJcbi5wcm9maWxlLW1lc3NhZ2UgLnByb2ZpbGUtbXNnLWNvbnRlbnQtLXByb2ZpbGUgeyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgfVxyXG4ucHJvZmlsZS1tZXNzYWdlIC5wcm9maWxlLW1zZy1yZWFjdGlvbi1hbmNob3IgeyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxyXG4ucHJvZmlsZS1tZXNzYWdlIC5wcm9maWxlLW1zZy10ZXh0IHsgZGlzcGxheTogYmxvY2s7IGZsZXg6IDE7IH1cclxuLnByb2ZpbGUtbWVzc2FnZSAubWVzc2FnZS13aXRoLXJlYWN0aW9uIHsgcG9zaXRpb246IHN0YXRpYzsgcGFkZGluZy1yaWdodDogMDsgfVxyXG4ucHJvZmlsZS1tZXNzYWdlIC5tZXNzYWdlLXJlYWN0aW9uIHsgcG9zaXRpb246IHN0YXRpYzsgdHJhbnNmb3JtOiBub25lOyBvcGFjaXR5OiAxOyBtYXJnaW46IDA7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IHZhcigtLXNwYWNlLTEpOyB0cmFuc2l0aW9uOiBjb2xvciAwLjE4cyBlYXNlOyB9XHJcbi5wcm9maWxlLW1lc3NhZ2UgLm1lc3NhZ2UtcmVhY3Rpb25fX2J1dHRvbiB7IHdpZHRoOiB2YXIoLS1idG4taWNvbi1zbSk7IGhlaWdodDogdmFyKC0tYnRuLWljb24tc20pOyB9XHJcbi5wcm9maWxlLW1lc3NhZ2UgLm1lc3NhZ2UtcmVhY3Rpb25fX2NvdW50IHsgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNlLTEpOyB9XHJcbi8qIFNFQyBCb3QgZmlsaW5ncyBob3Zlci9mb2N1cyBzdGF0ZXMgZm9yIGNhcmRzIGluIHByb2ZpbGUgZmVlZCAqL1xyXG4ucHJvZmlsZS1tZXNzYWdlcyAucHJvZmlsZS1tZXNzYWdlLmlzLWNsaWNrYWJsZSB7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlLCBib3JkZXItY29sb3IgMC4xOHMgZWFzZSwgYm94LXNoYWRvdyAwLjE4cyBlYXNlLCB0cmFuc2Zvcm0gMC4xOHMgZWFzZTsgfVxyXG4ucHJvZmlsZS1tZXNzYWdlcyAucHJvZmlsZS1tZXNzYWdlLmlzLWNsaWNrYWJsZTpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4wNik7XG4gIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjU1KTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWdyZWVuLXhzKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xufVxyXG4ucHJvZmlsZS1tZXNzYWdlcyAucHJvZmlsZS1tZXNzYWdlLmlzLWNsaWNrYWJsZTpmb2N1cyxcbi5wcm9maWxlLW1lc3NhZ2VzIC5wcm9maWxlLW1lc3NhZ2UuaXMtY2xpY2thYmxlOmZvY3VzLXZpc2libGUge1xuICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nLXNpemUsIDAuMTI1cmVtKSBzb2xpZCB2YXIoLS1mb2N1cy1yaW5nLWNvbG9yLCByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuODIpKTtcbiAgb3V0bGluZS1vZmZzZXQ6IHZhcigtLWZvY3VzLXJpbmctb2Zmc2V0LCAwLjEyNXJlbSk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgYm94LXNoYWRvdzogdmFyKC0tb3V0bGluZS1zdHJvbmcpO1xufVxyXG4vKiBGaWxpbmdzIFVJIChleHRyYWN0ZWQgZnJvbSBjb21wb25lbnRzLmNzcykgKi9cclxuLyogRGFpbHkgRmlsaW5nczogZmlsdGVyIHBpbGxzICovXHJcbi5kZi1waWxsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTUpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQtcGx1cyk7XG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlci1zdHJvbmcpO1xuICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoMTIwJSAxMjAlIGF0IDUwJSAwJSwgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjEyKSAwJSwgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjA2KSAyOCUsIHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMCkgNjAlKSwgdmFyKC0tY29sb3ItYmctZWxldmF0ZWQpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LTEyKTtcbiAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWxzLXhzKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwgYm94LXNoYWRvdyAxNjBtcyBlYXNlLCBiYWNrZ3JvdW5kIDE2MG1zIGVhc2UsIGNvbG9yIDE2MG1zIGVhc2UsIGJvcmRlci1jb2xvciAxNjBtcyBlYXNlO1xuICAvKiBSZXNlcnZlIHNwYWNlIGZvciB0aGUgbGFyZ2VzdCBib3gtc2hhZG93IHRvIHByZXZlbnQgbGF5b3V0IHNoaWZ0ICovXG4gIGJveC1zaGFkb3c6IDAgMCAxLjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMCk7IFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBib3gtc2hhZG93O1xufVxyXG4uZGYtcGlsbDo6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDExMGRlZywgcmdiYSh2YXIoLS13aGl0ZS1yZ2IpLCAwKSAzNSUsIHJnYmEodmFyKC0td2hpdGUtcmdiKSwgMC4zNSkgNTAlLCByZ2JhKHZhcigtLXdoaXRlLXJnYiksIDApIDY1JSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTQwJSk7XG4gIG9wYWNpdHk6IDA7IHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxyXG4uZGYtcGlsbDpob3Zlcjo6YWZ0ZXIgeyBhbmltYXRpb246IGRmU2hlZW4gOTAwbXMgZWFzZSBmb3J3YXJkczsgfVxyXG4uZGYtcGlsbDpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsgYm94LXNoYWRvdzogMCAwLjM3NXJlbSAxcmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4xNCk7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgfVxyXG4uZGYtcGlsbDpmb2N1cyB7XG4gIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmctc2l6ZSwgMC4xMjVyZW0pIHNvbGlkIHZhcigtLWZvY3VzLXJpbmctY29sb3IsIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC44MikpO1xuICBvdXRsaW5lLW9mZnNldDogdmFyKC0tZm9jdXMtcmluZy1vZmZzZXQsIDAuMTI1cmVtKTtcbiAgYm94LXNoYWRvdzogdmFyKC0tb3V0bGluZS1zdHJvbmcpO1xufVxyXG4uZGYtcGlsbDphY3RpdmUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cclxuLmRmLXBpbGwuaXMtc2VsZWN0ZWQge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCB2YXIoLS1jb2xvci1hY2NlbnQpLCB2YXIoLS1jb2xvci1hY2NlbnQtaG92ZXIpKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgLyogVGhlIGFuaW1hdGlvbiB3aWxsIHRha2Ugb3ZlciB0aGUgYm94LXNoYWRvdyBwcm9wZXJ0eSAqL1xuICBhbmltYXRpb246IGRmUHVsc2VCb3hTaGFkb3cgMjAwMG1zIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxyXG4uZGYtcGlsbC5pcy1zZWxlY3RlZDpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsgfVxyXG4uZGYtcGlsbC5kZi1wcmVzc2VkIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XHJcbkBrZXlmcmFtZXMgZGZTaGVlbiB7IDAlIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xNDAlKTsgfSAxMCUgeyBvcGFjaXR5OiAxOyB9IDEwMCUgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTQwJSk7IH0gfVxyXG4vKiBUaGlzIGFuaW1hdGlvbiBub3cgc21vb3RobHkgdHJhbnNpdGlvbnMgdGhlIGNvbG9yIGFuZCBzaXplIG9mIHRoZSBwcmUtYWxsb2NhdGVkIHNoYWRvdyBzcGFjZSAqL1xyXG5Aa2V5ZnJhbWVzIGRmUHVsc2VCb3hTaGFkb3cgeyBcbiAgMCUsMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwLjc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yKTsgfSBcbiAgNTAlIHsgYm94LXNoYWRvdzogMCAwIDEuMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjQ1KTsgfSBcbn1cclxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbi5kZi1waWxsLCAuZGYtcGlsbDpob3ZlciwgLmRmLXBpbGw6Zm9jdXMsIC5kZi1waWxsOmFjdGl2ZSB7IHRyYW5zaXRpb246IG5vbmU7IH1cbi5kZi1waWxsOjphZnRlciwgLmRmLXBpbGw6aG92ZXI6OmFmdGVyIHsgYW5pbWF0aW9uOiBub25lOyB9XG5cbi8qIFRvdWNoIGRldmljZXM6IGF2b2lkIHN0aWNreSBob3ZlciBvbiBwaWxscyAqL1xuQG1lZGlhIChob3Zlcjogbm9uZSkgYW5kIChwb2ludGVyOiBjb2Fyc2UpIHtcbiAgLmRmLXBpbGw6aG92ZXIgeyBcbiAgICB0cmFuc2Zvcm06IG5vbmU7IFxuICAgIGJveC1zaGFkb3c6IDAgMCAxLjI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMCk7IFxuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7XG4gIH1cbiAgLmRmLXBpbGw6aG92ZXI6OmFmdGVyIHsgYW5pbWF0aW9uOiBub25lOyB9XG59XG59XHJcbi8qIERhaWx5IEZpbGluZ3MgaGVhZGVyIG1pbm9yIHR3ZWFrcyAqL1xyXG4uZGFpbHktZmlsaW5ncy1oZWFkZXIgeyBib3gtc2hhZG93OiAwIDAuMzc1cmVtIDEuMTI1cmVtIHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMC4yNSk7IG92ZXJmbG93OiB2aXNpYmxlOyB9XHJcbi5kYWlseS1maWxpbmdzLWhlYWRlciBoMiB7IHRleHQtc2hhZG93OiB2YXIoLS10ZXh0LWdsb3ctZ3JlZW4tc20pOyB9XHJcbi8qIERhaWx5IEZpbGluZ3M6IGZpbHRlcnMgYWxpZ25lZCByaWdodCBpbiB0d28gdGlnaHQgcm93cyAqL1xyXG4uZGFpbHktZmlsdGVycy1ncmlkIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgZ2FwOiB2YXIoLS1zcGFjZS0zKTsgb3ZlcmZsb3cteDogaGlkZGVuOyBvdmVyZmxvdy15OiB2aXNpYmxlOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtMSk7IHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS0xKTsgc2Nyb2xsYmFyLXdpZHRoOiBhdXRvOyB9XHJcbi5kYWlseS1maWx0ZXJzLWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgaGVpZ2h0OiB2YXIoLS1zcGFjZS00KTsgfVxyXG4uZGFpbHktZmlsdGVycy1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7IGJhY2tncm91bmQ6IHZhcigtLXNjcm9sbGJhci10aHVtYik7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IH1cclxuLmRhaWx5LWZpbHRlcnMtZ3JpZCAuZGYtcGlsbCB7IG1hcmdpbjogMDsgcGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMyk7IH1cclxuLyogRW5zdXJlICdGb3JtIFR5cGVzOicgYnV0dG9uIGhlaWdodCBtYXRjaGVzIGRmLXBpbGwgYWNyb3NzIHBhZ2VzICovXHJcbi5kYWlseS1maWx0ZXJzLWdyaWQgLmZvcm0tdHlwZXMtYnRuIHsgcGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMyk7IGxpbmUtaGVpZ2h0OiAxOyB9XHJcbi8qIFNFQyBGaWxpbmdzIHBhZ2U6IGNlbnRlciBGb3JtIFR5cGVzIGFuZCBDbGVhciBvbiBtb2JpbGUgKi9cclxuQG1lZGlhIChtYXgtd2lkdGg6IDU2LjI1cmVtKSB7XG4gIC8qIENlbnRlciB0aGUgdG9wIHJvdyB0aGF0IGNvbnRhaW5zIHRoZSBGb3JtIFR5cGVzIGJ1dHRvbiBhbmQgdGhlIHBpbGxzICovXG4gIC5maWxpbmdzLWZpbHRlcnMgLmZpbHRlcnMtdG9wLXJvdyB7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gIC8qIEVuc3VyZSB0aGUgcGlsbHMgYmxvY2sgKHdoaWNoIGNvbnRhaW5zIENsZWFyIHdoZW4gZGF0ZSByYW5nZSBpcyBoaWRkZW4pIGlzIGFsc28gY2VudGVyZWQgKi9cbiAgLmZpbGluZ3MtZmlsdGVycyAuZGFpbHktZmlsdGVycy1ncmlkIHsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbn1cclxuLyogRGFpbHkgKE5ldykgRmlsaW5ncyBwYWdlIOKAlCBtb2JpbGUgbGF5b3V0IGNsZWFudXA6IG1ha2UgZmlsdGVycyB3cmFwICYgY2VudGVyICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA1Ni4yNXJlbSkge1xuICAvKiBNb3ZlIHRoZSByaWdodCBmaWx0ZXJzIGJsb2NrIHVuZGVyIHRoZSBoZWFkaW5nIGFuZCBjZW50ZXIgaXQgKi9cbiAgI2RhaWx5RmlsdGVyc1JpZ2h0IHsgXG4gICAgbWFyZ2luLWxlZnQ6IDA7IFxuICAgIGZsZXg6IDAgMCAxMDAlOyBcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgXG4gICAgZmxleC13cmFwOiB3cmFwOyBcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuICB9XG4gIC8qIFJvdyAxOiBLZWVwIHRoZSBoZWFkaW5nIG9uIGEgc2luZ2xlIGxpbmUgYW5kIGNlbnRlcmVkICovXG4gIC5maWxpbmdzLWNhcmQtLWxpdmUgLmRhaWx5LWZpbGluZ3MtaGVhZGVyIC5oLTggeyB3aWR0aDogMTAwJTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgLmZpbGluZ3MtY2FyZC0tbGl2ZSAuZGFpbHktZmlsaW5ncy1oZWFkZXIgaDIgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xOCk7IH1cblxuICAvKiBDaGlsZHJlbiBvZiAjZGFpbHlGaWx0ZXJzUmlnaHQgc3RhY2sgaW50byByb3dzIHVzaW5nIGZsZXggb3JkZXIgKi9cbiAgLmZpbGluZ3MtY2FyZC0tbGl2ZSAjZGFpbHlGb3JtRmlsdGVycyB7IG9yZGVyOiAxOyBmbGV4OiAwIDAgMTAwJTsgfVxuICAuZmlsaW5ncy1jYXJkLS1saXZlICNkYWlseUNsZWFyRmlsdGVycyB7IG9yZGVyOiAyOyBmbGV4OiAwIDAgMTAwJTsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cblxuICAvKiBMZXQgYWxsIGZpbHRlciBwaWxscyB3cmFwIHRvIG11bHRpcGxlIGxpbmVzLCByZW1vdmUgY2xpcHBpbmcgKi9cbiAgLmZpbGluZ3MtY2FyZC0tbGl2ZSAuZGFpbHktZmlsdGVycy1ncmlkIHsgXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IFxuICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7IFxuICAgIG92ZXJmbG93OiB2aXNpYmxlOyBcbiAgICBmbGV4LXdyYXA6IHdyYXA7IFxuICAgIHJvdy1nYXA6IHZhcigtLXNwYWNlLTIpOyBcbiAgICAtbW96LWNvbHVtbi1nYXA6IHZhcigtLXNwYWNlLTIpOyBcbiAgICAgICAgIGNvbHVtbi1nYXA6IHZhcigtLXNwYWNlLTIpO1xuICAgIHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS0xKTtcbiAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7XG4gIH1cbiAgLyogUm93IDI6IFB1dCBGb3JtIFR5cGVzIG9uIGl0cyBvd24gY2VudGVyZWQgcm93IGluc2lkZSB0aGUgZ3JpZCAqL1xuICAuZmlsaW5ncy1jYXJkLS1saXZlIC5kYWlseS1maWx0ZXJzLWdyaWQgLmZvcm0tdHlwZXMtYnRuIHsgXG4gICAgZmxleDogMCAwIDEwMCU7IFxuICAgIGRpc3BsYXk6IGZsZXg7IFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyBcbiAgICBvcmRlcjogMDsgXG4gIH1cbiAgLyogUm93IDMrOiBQaWxscyBmb2xsb3cgYWZ0ZXIgdGhlIEZvcm0gVHlwZXMgcm93ICovXG4gIC5maWxpbmdzLWNhcmQtLWxpdmUgLmRhaWx5LWZpbHRlcnMtZ3JpZCAuZGYtcGlsbCB7IG9yZGVyOiAxOyB9XG4gIC8qIE51ZGdlIENsZWFyIHRvIGl0cyBvd24gbGluZSB3aGVuIHNwYWNlIGlzIHRpZ2h0IGFuZCBjZW50ZXIgaXQgKi9cbiAgI2RhaWx5Q2xlYXJGaWx0ZXJzIHsgXG4gICAgd2lkdGg6IGF1dG87IFxuICAgIGFsaWduLXNlbGY6IGNlbnRlcjsgXG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMik7XG4gIH1cbn1cclxuLyogQmV0dGVyIGxvb2tpbmcgQ2xlYXIgYnV0dG9uIGZvciBEYWlseSBGaWxpbmdzICovXHJcbi5kZi1jbGVhci1idG4ge1xuICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTIpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjUpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQtcGx1cyk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTYpO1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtMTIpO1xuICBmb250LXdlaWdodDogODAwO1xuICBsZXR0ZXItc3BhY2luZzogLjAyZW07XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjE1cyBlYXNlLCBjb2xvciAuMTVzIGVhc2UsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UsIGJveC1zaGFkb3cgLjE1cyBlYXNlLCB0cmFuc2Zvcm0gLjEycyBlYXNlO1xufVxyXG4uZGYtY2xlYXItYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgYm94LXNoYWRvdzogMCAwLjYyNXJlbSAxLjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjI1KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XHJcbi5kZi1jbGVhci1idG46YWN0aXZlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyBib3gtc2hhZG93OiBub25lOyB9XHJcbi8qIE1vYmlsZTogcHJldmVudCBzdGlja3kgZ3JlZW4gYWZ0ZXIgdGFwOyBmbGFzaCBncmVlbiBvbmx5IHdoaWxlIHByZXNzZWQgKi9cclxuQG1lZGlhIChob3Zlcjogbm9uZSkgYW5kIChwb2ludGVyOiBjb2Fyc2UpIHtcbiAgLmRmLWNsZWFyLWJ0bjpob3ZlcixcbiAgLmRmLWNsZWFyLWJ0bjpmb2N1cyxcbiAgLmRmLWNsZWFyLWJ0bjpmb2N1cy12aXNpYmxlIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTIpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjUpO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG4gIC5kZi1jbGVhci1idG46YWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgfVxufVxyXG4vKiBHZW5lcmljIGZpbGluZ3Mgc2VhcmNoIGFuZCBsaXN0cyAobWlncmF0ZWQpICovXHJcbi5maWxpbmdzLXNlYXJjaCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGdhcDogdmFyKC0tc3BhY2UtNCk7IH1cclxuLmZpbGluZ3Mtc2VhcmNoX19pbnB1dCB7IGZsZXg6IDEgMSAxMnJlbTsgd2lkdGg6IG1pbih2YXIoLS1tZW51LW1heC13KSwgMTAwJSk7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLW11dGVkKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgcGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlOyB9XHJcbi5maWxpbmdzLXNlYXJjaF9faW5wdXQ6Zm9jdXMgeyBvdXRsaW5lOiBub25lOyBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGJveC1zaGFkb3c6IDAgMCAwIDAuMTI1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4zNSk7IH1cclxuLmZpbGluZ3Mtc2VhcmNoX19idXR0b24geyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgcGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNik7IGZvbnQtd2VpZ2h0OiA2MDA7IGZsZXgtc2hyaW5rOiAwOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMgZWFzZSwgY29sb3IgMC4ycyBlYXNlLCBib3JkZXItY29sb3IgMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZTsgfVxyXG4uZmlsaW5ncy1zZWFyY2hfX2J1dHRvbjpob3Zlcixcbi5maWxpbmdzLXNlYXJjaF9fYnV0dG9uOmZvY3VzLXZpc2libGUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBjb2xvcjogdmFyKC0tY29sb3ItYmcpOyBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGJveC1zaGFkb3c6IDAgMC4zNzVyZW0gMS4yNXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMjIpOyB9XHJcbi5maWxpbmdzLXNlYXJjaF9fYnV0dG9uOmZvY3VzLXZpc2libGUge1xuICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nLXNpemUsIDAuMTI1cmVtKSBzb2xpZCB2YXIoLS1mb2N1cy1yaW5nLWNvbG9yLCByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuODIpKTtcbiAgb3V0bGluZS1vZmZzZXQ6IHZhcigtLWZvY3VzLXJpbmctb2Zmc2V0LCAwLjEyNXJlbSk7XG59XHJcbi5maWxpbmdzLXNlYXJjaF9fbGF0ZXN0IHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS02KTsgZm9udC13ZWlnaHQ6IDYwMDsgZmxleC1zaHJpbms6IDA7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlLCBjb2xvciAwLjJzIGVhc2UsIGJvcmRlci1jb2xvciAwLjJzIGVhc2U7IH1cclxuLmZpbGluZ3Mtc2VhcmNoX19sYXRlc3Q6aG92ZXIsXG4uZmlsaW5ncy1zZWFyY2hfX2xhdGVzdDpmb2N1cy12aXNpYmxlIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgfVxyXG4uZmlsaW5ncy1zZWFyY2hfX2xhdGVzdDpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZy1zaXplLCAwLjEyNXJlbSkgc29saWQgdmFyKC0tZm9jdXMtcmluZy1jb2xvciwgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjgyKSk7XG4gIG91dGxpbmUtb2Zmc2V0OiB2YXIoLS1mb2N1cy1yaW5nLW9mZnNldCwgMC4xMjVyZW0pO1xufVxyXG4uZmlsaW5ncy1maWx0ZXJzIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctbXV0ZWQpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyB9XHJcbi5maWxpbmdzLWZpbHRlcnMtLWNvbXBhY3QgeyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IC1tb3otZml0LWNvbnRlbnQ7IHdpZHRoOiBmaXQtY29udGVudDsgbWF4LXdpZHRoOiAxMDAlOyBtYXJnaW46IDAgYXV0byB2YXIoLS1zcGFjZS02KTsgdGV4dC1hbGlnbjogY2VudGVyOyB9XHJcbkBzdXBwb3J0cyBub3QgKCh3aWR0aDogLW1vei1maXQtY29udGVudCkgb3IgKHdpZHRoOiBmaXQtY29udGVudCkpIHtcbiAgLyogZmFsbGJhY2s6IGFsbG93IGZ1bGwgd2lkdGggb24gbGVnYWN5IGVuZ2luZXMgKi9cbiAgLmZpbGluZ3MtZmlsdGVycy0tY29tcGFjdCB7IHdpZHRoOiBhdXRvOyB9XG59XHJcbkBtZWRpYSAobWluLXdpZHRoOiA0MC4wNjI1cmVtKSB7XG4gIC5maWxpbmdzLWZpbHRlcnMtLWNvbXBhY3QgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9XG59XHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0MHJlbSkge1xuICAuZmlsaW5ncy1maWx0ZXJzLS1jb21wYWN0IHsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyB9XG59XHJcbi5maWxpbmdzLXJlc3VsdHMgeyBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTsgfVxyXG4uZmlsaW5ncy1jb250cm9scy1yb3cgeyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBzdHJldGNoOyBnYXA6IHZhcigtLXNwYWNlLTQpOyB9XHJcbi8qIEtlZXAgYWN0aW9ucyBuZXh0IHRvIGRhdGUgaW5wdXRzIChub3QgZmFyIHJpZ2h0KSBvbiBtZWRpdW0rIHNjcmVlbnMgKi9cclxuQG1lZGlhIChtaW4td2lkdGg6IDQ4cmVtKSB7XG4gIC5maWxpbmdzLWNvbnRyb2xzLXJvdyB7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsgfVxuICAuZmlsaW5ncy1jb250cm9scy1yb3cgPiAuZmlsaW5ncy1jb250cm9scy1hY3Rpb25zIHsgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNlLTYpOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBmbGV4LXdyYXA6IG5vd3JhcDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxufVxyXG4uZmlsaW5ncy1jYXJkIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9XHJcbi8qIEZsZXgtYmFzZWQgZmlsaW5ncyBsaXN0IChyZXBsYWNlcyB0YWJsZXMpICovXHJcbi5maWxpbmdzLWxpc3QgeyB3aWR0aDogMTAwJTsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxyXG4uZmlsaW5ncy1saXN0X19oZWFkIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiB2YXIoLS1zcGFjZS0yKTsgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS02KTsgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlci1zdHJvbmcpOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTMpOyBmb250LXdlaWdodDogNjAwOyB9XHJcbi5maWxpbmdzLWxpc3RfX3JvdyB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogdmFyKC0tc3BhY2UtNCk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTYpOyBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7IGN1cnNvcjogcG9pbnRlcjsgfVxyXG4uZmlsaW5ncy1saXN0X19yb3c6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLXdoaXRlLXJnYiksIDAuMDQpOyB9XHJcbi5maWxpbmdzLWxpc3RfX2NvbCB7IG1pbi13aWR0aDogMDsgfVxyXG4uZmlsaW5ncy1saXN0X19jb2wtLWZvcm0geyBmbGV4OiAwIDAgNXJlbTsgZm9udC13ZWlnaHQ6IDcwMDsgfVxyXG4uZmlsaW5ncy1saXN0X19jb2wtLWNvbXBhbnkgeyBmbGV4OiAxIDEgYXV0bzsgbWluLXdpZHRoOiB2YXIoLS1maWxpbmdzLWNvbXBhbnktbWluLXcpOyB9XHJcbi5maWxpbmdzLWxpc3RfX2NvbC0tZGF0ZSB7IGZsZXg6IDAgMCBhdXRvOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBtYXJnaW4tbGVmdDogYXV0bzsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiB2YXIoLS1zcGFjZS0zKTsgfVxyXG4uZmlsaW5ncy1saXN0X19kYXRlLWRheSB7IGZvbnQtd2VpZ2h0OiA2MDA7IH1cclxuLmZpbGluZ3MtbGlzdF9fZGF0ZS10aW1lIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTIpOyB9XHJcbi5maWxpbmdzLWxpc3RfX2NoZXZyb24geyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7IH1cclxuLyogTGl2ZSBmaWxpbmdzICg1LWNvbHVtbiBjb21wYWN0IGxheW91dCkgKi9cclxuLmZpbGluZ3MtbGl2ZS1saXN0IHsgd2lkdGg6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cclxuLmZpbGluZ3MtbGl2ZS1yb3cgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IHZhcigtLXNwYWNlLTIpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTsgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlci1zdHJvbmcpOyB9XHJcbi5maWxpbmdzLWxpdmUtY2VsbCB7IG1pbi13aWR0aDogMDsgfVxyXG4uZmlsaW5ncy1saXZlLWNlbGwtLWluZGV4IHsgZmxleDogMCAwIDNyZW07IHRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmctcmlnaHQ6IDA7IH1cclxuLmZpbGluZ3MtbGl2ZS1jZWxsLS10aWNrZXIgeyBmbGV4OiAwIDAgNnJlbTsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IH1cclxuLmZpbGluZ3MtbGl2ZS1jZWxsLS1jb21wYW55IHsgZmxleDogMSAxIGF1dG87IG1pbi13aWR0aDogdmFyKC0tZmlsaW5ncy1saXZlLWNvbXBhbnktbWluLXcpOyB9XHJcbi5maWxpbmdzLWxpdmUtY2VsbC0tZm9ybSB7IGZsZXg6IDAgMCA1LjVyZW07IGZvbnQtd2VpZ2h0OiA2MDA7IH1cclxuLmZpbGluZ3MtbGl2ZS1jZWxsLS1maWxlZCB7IGZsZXg6IDAgMCAxMnJlbTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgdGV4dC1hbGlnbjogcmlnaHQ7IG1hcmdpbi1sZWZ0OiAwOyB9XHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAjZGFpbHlGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXZlLWNlbGwtLWZpbGVkIHsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgfVxuICAjZGFpbHlGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXZlLXJvdyB7IGdhcDogMDsganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OyB9XG4gICNkYWlseUZpbGluZ3NQYWdlIC5maWxpbmdzLWxpc3RfX2hlYWQgeyBnYXA6IDA7IGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsgfVxuICAvKiBFbnN1cmUgbm8gaW5uZXIgcGFkZGluZyBhZGRzIHNwYWNlIGJldHdlZW4gRm9ybSBhbmQgRmlsZWQgY29sdW1ucyAqL1xuICAjZGFpbHlGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXZlLWNlbGwtLXRpY2tlcixcbiAgI2RhaWx5RmlsaW5nc1BhZ2UgLmZpbGluZ3MtbGl2ZS1jZWxsLS1mb3JtIHsgcGFkZGluZy1sZWZ0OiAwOyBwYWRkaW5nLXJpZ2h0OiAwOyB9XG4gIC8qIEtlZXAgY2VsbHMgdGlnaHQ7IG5vIGV4dHJhIGlubmVyIHNwYWNpbmcgb24gRmlsZWQgKGdhcCBtYW5hZ2VkIGJ5IGZpeGVkIEZvcm0gd2lkdGgpICovXG4gICNkYWlseUZpbGluZ3NQYWdlIC5maWxpbmdzLWxpdmUtY2VsbC0tZmlsZWQgeyBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfVxuICAvKiBNb2JpbGU6IGFsbG93IEZvcm0gYW5kIEZpbGVkIHRvIHNpemUgdG8gY29udGVudCBhbmQgYWxpZ24gbGVmdFxuICAgICB0byBhdm9pZCBhIGxhcmdlIHZpc3VhbCBnYXAgd2hlbiBDb21wYW55IGNvbHVtbiBpcyBoaWRkZW4uICovXG4gICNkYWlseUZpbGluZ3NQYWdlIC5maWxpbmdzLWxpdmUtY2VsbC0taW5kZXggeyBmbGV4OiAwIDAgMi41cmVtOyB9XG4gICNkYWlseUZpbGluZ3NQYWdlIC5maWxpbmdzLWxpdmUtY2VsbC0tdGlja2VyIHsgZmxleDogMCAwIDQuNzVyZW07IH1cbiAgLyogS2VlcCBhIGZpeGVkIGJhc2Ugc28gRmlsZWQgY29sdW1uIHN0YXJ0cyBhdCBhIGNvbnNpc3RlbnQgWCBhY3Jvc3Mgcm93cyAqL1xuICAvKiBJbmNyZWFzZWQgdG8gOXJlbSBmb3IgbW9yZSBzZXBhcmF0aW9uIGZyb20gRmlsZWQgKi9cbiAgI2RhaWx5RmlsaW5nc1BhZ2UgLmZpbGluZ3MtbGl2ZS1jZWxsLS1mb3JtIHsgZmxleDogMCAwIDlyZW07IG1pbi13aWR0aDogMDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IH1cbiAgI2RhaWx5RmlsaW5nc1BhZ2UgLmZpbGluZ3MtbGl2ZS1jZWxsLS1maWxlZCB7IGZsZXg6IDAgMSBhdXRvOyB0ZXh0LWFsaWduOiBsZWZ0OyB9XG4gIC8qIFR3by1saW5lIHN0YWNrIHdpdGhpbiBGaWxlZCBzaG91bGQgYWxpZ24gdG8gdGhlIGxlZnQgb24gbW9iaWxlICovXG4gICNkYWlseUZpbGluZ3NQYWdlIC5maWxpbmdzLWxpdmUtZmlsZWQgeyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgfVxufVxyXG4vKiBEZXNrdG9wL3dlYjogZXZlbiBzcGFjaW5nIGZvciBTRUMgRmlsaW5ncyBjb2x1bW5zIGFuZCBsYXJnZXIgRm9ybSBib3VuZGFyeSAqL1xyXG5AbWVkaWEgKG1pbi13aWR0aDogNTYuMjVyZW0pIHtcbiAgLyogVXNlIGEgc2hhcmVkIGdyaWQgZm9yIGhlYWRlciBhbmQgcm93czogW0Zvcm1dIFtDb21wYW55XSBbRGF0ZV0gKi9cbiAgOnJvb3Qge1xuICAgIC0tZmlsaW5ncy1mb3JtLWNvbDogOXJlbTsgICAvKiBpbmNyZWFzZWQgYm91bmRhcnkgZm9yIGxvbmdlciBmb3JtIGxhYmVscyAqL1xuICAgIC0tZmlsaW5ncy1kYXRlLWNvbDogMTRyZW07ICAvKiBrZWVwcyBkYXRlL3RpbWUgc3RhYmxlICovXG4gIH1cblxuICAjc2VjRmlsaW5nc1BhZ2UgLmZpbGluZ3MtbGlzdF9faGVhZCxcbiAgI3NlY0ZpbGluZ3NQYWdlIC5maWxpbmdzLWxpc3RfX3JvdyB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLWZpbGluZ3MtZm9ybS1jb2wpIDFmciB2YXIoLS1maWxpbmdzLWRhdGUtY29sKTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG4gIH1cbiAgI3NlY0ZpbGluZ3NQYWdlIC5maWxpbmdzLWxpc3RfX2NvbC0tZm9ybSB7IGZsZXg6IDAgMCBhdXRvOyB9XG4gICNzZWNGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXN0X19jb2wtLWRhdGUgeyBtYXJnaW4tbGVmdDogMDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgfVxuXG4gIC8qIFBvaW50ZXIgZGV2aWNlczogZ3JlZW4gaG92ZXIgaGlnaGxpZ2h0IGZvciBmaWxpbmdzIHJvd3MgKi9cbiAgQG1lZGlhIChob3ZlcjogaG92ZXIpIGFuZCAocG9pbnRlcjogZmluZSkge1xuICAgICNzZWNGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXN0X19yb3c6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpO1xuICAgIH1cbiAgICAjc2VjRmlsaW5nc1BhZ2UgLmZpbGluZ3MtbGlzdF9fcm93OmhvdmVyIC5maWxpbmdzLWZvcm0sXG4gICAgI3NlY0ZpbGluZ3NQYWdlIC5maWxpbmdzLWxpc3RfX3Jvdzpob3ZlciAuZmlsaW5ncy1jb21wYW55LFxuICAgICNzZWNGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXN0X19yb3c6aG92ZXIgLmZpbGluZ3MtbGlzdF9fZGF0ZS1kYXksXG4gICAgI3NlY0ZpbGluZ3NQYWdlIC5maWxpbmdzLWxpc3RfX3Jvdzpob3ZlciAuZmlsaW5ncy1saXN0X19kYXRlLXRpbWUsXG4gICAgI3NlY0ZpbGluZ3NQYWdlIC5maWxpbmdzLWxpc3RfX3Jvdzpob3ZlciAuZmlsaW5ncy1saXN0X19jaGV2cm9uIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IH1cbiAgfVxufVxyXG4vKiBEZXNrdG9wL3dlYjogYXBwbHkgc2FtZSBzcGFjaW5nICsgaG92ZXIgZm9yIERhaWx5IChOZXcpIEZpbGluZ3MgKi9cclxuQG1lZGlhIChtaW4td2lkdGg6IDU2LjI1cmVtKSB7XG4gIDpyb290IHtcbiAgICAtLWZpbGluZ3MtbGl2ZS1pbmRleC1jb2w6IDMuNXJlbTtcbiAgICAtLWZpbGluZ3MtbGl2ZS10aWNrZXItY29sOiA2cmVtO1xuICAgIC0tZmlsaW5ncy1saXZlLWZvcm0tY29sOiA5cmVtOyAgLyogaW5jcmVhc2VkIGJvdW5kYXJ5ICovXG4gICAgLS1maWxpbmdzLWxpdmUtZmlsZWQtY29sOiAxNHJlbTtcbiAgfVxuXG4gICNkYWlseUZpbGluZ3NQYWdlIC5maWxpbmdzLWxpc3RfX2hlYWQge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1maWxpbmdzLWxpdmUtaW5kZXgtY29sKSB2YXIoLS1maWxpbmdzLWxpdmUtdGlja2VyLWNvbCkgMWZyIHZhcigtLWZpbGluZ3MtbGl2ZS1mb3JtLWNvbCkgdmFyKC0tZmlsaW5ncy1saXZlLWZpbGVkLWNvbCk7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpO1xuICB9XG4gICNkYWlseUZpbGluZ3NQYWdlIC5maWxpbmdzLWxpdmUtcm93IHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tZmlsaW5ncy1saXZlLWluZGV4LWNvbCkgdmFyKC0tZmlsaW5ncy1saXZlLXRpY2tlci1jb2wpIDFmciB2YXIoLS1maWxpbmdzLWxpdmUtZm9ybS1jb2wpIHZhcigtLWZpbGluZ3MtbGl2ZS1maWxlZC1jb2wpO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0yKTtcbiAgfVxuICAjZGFpbHlGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXZlLWNlbGwtLWZpbGVkIHsgbWFyZ2luLWxlZnQ6IDA7IHRleHQtYWxpZ246IHJpZ2h0OyB9XG5cbiAgLyogUG9pbnRlciBkZXZpY2VzOiBncmVlbiBob3ZlciBoaWdobGlnaHQgZm9yIGxpdmUgZmlsaW5ncyByb3dzICovXG4gIEBtZWRpYSAoaG92ZXI6IGhvdmVyKSBhbmQgKHBvaW50ZXI6IGZpbmUpIHtcbiAgICAjZGFpbHlGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXZlLXJvdzpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7XG4gICAgfVxuICAgIC8qIEVuc3VyZSB0aWNrZXIgdGV4dCBzd2l0Y2hlcyB0byBpbnZlcnNlIG9uIGhvdmVyIGZvciBjb250cmFzdCAqL1xuICAgICNkYWlseUZpbGluZ3NQYWdlIC5maWxpbmdzLWxpdmUtcm93OmhvdmVyIC5maWxpbmdzLWxpdmUtY2VsbC0tdGlja2VyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpO1xuICAgIH1cbiAgICAjZGFpbHlGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXZlLXJvdzpob3ZlciAuZmlsaW5ncy1saXN0X19kYXRlLWRheSxcbiAgICAjZGFpbHlGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXZlLXJvdzpob3ZlciAuZmlsaW5ncy1saXN0X19kYXRlLXRpbWUgeyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgfVxuICB9XG59XHJcbi8qIFR3by1saW5lIGZpbGVkIChkYXRlL3RpbWUpIHN0YWNrIGZvciBkYWlseSBzdHJlYW0gKi9cclxuLmZpbGluZ3MtbGl2ZS1maWxlZCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgbGluZS1oZWlnaHQ6IDEuMTU7IH1cclxuLyogVGltZSB0b3A6IGxhcmdlciAmIGJvbGRlcjsgRGF0ZSBib3R0b206IHNtYWxsZXIgJiBtdXRlZCAqL1xyXG4uZmlsaW5ncy1saXZlLWZpbGVkIC5maWxpbmdzLWxpc3RfX2RhdGUtdGltZSB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNCk7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IH1cclxuLmZpbGluZ3MtbGl2ZS1maWxlZCAuZmlsaW5ncy1saXN0X19kYXRlLWRheSB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMSk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgZm9udC13ZWlnaHQ6IDUwMDsgfVxyXG4uZmlsaW5ncy1yb3cgeyBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZTsgfVxyXG4uZmlsaW5ncy1yb3c6bGFzdC1jaGlsZCB7IGJvcmRlci1ib3R0b206IG5vbmU7IH1cclxuLmZpbGluZ3Mtcm93OmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IH1cclxuLmZpbGluZ3MtY2VsbCB7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIHZhcigtLXNwYWNlLTUpOyB9XHJcbi5maWxpbmdzLWZvcm0geyBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgZm9udC13ZWlnaHQ6IDYwMDsgfVxyXG4uZmlsaW5ncy1jb21wYW55IHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyBmb250LXdlaWdodDogNjAwOyB9XHJcbi5maWxpbmdzLXJvdzpob3ZlciAuZmlsaW5ncy1mb3JtLFxuLmZpbGluZ3Mtcm93OmhvdmVyIC5maWxpbmdzLWNvbXBhbnksXG4uZmlsaW5ncy1yb3c6aG92ZXIgLmZpbGluZ3MtY2VsbC0tY29tcGFueSB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpOyB9XHJcbi5maWxpbmdzLWRhdGUgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGdhcDogdmFyKC0tc3BhY2UtNCk7IH1cclxuLmZpbGluZ3MtZGF0ZV9fZGF5IHsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyB9XHJcbi5maWxpbmdzLXJvdzpob3ZlciAuZmlsaW5ncy1kYXRlX19kYXkgeyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlKTsgfVxyXG4uZmlsaW5ncy1kYXRlX190aW1lIHsgZm9udC1zaXplOiB2YXIoLS1mb250LTExKTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3VidGxlKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14cyk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTEpIHZhcigtLXNwYWNlLTIpOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMC4wNmVtOyB9XHJcbi5maWxpbmdzLXJvdzpob3ZlciAuZmlsaW5ncy1kYXRlX190aW1lIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7IGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1ibGFjay1yZ2IpLCAwLjQpOyB9XHJcbi5maWxpbmdzLWRhdGVfX2NoZXZyb24geyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBvcGFjaXR5OiAwOyB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgY29sb3IgMC4ycyBlYXNlOyBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgfVxyXG4uZmlsaW5ncy1yb3c6aG92ZXIgLmZpbGluZ3MtZGF0ZV9fY2hldnJvbiB7IG9wYWNpdHk6IDE7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpOyB9XHJcbi5maWxpbmdzLWRhdGVfX2ljb24geyB3aWR0aDogdmFyKC0tc3BhY2UtNyk7IGhlaWdodDogdmFyKC0tc3BhY2UtNyk7IH1cclxuLmZpbGluZ3Mtcm93IGEgeyBjb2xvcjogaW5oZXJpdDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XHJcbi5maWxpbmdzLXJvdyBhOmhvdmVyIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cclxuLmZpbGluZ3Mtcm93IGE6Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IHZhcigtLXNwYWNlLTIpIHNvbGlkIHZhcigtLWNvbG9yLWFjY2VudCk7IG91dGxpbmUtb2Zmc2V0OiB2YXIoLS1zcGFjZS0yKTsgfVxyXG4uZmlsaW5ncy1lbXB0eSB7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3VidGxlKTsgZm9udC1zaXplOiB2YXIoLS1mb250LTE0KTsgfVxyXG4uZmlsaW5ncy1jZWxsLS1pbmRleCB7IHdpZHRoOiB2YXIoLS1zcGFjZS0xNik7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRsZSk7IH1cclxuLmZpbGluZ3MtY2VsbC0tdGlja2VyIHsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7IGZvbnQtd2VpZ2h0OiA2MDA7IGxldHRlci1zcGFjaW5nOiAwLjA0ZW07IH1cclxuLmZpbGluZ3MtY2VsbC0tY29tcGFueSB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgfVxyXG4uZmlsaW5ncy1jZWxsLS1mb3JtIHsgZm9udC13ZWlnaHQ6IDYwMDsgfVxyXG4uZmlsaW5ncy1jZWxsLS1maWxlZCB7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTIpOyBsZXR0ZXItc3BhY2luZzogMC4wNGVtOyB9XHJcbi8qIFNFQyBGaWxpbmdzIChzZWFyY2ggcGFnZSk6IGhpZGUgQ29tcGFueSBjb2x1bW4gb24gbW9iaWxlIHRvIGltcHJvdmUgZml0ICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAjc2VjRmlsaW5nc1BhZ2UgLmZpbGluZ3MtbGlzdF9fY29sLS1jb21wYW55IHsgZGlzcGxheTogbm9uZTsgfVxufVxyXG4vKiBEYWlseSBGaWxpbmdzIChsaXZlIHN0cmVhbSk6IGhpZGUgQ29tcGFueSBjb2x1bW4gb24gbW9iaWxlIHRvIGltcHJvdmUgZml0ICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAjZGFpbHlGaWxpbmdzUGFnZSAuZmlsaW5ncy1saXZlLWNlbGwtLWNvbXBhbnkgeyBkaXNwbGF5OiBub25lOyB9XG59XHJcbi8qIElubGluZSBpbmZvIGljb24gaW4gdGlja2VyIGNlbGwgZm9yIERhaWx5IEZpbGluZ3MgKi9cclxuLyogSGlkZGVuIGJ5IGRlZmF1bHQ7IG9ubHkgc2hvdyB3aGVuIENvbXBhbnkgY29sdW1uIGlzIGhpZGRlbiAobW9iaWxlKSAqL1xyXG4udGlja2VyLWNvbXBhbnktYnRuIHsgZGlzcGxheTogbm9uZTsgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNlLTIpOyB9XHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAjZGFpbHlGaWxpbmdzUGFnZSAudGlja2VyLWNvbXBhbnktYnRuIHsgZGlzcGxheTogaW5saW5lLWZsZXg7IH1cbn1cclxuLyogQ2hhdCBVSSAoZXh0cmFjdGVkIGZyb20gY29tcG9uZW50cy5jc3MpICovXHJcbi8qIEhpZ2hsaWdodCBhIGNoYXQgbWVzc2FnZSAoZS5nLiwgd2hlbiBsaW5rZWQgZnJvbSBzZWFyY2gpICovXHJcbi5tZXNzYWdlLmlzLWhpZ2hsaWdodGVkIHtcbiAgb3V0bGluZTogdmFyKC0tc3BhY2UtMykgc29saWQgdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjA4KTtcbiAgYm94LXNoYWRvdzogdmFyKC0tb3V0bGluZS1zdHJvbmcpIGluc2V0LCAwIDAgMC43NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMik7XG59XHJcbi8qIFJlcGx5IHByZXZpZXcgKGlubGluZSBjb21wb3NlciBjb250ZXh0KSAqL1xyXG4ucmVwbHktcHJldmlldy1jb250YWluZXIge1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjZS01KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctbXV0ZWQpO1xuICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtMTMpO1xufVxyXG4ucmVwbHktcHJldmlldy1jb250ZW50IHsgYm9yZGVyLWxlZnQ6IHZhcigtLXNwYWNlLTMpIHNvbGlkIHZhcigtLWNvbG9yLXdhcm5pbmcpOyBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLTUpOyB9XHJcbi5yZXBseS1wcmV2aWV3LWhlYWRlciB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogdmFyKC0tY29sb3Itd2FybmluZyk7IH1cclxuLnJlcGx5LXByZXZpZXctYm9keSB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IG1heC13aWR0aDogdmFyKC0tcmVwbHktcHJldmlldy1tYXgtdyk7IH1cclxuLnJlcGx5LXByZXZpZXctY2FuY2VsIHsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWRpbSk7IGJvcmRlcjogbm9uZTsgZm9udC1zaXplOiB2YXIoLS1mb250LTI0KTsgY3Vyc29yOiBwb2ludGVyOyBwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTUpOyBsaW5lLWhlaWdodDogMTsgfVxyXG4ucmVwbHktcHJldmlldy1jYW5jZWw6aG92ZXIgeyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XHJcbiNyZXBseVByZXZpZXdDb250YWluZXIsIC5yZXBseS1wcmV2aWV3LWNvbnRhaW5lciB7XG4gIGJhY2tncm91bmQ6IHJnYmEodmFyKC0td2FybmluZy1yZ2IpLCAwLjA4KTtcbiAgYm9yZGVyLWxlZnQ6IHZhcigtLXNwYWNlLTMpIHNvbGlkIHZhcigtLWNvbG9yLXdhcm5pbmcpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcbn1cclxuI3JlcGx5UHJldmlld0NvbnRhaW5lciAucmVwbHktY29udGV4dCwgLnJlcGx5LXByZXZpZXctY29udGFpbmVyIC5yZXBseS1jb250ZXh0IHsgYm9yZGVyLWxlZnQ6IDA7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBwYWRkaW5nOiAwOyB9XHJcbi5yZXBseS1jbG9zZSB7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgZm9udC1zaXplOiB2YXIoLS1mb250LTE4KTsgbGluZS1oZWlnaHQ6IDE7IHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtNCk7IGN1cnNvcjogcG9pbnRlcjsgfVxyXG4ucmVwbHktY2xvc2U6aG92ZXIgeyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB9XHJcbi8qIEZpbGUgdXBsb2FkcyBhbmQgYXR0YWNobWVudHMgKi9cclxuI2ZpbGVVcGxvYWRQcmV2aWV3LCAjZG1GaWxlUHJldmlldyB7IGRpc3BsYXk6IGZsZXg7IGdhcDogdmFyKC0tc3BhY2UtNCk7IG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpOyBmbGV4LXdyYXA6IHdyYXA7IH1cclxuLmZpbGUtcHJldmlldy1pdGVtIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlci1zdHJvbmcpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteHMpO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc3BhY2UtMyk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1ncmVlbi14cyk7XG59XHJcbi5maWxlLXByZXZpZXctaXRlbSAuZmlsZS1uYW1lIHsgbWF4LXdpZHRoOiAxMnJlbTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IH1cclxuLmZpbGUtcHJldmlldy1pdGVtIC5maWxlLW1ldGEgeyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7IH1cclxuLmZpbGUtcHJldmlldy1pdGVtIGJ1dHRvbiB7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWRpbSk7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiB2YXIoLS1mb250LTE0KTsgfVxyXG4uZmlsZS1wcmV2aWV3LWl0ZW0gYnV0dG9uOmhvdmVyIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgfVxyXG4ubWVzc2FnZS1hdHRhY2htZW50IHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctbXV0ZWQpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTsgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IHZhcigtLXNwYWNlLTMpOyBtYXgtd2lkdGg6IDEwMCU7IH1cclxuLm1zZy1pbWFnZSB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBtYXJnaW46IDAgMCB2YXIoLS1zcGFjZS0yKSAwOyB9XHJcbi5tZXNzYWdlLWF0dGFjaG1lbnQgYSB7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogdmFyKC0tc3BhY2UtMyk7IH1cclxuLm1lc3NhZ2UtYXR0YWNobWVudCBhOmhvdmVyIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cclxuLm1lc3NhZ2UtYXR0YWNobWVudCBpbWcgeyBtYXgtd2lkdGg6IDEwMCU7IG1heC1oZWlnaHQ6IDYwc3ZoOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteHMpOyBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTsgY3Vyc29yOiBwb2ludGVyOyB9XHJcbi8qIFNob3cgWCBvbiBibG9ja2VkIHVwbG9hZCAoZ3Vlc3QvcmVzdHJpY3RlZCkgKi9cclxuLnVwbG9hZC1ibG9ja2VkIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9XHJcbi51cGxvYWQtYmxvY2tlZDpob3ZlciAucGFwZXJjbGlwLWljb24geyBvcGFjaXR5OiAwOyB9XHJcbi51cGxvYWQtYmxvY2tlZDo6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XHJcbi51cGxvYWQtYmxvY2tlZDpob3Zlcjo6YWZ0ZXIge1xuICBjb250ZW50OiAnw5cnO1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTtcbiAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICB0ZXh0LXNoYWRvdzogdmFyKC0tdGV4dC1zaGFkb3ctZGFyay1tZCk7XG59XHJcbi5hY3Rpb24tYmxvY2tlZCxcbi5ndWVzdC1yZXN0cmljdGVkLFxuLmd1ZXN0LWRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC41O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxyXG4uZ3Vlc3QtcmVzdHJpY3RlZCAqIHtcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XG59XHJcbi8qIEd1ZXN0IGNsaWNrIGRlbmlhbCBmZWVkYmFjayAqL1xyXG4uZ3Vlc3QtYmxvY2stZmxhc2g6OmFmdGVyIHtcbiAgY29udGVudDogJ8OXJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgZGlzcGxheTogZ3JpZDtcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWRhbmdlcik7XG4gIGZvbnQtd2VpZ2h0OiA5MDA7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgdGV4dC1zaGFkb3c6IHZhcigtLXRleHQtc2hhZG93LWRhcmstbWQpO1xuICBhbmltYXRpb246IGd1ZXN0LWZsYXNoLWZhZGUgNDgwbXMgZWFzZTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XHJcbi5ndWVzdC1ibG9jay1mbGFzaDo6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IDA7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMjVyZW0gcmdiYSh2YXIoLS1yZWQtcmdiKSwgMC4yNSk7XG4gIGFuaW1hdGlvbjogZ3Vlc3QtZmxhc2gtcHVsc2UgNDgwbXMgZWFzZTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XHJcbi5ndWVzdC1ibG9jay1mbGFzaCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBndWVzdC1mbGFzaC1zaGFrZSAyNDBtcyBlYXNlO1xufVxyXG5Aa2V5ZnJhbWVzIGd1ZXN0LWZsYXNoLWZhZGUge1xuICAwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cbiAgMTAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogc2NhbGUoMS4xNSk7IH1cbn1cclxuQGtleWZyYW1lcyBndWVzdC1mbGFzaC1wdWxzZSB7XG4gIDAlIHsgb3BhY2l0eTogMC42OyB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpOyB9XG4gIDEwMCUgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHNjYWxlKDEuMTUpOyB9XG59XHJcbkBrZXlmcmFtZXMgZ3Vlc3QtZmxhc2gtc2hha2Uge1xuICAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxuICAyNSUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTNweCk7IH1cbiAgNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDNweCk7IH1cbiAgNzUlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0ycHgpOyB9XG4gIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cbn1cclxuLyogRW5zdXJlIG92ZXJsYXlzICh0aW1lc3RhbXBzL2FjdGlvbnMpIGFyZSB2aXNpYmxlICovXHJcbi5tZXNzYWdlIHsgb3ZlcmZsb3c6IHZpc2libGU7IH1cclxuLyogQ2hhdCBoZWFkZXIgYW5kIGNvbnRhaW5lcnMgKi9cclxuLmNoYXQtaGVhZGVyIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctbXV0ZWQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS0xMCk7IGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNik7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyB9XHJcbiNvbmxpbmVVc2Vyc0NvdW50LCAub25saW5lLXVzZXJzLWNvdW50IHsgbWluLXdpZHRoOiB2YXIoLS1zcGFjZS05KTsgaGVpZ2h0OiB2YXIoLS1zcGFjZS05KTsgZm9udC1zaXplOiB2YXIoLS1mb250LTExKTsgfVxyXG4uY2hhdC1oZWFkZXIgI2NoYXRUaXRsZSB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogaW5oZXJpdDsgfVxyXG4ubWVzc2FnZXMtY29udGFpbmVyIHsgZmxleDogMTsgb3ZlcmZsb3cteTogYXV0bzsgcGFkZGluZzogdmFyKC0tc3BhY2UtMTApIHZhcigtLXNwYWNlLTEwKSB2YXIoLS1zcGFjZS0xMCkgdmFyKC0tc3BhY2UtMSk7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgfVxyXG4vKiBHdWFyZCBhZ2FpbnN0IGxvbmcgdG9rZW5zL1VSTHMgY2F1c2luZyBob3Jpem9udGFsIG92ZXJmbG93ICovXHJcbiNtZXNzYWdlc0NvbnRhaW5lcixcbi5tZXNzYWdlcy1jb250YWluZXIgeyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOyB9XHJcbi5lbXB0eS1jaGF0IHsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTgpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zMCkgdmFyKC0tc3BhY2UtMTApOyB9XHJcbi5lbXB0eS1jaGF0OjpiZWZvcmUgeyBjb250ZW50Olwi8J+SrFwiOyBkaXNwbGF5OmJsb2NrOyBmb250LXNpemU6IHZhcigtLWZvbnQtNDgpOyBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0xMCk7IH1cclxuI21lc3NhZ2VzQ29udGFpbmVyIC5tZXNzYWdlLCAubWVzc2FnZXMtY29udGFpbmVyIC5tZXNzYWdlIHsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kLXBsdXMpOyBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLTMpOyBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zcGFjZS05KTsgfVxyXG4vKiBCYXNlIGNoYXQgbWVzc2FnZSBidWJibGUgKi9cclxuLm1lc3NhZ2UgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgYm9yZGVyLWxlZnQ6IHZhcigtLXNwYWNlLTMpIHNvbGlkIHZhcigtLWNvbG9yLWFjY2VudCk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14cyk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTYpOyBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTsgcG9zaXRpb246IHJlbGF0aXZlOyBjdXJzb3I6IHBvaW50ZXI7IH1cclxuLyogTWVzc2FnZSBhY3Rpb25zIHZpc2liaWxpdHkgKi9cclxuLm1lc3NhZ2UtYWN0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IGdhcDogdmFyKC0tc3BhY2UtNCk7IG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpOyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IH1cclxuLm1lc3NhZ2UuaXMtc2VsZWN0ZWQgLm1lc3NhZ2UtYWN0aW9ucyB7IGRpc3BsYXk6IGZsZXg7IH1cclxuLyogS2V5Ym9hcmQgZm9jdXMgY3VlcyAqL1xyXG4jbWVzc2FnZXNDb250YWluZXIgLm1lc3NhZ2U6Zm9jdXMtd2l0aGluLFxuLm1lc3NhZ2VzLWNvbnRhaW5lciAubWVzc2FnZTpmb2N1cy13aXRoaW4ge1xuICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nLXNpemUsIDAuMTI1cmVtKSBzb2xpZCB2YXIoLS1mb2N1cy1yaW5nLWNvbG9yLCByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuODIpKTtcbiAgb3V0bGluZS1vZmZzZXQ6IHZhcigtLWZvY3VzLXJpbmctb2Zmc2V0LCAwLjEyNXJlbSk7XG59XHJcbi5tZXNzYWdlLWFjdGlvbnMgYnV0dG9uOmZvY3VzLXZpc2libGUsXG4uZmlsZS1wcmV2aWV3LWl0ZW0gYnV0dG9uOmZvY3VzLXZpc2libGUsXG4ucmVwbHktcHJldmlldy1jYW5jZWw6Zm9jdXMtdmlzaWJsZSxcbi5yZXBseS1jbG9zZTpmb2N1cy12aXNpYmxlLFxuLm1lc3NhZ2UtYXR0YWNobWVudCBhOmZvY3VzLXZpc2libGUge1xuICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nLXNpemUsIDAuMTI1cmVtKSBzb2xpZCB2YXIoLS1mb2N1cy1yaW5nLWNvbG9yLCByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuODIpKTtcbiAgb3V0bGluZS1vZmZzZXQ6IHZhcigtLWZvY3VzLXJpbmctb2Zmc2V0LCAwLjEyNXJlbSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14cyk7XG59XHJcbi8qIE1lc3NhZ2Ugcm93IGxheW91dCAqL1xyXG4ubWVzc2FnZS1yb3cgeyBhbGlnbi1pdGVtczogc3RyZXRjaDsgcG9zaXRpb246IHJlbGF0aXZlOyBkaXNwbGF5OiBmbGV4OyBnYXA6IDA7IH1cclxuLyogTW9iaWxlOiBlbnN1cmUgY2hhdCBtZXNzYWdlcyB1c2UgZmxleCBsYXlvdXQgYW5kIHdyYXAgd2l0aGluIHRoZSB2aWV3cG9ydCAqL1xyXG5AbWVkaWEgKG1heC13aWR0aDogNDcuOTlyZW0pIHtcbiAgI21lc3NhZ2VzQ29udGFpbmVyIC5tZXNzYWdlLFxuICAubWVzc2FnZXMtY29udGFpbmVyIC5tZXNzYWdlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cbiAgLm1lc3NhZ2Utcm93IHsgZmxleC13cmFwOiB3cmFwOyB9XG4gICNtZXNzYWdlc0NvbnRhaW5lciAubWVzc2FnZSAqLFxuICAubWVzc2FnZXMtY29udGFpbmVyIC5tZXNzYWdlICogeyBtYXgtd2lkdGg6IDEwMCU7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgI21lc3NhZ2VzQ29udGFpbmVyIC5tZXNzYWdlIC5tZXNzYWdlLWNvbnRlbnQsXG4gIC5tZXNzYWdlcy1jb250YWluZXIgLm1lc3NhZ2UgLm1lc3NhZ2UtY29udGVudCB7XG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICB9XG59XHJcbi8qIFVzZXJuYW1lIG91dGxpbmUgYnV0dG9uIHdpdGhpbiBtZXNzYWdlcyAqL1xyXG4jbWVzc2FnZXNDb250YWluZXIgLm1lc3NhZ2UgLm1zZy11c2VybmFtZS5idG4tb3V0bGluZS5jaGF0LXVzZXJuYW1lLW91dGxpbmUsXG4ubWVzc2FnZXMtY29udGFpbmVyIC5tZXNzYWdlIC5tc2ctdXNlcm5hbWUuYnRuLW91dGxpbmUuY2hhdC11c2VybmFtZS1vdXRsaW5lLFxuI2RtVGhyZWFkIC5tZXNzYWdlIC5tc2ctdXNlcm5hbWUuYnRuLW91dGxpbmUuY2hhdC11c2VybmFtZS1vdXRsaW5lIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMik7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMik7XG4gIGxpbmUtaGVpZ2h0OiAxLjE7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xufVxyXG4jbWVzc2FnZXNDb250YWluZXIgLm1lc3NhZ2UgLm1zZy11c2VybmFtZS5idG4tb3V0bGluZS5jaGF0LXVzZXJuYW1lLW91dGxpbmU6aG92ZXIsXG4ubWVzc2FnZXMtY29udGFpbmVyIC5tZXNzYWdlIC5tc2ctdXNlcm5hbWUuYnRuLW91dGxpbmUuY2hhdC11c2VybmFtZS1vdXRsaW5lOmhvdmVyLFxuI2RtVGhyZWFkIC5tZXNzYWdlIC5tc2ctdXNlcm5hbWUuYnRuLW91dGxpbmUuY2hhdC11c2VybmFtZS1vdXRsaW5lOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSk7XG59XHJcbi5tZXNzYWdlLWhlYWRlciB7IGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IG1hcmdpbi1ib3R0b206dmFyKC0tc3BhY2UtMik7IGZvbnQtc2l6ZTp2YXIoLS1mb250LTEyKTsgfVxyXG4ubWVzc2FnZS11c2VyIHsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGZvbnQtd2VpZ2h0OiA2MDA7IGN1cnNvcjogcG9pbnRlcjsgfVxyXG4ubWVzc2FnZS11c2VyOmhvdmVyIHsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ob3Zlcik7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9XHJcbi5tZXNzYWdlLXRpbWUgeyBmb250LXNpemU6dmFyKC0tZm9udC0xMCk7IGNvbG9yOnZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyB9XHJcbi5lZGl0ZWQtaW5kaWNhdG9yIHsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdWJ0bGUpOyBtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2UtMi01KTsgZm9udC1zaXplOiB2YXIoLS1mb250LTEwKTsgfVxyXG4ubWVzc2FnZS1jb250ZW50IHsgZm9udC1zaXplOnZhcigtLWZvbnQtMTQpOyBsaW5lLWhlaWdodDoxLjQ7IGNvbG9yOnZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH1cclxuLmNoYXQtbWVudGlvbiB7IGNvbG9yOiB2YXIoLS1jb2xvci1ibHVlKTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgZm9udC13ZWlnaHQ6IDYwMDsgfVxyXG4uY2hhdC1tZW50aW9uOmhvdmVyLCAuY2hhdC1tZW50aW9uOmZvY3VzIHsgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtaG92ZXIpOyB9XHJcbi8qIElubGluZSBtZW50aW9uIGhpZ2hsaWdodCBhbmQgdGlja2VyIGxpbmtzICovXHJcbi5tZW50aW9uIHsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjIpOyBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgcGFkZGluZzogdmFyKC0tc3BhY2UtMSkgdmFyKC0tc3BhY2UtMyk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXNwYWNlLTMpOyBmb250LXdlaWdodDogNTAwOyB9XHJcbi50aWNrZXItbGluayB7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cclxuLnRpY2tlci1saW5rOmhvdmVyIHsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ob3Zlcik7IH1cclxuI21lc3NhZ2VzQ29udGFpbmVyIC5tZXNzYWdlIC50aW1lc3RhbXAsIC5tZXNzYWdlcy1jb250YWluZXIgLm1lc3NhZ2UgLnRpbWVzdGFtcCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiB2YXIoLS1zcGFjZS0zKTsgcmlnaHQ6IHZhcigtLXNwYWNlLTUpOyBmb250LXNpemU6IHZhcigtLWZvbnQtMTEpOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdWJ0bGUpOyB9XHJcbi8qIFNFQyBCb3QgaGVhZGVyIGNvbnRhaW5zIGFuIGlubGluZSBmaWxpbmcgY2hpcDsgYXZvaWQgb3ZlcmxhcCB3aXRoIHRpbWVzdGFtcCAqL1xyXG4jbWVzc2FnZXNDb250YWluZXIgLm1lc3NhZ2VbZGF0YS1zZWNib3Q9XCIxXCJdIC50aW1lc3RhbXAgeyBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjZS0zKTsgZmxleC1zaHJpbms6IDA7IH1cclxuI21lc3NhZ2VzQ29udGFpbmVyIC5tZXNzYWdlW2RhdGEtc2VjYm90PVwiMVwiXSAuc2VjYm90LWlubGluZSB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBmbGV4OiAxIDEgYXV0bzsgbWluLXdpZHRoOiAwOyBvdmVyZmxvdzogaGlkZGVuOyB9XHJcbi8qIFByZXNlbmNlIGRyb3Bkb3duIGxheWVyaW5nIGFuZCBzYWZldHkgKi9cclxuLmNoYXQtaGVhZGVyIHsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiB2YXIoLS16LXN0aWNreSk7IH1cclxuI29ubGluZVVzZXJzTWVudSB7IHotaW5kZXg6IHZhcigtLXotbWVudSk7IH1cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQwcmVtKSB7XG4gICNvbmxpbmVVc2Vyc1dyYXAgeyBwb3NpdGlvbjogcmVsYXRpdmU7IG92ZXJmbG93OiB2aXNpYmxlOyB9XG4gICNvbmxpbmVVc2Vyc01lbnUgeyBsZWZ0OiAwOyByaWdodDogYXV0bzsgd2lkdGg6IGF1dG87IG1pbi13aWR0aDogdmFyKC0tbWVudS1taW4tdyk7IG1heC13aWR0aDogY2FsYygxMDB2dyAtIDEuNXJlbSk7IH1cbn1cclxuLyogTWVudGlvbiBzdWdnZXN0aW9ucyBpbiBjb21wb3NlciAqL1xyXG4ubWVudGlvbi1zdWdnZXN0aW9ucyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbWF4LWhlaWdodDogdmFyKC0tbWVudS1tYXgtaCwgMTZyZW0pOyBvdmVyZmxvdy15OiBhdXRvOyBvdmVyZmxvdy14OiBoaWRkZW47IHNjcm9sbGJhci13aWR0aDogYXV0bzsgbGVmdDogMDsgei1pbmRleDogdmFyKC0tei1wb3BvdmVyKTsgfVxyXG4ubWVudGlvbi1zdWdnZXN0aW9ucyAuc3VnZ2VzdGlvbi1pdGVtIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiB2YXIoLS1zcGFjZS00KTsgcGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSk7IH1cclxuLm1lbnRpb24tc3VnZ2VzdGlvbnMgLnN1Z2dlc3Rpb24taXRlbSAuc3ltYm9sIHsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGZvbnQtd2VpZ2h0OiA2MDA7IH1cclxuLm1lbnRpb24tc3VnZ2VzdGlvbnMgLnN1Z2dlc3Rpb24taXRlbS5hY3RpdmUgeyBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMTUpOyB9XHJcbi8qIENoYXQgc2VhcmNoIGJvdW5kYXJ5IGxpbmVzICovXHJcbiNzdG9ja0NoYXRTZWFyY2hDb250YWluZXIgeyBwb3NpdGlvbjogcmVsYXRpdmU7IHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS01KTsgcGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTUpOyB9XHJcbiNzdG9ja0NoYXRTZWFyY2hDb250YWluZXI6OmJlZm9yZSwgI3N0b2NrQ2hhdFNlYXJjaENvbnRhaW5lcjo6YWZ0ZXIgeyBjb250ZW50OiAnJzsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiB2YXIoLS1zcGFjZS0yKTsgcmlnaHQ6IHZhcigtLXNwYWNlLTIpOyBoZWlnaHQ6IHZhcigtLXNwYWNlLTEpOyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3gtc2hhZG93OiAwIDAgMC4zNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjYpLCAwIDAgMC43NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMyk7IHBvaW50ZXItZXZlbnRzOiBub25lOyB9XHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAjc3RvY2tDaGF0U2VhcmNoQ29udGFpbmVyOjpiZWZvcmUsICNzdG9ja0NoYXRTZWFyY2hDb250YWluZXI6OmFmdGVyIHsgbGVmdDogdmFyKC0tc3BhY2UtNCk7IHJpZ2h0OiB2YXIoLS1zcGFjZS00KTsgYm94LXNoYWRvdzogMCAwIDAuMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjUpLCAwIDAgMC41cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC4yNSk7IH1cbn1cclxuI3N0b2NrQ2hhdFNlYXJjaENvbnRhaW5lcjo6YmVmb3JlIHsgdG9wOiAwOyB9XHJcbiNzdG9ja0NoYXRTZWFyY2hDb250YWluZXI6OmFmdGVyIHsgYm90dG9tOiAwOyB9XHJcbi8qIENvbGxhcHNlIGNoYXQgc2VhcmNoIHJvdyB3aGVuIG5vdCB2aXNpYmxlIChtaXJyb3JzIERNIGJlaGF2aW9yKSAqL1xyXG4uY2hhdC1zZWFyY2gtY29udGFpbmVyIHsgZGlzcGxheTogYmxvY2s7IH1cclxuLmNoYXQtc2VhcmNoLWNvbnRhaW5lcjpub3QoLnZpc2libGUpIHtcbiAgaGVpZ2h0OiAwO1xuICBtYXgtaGVpZ2h0OiAwO1xuICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxyXG4vKiBIaWRlIGRlY29yYXRpdmUgYm91bmRhcmllcyB3aGVuIGNvbGxhcHNlZCAqL1xyXG4jc3RvY2tDaGF0U2VhcmNoQ29udGFpbmVyOm5vdCgudmlzaWJsZSk6OmJlZm9yZSxcbiNzdG9ja0NoYXRTZWFyY2hDb250YWluZXI6bm90KC52aXNpYmxlKTo6YWZ0ZXIgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IGNvbnRlbnQ6IG5vbmUgIWltcG9ydGFudDsgfVxyXG4vKiBNYWtlIGNoYXRib2FyZCBmaWx0ZXIgYmFyIHN0aWNreSAobWlycm9yIERNIHN0aWNreSBiZWhhdmlvcikgKi9cclxuLmNoYXQtc2VhcmNoLWNvbnRhaW5lciB7IHBvc2l0aW9uOiBzdGlja3k7IHRvcDogMDsgei1pbmRleDogdmFyKC0tei1zdGlja3kpOyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZyk7IH1cclxuLyogUmVwbHkgY29udGV4dCB3aXRoaW4gbWVzc2FnZXMgKi9cclxuLnJlcGx5LWNvbnRleHQgeyBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLXdhcm5pbmctcmdiKSwgMC4wOCk7IGJvcmRlci1sZWZ0OiB2YXIoLS1zcGFjZS0zKSBzb2xpZCB2YXIoLS1jb2xvci13YXJuaW5nKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsgcGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7IG1hcmdpbjogY2FsYyh2YXIoLS1zcGFjZS0xKSAqIC0xKSBjYWxjKHZhcigtLXNwYWNlLTMpICogLTEpIHZhcigtLXNwYWNlLTgpIGNhbGModmFyKC0tc3BhY2UtMykgKiAtMSk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMyk7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzOyB9XHJcbi5yZXBseS1jb250ZXh0OmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSh2YXIoLS13YXJuaW5nLXJnYiksIDAuMTQpOyB9XHJcbi5yZXBseS1jb250ZXh0LWhlYWRlciwgLnJlcGx5LWNvbnRleHQgLnJlcGx5LWF1dGhvciB7IGNvbG9yOiB2YXIoLS1jb2xvci13YXJuaW5nKTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiB2YXIoLS1mb250LTExKTsgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7IH1cclxuLnJlcGx5LWNvbnRleHQtYm9keSwgLnJlcGx5LWNvbnRleHQgLnJlcGx5LXNuaXBwZXQgeyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyBtYXgtd2lkdGg6IDk1JTsgfVxyXG4ucmVwbHktY29udGV4dCAucmVwbHktZGVsZXRlZCB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgZm9udC1zdHlsZTogaXRhbGljOyB9XHJcbi8qIE1vYmlsZSBDaGF0IHwgRGV0YWlscyB0b2dnbGUgKi9cclxuLm1vYmlsZS12aWV3LXRvZ2dsZSB7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogdmFyKC0tc3BhY2UtMSk7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kLXBsdXMpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0xKTsgfVxyXG4ubW9iaWxlLXZpZXctdG9nZ2xlIFtyb2xlPVwidGFiXCJdIHsgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyAtbW96LWFwcGVhcmFuY2U6IG5vbmU7IGFwcGVhcmFuY2U6IG5vbmU7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsgcGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtNCk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xMik7IGZvbnQtd2VpZ2h0OiA3MDA7IGxldHRlci1zcGFjaW5nOiB2YXIoLS1scy14eHMpOyBjdXJzb3I6IHBvaW50ZXI7IH1cclxuLm1vYmlsZS12aWV3LXRvZ2dsZSBbcm9sZT1cInRhYlwiXVthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXSB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudCk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UpOyBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctZ3JlZW4teHMpOyB9XHJcbi5tb2JpbGUtdmlldy10b2dnbGUgW3JvbGU9XCJ0YWJcIl1bYXJpYS1kaXNhYmxlZD1cInRydWVcIl0geyBvcGFjaXR5OiAwLjU7IGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cclxuI3N0b2NrSGVhZGVyIC5tb2JpbGUtdmlldy10b2dnbGUgeyBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTsgfVxyXG4vKiBEZWZhdWx0OiBoaWRlIHRoZSBtb2JpbGUgcm93IGNvbnRhaW5lciBvbiBkZXNrdG9wICovXHJcbi5tb2JpbGUtdmlldy10b2dnbGUtcm93IHsgZGlzcGxheTogbm9uZTsgfVxyXG4vKiBBY3Rpb25zIG1vdmVkIGJlc2lkZSB0aGUgbW9iaWxlIHRvZ2dsZSAobW9iaWxlIG9ubHkpICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAvKiBSb3cgY29udGFpbmVyIGhvbGRzIHRoZSBzZWdtZW50ZWQgdG9nZ2xlIGFuZCB0aGUgYWN0aW9ucyBhcyBzaWJsaW5ncyAqL1xuICAubW9iaWxlLXZpZXctdG9nZ2xlLXJvdyB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgZ2FwOiB2YXIoLS1zcGFjZS0zKTsgd2lkdGg6IDEwMCU7IH1cbiAgLm1vYmlsZS12aWV3LXRvZ2dsZSB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyB9XG4gIC5tb2JpbGUtdmlldy10b2dnbGUuaGlkZGVuIHsgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsgfVxuICAubW9iaWxlLXZpZXctdG9nZ2xlLXJvdyAubW9iaWxlLXZpZXctYWN0aW9ucyB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBnYXA6IHZhcigtLXNwYWNlLTIpOyBmbGV4LXNocmluazogMDsgfVxufVxyXG4vKiBFbnN1cmUgdGhlIENoYXQgfCBEZXRhaWxzIHNlZ21lbnRlZCBjb250cm9sIGlzIGFjdHVhbGx5IHZpc2libGUgb24gbW9iaWxlXG4gICBldmVuIGlmIGEgZ2VuZXJpYyBgLmhpZGRlbmAgdXRpbGl0eSBpcyBwcmVzZW50IGluIHRoZSBjbGFzcyBsaXN0LlxuICAgVGhpcyBhdm9pZHMgcmVseWluZyBvbiBUYWlsd2luZCdzIGBzbS1kb3duOmlubGluZS1mbGV4YCB2YXJpYW50IGF0IHJ1bnRpbWUuICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA0Ny45OXJlbSkge1xuICAubW9iaWxlLXZpZXctdG9nZ2xlIHsgZGlzcGxheTogaW5saW5lLWZsZXg7IH1cbiAgLm1vYmlsZS12aWV3LXRvZ2dsZS5oaWRkZW4geyBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OyB9XG59XHJcbi8qIEJvb2ttYXJrcyBVSSAoZXh0cmFjdGVkIGZyb20gY29tcG9uZW50cy5jc3MpICovXHJcbi8qIEhlYWRlciB0ZXh0ICovXHJcbi5ib29rbWFyay10aXRsZSB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNik7IGxpbmUtaGVpZ2h0OiB2YXIoLS1zcGFjZS0xNCk7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgfVxyXG4uYm9va21hcmstdGltZSB7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNCk7IGxpbmUtaGVpZ2h0OiB2YXIoLS1zcGFjZS0xNCk7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN1YnRsZSk7IH1cclxuLyogQ2xlYW5lciBjYXJkIGxheW91dCAqL1xyXG4jYm9va21hcmtzUGFnZSAuYm9va21hcmstY2FyZCAuYm9va21hcmstb3BlbiB7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogbGVmdDsgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7IH1cclxuI2Jvb2ttYXJrc1BhZ2UgLmJvb2ttYXJrLWF0dGFjaG1lbnRzIHsgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7IH1cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQ3Ljk5cmVtKSB7XG4gICNib29rbWFya3NQYWdlIC5ib29rbWFyay1oZWFkZXIgeyBmbGV4LXdyYXA6IHdyYXA7IHJvdy1nYXA6IHZhcigtLXNwYWNlLTIpOyB9XG4gICNib29rbWFya3NQYWdlIC5ib29rbWFyay1hY3Rpb25zIHsgZmxleDogMSAxIDEwMCU7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpOyB9XG5cbiAgLyogTW9iaWxlOiBtYWtlIHRoZSBib29rbWFya3MgZmlsdGVyIGJhciBiZWhhdmUgbGlrZSBETSBzZWFyY2ggKi9cbiAgI2Jvb2ttYXJrc1BhZ2UgLmJvb2ttYXJrcy1zZWFyY2gtY29udGFpbmVyIHsgcG9zaXRpb246IHN0aWNreTsgdG9wOiAwOyB6LWluZGV4OiB2YXIoLS16LXN0aWNreSk7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgZGlzcGxheTogYmxvY2s7IH1cbiAgI2Jvb2ttYXJrc1BhZ2UgLmJvb2ttYXJrcy1zZWFyY2gtY29udGFpbmVyOm5vdCgudmlzaWJsZSkgeyBoZWlnaHQ6IDA7IG1heC1oZWlnaHQ6IDA7IHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7IHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgI2Jvb2ttYXJrc1NlYXJjaENvbnRhaW5lciB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgcGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTUpOyBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7IH1cbiAgI2Jvb2ttYXJrc1NlYXJjaENvbnRhaW5lcjo6YmVmb3JlLCAjYm9va21hcmtzU2VhcmNoQ29udGFpbmVyOjphZnRlciB7IGNvbnRlbnQ6ICcnOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHJpZ2h0OiAwOyBoZWlnaHQ6IHZhcigtLXNwYWNlLTEpOyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBib3gtc2hhZG93OiAwIDAgMC4zNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjYpLCAwIDAgMC43NXJlbSByZ2JhKHZhcigtLWdyZWVuLXJnYiksIDAuMyk7IHBvaW50ZXItZXZlbnRzOiBub25lOyB9XG4gICNib29rbWFya3NTZWFyY2hDb250YWluZXI6OmJlZm9yZSB7IHRvcDogMDsgfVxuICAjYm9va21hcmtzU2VhcmNoQ29udGFpbmVyOjphZnRlciB7IGJvdHRvbTogMDsgfVxuICAjYm9va21hcmtzU2VhcmNoQ29udGFpbmVyOm5vdCgudmlzaWJsZSk6OmJlZm9yZSxcbiAgI2Jvb2ttYXJrc1NlYXJjaENvbnRhaW5lcjpub3QoLnZpc2libGUpOjphZnRlciB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgY29udGVudDogbm9uZSAhaW1wb3J0YW50OyB9XG59XHJcbi8qIERpcmVjdCBNZXNzYWdlcyBVSSAoZXh0cmFjdGVkIGZyb20gY29tcG9uZW50cy5jc3MpICovXHJcbi8qIFByZXNlbmNlIGRyb3Bkb3duIGFib3ZlIG90aGVyIGNvbnRlbnQgKi9cclxuI2RtUHJlc2VuY2VNZW51IHsgei1pbmRleDogdmFyKC0tei1tZW51KTsgfVxyXG4vKiBETSBtb2JpbGUgbWVudSByZW1vdmVkIGluIEpTOyBsZWdhY3kgc3R5bGVzIGRlbGV0ZWQgKi9cclxuLyogRE0gbGF5b3V0IGFkanVzdG1lbnRzIGluc2lkZSAjZGlyZWN0TWVzc2FnZXNQYWdlICovXHJcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgI2RtQ29udm9Db2x1bW4geyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBoZWlnaHQ6IDEwMCU7IG1pbi1oZWlnaHQ6IDA7IG92ZXJmbG93OiBoaWRkZW47IH1cclxuI2RpcmVjdE1lc3NhZ2VzUGFnZSAjZG1Db252b0xpc3QgeyBmbGV4OiAxIDEgYXV0bzsgbWluLWhlaWdodDogMDsgb3ZlcmZsb3cteTogYXV0bzsgb3ZlcmZsb3cteDogaGlkZGVuOyBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7IH1cclxuI2RpcmVjdE1lc3NhZ2VzUGFnZSAjZG1UaHJlYWRDb2x1bW4geyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gYXV0byAxZnIgYXV0bzsgaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAwOyBvdmVyZmxvdzogaGlkZGVuOyBhbGlnbi1jb250ZW50OiBzdHJldGNoOyBhbGlnbi1pdGVtczogc3RyZXRjaDsgfVxyXG4jZGlyZWN0TWVzc2FnZXNQYWdlICNkbVRocmVhZCB7IG1pbi1oZWlnaHQ6IDA7IGhlaWdodDogMTAwJTsgb3ZlcmZsb3cteTogYXV0bzsgb3ZlcmZsb3cteDogaGlkZGVuOyBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxyXG4jZGlyZWN0TWVzc2FnZXNQYWdlICNkbVRocmVhZENvbHVtbiA+IGhlYWRlcixcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgI2RtVGhyZWFkQ29sdW1uID4gZm9vdGVyLFxuI2RpcmVjdE1lc3NhZ2VzUGFnZSAuY2hhdC1zZWFyY2gtY29udGFpbmVyIHsgcG9zaXRpb246IHN0aWNreTsgdG9wOiAwOyB6LWluZGV4OiB2YXIoLS16LXN0aWNreSk7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTsgfVxyXG4vKiBFbnN1cmUgdGhlIHNlYXJjaCByb3cgcGFydGljaXBhdGVzIGluIHRoZSBncmlkIGV2ZW4gd2hlbiBoaWRkZW4sIHNvIHRoZVxuICAgZ3JpZCB0cmFjayBsYXlvdXQgKGF1dG8gYXV0byAxZnIgYXV0bykgaXMgc3RhYmxlIHdpdGhvdXQgcmVxdWlyaW5nIGEgY2xpY2suICovXHJcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgLmNoYXQtc2VhcmNoLWNvbnRhaW5lciB7IGRpc3BsYXk6IGJsb2NrOyB9XHJcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgLmNoYXQtc2VhcmNoLWNvbnRhaW5lcjpub3QoLnZpc2libGUpIHtcbiAgaGVpZ2h0OiAwO1xuICBtYXgtaGVpZ2h0OiAwO1xuICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxyXG4vKiBIaWRlIGRlY29yYXRpdmUgYm91bmRhcnkgbGluZXMgd2hlbiBjb2xsYXBzZWQgKi9cclxuI2RtQ2hhdFNlYXJjaENvbnRhaW5lcjpub3QoLnZpc2libGUpOjpiZWZvcmUsXG4jZG1DaGF0U2VhcmNoQ29udGFpbmVyOm5vdCgudmlzaWJsZSk6OmFmdGVyIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyBjb250ZW50OiBub25lICFpbXBvcnRhbnQ7IH1cclxuI2RpcmVjdE1lc3NhZ2VzUGFnZSAjZG1UaHJlYWQgeyBhbGlnbi1zZWxmOiBzdHJldGNoOyB9XHJcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgI2RtVGhyZWFkLm1lc3NhZ2VzLWNvbnRhaW5lciB7IG1heC1oZWlnaHQ6IG5vbmU7IH1cclxuI2RpcmVjdE1lc3NhZ2VzUGFnZSAjZG1UaHJlYWRDb2x1bW4gPiBoZWFkZXIsXG4jZGlyZWN0TWVzc2FnZXNQYWdlICNkbVRocmVhZENvbHVtbiA+IGZvb3RlcixcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgLmNoYXQtc2VhcmNoLWNvbnRhaW5lciB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbn1cclxuI2RpcmVjdE1lc3NhZ2VzUGFnZSAubWVzc2FnZSxcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgLmRtLW1lc3NhZ2Uge1xuICBmbGV4LXNocmluazogMDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XHJcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgLm1lc3NhZ2UtY29udGVudCxcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgLmRtLW1lc3NhZ2UgLm1lc3NhZ2UtY29udGVudCB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XHJcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgLm1lc3NhZ2UtYXR0YWNobWVudCxcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgLmRtLW1lc3NhZ2UgLm1lc3NhZ2UtYXR0YWNobWVudCxcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgI2RtRm9ybSxcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgI2RtQ2hhdFNlYXJjaEZvcm0sXG4jZGlyZWN0TWVzc2FnZXNQYWdlIGlucHV0LFxuI2RpcmVjdE1lc3NhZ2VzUGFnZSB0ZXh0YXJlYSB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cclxuI2RpcmVjdE1lc3NhZ2VzUGFnZSAuZG0tbWVzc2FnZSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgcGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7IG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTIpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pOyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgfVxyXG4jZGlyZWN0TWVzc2FnZXNQYWdlIC5kbS1tZXNzYWdlIC5tZXNzYWdlLWNvbnRlbnQgeyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgfVxyXG4jZGlyZWN0TWVzc2FnZXNQYWdlIC5kbS1tZXNzYWdlIC5tZXNzYWdlLWF0dGFjaG1lbnQsXG4jZGlyZWN0TWVzc2FnZXNQYWdlICNkbUZvcm0sXG4jZGlyZWN0TWVzc2FnZXNQYWdlICNkbUNoYXRTZWFyY2hGb3JtIHsgbWF4LXdpZHRoOiAxMDAlOyB9XHJcbiNkaXJlY3RNZXNzYWdlc1BhZ2UgLmRtLW1lc3NhZ2U6Zm9jdXMtd2l0aGluIHtcbiAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZy1zaXplLCAwLjEyNXJlbSkgc29saWQgdmFyKC0tZm9jdXMtcmluZy1jb2xvciwgcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjgyKSk7XG4gIG91dGxpbmUtb2Zmc2V0OiB2YXIoLS1mb2N1cy1yaW5nLW9mZnNldCwgMC4xMjVyZW0pO1xufVxyXG4vKiBETSBzZWFyY2ggYm91bmRhcnkgbGluZXMgKG1pcnJvcnMgY2hhdGJvYXJkIHN0eWxpbmcpICovXHJcbiNkbUNoYXRTZWFyY2hDb250YWluZXIgeyBwb3NpdGlvbjogcmVsYXRpdmU7IHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS01KTsgcGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTUpOyB9XHJcbiNkbUNoYXRTZWFyY2hDb250YWluZXI6OmJlZm9yZSwgI2RtQ2hhdFNlYXJjaENvbnRhaW5lcjo6YWZ0ZXIgeyBjb250ZW50OiAnJzsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyByaWdodDogMDsgaGVpZ2h0OiB2YXIoLS1zcGFjZS0xKTsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50KTsgYm94LXNoYWRvdzogMCAwIDAuMzc1cmVtIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC42KSwgMCAwIDAuNzVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjMpOyBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxyXG4jZG1DaGF0U2VhcmNoQ29udGFpbmVyOjpiZWZvcmUgeyB0b3A6IDA7IH1cclxuI2RtQ2hhdFNlYXJjaENvbnRhaW5lcjo6YWZ0ZXIgeyBib3R0b206IDA7IH1cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICBNb2JpbGUgbGF5b3V0IChXaGF0c0FwcC1zdHlsZSlcbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5AbWVkaWEgKG1heC13aWR0aDogNDcuOTlyZW0pIHtcbiAgLyogQ29sbGFwc2UgRE0gZ3JpZCB0byBhIHNpbmdsZSBjb2x1bW4gc28gdGhlIHZpc2libGUgcGFuZSB1c2VzIHRoZSBmdWxsIHdpZHRoICovXG4gICNkaXJlY3RNZXNzYWdlc1BhZ2UgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCUgIWltcG9ydGFudDsgfVxuICAvKiBEZWZhdWx0IG1vYmlsZTogc2hvdyBjb252ZXJzYXRpb25zIGxpc3Qgb25seSAqL1xuICAvKiBEbyBub3Qgb3ZlcnJpZGUgd3JhcHBlciBkaXNwbGF5OyBrZWVwIGxheW91dC5jc3MgZmxhdHRlbmluZyAoZGlzcGxheTogY29udGVudHMpXG4gICAgIHRvIHByZXNlcnZlIGdyaWQvZmxleCBiZWhhdmlvciBhbmQgYXZvaWQgY29uZmxpY3RzLiBXZSBjb250cm9sIHZpc2liaWxpdHkgYnlcbiAgICAgdG9nZ2xpbmcgdGhlIGNvbHVtbnMgYmVsb3cuICovXG4gIC8qIEtlZXAgdGhlIGxpc3QgY29sdW1uIGFzIGZsZXggKGRlZmluZWQgYWJvdmUpIGZvciBwcm9wZXIgc2Nyb2xsaW5nICovXG4gICNkaXJlY3RNZXNzYWdlc1BhZ2UgLmRtLWxheW91dCAjZG1UaHJlYWRDb2x1bW4geyBkaXNwbGF5OiBub25lOyB9XG4gIC8qIFRocmVhZC1vcGVuIHN0YXRlOiBzaG93IHRocmVhZCwgaGlkZSBsaXN0ICovXG4gICNkaXJlY3RNZXNzYWdlc1BhZ2UgLmRtLWxheW91dC5kbS0tdGhyZWFkLW9wZW4gI2RtQ29udm9Db2x1bW4geyBkaXNwbGF5OiBub25lOyB9XG4gICNkaXJlY3RNZXNzYWdlc1BhZ2UgLmRtLWxheW91dC5kbS0tdGhyZWFkLW9wZW4gI2RtVGhyZWFkQ29sdW1uIHsgZGlzcGxheTogZ3JpZDsgfVxuICAvKiBCYWNrIGJ1dHRvbiB2aXNpYmxlIG9ubHkgd2hlbiBhIHRocmVhZCBpcyBvcGVuICovXG4gICNkaXJlY3RNZXNzYWdlc1BhZ2UgI2RtQmFja0J0biB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuICAjZGlyZWN0TWVzc2FnZXNQYWdlIC5kbS1sYXlvdXQuZG0tLXRocmVhZC1vcGVuICNkbUJhY2tCdG4geyBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OyB9XG4gIC8qIEVuc3VyZSB0aGUgdmlzaWJsZSBjb2x1bW4gc3BhbnMgZnVsbCB3aWR0aCAqL1xuICAjZGlyZWN0TWVzc2FnZXNQYWdlIC5kbS1sYXlvdXQ6bm90KC5kbS0tdGhyZWFkLW9wZW4pICNkbUNvbnZvQ29sdW1uIHsgd2lkdGg6IDEwMCU7IH1cbiAgI2RpcmVjdE1lc3NhZ2VzUGFnZSAuZG0tbGF5b3V0LmRtLS10aHJlYWQtb3BlbiAjZG1UaHJlYWRDb2x1bW4geyB3aWR0aDogMTAwJTsgfVxuICAvKiBTdWJ0bGUgc2xpZGUtaW4gYW5pbWF0aW9ucyB3aGVuIHN3aXRjaGluZyB2aWV3cyAqL1xuICAjZGlyZWN0TWVzc2FnZXNQYWdlIC5kbS1sYXlvdXQuZG0tLXRocmVhZC1vcGVuICNkbVRocmVhZENvbHVtbiB7IGFuaW1hdGlvbjogZG1TbGlkZUluUmlnaHQgMTgwbXMgZWFzZS1vdXQ7IH1cbiAgI2RpcmVjdE1lc3NhZ2VzUGFnZSAuZG0tbGF5b3V0Om5vdCguZG0tLXRocmVhZC1vcGVuKSAjZG1Db252b0NvbHVtbiB7IGFuaW1hdGlvbjogZG1TbGlkZUluTGVmdCAxODBtcyBlYXNlLW91dDsgfVxuICAvKiBCYWNrIGJ1dHRvbiBtaWNyby1pbnRlcmFjdGlvbiAqL1xuICAjZGlyZWN0TWVzc2FnZXNQYWdlICNkbUJhY2tCdG4geyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTQwbXMgZWFzZSwgYm94LXNoYWRvdyAxNDBtcyBlYXNlLCBiYWNrZ3JvdW5kIDE0MG1zIGVhc2U7IH1cbiAgI2RpcmVjdE1lc3NhZ2VzUGFnZSAjZG1CYWNrQnRuOmFjdGl2ZSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMnB4KSBzY2FsZSgwLjk4KTsgfVxuICAvKiBTdWJ0bGUgaGVhZGVyIHNoYWRvdyB3aGVuIHRocmVhZCBpcyBvcGVuICovXG4gICNkaXJlY3RNZXNzYWdlc1BhZ2UgLmRtLWxheW91dC5kbS0tdGhyZWFkLW9wZW4gI2RtVGhyZWFkQ29sdW1uID4gaGVhZGVyIHsgYm94LXNoYWRvdzogMCAwLjEyNXJlbSAwLjVyZW0gcmdiYSh2YXIoLS1ibGFjay1yZ2IpLCAwLjM1KTsgfVxuXG4gIC8qIFJlZmxvdyB0aHJlYWQgaGVhZGVyIGFjdGlvbnMgdG8gYSBzZWNvbmQgcm93IHNvIGV2ZXJ5dGhpbmcgZml0cyAqL1xuICAjZGlyZWN0TWVzc2FnZXNQYWdlICNkbVRocmVhZENvbHVtbiA+IGhlYWRlciB7IGZsZXgtd3JhcDogd3JhcDsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IGdhcDogdmFyKC0tc3BhY2UtMik7IH1cbiAgI2RpcmVjdE1lc3NhZ2VzUGFnZSAjZG1UaXRsZVdyYXAgeyBmbGV4OiAxIDEgYXV0bzsgbWluLXdpZHRoOiAwOyB9XG4gICNkaXJlY3RNZXNzYWdlc1BhZ2UgI2RtSGVhZGVyQWN0aW9ucyB7IG9yZGVyOiAyOyBmbGV4OiAxIDEgMTAwJTsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IHZhcigtLXNwYWNlLTIpOyBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0xKTsgfVxuICAjZGlyZWN0TWVzc2FnZXNQYWdlICNkbU1lbWJlcnNXcmFwIHsgb3JkZXI6IDE7IH1cbiAgI2RpcmVjdE1lc3NhZ2VzUGFnZSAjZG1BZGRNZW1iZXJGb3JtIHsgb3JkZXI6IDI7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgZmxleDogMSAxIDEwMCU7IG1heC13aWR0aDogMTAwJTsgfVxuICAjZGlyZWN0TWVzc2FnZXNQYWdlICNkbUFkZE1lbWJlckZvcm0gaW5wdXQgeyBmbGV4OiAxIDEgYXV0bzsgbWluLXdpZHRoOiAwOyB9XG4gICNkaXJlY3RNZXNzYWdlc1BhZ2UgI2RtQWRkTWVtYmVyRm9ybSBidXR0b25bdHlwZT1cInN1Ym1pdFwiXSB7IGZsZXg6IDAgMCBhdXRvOyB9XG59XHJcbi8qIERlc2t0b3Agb3ZlcnJpZGU6IGFsd2F5cyBoaWRlIGJhY2sgYnV0dG9uICovXHJcbkBtZWRpYSAobWluLXdpZHRoOiA0OHJlbSkge1xuICAjZGlyZWN0TWVzc2FnZXNQYWdlICNkbUJhY2tCdG4geyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cbn1cclxuLyogS2V5ZnJhbWVzICsgcmVkdWNlZC1tb3Rpb24gZ3VhcmQgKi9cclxuQGtleWZyYW1lcyBkbVNsaWRlSW5SaWdodCB7IGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoOCUpOyB9IHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9IH1cclxuQGtleWZyYW1lcyBkbVNsaWRlSW5MZWZ0ICB7IGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTglKTsgfSB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfSB9XHJcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICNkaXJlY3RNZXNzYWdlc1BhZ2UgLmRtLWxheW91dC5kbS0tdGhyZWFkLW9wZW4gI2RtVGhyZWFkQ29sdW1uLFxuICAjZGlyZWN0TWVzc2FnZXNQYWdlIC5kbS1sYXlvdXQ6bm90KC5kbS0tdGhyZWFkLW9wZW4pICNkbUNvbnZvQ29sdW1uIHsgYW5pbWF0aW9uOiBub25lICFpbXBvcnRhbnQ7IH1cbn1cclxuLypcbiAgbW9kYWxzLmNzc1xuICBQdXJwb3NlOiBEZWRpY2F0ZWQgbW9kYWwgc3R5bGVzIGV4dHJhY3RlZCBmcm9tIGNvbXBvbmVudHMuY3NzIHRvIGltcHJvdmUgaXNvbGF0aW9uLlxuICBOb3RlOiBJbml0aWFsbHkgZHVwbGljYXRlZCBmcm9tIGNvbXBvbmVudHMuY3NzIHRvIHByZXNlcnZlIHZpc3VhbHMuIE9yaWdpbmFsIHJ1bGVzIHJlbWFpbiB1bnRpbCBmdWxsIGV4dHJhY3Rpb24gaXMgdmVyaWZpZWQuXG4qL1xyXG4vKiBJbWFnZSBNb2RhbCAqL1xyXG4jaW1hZ2VNb2RhbCB7IGRpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBmaXhlZDsgei1pbmRleDogdmFyKC0tei1saWdodGJveCk7IGxlZnQ6IDA7IHRvcDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgb3ZlcmZsb3c6IGF1dG87IGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMC45KTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cclxuI2ltYWdlTW9kYWwgaW1nIHsgbWFyZ2luOiBhdXRvOyBkaXNwbGF5OiBibG9jazsgbWF4LXdpZHRoOiA5MCU7IG1heC1oZWlnaHQ6IDkwJTsgfVxyXG4jaW1hZ2VNb2RhbCAuY2xvc2UtYnRuIHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IHZhcigtLXNwYWNlLTEwKTsgcmlnaHQ6IHZhcigtLXNwYWNlLTM1KTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc3Ryb25nKTsgZm9udC1zaXplOiB2YXIoLS1mb250LTQwKTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGN1cnNvcjogcG9pbnRlcjsgfVxyXG4vKiBCYXNlIE1vZGFsICovXHJcbi5tb2RhbC1vdmVybGF5IHsgcG9zaXRpb246IGZpeGVkOyB0b3A6IDA7IGxlZnQ6IDA7IHJpZ2h0OiAwOyBib3R0b206IDA7IGJhY2tncm91bmQ6IHJnYmEodmFyKC0tYmxhY2stcmdiKSwgIDAuOCk7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB6LWluZGV4OiB2YXIoLS16LWxpZ2h0Ym94KTsgfVxyXG4ubW9kYWwtY29udGVudCB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLW11dGVkKTsgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTsgcGFkZGluZzogdmFyKC0tc3BhY2UtMjUpOyB3aWR0aDogOTAlOyBtYXgtd2lkdGg6IHZhcigtLW1heC13LW1vZGFsKTsgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1vZGFsLW1kLWJsYWNrLTUwKTsgfVxyXG4ubW9kYWwtaGVhZGVyIHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgcGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTctNSk7IG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEwKTsgfVxyXG4ubW9kYWwtdGl0bGUgeyBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgZm9udC1zaXplOiAxLjhlbTsgZm9udC13ZWlnaHQ6IDYwMDsgfVxyXG4ubW9kYWwtY2xvc2UtYnRuIHsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyBmb250LXNpemU6IHZhcigtLWZvbnQtMjgpOyBjdXJzb3I6IHBvaW50ZXI7IH1cclxuLm1vZGFsLWJvZHkgeyBvdmVyZmxvdy15OiBhdXRvOyB9XHJcbi5tb2RhbC1jb250ZW50IC5idG4tcHJpbWFyeSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1iZyk7XG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC41NSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTgpO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tbHMteHhzKTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IHZhcigtLXNwYWNlLTMpO1xuICBtaW4td2lkdGg6IHZhcigtLW1pbi13LWJ0bi1tZCk7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZSwgYm9yZGVyLWNvbG9yIDAuMnMgZWFzZTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWdyZWVuLXNtLTIyKTtcbn1cclxuLm1vZGFsLWNvbnRlbnQgLmJ0bi1wcmltYXJ5OmhvdmVyLFxuLm1vZGFsLWNvbnRlbnQgLmJ0bi1wcmltYXJ5OmZvY3VzLXZpc2libGUge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQtaG92ZXIpO1xuICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC43NSk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1ncmVlbi1tZC0zMCk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgb3V0bGluZTogbm9uZTtcbn1cclxuLm1vZGFsLWNvbnRlbnQgLmJ0bi1wcmltYXJ5OmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cclxuLyogUmVvcmRlciBNb2RhbCAqL1xyXG4jcmVvcmRlck1vZGFsLCAucmVvcmRlci1tb2RhbCB7XG4gIC8qIE92ZXJsYXkgKi9cbiAgLS1yZW9yZGVyLXBhbmVsLW1heC13OiA5ODBweDtcbiAgLS1yZW9yZGVyLXRvZ2dsZS1zaXplOiAycmVtO1xuICAtLXJlb3JkZXItY2hpcC1oOiAzNHB4O1xuICAtLXJlb3JkZXItY2hpcC1nYXA6IHZhcigtLXNwYWNlLTQpO1xuICBwb3NpdGlvbjogZml4ZWQ7IGluc2V0OjA7IGRpc3BsYXk6bm9uZTsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgYWxpZ24taXRlbXM6ZmxleC1zdGFydDtcbiAgcGFkZGluZzo0c3ZoIHZhcigtLXNwYWNlLTgpIHZhcigtLXNwYWNlLTE2KTtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSh2YXIoLS1ibGFjay1yZ2IpLCAwLjcpLCByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDAuOSkpO1xuICB6LWluZGV4OiB2YXIoLS16LWxpZ2h0Ym94KTsgb3ZlcmZsb3cteTphdXRvOyAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtcbn1cclxuI3Jlb3JkZXJNb2RhbC5mbGV4LCAucmVvcmRlci1tb2RhbC5mbGV4IHsgZGlzcGxheTpmbGV4OyB9XHJcbiNyZW9yZGVyTW9kYWwgLnJlb3JkZXItbW9kYWwtcGFuZWwsIC5yZW9yZGVyLW1vZGFsIC5yZW9yZGVyLW1vZGFsLXBhbmVsIHtcbiAgd2lkdGg6bWluKDEwMCUsIHZhcigtLXJlb3JkZXItcGFuZWwtbWF4LXcpKTtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMDYpLCByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC4wMikgMTQlLCB0cmFuc3BhcmVudCA2MCUpLCB2YXIoLS1jb2xvci1iZy1tdXRlZCk7XG4gIGJvcmRlcjp2YXIoLS1ib3JkZXItMSkgc29saWQgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuNDUpO1xuICBib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tb2RhbC14bC1ibGFjay1lbWVyYWxkLXJpbmcpO1xuICBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgbWF4LWhlaWdodDo5MHN2aDsgb3ZlcmZsb3c6aGlkZGVuO1xufVxyXG4jcmVvcmRlck1vZGFsIC5yZW9yZGVyLW1vZGFsLWhlYWRlciwgLnJlb3JkZXItbW9kYWwgLnJlb3JkZXItbW9kYWwtaGVhZGVyIHtcbiAgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZ2FwOiB2YXIoLS1zcGFjZS02KTtcbiAgcGFkZGluZzp2YXIoLS1zcGFjZS05KSB2YXIoLS1zcGFjZS0xMik7XG4gIGJvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEodmFyKC0tZ3JlZW4tZW1lcmFsZC1yZ2IpLCAwLjM1KTtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMTIpLCByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC4wNCkpO1xufVxyXG4jcmVvcmRlck1vZGFsIC5yZW9yZGVyLW1vZGFsLWhlYWRlciBoMiwgLnJlb3JkZXItbW9kYWwgLnJlb3JkZXItbW9kYWwtaGVhZGVyIGgyIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGZvbnQtd2VpZ2h0OjgwMDsgbGV0dGVyLXNwYWNpbmc6MC4wMTVlbTtcbn1cclxuI3Jlb3JkZXJNb2RhbCAucmVvcmRlci1tb2RhbC1oZWFkZXIgYnV0dG9uLCAucmVvcmRlci1tb2RhbCAucmVvcmRlci1tb2RhbC1oZWFkZXIgYnV0dG9uIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IG9wYWNpdHk6MC45OyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjE0cyBlYXNlLCBvcGFjaXR5IC4xNHMgZWFzZTtcbn1cclxuI3Jlb3JkZXJNb2RhbCAucmVvcmRlci1tb2RhbC1oZWFkZXIgYnV0dG9uOmhvdmVyLFxuLnJlb3JkZXItbW9kYWwgLnJlb3JkZXItbW9kYWwtaGVhZGVyIGJ1dHRvbjpob3ZlciB7IG9wYWNpdHk6MTsgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsgfVxyXG4jcmVvcmRlck1vZGFsIC5yZW9yZGVyLW1vZGFsLWJvZHksIC5yZW9yZGVyLW1vZGFsIC5yZW9yZGVyLW1vZGFsLWJvZHkge1xuICBvdmVyZmxvdy15OmF1dG87IHBhZGRpbmc6dmFyKC0tc3BhY2UtMTApOyBmbGV4OjE7IHNjcm9sbGJhci13aWR0aDphdXRvO1xuICBzY3JvbGxiYXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KSB2YXIoLS1jb2xvci1iZy1tdXRlZCk7XG59XHJcbiNyZW9yZGVyTW9kYWwgLnJlb3JkZXItbW9kYWwtYm9keTo6LXdlYmtpdC1zY3JvbGxiYXIsIC5yZW9yZGVyLW1vZGFsIC5yZW9yZGVyLW1vZGFsLWJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IHZhcigtLXNjcm9sbGJhci1zaXplKTsgfVxyXG4jcmVvcmRlck1vZGFsIC5yZW9yZGVyLW1vZGFsLWJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLCAucmVvcmRlci1tb2RhbCAucmVvcmRlci1tb2RhbC1ib2R5Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7IGJhY2tncm91bmQ6dmFyKC0tY29sb3ItYmctZWxldmF0ZWQpOyB9XHJcbiNyZW9yZGVyTW9kYWwgLnJlb3JkZXItbW9kYWwtYm9keTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsIC5yZW9yZGVyLW1vZGFsIC5yZW9yZGVyLW1vZGFsLWJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZDp2YXIoLS1jb2xvci1hY2NlbnQpOyBib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7IH1cclxuI3Jlb3JkZXJNb2RhbCAucmVvcmRlci1tb2RhbC1mb290ZXIsIC5yZW9yZGVyLW1vZGFsIC5yZW9yZGVyLW1vZGFsLWZvb3RlciB7XG4gIGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmZsZXgtZW5kOyBnYXA6dmFyKC0tc3BhY2UtNik7XG4gIHBhZGRpbmc6dmFyKC0tc3BhY2UtOCkgdmFyKC0tc3BhY2UtMTApO1xuICBib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC4zNSk7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC4wNikpO1xuICBib3JkZXItcmFkaXVzOjAgMCB2YXIoLS1yYWRpdXMteGwpIHZhcigtLXJhZGl1cy14bCk7XG59XHJcbiNyZW9yZGVyTW9kYWxbYXJpYS1oaWRkZW49XCJ0cnVlXCJdLCAucmVvcmRlci1tb2RhbFthcmlhLWhpZGRlbj1cInRydWVcIl0geyB2aXNpYmlsaXR5OmhpZGRlbjsgfVxyXG4jcmVvcmRlck1vZGFsW2FyaWEtaGlkZGVuPVwiZmFsc2VcIl0sIC5yZW9yZGVyLW1vZGFsW2FyaWEtaGlkZGVuPVwiZmFsc2VcIl0geyB2aXNpYmlsaXR5OnZpc2libGU7IH1cclxuLyogUHJpbWFyeS9PdXRsaW5lIGJ1dHRvbnMgc2NvcGVkIHRvIHJlb3JkZXIgbW9kYWwgKi9cclxuI3Jlb3JkZXJNb2RhbCAuYnRuLXByaW1hcnksIC5yZW9yZGVyLW1vZGFsIC5idG4tcHJpbWFyeSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1iZyk7XG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyLTEpIHNvbGlkIHJnYmEodmFyKC0tZ3JlZW4tcmdiKSwgMC41NSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTgpO1xuICBmb250LXdlaWdodDogNzAwOyBsZXR0ZXItc3BhY2luZzogdmFyKC0tbHMteHhzKTtcbiAgZGlzcGxheTppbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBnYXA6dmFyKC0tc3BhY2UtMyk7XG4gIG1pbi13aWR0aDogdmFyKC0tbWluLXctYnRuLW1kKTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlLCBib3JkZXItY29sb3IgMC4ycyBlYXNlO1xuICBib3gtc2hhZG93OiAwIDAuMzc1cmVtIDEuMjVyZW0gcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjIyKTtcbn1cclxuI3Jlb3JkZXJNb2RhbCAuYnRuLXByaW1hcnk6aG92ZXIsIC5yZW9yZGVyLW1vZGFsIC5idG4tcHJpbWFyeTpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudC1ob3Zlcik7IGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1ncmVlbi1yZ2IpLCAwLjc1KTsgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWdyZWVuLW1kLTMwKTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XHJcbiNyZW9yZGVyTW9kYWwgLmJ0bi1vdXRsaW5lLCAucmVvcmRlci1tb2RhbCAuYnRuLW91dGxpbmUge1xuICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMzUpO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNyk7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IGxldHRlci1zcGFjaW5nOiAwLjAxZW07XG59XHJcbiNyZW9yZGVyTW9kYWwgLmJ0bi1vdXRsaW5lOmhvdmVyLCAucmVvcmRlci1tb2RhbCAuYnRuLW91dGxpbmU6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC4xKTsgfVxyXG4vKiBOZXcgZ3JvdXAgcm93ICovXHJcbiNyZW9yZGVyTW9kYWwgLm5ldy1ncm91cC1zZWN0aW9uLCAucmVvcmRlci1tb2RhbCAubmV3LWdyb3VwLXNlY3Rpb24ge1xuICBkaXNwbGF5OmZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiB2YXIoLS1zcGFjZS01KTsgYWxpZ24taXRlbXM6Y2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTsgcGFkZGluZzogdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtOCk7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC40NSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tZ3JlZW4tZW1lcmFsZC1yZ2IpLCAwLjA2KTtcbn1cclxuI3Jlb3JkZXJNb2RhbCAuZ3JvdXAtaW5wdXQsIC5yZW9yZGVyLW1vZGFsIC5ncm91cC1pbnB1dCB7XG4gIGZsZXg6MTsgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1ibGFjay1yZ2IpLCAwLjI1KTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMzUpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS04KTsgZm9udC1zaXplOiB2YXIoLS1mb250LTE2KTtcbn1cclxuI3Jlb3JkZXJNb2RhbCAuZ3JvdXAtaW5wdXQ6Zm9jdXMsIC5yZW9yZGVyLW1vZGFsIC5ncm91cC1pbnB1dDpmb2N1cyB7IG91dGxpbmU6bm9uZTsgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMTIpOyBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGJveC1zaGFkb3c6IHZhcigtLW91dGxpbmUtZW1lcmFsZC0yLTE1KTsgfVxyXG4jcmVvcmRlck1vZGFsIC5zdGF0dXMtbWVzc2FnZSwgLnJlb3JkZXItbW9kYWwgLnN0YXR1cy1tZXNzYWdlIHsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGZvbnQtc2l6ZTogdmFyKC0tZm9udC0xNCk7IGZvbnQtd2VpZ2h0OiA1MDA7IH1cclxuLyogU3ViZ3JvdXAgaXRlbSBjYXJkICovXHJcbiNyZW9yZGVyTW9kYWwgLnN1Ymdyb3VwLWl0ZW0sIC5yZW9yZGVyLW1vZGFsIC5zdWJncm91cC1pdGVtIHtcbiAgbGlzdC1zdHlsZTpub25lOyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDAuMjUpLCByZ2JhKHZhcigtLWJsYWNrLXJnYiksIDAuMTUpKTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMjUpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS04KTsgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzIGVhc2UsIGJveC1zaGFkb3cgLjJzIGVhc2U7XG59XHJcbiNyZW9yZGVyTW9kYWwgLnN1Ymdyb3VwLWl0ZW06aG92ZXIsIC5yZW9yZGVyLW1vZGFsIC5zdWJncm91cC1pdGVtOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC41NSk7IGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1lbGV2YXRlZC1zbS1ibGFjay0yNSk7IH1cclxuI3Jlb3JkZXJNb2RhbCAuc3ViZ3JvdXAtaXRlbS5kcmFnZ2luZywgLnJlb3JkZXItbW9kYWwgLnN1Ymdyb3VwLWl0ZW0uZHJhZ2dpbmcgeyBvcGFjaXR5OiAwLjY7IH1cclxuLyogU3ViZ3JvdXAgaGVhZGVyIGxheW91dCAqL1xyXG4jcmVvcmRlck1vZGFsIC5zdWJncm91cC1oZWFkZXIsIC5yZW9yZGVyLW1vZGFsIC5zdWJncm91cC1oZWFkZXIge1xuICBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBnYXA6IHZhcigtLXNwYWNlLTYpO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcbn1cclxuI3Jlb3JkZXJNb2RhbCAuc3ViZ3JvdXAtbmFtZSwgLnJlb3JkZXItbW9kYWwgLnN1Ymdyb3VwLW5hbWUgeyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyBvdmVyZmxvdzpoaWRkZW47IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7IHdoaXRlLXNwYWNlOm5vd3JhcDsgfVxyXG4jcmVvcmRlck1vZGFsIC5zdWJncm91cC1hY3Rpb25zLCAucmVvcmRlci1tb2RhbCAuc3ViZ3JvdXAtYWN0aW9ucyB7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6IHZhcigtLXNwYWNlLTQpOyB9XHJcbiNyZW9yZGVyTW9kYWwgLnZpc2liaWxpdHktYmFkZ2UsIC5yZW9yZGVyLW1vZGFsIC52aXNpYmlsaXR5LWJhZGdlIHsgYm9yZGVyOjFweCBzb2xpZCByZ2JhKHZhcigtLXdoaXRlLXJnYiksIDAuMTUpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTEpIHZhcigtLXNwYWNlLTQpOyB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IGZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6LjA0ZW07IH1cclxuI3Jlb3JkZXJNb2RhbCAudmlzLXRvZ2dsZS1idG4sIC5yZW9yZGVyLW1vZGFsIC52aXMtdG9nZ2xlLWJ0biB7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMzUpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS01KTsgZm9udC13ZWlnaHQ6IDYwMDsgfVxyXG4jcmVvcmRlck1vZGFsIC52aXMtdG9nZ2xlLWJ0bjpob3ZlciwgLnJlb3JkZXItbW9kYWwgLnZpcy10b2dnbGUtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMSk7IH1cclxuI3Jlb3JkZXJNb2RhbCAuZGVsZXRlLWJ0biwgLnJlb3JkZXItbW9kYWwgLmRlbGV0ZS1idG4geyBjb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpOyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1kYW5nZXItOTAtcmdiKSwgMC4yNSk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTUpOyBmb250LXdlaWdodDogNjAwOyB9XHJcbiNyZW9yZGVyTW9kYWwgLmRlbGV0ZS1idG46aG92ZXIsIC5yZW9yZGVyLW1vZGFsIC5kZWxldGUtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1kYW5nZXItOTAtcmdiKSwgMC4xMik7IH1cclxuI3Jlb3JkZXJNb2RhbCAuZHJhZy1oYW5kbGUsIC5yZW9yZGVyLW1vZGFsIC5kcmFnLWhhbmRsZSB7IGN1cnNvcjogZ3JhYjsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7IHVzZXItc2VsZWN0Om5vbmU7IGNvbG9yOiByZ2JhKHZhcigtLW1pbnQtc29mdC1yZ2IpLCAwLjg1KTsgcGFkZGluZzogdmFyKC0tc3BhY2UtMSkgdmFyKC0tc3BhY2UtMyk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7IH1cclxuI3Jlb3JkZXJNb2RhbCAuZHJhZy1oYW5kbGU6aG92ZXIsIC5yZW9yZGVyLW1vZGFsIC5kcmFnLWhhbmRsZTpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEodmFyKC0td2hpdGUtcmdiKSwgMC4wNik7IH1cclxuLyogVGlja2VyIGxpc3QgcGlsbHMgKi9cclxuI3Jlb3JkZXJNb2RhbCAudGlja2VyLWxpc3QsIC5yZW9yZGVyLW1vZGFsIC50aWNrZXItbGlzdCB7XG4gIGRpc3BsYXk6ZmxleDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IHZhcigtLXJlb3JkZXItY2hpcC1nYXApOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSAwIHZhcigtLXNwYWNlLTQpO1xufVxyXG4jcmVvcmRlck1vZGFsIC50aWNrZXItaXRlbSwgLnJlb3JkZXItbW9kYWwgLnRpY2tlci1pdGVtIHtcbiAgZGlzcGxheTppbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6IHZhcigtLXNwYWNlLTMpO1xuICBoZWlnaHQ6IHZhcigtLXJlb3JkZXItY2hpcC1oKTtcbiAgcGFkZGluZzogMCB2YXIoLS1zcGFjZS00KTtcbiAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1taW50LWljZS1yZ2IpLCAwLjEpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKHZhcigtLW1pbnQtaWNlLXJnYiksIDAuMjUpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7IGN1cnNvcjogZ3JhYjsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAtbW96LXVzZXItc2VsZWN0Om5vbmU7IHVzZXItc2VsZWN0Om5vbmU7XG59XHJcbiNyZW9yZGVyTW9kYWwgLnRpY2tlci1pdGVtOmhvdmVyLCAucmVvcmRlci1tb2RhbCAudGlja2VyLWl0ZW06aG92ZXIgeyBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbWludC1pY2UtcmdiKSwgMC40NSk7IGJhY2tncm91bmQ6IHJnYmEodmFyKC0tbWludC1pY2UtcmdiKSwgMC4xNik7IH1cclxuI3Jlb3JkZXJNb2RhbCAudGlja2VyLWl0ZW0uZHJhZ2dpbmcsIC5yZW9yZGVyLW1vZGFsIC50aWNrZXItaXRlbS5kcmFnZ2luZyB7IG9wYWNpdHk6IC43OyB9XHJcbiNyZW9yZGVyTW9kYWwgLnRpY2tlci1zeW1ib2wsIC5yZW9yZGVyLW1vZGFsIC50aWNrZXItc3ltYm9sIHsgZm9udC13ZWlnaHQ6ODAwOyBsZXR0ZXItc3BhY2luZzogLjAzZW07IH1cclxuI3Jlb3JkZXJNb2RhbCAucmVtb3ZlLWJ0biwgLnJlb3JkZXItbW9kYWwgLnJlbW92ZS1idG4geyB3aWR0aDogdmFyKC0tc3BhY2UtMTIpOyBoZWlnaHQ6IHZhcigtLXNwYWNlLTEyKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpOyBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS13aGl0ZS0yMGEpOyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgY29sb3I6IHZhcigtLXdoaXRlLTc1YSk7IGRpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgY3Vyc29yOnBvaW50ZXI7IH1cclxuI3Jlb3JkZXJNb2RhbCAucmVtb3ZlLWJ0bjpob3ZlciwgLnJlb3JkZXItbW9kYWwgLnJlbW92ZS1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS13aGl0ZS0xMmEpOyB9XHJcbi8qIEFkZCB0aWNrZXIgcm93ICovXHJcbiNyZW9yZGVyTW9kYWwgLmFkZC10aWNrZXItc2VjdGlvbiwgLnJlb3JkZXItbW9kYWwgLmFkZC10aWNrZXItc2VjdGlvbiB7XG4gIGRpc3BsYXk6ZmxleDsgZ2FwOiB2YXIoLS1zcGFjZS00KTtcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XHJcbiNyZW9yZGVyTW9kYWwgLmFkZC10aWNrZXItc2VjdGlvbiAudGlja2VyLWlucHV0LCAucmVvcmRlci1tb2RhbCAuYWRkLXRpY2tlci1zZWN0aW9uIC50aWNrZXItaW5wdXQgeyBmbGV4OiAxIDEgYXV0bzsgbWluLXdpZHRoOiAwOyB9XHJcbiNyZW9yZGVyTW9kYWwgLmFkZC10aWNrZXItc2VjdGlvbiAuYWRkLWJ0biwgLnJlb3JkZXItbW9kYWwgLmFkZC10aWNrZXItc2VjdGlvbiAuYWRkLWJ0biB7IGZsZXg6IDAgMCBhdXRvOyB9XHJcbiNyZW9yZGVyTW9kYWwgLnRpY2tlci1pbnB1dCwgLnJlb3JkZXItbW9kYWwgLnRpY2tlci1pbnB1dCB7XG4gIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMC4zKTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMyk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTYpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpO1xufVxyXG4jcmVvcmRlck1vZGFsIC50aWNrZXItaW5wdXQ6Zm9jdXMsIC5yZW9yZGVyLW1vZGFsIC50aWNrZXItaW5wdXQ6Zm9jdXMgeyBvdXRsaW5lOm5vbmU7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTsgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMTIpOyBib3gtc2hhZG93OiB2YXIoLS1vdXRsaW5lLWVtZXJhbGQtMi0xOCk7IH1cclxuI3Jlb3JkZXJNb2RhbCAuYWRkLWJ0biwgLnJlb3JkZXItbW9kYWwgLmFkZC1idG4geyBib3JkZXI6MXB4IHNvbGlkIHJnYmEodmFyKC0tZ3JlZW4tZW1lcmFsZC1yZ2IpLCAwLjM1KTsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS02KTsgZm9udC13ZWlnaHQ6IDcwMDsgfVxyXG4jcmVvcmRlck1vZGFsIC5hZGQtYnRuOmhvdmVyLCAucmVvcmRlci1tb2RhbCAuYWRkLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEodmFyKC0tZ3JlZW4tZW1lcmFsZC1yZ2IpLCAwLjEpOyB9XHJcbi8qIFN1Z2dlc3Rpb25zIGRyb3Bkb3duIChyZXVzZXMgc2VhcmNoIHdpZGdldCwgYnV0IHNjb3BlZCBoZXJlIGZvciBzYWZlIGRlZmF1bHRzKSAqL1xyXG4jcmVvcmRlck1vZGFsIC5zdWdnZXN0aW9uLW1lbnUsIC5yZW9yZGVyLW1vZGFsIC5zdWdnZXN0aW9uLW1lbnUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XHJcbiNyZW9yZGVyTW9kYWwgLnN1Z2dlc3Rpb24tbWVudTpub3QoLmhpZGRlbikgPiAqLCAucmVvcmRlci1tb2RhbCAuc3VnZ2VzdGlvbi1tZW51Om5vdCguaGlkZGVuKSA+ICogeyBwb3NpdGlvbjphYnNvbHV0ZTsgei1pbmRleDogdmFyKC0tei1tZW51KTsgdG9wOiBjYWxjKDEwMCUgKyA2cHgpOyBsZWZ0OjA7IHJpZ2h0OjA7IGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLWVsZXZhdGVkKTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMjUpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctZWxldmF0ZWQtbWQtYmxhY2stMzUpOyB9XHJcbi8qIFJlc3BvbnNpdmUgKi9cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQwcmVtKSB7XG4gICNyZW9yZGVyTW9kYWwgLnJlb3JkZXItbW9kYWwtcGFuZWwsIC5yZW9yZGVyLW1vZGFsIC5yZW9yZGVyLW1vZGFsLXBhbmVsIHsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTsgfVxuICAjcmVvcmRlck1vZGFsIC5yZW9yZGVyLW1vZGFsLWhlYWRlciwgLnJlb3JkZXItbW9kYWwgLnJlb3JkZXItbW9kYWwtaGVhZGVyIHsgcGFkZGluZzogdmFyKC0tc3BhY2UtOCkgdmFyKC0tc3BhY2UtOCk7IGZsZXgtd3JhcDogd3JhcDsgfVxuICAjcmVvcmRlck1vZGFsIC5yZW9yZGVyLW1vZGFsLWJvZHksIC5yZW9yZGVyLW1vZGFsIC5yZW9yZGVyLW1vZGFsLWJvZHkgeyBwYWRkaW5nOiB2YXIoLS1zcGFjZS04KTsgfVxuXG4gIC8qIE1ha2Ugc3ViZ3JvdXAgaGVhZGVyIGJyZWF0aGUgYW5kIGF2b2lkIGNyYW1tZWQgYWN0aW9ucyAqL1xuICAjcmVvcmRlck1vZGFsIC5zdWJncm91cC1oZWFkZXIsIC5yZW9yZGVyLW1vZGFsIC5zdWJncm91cC1oZWFkZXIgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogdmFyKC0tc3BhY2UtMyk7IH1cbiAgI3Jlb3JkZXJNb2RhbCAuc3ViZ3JvdXAtaGVhZGVyIC5zdWJncm91cC1hY3Rpb25zLCAucmVvcmRlci1tb2RhbCAuc3ViZ3JvdXAtaGVhZGVyIC5zdWJncm91cC1hY3Rpb25zIHsgZmxleDogMSAxIDEwMCU7IGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiB2YXIoLS1zcGFjZS0zKTsgfVxuXG4gIC8qIE5ldyBncm91cCByb3c6IGtlZXAgc3RhdHVzIG9uIGl0cyBvd24gbGluZSB0byBwcmV2ZW50IGNyb3dkaW5nICovXG4gICNyZW9yZGVyTW9kYWwgLm5ldy1ncm91cC1zZWN0aW9uLCAucmVvcmRlci1tb2RhbCAubmV3LWdyb3VwLXNlY3Rpb24geyBkaXNwbGF5OiBmbGV4OyBnYXA6IHZhcigtLXNwYWNlLTQpOyBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgI3Jlb3JkZXJNb2RhbCAubmV3LWdyb3VwLXNlY3Rpb24gLnN0YXR1cy1tZXNzYWdlLCAucmVvcmRlci1tb2RhbCAubmV3LWdyb3VwLXNlY3Rpb24gLnN0YXR1cy1tZXNzYWdlIHsgZmxleDogMSAwIDEwMCU7IH1cblxuICAvKiBGb290ZXI6IHBlcm1pdCB3cmFwcGluZyBjb250cm9scyBncmFjZWZ1bGx5IG9uIHNtYWxsIHNjcmVlbnMgKi9cbiAgI3Jlb3JkZXJNb2RhbCAucmVvcmRlci1tb2RhbC1mb290ZXIsIC5yZW9yZGVyLW1vZGFsIC5yZW9yZGVyLW1vZGFsLWZvb3RlciB7IGZsZXgtd3JhcDogd3JhcDsgcm93LWdhcDogdmFyKC0tc3BhY2UtNCk7IH1cbn1cclxuLyogU0VDIERpcmVjdG9yeSBNb2RhbCAqL1xyXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1wcm9wZXJ0eS12YWx1ZS1kaXNhbGxvd2VkLWxpc3QgKi9cclxuI3NlY0RpcmVjdG9yeU1vZGFsLCAuc2VjLWRpcmVjdG9yeS1tb2RhbCB7XG4gIC0tZGlyZWN0b3J5LWdyZWVuLTk1MDogIzAzMTYxMDtcbiAgLS1kaXJlY3RvcnktZ3JlZW4tOTAwOiAjMDUyNzFiO1xuICAtLWRpcmVjdG9yeS1ncmVlbi04MDA6ICMwNzM5MjY7XG4gIC0tZGlyZWN0b3J5LWdyZWVuLTcwMDogIzBiNTAzNDtcbiAgLS1kaXJlY3RvcnktZ3JlZW4tNTAwOiAjMTVjOTc5O1xuICAtLWRpcmVjdG9yeS1ncmVlbi00MDA6ICMzOGUyOTg7XG4gIC0tZGlyZWN0b3J5LWdyZWVuLWdsb3c6IDAgMCAycmVtIHJnYmEodmFyKC0tZ3JlZW4tZW1lcmFsZC1yZ2IpLCAwLjM1KTtcbn1cclxuI3NlY0RpcmVjdG9yeU1vZGFsIC5zdGlja3ksIC5zZWMtZGlyZWN0b3J5LW1vZGFsIC5zdGlja3kgeyBwb3NpdGlvbjogc3RpY2t5OyB9XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAubWluLWgtMCwgLnNlYy1kaXJlY3RvcnktbW9kYWwgLm1pbi1oLTAgeyBtaW4taGVpZ2h0OiAwOyB9XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWNhcmQsIC5zZWMtZGlyZWN0b3J5LW1vZGFsIC5kaXJlY3RvcnktbW9kYWwtY2FyZCB7XG4gIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgdG9wLCByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC4xNSksIHRyYW5zcGFyZW50IDU1JSksXG4gICAgbGluZWFyLWdyYWRpZW50KDE0MGRlZywgdmFyKC0tZGlyZWN0b3J5LWdyZWVuLTk1MCkgMCUsIHZhcigtLWRpcmVjdG9yeS1ncmVlbi05MDApIDM1JSwgdmFyKC0tZGlyZWN0b3J5LWdyZWVuLTgwMCkgMTAwJSk7XG4gIC8qIE1pbmltYWwgY29udHJhc3QgYnVtcCB2aWEgYm9yZGVyIG9ubHkgKHN1cmdpY2FsIGZpeCkgKi9cbiAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC41KTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWRpcmVjdG9yeS1jYXJkKTtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xufVxyXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1oZWFkZXIsIC5zZWMtZGlyZWN0b3J5LW1vZGFsIC5kaXJlY3RvcnktbW9kYWwtaGVhZGVyIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMTIpIDAlLCByZ2JhKHZhcigtLWdyZWVuLXNwcmluZy1yZ2IpLCAwLjA4KSAxMDAlKTtcbiAgLyogU2xpZ2h0bHkgc3Ryb25nZXIgZGl2aWRlciBmb3IgY2xhcml0eSAqL1xuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC40NSk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1pbnNldC1ib3R0b20tZGFyay0zNSk7XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWNsb3NlLCAuc2VjLWRpcmVjdG9yeS1tb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWNsb3NlIHtcbiAgY29sb3I6IHJnYmEodmFyKC0td2hpdGUtcmdiKSwgIDAuNik7XG4gIHRyYW5zaXRpb246IGNvbG9yIDE2MG1zIGVhc2UsIHRyYW5zZm9ybSAxNjBtcyBlYXNlLCB0ZXh0LXNoYWRvdyAxNjBtcyBlYXNlO1xufVxyXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1jbG9zZTpob3ZlcixcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWNsb3NlOmZvY3VzLXZpc2libGUsXG4uc2VjLWRpcmVjdG9yeS1tb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWNsb3NlOmhvdmVyLFxuLnNlYy1kaXJlY3RvcnktbW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1jbG9zZTpmb2N1cy12aXNpYmxlIHtcbiAgY29sb3I6IHZhcigtLWRpcmVjdG9yeS1ncmVlbi00MDApO1xuICB0ZXh0LXNoYWRvdzogMCAwIDEycHggcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuNzUpO1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpO1xufVxyXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1ib2R5LCAuc2VjLWRpcmVjdG9yeS1tb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWJvZHkge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKHZhcigtLWdyZWVuLWZvcmVzdC00LXJnYiksIDAuNzUpIDAlLCByZ2JhKHZhcigtLWdyZWVuLWZvcmVzdC0zLXJnYiksIDAuOSkgNjUlKSxcbiAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IGJvdHRvbSwgcmdiYSh2YXIoLS1ncmVlbi1zcHJpbmctcmdiKSwgMC4xMiksIHRyYW5zcGFyZW50IDYwJSk7XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLXNlYXJjaC1zaGVsbCwgLnNlYy1kaXJlY3RvcnktbW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1zZWFyY2gtc2hlbGwge1xuICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWdyZWVuLWZvcmVzdC0zLXJnYiksIDAuOCk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zZWFyY2gtc2hlbGwpO1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKTtcbn1cclxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtc2VhcmNoLCAuc2VjLWRpcmVjdG9yeS1tb2RhbCAuZGlyZWN0b3J5LW1vZGFsLXNlYXJjaCB7XG4gIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tYmxhY2stcmdiKSwgIDAuNCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEodmFyKC0tZ3JlZW4tZW1lcmFsZC1yZ2IpLCAwLjM1KTtcbiAgYm94LXNoYWRvdzogdmFyKC0tZ2xvdy1lbWVyYWxkLWluc2V0LXhsLTA4KTtcbiAgY29sb3I6IHJnYmEodmFyKC0td2hpdGUtcmdiKSwgIDAuODgpO1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMTYwbXMgZWFzZSwgYm94LXNoYWRvdyAxNjBtcyBlYXNlLCBiYWNrZ3JvdW5kIDE2MG1zIGVhc2U7XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLXNlYXJjaDo6LW1vei1wbGFjZWhvbGRlciwgLnNlYy1kaXJlY3RvcnktbW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1zZWFyY2g6Oi1tb3otcGxhY2Vob2xkZXIge1xuICBjb2xvcjogcmdiYSh2YXIoLS1taW50LWljZS1yZ2IpLCAwLjQ1KTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbn1cclxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtc2VhcmNoOjpwbGFjZWhvbGRlciwgLnNlYy1kaXJlY3RvcnktbW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1zZWFyY2g6OnBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHJnYmEodmFyKC0tbWludC1pY2UtcmdiKSwgMC40NSk7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLXNlYXJjaDpmb2N1cywgLnNlYy1kaXJlY3RvcnktbW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1zZWFyY2g6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xuICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWdyZWVuLWxlYWYtZGVlcC1yZ2IpLCAwLjc1KTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1kaXJlY3RvcnktZ3JlZW4tNDAwKTtcbiAgYm94LXNoYWRvdzogdmFyKC0tb3V0bGluZS1lbWVyYWxkLTItMjUtaW5zZXQtZ2xvdyk7XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QsIC5zZWMtZGlyZWN0b3J5LW1vZGFsIC5kaXJlY3RvcnktbW9kYWwtbGlzdCB7XG4gIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tZ3JlZW4tZm9yZXN0LTMtcmdiKSwgMC42KTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMTgpO1xuICBib3gtc2hhZG93OiB2YXIoLS1nbG93LWVtZXJhbGQtaW5zZXQtbGctMTApO1xufVxyXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1saXN0ID4gZGl2LFxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtbGlzdCA+IGJ1dHRvbixcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgYnV0dG9uW2RhdGEtc3ltXSxcbi5zZWMtZGlyZWN0b3J5LW1vZGFsIC5kaXJlY3RvcnktbW9kYWwtbGlzdCA+IGRpdixcbi5zZWMtZGlyZWN0b3J5LW1vZGFsIC5kaXJlY3RvcnktbW9kYWwtbGlzdCA+IGJ1dHRvbixcbi5zZWMtZGlyZWN0b3J5LW1vZGFsIC5kaXJlY3RvcnktbW9kYWwtbGlzdCBidXR0b25bZGF0YS1zeW1dIHtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWdyZWVuLWVtZXJhbGQtcmdiKSwgMC4xKTtcbn1cclxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtbGlzdCBidXR0b25bZGF0YS1zeW1dLCAuc2VjLWRpcmVjdG9yeS1tb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgYnV0dG9uW2RhdGEtc3ltXSB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSh2YXIoLS1ncmVlbi1mb3Jlc3QtMS1yZ2IpLCAwLjUpIDAlLCByZ2JhKHZhcigtLWdyZWVuLWZvcmVzdC0yLXJnYiksIDAuMikgMTAwJSk7XG4gIGNvbG9yOiByZ2JhKHZhcigtLW1pbnQtc25vdy1yZ2IpLCAwLjkyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kLXRpZ2h0KTtcbiAgYm9yZGVyOiB2YXIoLS1ib3JkZXItMSkgc29saWQgdHJhbnNwYXJlbnQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNjBtcyBlYXNlLCBiYWNrZ3JvdW5kIDE2MG1zIGVhc2UsIGJvcmRlci1jb2xvciAxNjBtcyBlYXNlLCBib3gtc2hhZG93IDE2MG1zIGVhc2U7XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgYnV0dG9uW2RhdGEtc3ltXTpob3ZlcixcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgYnV0dG9uW2RhdGEtc3ltXTpmb2N1cy12aXNpYmxlLFxuLnNlYy1kaXJlY3RvcnktbW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1saXN0IGJ1dHRvbltkYXRhLXN5bV06aG92ZXIsXG4uc2VjLWRpcmVjdG9yeS1tb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgYnV0dG9uW2RhdGEtc3ltXTpmb2N1cy12aXNpYmxlIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDk1ZGVnLCByZ2JhKHZhcigtLWdyZWVuLXNwcmluZy1yZ2IpLCAwLjM1KSAwJSwgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuMikgMTAwJSk7XG4gIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuNCk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSBzY2FsZSgxLjAxKTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWRpcmVjdG9yeS1saXN0LWl0ZW0pO1xuICBvdXRsaW5lOiBub25lO1xufVxyXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1saXN0IGJ1dHRvbltkYXRhLXN5bV0gc3Bhbi5mb250LXNlbWlib2xkLCAuc2VjLWRpcmVjdG9yeS1tb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgYnV0dG9uW2RhdGEtc3ltXSBzcGFuLmZvbnQtc2VtaWJvbGQge1xuICBjb2xvcjogdmFyKC0tZGlyZWN0b3J5LWdyZWVuLTQwMCk7XG4gIHRleHQtc2hhZG93OiAwIDAgNnB4IHJnYmEodmFyKC0tZ3JlZW4tZW1lcmFsZC1yZ2IpLCAwLjU1KTtcbn1cclxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtbGlzdCBidXR0b25bZGF0YS1zeW1dIHNwYW4udGV4dC14cywgLnNlYy1kaXJlY3RvcnktbW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1saXN0IGJ1dHRvbltkYXRhLXN5bV0gc3Bhbi50ZXh0LXhzIHtcbiAgY29sb3I6IHJnYmEodmFyKC0tbWludC1zb2Z0LXJnYiksIDAuNjUpO1xufVxyXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1saXN0IC50ZXh0LWdyYXktNDAwLCAuc2VjLWRpcmVjdG9yeS1tb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgLnRleHQtZ3JheS00MDAge1xuICBjb2xvcjogcmdiYSh2YXIoLS1taW50LWRpbS1yZ2IpLCAwLjcpO1xufVxyXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1ib2R5Ojotd2Via2l0LXNjcm9sbGJhciwgLnNlYy1kaXJlY3RvcnktbW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1ib2R5Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiB2YXIoLS1zY3JvbGxiYXItc2l6ZSk7XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLCAuc2VjLWRpcmVjdG9yeS1tb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSh2YXIoLS1ncmVlbi1lbWVyYWxkLXJnYiksIDAuNSksIHJnYmEodmFyKC0tZ3JlZW4tZm9yZXN0LTEtcmdiKSwgMC42KSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbn1cclxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtYm9keTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssIC5zZWMtZGlyZWN0b3J5LW1vZGFsIC5kaXJlY3RvcnktbW9kYWwtYm9keTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWdyZWVuLWZvcmVzdC0yLXJnYiksIDAuNSk7XG59XHJcbi8qIHN0eWxlbGludC1lbmFibGUgZGVjbGFyYXRpb24tcHJvcGVydHktdmFsdWUtZGlzYWxsb3dlZC1saXN0ICovXHJcbi8qIFN0YXR1cyBEZXRhaWxzIE1vZGFsOiB1c2UgbW9kYWwgdG9rZW4gbGF5ZXIgKi9cclxuI3N0YXR1c0RldGFpbHNNb2RhbCB7IHotaW5kZXg6IHZhcigtLXotbW9kYWwpOyB9XHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICBTRUMgRGlyZWN0b3J5IE1vZGFsIOKAlCBQbGFpbiBCbGFjayAmIFdoaXRlIG92ZXJyaWRlc1xuICAgU2NvcGU6ICNzZWNEaXJlY3RvcnlNb2RhbCBvbmx5IChubyBvdGhlciBtb2RhbHMpLlxuICAgSW50ZW50OiBtYXhpbWl6ZSBjb250cmFzdCB1c2luZyBiYXNlIHRva2VuczsgYXZvaWQgdGhlbWUgZ3JlZW5zLlxuICAgTWluaW1hbCwgc3VyZ2ljYWwgb3ZlcnJpZGVzOyBubyBsYXlvdXQgY2hhbmdlcy5cbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWNhcmQge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZyk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tb2RhbC1tZC1ibGFjay01MCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWhlYWRlciB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLW11dGVkKTtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWhlYWRlciBoMixcbiNzZWNEaXJlY3RvcnlNb2RhbCAudGV4dC1hY2NlbnQgeyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpOyB0ZXh0LXNoYWRvdzogbm9uZTsgfVxyXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1zZWFyY2gtc2hlbGwgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZyk7IGJveC1zaGFkb3c6IG5vbmU7IH1cclxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtc2VhcmNoIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpO1xuICBib3gtc2hhZG93OiBub25lO1xufVxyXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1zZWFyY2g6Oi1tb3otcGxhY2Vob2xkZXIgeyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7IH1cclxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtc2VhcmNoOjpwbGFjZWhvbGRlciB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgfVxyXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1saXN0IHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpOyBib3gtc2hhZG93OiBub25lOyB9XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgPiBkaXYsXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1saXN0ID4gYnV0dG9uLFxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtbGlzdCBidXR0b25bZGF0YS1zeW1dIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1ib3JkZXIpOyB9XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgYnV0dG9uW2RhdGEtc3ltXSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zdHJvbmcpO1xuICBib3JkZXI6IHZhcigtLWJvcmRlci0xKSBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICB0cmFuc2Zvcm06IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgYnV0dG9uW2RhdGEtc3ltXTpob3ZlcixcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgYnV0dG9uW2RhdGEtc3ltXTpmb2N1cy12aXNpYmxlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZS1ob3Zlcik7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYm9yZGVyLXN0cm9uZyk7XG59XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWxpc3QgYnV0dG9uW2RhdGEtc3ltXSBzcGFuLmZvbnQtc2VtaWJvbGQsXG4jc2VjRGlyZWN0b3J5TW9kYWwgLmRpcmVjdG9yeS1tb2RhbC1saXN0IGJ1dHRvbltkYXRhLXN5bV0gc3Bhbi50ZXh0LXhzLFxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtbGlzdCAudGV4dC1ncmF5LTQwMCB7IGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXN0cm9uZyk7IHRleHQtc2hhZG93OiBub25lOyB9XHJcbi8qIE5ldXRyYWxpemUgZ3JlZW4tdGludGVkIGJvZHkgZ3JhZGllbnQgYW5kIHNjcm9sbGJhciBpbnNpZGUgZGlyZWN0b3J5IG1vZGFsICovXHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWJvZHkgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZyk7IH1cclxuI3NlY0RpcmVjdG9yeU1vZGFsIC5kaXJlY3RvcnktbW9kYWwtYm9keTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ib3JkZXIpOyB9XHJcbiNzZWNEaXJlY3RvcnlNb2RhbCAuZGlyZWN0b3J5LW1vZGFsLWJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctbXV0ZWQpOyB9XHJcbi8qIFNFQyBGb3JtIFR5cGVzIEd1aWRlOiBpbmNyZWFzZSBtb2RhbCB3aWR0aCBieSB+MzAlIChmcm9tIH41NnJlbSB0byB+NzIuOHJlbSkuXG4gICBLZWVwIHJlc3BvbnNpdmUgdmlhIHZpZXdwb3J0IGNhcC4gVGFyZ2V0cyBib3RoIGxlZ2FjeSAubW9kYWwtY29udGVudCBhbmRcbiAgIHRoZSBkaXJlY3QgY2hpbGQgdXNlZCBpbiB0aGUgc2FuaXRpemVkIG1hcmt1cC4gKi9cclxuI2Zvcm1UeXBlc01vZGFsIC5tb2RhbC1jb250ZW50LFxuI2Zvcm1UeXBlc01vZGFsID4gZGl2IHsgbWF4LXdpZHRoOiBtaW4oNzIuOHJlbSwgOTZ2dyk7IH1cclxuLyogUHJvZmlsZSBUZXJtcyAmIFByaXZhY3k6IGluY3JlYXNlIG1vZGFsIHdpZHRoIGJ5IH4zMCUgKGZyb20gfjQ4cmVtIHRvIH42Mi40cmVtKSAqL1xyXG4jdG9zUHJpdmFjeU1vZGFsIC5tb2RhbC1jb250ZW50LFxuI3Rvc1ByaXZhY3lNb2RhbCA+IGRpdiB7IG1heC13aWR0aDogbWluKDYyLjRyZW0sIDk2dncpOyB9XHJcbi8qIGRyYXdlci5jc3NcbiAgIFB1cnBvc2U6IEdlbmVyaWMgZHJhd2VyL2JhY2tkcm9wIGF0dHJpYnV0ZSBob29rcyB0byBlbmFibGUgdW5pZmllZCBKUyBjb250cm9sLlxuICAgTm90ZTogUGFuZWwgcG9zaXRpb25pbmcgYW5kIGZ1bGwgdmlzdWFscyByZW1haW4gaW4gY29tcG9uZW50LXNwZWNpZmljIENTUyBmb3Igbm93LiAqL1xyXG4vKiBCYWNrZHJvcCBiYXNlOiBwb3NpdGlvbmVkIGFuZCBzYWZlLWFyZWEgYXdhcmUgKi9cclxuW2RhdGEtZHJhd2VyLWJhY2tkcm9wXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDA7XG4gIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tYmxhY2stcmdiKSwgMC41KTtcbiAgei1pbmRleDogdmFyKC0tei1iYWNrZHJvcCk7XG4gIHBhZGRpbmctdG9wOiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCk7XG4gIHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XG59XHJcbltkYXRhLWRyYXdlci1iYWNrZHJvcF0ub3BlbiB7IGRpc3BsYXk6IGJsb2NrOyB9XHJcbi8qIERyYXdlciBwYW5lbCB2aXNpYmlsaXR5IChmZWF0dXJlIENTUyBkZWZpbmVzIHBsYWNlbWVudC9zaXppbmcpICovXHJcbltkYXRhLWRyYXdlcl0geyBkaXNwbGF5OiBub25lOyB9XHJcbltkYXRhLWRyYXdlcl0ub3BlbiB7IGRpc3BsYXk6IGJsb2NrOyB9XHJcbi8qIFBhbmVscyBvcHQtaW4gdG8gdmlzaWJpbGl0eSB2aWEgdGhlaXIgb3duIHJ1bGVzLiBUaGlzIGZpbGUgaW50ZW50aW9uYWxseVxuICAgYXZvaWRzIHBvc2l0aW9uaW5nIHNvIGl0IGRvZXMgbm90IGNvbmZsaWN0IHdpdGggZXhpc3RpbmcgSUQtc3BlY2lmaWMgQ1NTLiAqL1xuIixudWxsXX0= */