@charset "UTF-8";
/* index.scss → index.css  ·  served at /code/2027/index.css
   Clean shell (no Bootstrap, no au- prefix). Load order: tokens →
   base → layout/card → components. Recompile after any edit:
   npx sass index.scss index.css --no-source-map
   NOTE: the CMS only rebuilds index.css when THIS file is saved — editing a
   partial under css/ alone does not trigger it. Re-save this file after any
   partial edit. */
/* ════════════════════════════════════════════════════════════
   au-tokens.css  ·  AU Design System custom properties
   The single source of truth for all design tokens.
   Every other partial references these via var().
   If your master already defines :root, omit this file.
   ════════════════════════════════════════════════════════════ */
:root {
	/* ─── COLOR: Primary ─── */
	--au-navy: #003366;
	--au-navy-deep: #001a33;
	--au-navy-mid: #002a48; /* between deep and navy; matches theme-color */
	--au-navy-light: #004080;
	--au-gold: #C6952B;
	--au-gold-light: #E8B84B;
	--au-gold-pale: #FDF5E6;
	/* ─── COLOR: Neutral ─── */
	--au-cream: #FAF8F5;
	--au-stone: #ECEAE4; /* warm light-gray band, a step deeper than cream */
	--au-white: #FFFFFF;
	--au-warm-gray: #6B6560;
	--au-gray-200: #E8E4DF;
	--au-gray-300: #D1CBC4;
	--au-gray-400: #B5AFA8;
	--au-text: #2A2522;
	/* ─── COLOR: Semantic ─── */
	--au-success: #2D7D46;
	--au-warning: #C6952B;
	--au-error: #B83232;
	--au-info: #2868A6;
	/* ─── TYPOGRAPHY ─── */
	--font-display: "IBM Plex Serif", Georgia, "Times New Roman", serif;
	--font-body: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, sans-serif;
	--font-mono: "IBM Plex Mono", "Courier New", monospace;
	/* ─── TYPE SCALE (Major Third — 1.25) ─── */
	--text-xs: 0.75rem; /* 12px */
	--text-sm: 0.875rem; /* 14px */
	--text-base: 1rem; /* 16px */
	--text-md: 1.125rem; /* 18px */
	--text-lg: 1.25rem; /* 20px */
	--text-xl: 1.563rem; /* 25px */
	--text-2xl: 1.953rem; /* ~31px */
	--text-3xl: 2.441rem; /* ~39px */
	--text-4xl: 3.052rem; /* ~49px */
	/* ─── SPACING (8px base) ─── */
	--space-1: 0.25rem; /* 4px */
	--space-2: 0.5rem; /* 8px */
	--space-3: 0.75rem; /* 12px */
	--space-4: 1rem; /* 16px */
	--space-5: 1.5rem; /* 24px */
	--space-6: 2rem; /* 32px */
	--space-8: 3rem; /* 48px */
	--space-10: 4rem; /* 64px */
	--space-12: 5rem; /* 80px */
	--space-16: 6.25rem; /* 100px */
	/* ─── LAYOUT ─── */
	--max-width: 1200px;
	--max-width-narrow: 900px;
	--max-width-text: 700px;
	--gutter: 2.5rem;
	--header-height: 6.75rem; /* approx sticky header height; sticky offsets reference it */
	/* ─── BORDERS & RADII ─── */
	--radius-sm: 4px;
	--radius-md: 8px;
	--radius-lg: 12px;
	--radius-full: 9999px;
	/* ─── SHADOWS ─── */
	--shadow-sm: 0 1px 4px rgba(0,0,0,0.06);
	--shadow-md: 0 4px 16px rgba(0,0,0,0.08);
	--shadow-lg: 0 8px 32px rgba(0,0,0,0.10);
	--shadow-xl: 0 16px 48px rgba(0,0,0,0.14);
	/* ─── TRANSITIONS ─── */
	--ease-out: cubic-bezier(0.25, 0.46, 0.45, 0.94);
	--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
	--duration-fast: 150ms;
	--duration-base: 300ms;
	--duration-slow: 500ms;
}

/* ════════════════════════════════════════════════════════════
   fonts.css  ·  self-hosted IBM Plex  (woff2 in /code/2027/fonts/)
   Family names match the --font-* tokens. Only the weights/styles the
   system actually uses are declared (Sans 400/600/700 + italic, Serif
   400/600 + italic, Mono 400). font-display: swap to avoid FOIT.
   ════════════════════════════════════════════════════════════ */
@font-face {
	font-family: "IBM Plex Sans";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-400.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Sans";
	font-style: italic;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-400-italic.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Sans";
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-600.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Sans";
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-700.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Serif";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-serif-400.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Serif";
	font-style: italic;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-serif-400-italic.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Serif";
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-serif-600.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Mono";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-mono-400.woff2") format("woff2");
}
/* ════════════════════════════════════════════════════════════
   base.css  ·  reset + bare-element typography
   Depends on: tokens.css
   GLOBAL (clean shell — no Bootstrap to coexist with, so no .au
   scope). On-brand defaults for raw HTML so CKEditor content reads
   correctly with no extra classes. Component classes layer on top.
   ════════════════════════════════════════════════════════════ */
*, *::before, *::after {
	box-sizing: border-box;
}

* {
	margin: 0;
}

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

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

/* several images authored side by side in one paragraph or heading (badges,
   social icons, logos -- /ceis/leadership_school/) stay on one line, as they did
   before the block reset above; a lone image keeps display:block */
:is(p, h2, h3, h4, h5, h6):has(> img, > a > img):has(> img + img, > img + a, > a + img, > a + a) img {
	display: inline-block;
	vertical-align: middle;
}

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

body {
	font-family: var(--font-body);
	font-size: var(--text-base);
	line-height: 1.6;
	color: var(--au-text);
	background: var(--au-white);
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	/* sticky footer: the page is a full-viewport-tall column so that on short
	   pages the footers (dept pre-footer + global site footer) settle at the
	   bottom of the screen instead of floating mid-viewport. The <main> content
	   grows to absorb the slack; header/footers keep their natural height.
	   Works with the sticky header (sticky positioning is unaffected by the
	   column flex context). */
	display: flex;
	flex-direction: column;
	min-height: 100vh;
	min-height: 100dvh; /* progressive: exclude mobile browser chrome where supported */
}

/* the content area is the only flex child that grows; everything else
   (header, dept-footer, site-footer, 0-height scripts) keeps its size. */
body > main {
	flex: 1 0 auto;
}

h1, h2, h3, h4, h5, h6 {
	font-family: var(--font-display);
	color: var(--au-navy);
	line-height: 1.2;
	font-weight: 400;
	text-wrap: balance;
}

/* one weight across all levels — hierarchy comes from size (+ the serif/navy
   vs sans/gray contrast against body), not weight. Keeping every heading at the
   light display weight avoids a smaller heading (h4) reading as bolder than a
   larger one (h3). Components that want a heavier label (.card-title,
   .footer-col h3, .mega-col h4) set their own font-weight. */
h1 {
	font-size: var(--text-4xl);
}

h2 {
	font-size: var(--text-3xl);
}

h3 {
	font-size: var(--text-2xl);
}

h4 {
	font-size: var(--text-xl);
}

h5 {
	font-size: var(--text-lg);
}

h6 {
	font-size: var(--text-base);
	letter-spacing: 0.5px;
}

p {
	line-height: 1.7;
}

p + p {
	margin-top: var(--space-4);
}

a {
	color: var(--band-link, var(--au-navy-light));
	text-decoration: underline;
	text-underline-offset: 2px;
	text-decoration-thickness: 1px;
	transition: color var(--duration-fast) var(--ease-out);
}

/* buttons manage their own hover colors — exclude them so the link-hover gold
   doesn't wash out .btn labels (esp. .btn-primary on its gold background). */
a:not(.btn):hover {
	color: var(--band-link-hover, var(--au-gold));
}

strong, b {
	font-weight: 700;
}

em, i {
	font-style: italic;
}

small {
	font-size: var(--text-sm);
}

ul, ol {
	padding-left: var(--space-5);
	line-height: 1.7;
}

li + li {
	margin-top: var(--space-2);
}

blockquote {
	border-left: 3px solid var(--au-gold);
	padding-left: var(--space-5);
	margin: var(--space-6) 0;
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-navy);
	font-style: italic;
}

hr {
	border: 0;
	border-top: 1px solid var(--au-gray-200);
	margin: var(--space-8) 0;
}

code, kbd, samp {
	font-family: var(--font-mono);
	font-size: 0.9em;
	background: var(--au-cream);
	padding: 0.15em 0.4em;
	border-radius: var(--radius-sm);
}

pre {
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.88);
	padding: var(--space-4) var(--space-5);
	border-radius: var(--radius-md);
	overflow-x: auto;
	font-family: var(--font-mono);
	font-size: var(--text-sm);
	line-height: 1.6;
	margin: var(--space-5) 0;
}

pre code {
	background: none;
	padding: 0;
	border-radius: 0;
	font-size: inherit;
	color: inherit;
}

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

/* ─── icon link list ───
   A tidy, self-columning list of icon + link rows for rich-text bodies
   (accordion panels, page content). Authors add class="link-list" to a <ul>;
   each <li> holds a FontAwesome <i> + an <a>. The icon takes the band accent
   (gold on dark / light bands); the link colour comes from the surrounding
   context (e.g. gold inside a dark-band accordion). Collapses to one column
   on narrow widths. Items without an icon still align cleanly. */
.link-list {
	list-style: none;
	margin: var(--space-4) 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
	gap: var(--space-3) var(--space-6);
}

.link-list li {
	margin: 0;
	display: flex;
	align-items: baseline;
	gap: var(--space-3);
}

.link-list li > i {
	flex: none;
	width: 1.15em;
	text-align: center;
	color: var(--band-accent, var(--au-gold));
}

/* ════════════════════════════════════════════════════════════
   layout.css  ·  section bands + the flexible grid
   Depends on: tokens.css

   .section   full-bleed band (vertical rhythm + bg variant)
   .section-inner   centered max-width column
   .grid      flex-wrap; any number of children flow and fill —
              the renderers never compute a column count.
   ════════════════════════════════════════════════════════════ */
/* ─── SECTION ─── */
.section {
	padding: var(--space-12) var(--gutter);
}

/* Same-color bands abut: collapse the doubled seam to a single, continuous
   gap (not zero — content must not collide). Both sides trim to --space-6,
   so a same-color seam reads as one band with ~64px between its content. */
.section--flush-top {
	padding-top: var(--space-6);
}

.section--flush-bottom {
	padding-bottom: var(--space-6);
}

.section-inner {
	max-width: var(--max-width);
	margin-inline: auto;
}

.section-head {
	margin-bottom: var(--space-4);
}

.section-label {
	font-size: var(--text-xs);
	letter-spacing: 3px;
	text-transform: uppercase;
	color: var(--band-eyebrow, var(--au-gold));
	font-weight: 600;
	margin-bottom: var(--space-3);
}

.section-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 3.5vw, var(--text-3xl));
	color: var(--band-heading, var(--au-navy));
	line-height: 1.2;
}

.section-desc {
	font-size: var(--text-md);
	color: var(--band-body, var(--au-warm-gray));
	max-width: var(--max-width-text);
	line-height: 1.7;
	margin-top: var(--space-4);
}

/* ─── BACKGROUND BANDS ───────────────────────────────────────────
   The CMS background_color field supplies the modifier name → the author
   picks from this palette. Light bands set only a background; DARK bands
   also publish a set of `--band-*` CONTEXT TOKENS that components read
   (headings, body, cards, hairlines, …). That's the whole point: a
   component styles a dark band once, through the tokens, so adding a new
   band is a single definition here — not an edit in every component.

   Palette:
     light  →  (white default) · cream · stone(gray) · gold
     dark   →  navy(deep) · navy-mid · navy-bright
   Legacy .ct values are aliased onto the nearest new band (delete the
   alias selectors once the .ct dropdowns are trimmed to the names above). */
/* light bands */
.section--cream,
.section--ecru-white {
	background: var(--au-cream);
}

.section--stone,
.section--gray,
.section--seashell-gray,
.section--cararra-gray,
.section--cararra-gray-textured {
	background: var(--au-stone);
}

.section--gold {
	background: var(--au-gold-pale);
}

/* dark bands — background + the shared context tokens */
.section--navy {
	background: var(--au-navy-deep);
}

.section--navy-mid {
	background: var(--au-navy-mid);
}

.section--navy-bright {
	background: var(--au-navy);
}

.section--nile-blue {
	background: var(--au-navy-deep);
}

/* chathams-blue was the LIGHTER legacy blue (#143E6E) — keep it lighter (maps to
   --au-navy #003366) rather than collapsing it into the darkest band. */
.section--chathams-blue {
	background: var(--au-navy);
}

.section--fiord-blue,
.section--fiord-blue-textured {
	background: var(--au-navy-deep);
}

.section--navy,
.section--navy-mid,
.section--navy-bright,
.section--nile-blue,
.section--chathams-blue,
.section--fiord-blue,
.section--fiord-blue-textured {
	color: rgba(255, 255, 255, 0.85);
	--band-heading: var(--au-white);
	--band-body: rgba(255, 255, 255, 0.66);
	--band-eyebrow: var(--au-gold-light);
	--band-accent: var(--au-gold-light);
	/* hover/expanded surface (accordion header): a subtle translucent-white lift.
	   (A gold wash muddied against the blue band.) */
	--band-link: var(--au-gold-light);
	--band-link-hover: var(--au-white);
	--band-raised: rgba(255, 255, 255, 0.09);
	--band-hairline: rgba(255, 255, 255, 0.12);
	--band-quote: rgba(255, 255, 255, 0.82);
	--band-card-bg: rgba(255, 255, 255, 0.04);
	--band-card-border: rgba(255, 255, 255, 0.1);
	--band-card-border-w: 0;
	--band-card-shadow: 0 2px 6px rgba(0, 0, 0, 0.25), 0 14px 32px rgba(0, 0, 0, 0.28);
	--band-card-shadow-hover: 0 6px 16px rgba(0, 0, 0, 0.3), 0 22px 48px rgba(0, 0, 0, 0.36);
	--band-icon-bg: rgba(255, 255, 255, 0.08);
	--band-icon-fg: var(--au-gold-light);
}

/* ─── GRID — flexible flex (unknown item counts) ─── */
.grid {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-5);
}

.grid > * {
	flex: 1 1 280px;
	min-width: 0;
} /* min-width: a wide table/iframe inside scrolls in its .table-wrap instead of stretching the column */
/* compact variant — a tighter flex min so cards pack closer and 3-up holds
   across a sidebar content column, resizing smoothly (the default 280px only
   fits two). Works as a section-level token (Custom Class "compact") or
   directly on the grid (class="grid grid--compact"). */
.grid--compact > * {
	flex: 1 1 200px;
}

.compact .grid > * {
	flex: 1 1 200px;
}

/* ─── SPLIT — asymmetric two-column feature rows ─────────────────
   For image-on-one-side / text-on-the-other rows the flex grid can't do,
   because it sizes every child equally. A SECTION token (typed in the section's
   Custom Class field) swaps the grid to a fixed two-track layout with a wide +
   narrow split:
     split-2-3   → 2fr 3fr   (left narrower, right wider)
     split-3-2   → 3fr 2fr   (left wider,   right narrower)
   Which side is the image is just the ORDER of the two cards — put the image
   card first for image-left, second for image-right; pick the token that makes
   the image the size you want. Rows are vertically centered so a short text
   block sits centered against a taller image. Built for TWO cards; a third
   would wrap to a new row. Collapses to a single stacked column on narrow
   screens. The token also lands as a class on the section (via custom_class). */
.split-2-3 .grid,
.split-3-2 .grid {
	display: grid;
	gap: var(--space-8);
	align-items: center;
}

.split-2-3 .grid {
	grid-template-columns: 2fr 3fr;
}

.split-3-2 .grid {
	grid-template-columns: 3fr 2fr;
}

/* an image-only card defaults to align-self:start (top-pinned); in a split we
   want it centered in the row like everything else */
.split-2-3 .card--media,
.split-3-2 .card--media {
	align-self: center;
}

/* pin both columns to the top instead of centering — combine with the split
   token when the text is longer than the image (e.g. split-3-2 split-top) */
.split-top .grid {
	align-items: start;
}

.split-top .card--media {
	align-self: start;
}

@media (max-width: 760px) {
	.split-2-3 .grid,
	.split-3-2 .grid {
		grid-template-columns: 1fr;
	}
	.split-2-3 .card--media,
	.split-3-2 .card--media {
		max-width: 400px;
		width: 100%;
		margin-inline: auto;
	}
}
/* ─── TEXT SIZE — section-level overrides ─────────────────────
   Drop into a section's Custom Class field to bump the text in
   that row above the card-text default (14px).
     standard  → 16px body text (comfortable reading for full-width prose)
     lead      → 20px body, 31px titles, 1.7 line-height (intro/welcome) */
.standard .card-text {
	font-size: var(--text-base);
	line-height: 1.7;
}

/* the card heading scale tops out at 18px — barely above 16px body, so
   step headings up with the text or the hierarchy flattens */
.standard .card-text :is(h1, h2) {
	font-size: var(--text-xl);
}

.standard .card-text h3 {
	font-size: var(--text-md);
}

.lead .card-title {
	font-size: var(--text-2xl);
	line-height: 1.2;
	margin-bottom: var(--space-3);
}

.lead .card-text {
	font-size: var(--text-lg);
	line-height: 1.7;
}

.lead .card-text :is(h1, h2, h3) {
	font-size: var(--text-xl);
}

.lead .card-text :is(h4, h5, h6) {
	font-size: var(--text-md);
}

.page-main p.lead {
	font-size: var(--text-lg);
	line-height: 1.7;
}

/* ════════════════════════════════════════════════════════════
   card.css  ·  the card  (image / eyebrow / title / text / cta)
   Depends on: tokens.css
   The single card primitive used by columns, bios, feeds, etc.
   ════════════════════════════════════════════════════════════ */
.card {
	display: flex;
	flex-direction: column;
	background: var(--au-white);
	/* border + shadow come from the band's context tokens: on a dark band the
	   border width collapses to 0 (reclaims the 1px strip that leaked the white
	   card bg around the image) and the shadow deepens. Light bands fall back to
	   the hairline + soft shadow. */
	border: var(--band-card-border-w, 1px) solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	box-shadow: var(--band-card-shadow, var(--shadow-sm));
	overflow: hidden;
	transition: box-shadow var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out);
	/* White-surface cards reset band link tokens; plain cards (transparent,
	   band-colored) inherit the section's tokens instead — see below. */
}

.card:hover {
	box-shadow: var(--band-card-shadow-hover, var(--shadow-md));
	border-color: var(--band-card-border, var(--au-gray-300));
	transform: translateY(-2px);
}

.card:not(.card--plain) {
	--band-link: var(--au-navy-light);
	--band-link-hover: var(--au-gold);
}

/* ...and the band's text colors too: a table or accordion inside a white card
   on a dark band was taking the band's white body text and vanishing
   (/chhs/speech/services/ fees). A `plain` section's cards are transparent,
   so they keep the band's colors. */
.section:not(.plain) .card:not(.card--plain) {
	--band-body: initial;
	--band-heading: initial;
}

.card-img-link {
	display: block;
	cursor: pointer;
}

.card-img {
	width: 100%;
	aspect-ratio: 16/9;
	overflow: hidden;
	-o-object-fit: cover;
	   object-fit: cover;
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	/* a linked image is a button, not text — stop Safari showing the text-select
	   I-beam (and dragging) when the image has words baked into it. */
	-webkit-user-select: none;
	-moz-user-select: none;
	     user-select: none;
	-webkit-user-drag: none;
}

/* icon lead — icon-led cards (services / features) in place of a photo */
.card-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 3.25rem;
	height: 3.25rem;
	border-radius: var(--radius-md);
	background: var(--au-gold-pale);
	color: var(--au-gold);
	font-size: var(--text-xl);
}

.card-body {
	display: flex;
	flex-direction: column;
	gap: var(--space-3);
	padding: var(--space-6);
	flex: 1;
}

.card-eyebrow {
	font-size: var(--text-xs);
	letter-spacing: 1px;
	text-transform: uppercase;
	color: var(--au-gold);
	font-weight: 600;
	font-style: italic;
}

.card-title {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-navy);
	font-weight: 600;
	line-height: 1.25;
}

.card-title a {
	color: inherit;
	text-decoration: none;
}

.card-title a:hover {
	color: var(--au-navy-light);
}

.card-text {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.7;
}

/* Authored rich text — the CKEditor `content` field lands whole inside
   .card-text, and base.css resets every margin to 0. Without rhythm here an
   authored <h3> sits flush against the paragraph above it and the block reads
   as one lump (.page-main re-establishes the same rhythm for page content;
   these are the card-scale equivalents — tighter, because a card is a much
   narrower measure).

   Heading SIZE matters too: base.css gives h3 --text-2xl, which is larger than
   the card's own .card-title (--text-lg), so an authored heading was
   out-shouting the title it sits under. Stepped down so the hierarchy reads
   card-title > authored heading > body.

   First child sits flush to the top — .card-body's flex gap already spaces it
   from the title above. */
.card-text > :first-child {
	margin-top: 0;
}

.card-text :is(p, ul, ol, table, blockquote, figure) {
	margin-top: var(--space-3);
}

.card-text :is(h1, h2, h3, h4, h5, h6) {
	margin-top: var(--space-5);
	font-family: var(--font-display);
	font-weight: 600;
	line-height: 1.25;
	color: var(--au-navy);
}

/* Heading scale for authored card text. base.css sizes headings for a full
   page (h3 is --text-2xl / 31px), which inside a card out-shouts the
   .card-title above it. Rescaled to sit between the card title (--text-lg /
   20px) and the body copy (--text-sm / 14px) — but each level still steps, so
   choosing h2 vs h3 vs h4 continues to mean something. h5/h6 run out of room
   on size alone in a 14–20px band, so they separate by weight and letterform
   instead, the same trick base.css uses for h6. */
.card-text h1 {
	font-size: var(--text-lg);
}

.card-text h2 {
	font-size: var(--text-md);
}

.card-text h3 {
	font-size: var(--text-base);
}

.card-text h4 {
	font-size: var(--text-sm);
	font-weight: 700;
}

.card-text h5 {
	font-size: var(--text-sm);
}

.card-text h6 {
	font-size: var(--text-xs);
	text-transform: uppercase;
	letter-spacing: 0.5px;
}

/* a heading belongs with the text under it — keep that gap tighter */
.card-text :is(h1, h2, h3, h4, h5, h6) + :is(p, ul, ol) {
	margin-top: var(--space-2);
}

.card-cta {
	margin-top: auto;
	align-self: flex-start;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
	text-decoration: none;
}

.card-cta:hover {
	color: var(--au-gold);
}

/* linked card — the whole card is the click target (a "stretched link"), so you
   don't have to hit the link text exactly. The card's link stretches to cover
   it; the pointer cursor follows. (Text selection inside is traded for the full
   click area — expected for a card-as-a-link.) */
.card--linked {
	position: relative;
}

.card--linked :is(.card-img-link, .card-title a, .card-cta)::after {
	content: "";
	position: absolute;
	inset: 0;
}

/* media-only card (image, no body): show the image at its natural ratio with all
   four corners rounded, and don't stretch to a taller sibling (which would leave
   an un-rounded strip of card below the image). */
.card--media {
	align-self: start;
}

/* no placeholder gradient here — image-only cards are usually transparent logos
   or graphics, and the navy fill would show through and box them in. Let the
   card/band behind show instead. (Photo cards keep the gradient as a loading/
   fallback backdrop.) */
.card--media .card-img {
	aspect-ratio: auto;
	height: auto;
	background: none;
}

/* portrait section token (Custom Class "portrait") — for rows of people: the
   default 16:9 crop slices a headshot through the face, so crop to 4:5 and
   anchor to the top to keep heads in frame. Also works on a single card. */
.portrait .card-img,
.card--portrait .card-img {
	aspect-ratio: 4/5;
	-o-object-position: top;
	   object-position: top;
}

/* rows of people get equal columns: in a section that wraps, the short last
   row keeps the card width instead of stretching two photos across the band;
   a section with a single row still fills it (auto-fit collapses empty tracks) */
.portrait .grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr));
}

/* with `compact`: at most four columns (each at least 200px), so a row of
   four fits at laptop widths, and a short row (2 or 3 people) keeps the same
   card width instead of stretching across the band (/chhs/publichealth/faculty/) */
.portrait.compact .grid {
	grid-template-columns: repeat(auto-fill, minmax(min(100%, max(200px, (100% - 3 * var(--space-5)) / 4)), 1fr));
}

/* natural section token (Custom Class "natural") — each card image at its own
   shape, uncropped: for a row of square (or otherwise matching) photos that a
   16:9 strip would slice through the heads (/cas/math/ "Why Study Math") */
.natural .card-img {
	aspect-ratio: auto;
}

/* faces section token (Custom Class "faces") — tall photos of people in a row
   of wide cards (/cas/agriculture/): a 16:9 slice through the middle of a
   portrait photo cuts off the heads, so crop 4:3 and keep the upper part */
.faces .card-img {
	aspect-ratio: 4/3;
	-o-object-position: 50% 15%;
	   object-position: 50% 15%;
}

/* plain variant — no fill (e.g. on a colored band). overflow:visible because the
   card has no fill/border to clip, the image rounds itself, and the rounded-corner
   clip was cutting descenders (the "g") off a caption sitting flush to the bottom. */
.card--plain {
	background: transparent;
	box-shadow: none;
	border: 0;
	overflow: visible;
}

.card--plain:hover {
	transform: none;
	box-shadow: none;
	border: 0;
}

/* on a plain card (no fill / no outline) the image is a standalone tile — round
   ALL four corners (the card's clip only rounds the top, since the body sits
   below), and pull the caption flush-left under it with tight top padding. */
/* child combinators: a .card authored INSIDE a plain card's rich text (a nested
   grid of cards) keeps its own padding and image corners. */
.card--plain > .card-img, .card--plain > .card-img-link .card-img {
	border-radius: var(--radius-lg);
}

/* a .card-img authored in the rich text (image placed above a title in the
   content, e.g. /undergrad) is a standalone tile too — round it the same way. */
.card-text .card-img {
	border-radius: var(--radius-lg);
}

.card--plain > .card-body {
	padding: var(--space-3) 0 0;
}

/* plain cards sit directly on the band, so their text follows the band tokens */
.card--plain .card-title {
	color: var(--band-heading, var(--au-navy));
}

.card--plain .card-text {
	color: var(--band-body, var(--au-warm-gray));
}

/* headings authored inside the rich-text content follow the band too — otherwise
   an <h2> in a plain card stays navy and disappears on a dark band. */
.card--plain .card-text :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* `plain` section token (Custom Class): every card in the section drops its
   chrome and reads as text on the band -- for intro / statement rows built as
   one text-only columns card, which otherwise sit in a bordered box. Same look
   as each card's own "transparent" switch, set once for the section. */
.section.plain .grid > .card {
	background: transparent;
	box-shadow: none;
	border: 0;
	overflow: visible;
}

.section.plain .grid > .card:hover {
	transform: none;
	box-shadow: none;
	border: 0;
}

.section.plain .grid > .card > .card-body {
	padding: 0;
}

.section.plain .grid > .card .card-text {
	color: var(--band-body, var(--au-warm-gray));
}

/* ─── byline: a small round portrait + name/title under authored text
   (e.g. a dean's message). <div class="byline"><img …><p><strong>Name</strong><br>Title</p></div> */
.byline {
	display: flex;
	align-items: center;
	gap: var(--space-4);
	margin-top: var(--space-5);
}

.byline img {
	width: 88px;
	height: 88px;
	flex: none;
	-o-object-fit: cover;
	   object-fit: cover;
	-o-object-position: top;
	   object-position: top;
	border-radius: 50%;
}

.card-text .byline p {
	margin: 0;
}

/* ─── logo-tile: one sponsor/partner per columns card — a logo (optionally linked)
   or, when there's no logo, the name — centered in a box of even height so a row
   of mixed logos lines up. <div class="logo-tile"><a href…><img …></a></div> */
.logo-tile {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 120px;
	padding: var(--space-4);
	text-align: center;
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--au-navy);
}

.logo-tile img {
	max-height: 96px;
	width: auto;
	max-width: 100%;
	-o-object-fit: contain;
	   object-fit: contain;
}

.logo-tile a {
	display: inline-flex;
}

/* a row of logos authored in one rich-text area (/cas/stem/invent/ sponsors):
   <div class="logo-grid"><div class="logo-tile"><img …></div>…</div> — equal
   columns that fit five across, each logo framed in a light tile */
.logo-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 150px), 1fr));
	gap: var(--space-4);
}

.logo-grid > .logo-tile {
	min-height: 128px;
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-lg);
}

.logo-grid > .logo-tile img {
	max-height: 80px;
}

/* ════════════════════════════════════════════════════════════
   feature.css  ·  full-bleed feature blocks — page hero + cover band
   Depends on: tokens.css, layout.css (.section / .section-inner)
   ════════════════════════════════════════════════════════════ */
/* ─── HERO — page-top banner (image or background video) ─── */
.hero {
	position: relative;
	/* was 70vh — grew unbounded on tall desktops. Cap it: a sensible floor, a
	   modest viewport-relative preference, and a ceiling so big screens don't get
	   a huge band of empty image. Content still expands it if it needs to. */
	min-height: clamp(320px, 46vh, 460px);
	display: flex;
	align-items: flex-end;
	background: var(--au-navy-deep) center/cover no-repeat;
	background-image: var(--hero-img, none);
	color: var(--au-white);
	overflow: hidden;
}

/* hero.tt / photo-wide.tt set --hero-img (/i/large, 1200px, the photo's own
   shape) and --hero-img-wide (/i/homepage-hero, 2400x960 5:2 centre crop --
   sharper AND a smaller file). Past phone width the band is about 5:2 or wider,
   so the centre crop shows what cover-cropping would anyway. A top/bottom
   hero_crop keeps the full photo, since that preset always crops the centre. */
@media (min-width: 761px) {
	.hero:not(.hero--crop-top):not(.hero--crop-bottom),
	.section.section--cover { /* doubled: .section--cover's own rule comes later */
		background-image: var(--hero-img-wide, var(--hero-img, none));
	}
}
.hero::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(transparent 20%, rgba(0, 26, 51, 0.75) 70%, rgba(0, 26, 51, 0.9));
}

.hero-inner {
	position: relative;
	z-index: 2;
	width: 100%;
	max-width: var(--max-width);
	margin-inline: auto;
	padding: var(--space-12) var(--gutter);
}

.hero-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-3xl), 6vw, var(--text-4xl));
	color: var(--au-white);
	line-height: 1.1;
	max-width: 18ch;
	text-shadow: 0 2px 12px rgba(0, 20, 40, 0.6);
}

.hero-caption {
	margin-top: var(--space-5);
	max-width: var(--max-width-text);
	font-size: var(--text-md);
	color: rgba(255, 255, 255, 0.8);
	line-height: 1.7;
}

/* links in the caption read light on the photo (the base link navy disappears) */
.hero-caption a {
	color: var(--au-gold-light);
}

.hero-contact {
	margin-top: var(--space-4);
	font-size: var(--text-sm);
	color: rgba(255, 255, 255, 0.7);
}

.hero-contact a {
	color: var(--au-gold-light);
}

/* ─── HERO ABOVE — shorter banner for interior pages with sidebar below ─── */
.hero--above {
	min-height: clamp(200px, 30vh, 340px);
}

.hero--above .hero-title {
	font-size: clamp(var(--text-2xl), 5vw, var(--text-3xl));
}

/* ─── HERO GRAPHIC — campaign art that carries its own headline ───
   props.style.hero = "graphic". The band takes the art's 5:2 proportions so
   cover-cropping can't cut the lettering, drops the darkening gradient, and
   keeps the page <h1> for screen readers/SEO but visually hidden so it can't
   collide with the words baked into the image. */
.hero--graphic {
	min-height: 0;
	aspect-ratio: 5/2;
}

.hero--graphic::after,
.hero--bare::after {
	display: none;
}

.hero--graphic .hero-inner {
	padding: 0;
}

/* hero--bare (set by hero.tt): nothing is written over the photo, so it loses the
   gradient too and its title is screen-reader only, at the band's usual height */
.hero--graphic .hero-title,
.hero--bare .hero-title {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
}

/* ─── HERO RATIO — the whole photo, at the legacy homepage hero's 5:2 ───
   props.style.hero = "ratio". Like "graphic" the band takes the image's 5:2
   proportions instead of a fixed height, so a 2400x960 hero is never
   cover-cropped (no cut-off heads), but the title, caption and darkening
   gradient stay. On phones it falls back to the default height so the title
   still fits over the image. */
.hero--ratio {
	min-height: 0;
	aspect-ratio: 5/2;
}

.hero--ratio .hero-inner {
	padding-block: var(--space-6);
}

@media (max-width: 640px) {
	.hero--ratio {
		aspect-ratio: auto;
		min-height: 260px;
	}
}
/* ─── HERO CROP — props.style.hero_crop = "top": keep the upper part of the
   photo. Separate from props.style.hero so it combines with "ratio" (a 3:2
   photo in the 5:2 band, people high in the frame; /cas/agriculture/agcenter/) */
.hero--crop-top {
	background-position: center 15%;
}

/* "bottom": people low in the frame (a group photo standing in front of a
   building; /chhs/nursing/apply/) */
.hero--crop-bottom {
	background-position: center 80%;
}

/* ─── HERO SPLIT — text left, photo card right, solid navy ─── */
.hero--split {
	background-image: none !important;
	min-height: auto;
}

.hero--split::after {
	display: none;
}

.hero--split .hero-inner {
	display: grid;
	grid-template-columns: 1fr 1fr;
	align-items: center;
	gap: var(--space-10);
}

.hero--split .hero-title {
	text-shadow: none;
}

.hero--split .hero-media img {
	width: 100%;
	aspect-ratio: 4/3;
	-o-object-fit: cover;
	   object-fit: cover;
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-lg);
}

@media (max-width: 760px) {
	.hero--split .hero-inner {
		grid-template-columns: 1fr;
		gap: var(--space-6);
	}
	.hero--split .hero-media {
		order: -1;
	}
	.hero--split .hero-media img {
		aspect-ratio: 16/9;
	}
}
/* ─── COVER — full-bleed photo/video band with a content panel ─── */
.section--cover {
	position: relative;
	display: flex;
	align-items: center;
	min-height: 60vh;
	padding-block: var(--space-12);
	background: var(--au-navy) center/cover no-repeat;
	background-image: var(--hero-img, none);
	color: var(--au-white);
	overflow: hidden;
}

.section--cover::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(90deg, rgba(0, 26, 51, 0.8), rgba(0, 26, 51, 0.2));
}

/* No content panel → no overlay; let the photo show unobscured. */
.section--cover:not(:has(.cover-panel))::after {
	display: none;
}

/* width:100% stops the flex band from collapsing .section-inner down to the
   panel's width (which is what centres it) — instead it fills the content column
   (max-width, centred), giving the panel room to shift left/right within it and
   aligning those edges with the rest of the page. */
.section--cover > .section-inner {
	position: relative;
	z-index: 2;
	width: 100%;
}

.cover-panel {
	max-width: 540px;
	margin-inline: auto;
}

.cover-panel :is(h1, h2, h3, h4, h5, h6) {
	color: var(--au-white);
}

/* content links on the cover's dark ground — light gold, no default underline
   (the navy + underline default is unreadable on the image). This is the happy
   default, so authors don't need to hand-color every link. */
.cover-panel a {
	color: var(--au-gold-light);
	text-decoration: none;
}

.cover-panel a:hover {
	text-decoration: underline;
}

.cover-panel .card-cta {
	display: inline-block;
	margin-top: var(--space-4);
}

/* ── Feature-link pattern: <a><strong>Heading</strong><em>Sub-CTA</em></a>
   Works in both the hero caption (.hero-caption) and the cover panel (.cover-panel).
   Styled to match the homepage feature link: dark navy box, serif headline, white sub-line.
   Authors use Bold + Italic in CKEditor and wrap both in a link. */
.hero-caption a:has(> strong),
.cover-panel a:has(> strong) {
	display: inline-block;
	background: rgba(0, 26, 51, 0.82);
	border-left: 3px solid var(--au-gold);
	padding: var(--space-4) var(--space-6);
	color: var(--au-white);
	text-decoration: none;
}

.hero-caption a:has(> strong) > strong,
.cover-panel a:has(> strong) > strong {
	display: block;
	font-family: var(--font-serif);
	font-size: var(--text-xl);
	font-weight: 700;
	line-height: 1.2;
	color: var(--au-white);
}

.hero-caption a:has(> strong) > span,
.hero-caption a:has(> strong) > em,
.cover-panel a:has(> strong) > span,
.cover-panel a:has(> strong) > em {
	display: block;
	margin-top: var(--space-1);
	font-size: var(--text-md);
	font-style: normal;
	color: var(--au-white);
}

.hero-caption a:has(> strong):hover,
.cover-panel a:has(> strong):hover {
	text-decoration: none;
}

.hero-caption a:has(> strong):hover > strong,
.cover-panel a:has(> strong):hover > strong {
	color: var(--au-gold-light);
}

.hero-caption a:has(> strong):hover > span,
.hero-caption a:has(> strong):hover > em,
.cover-panel a:has(> strong):hover > span,
.cover-panel a:has(> strong):hover > em {
	text-decoration: underline;
}

/* CKEditor inserts a <br> between the <strong> and <em>; suppress it since
   both are already display:block. */
.hero-caption a:has(> strong) > br,
.cover-panel a:has(> strong) > br {
	display: none;
}

/* ─── cover overlay alignment ───
   The panel is CENTERED by default. Drop a token into the section's Custom Class
   to shift it to the page's content-column edge; the gradient's dark side follows
   so the overlay text stays legible over it:
     cover-left   → panel on the LEFT  (gradient already darkens the left)
     cover-right  → panel on the RIGHT (gradient flips to darken the right)
   Panel width, vertical centering and text-alignment are unchanged — only the
   horizontal placement (and, for the right, the gradient direction) switch. */
.section--cover.cover-left .cover-panel {
	margin-inline: 0 auto;
}

.section--cover.cover-right .cover-panel {
	margin-inline: auto 0;
}

.section--cover.cover-right::after {
	background: linear-gradient(270deg, rgba(0, 26, 51, 0.8), rgba(0, 26, 51, 0.2));
}

/* cover-title (Custom Class): a photo band that carries one short headline --
   the legacy "creative-text" title bands (/cas/vacd/ "Student Work"). Shorter
   band, an even wash instead of the side gradient, big centred serif title. */
.section--cover.cover-title {
	min-height: 40vh;
}

.section--cover.cover-title::after {
	background: rgba(0, 26, 51, 0.4);
}

.section--cover.cover-title .cover-panel {
	max-width: none;
	text-align: center;
	font-family: var(--font-display);
	font-size: clamp(2.25rem, 6vw, 4.5rem);
	line-height: 1.1;
}

.section--cover.cover-title .cover-panel strong {
	font-weight: 600;
}

/* ─── cover gradient backgrounds ─────────────────────────────
   Drop a gradient token into Custom Class to give the cover a rich
   background without needing a photo. If the author ALSO uploads a
   photo, the inline background-image overrides the CSS gradient
   naturally — no !important, no renderer change.
     cover-navy    → deep diagonal navy sweep (brand default)
     cover-ocean   → navy-to-teal, cooler and more dynamic
     cover-forest  → deep green
     cover-gold    → navy-to-gold, warm and inviting
     cover-earth   → navy-to-brown, grounded
     cover-sunset  → navy-to-orange, bold and energetic
   The scrim overlay is suppressed for gradient covers — the gradient
   itself provides enough contrast for white text. */
.section--cover.cover-navy,
.section--cover.cover-ocean,
.section--cover.cover-forest,
.section--cover.cover-gold,
.section--cover.cover-earth,
.section--cover.cover-sunset {
	background-color: var(--au-navy-deep);
}

.section--cover.cover-navy::after,
.section--cover.cover-ocean::after,
.section--cover.cover-forest::after,
.section--cover.cover-gold::after,
.section--cover.cover-earth::after,
.section--cover.cover-sunset::after {
	background: none;
}

.section--cover.cover-navy {
	background-image: linear-gradient(135deg, #001a33 0%, #003366 50%, #004a6e 100%);
}

.section--cover.cover-ocean {
	background-image: linear-gradient(135deg, #001a33 0%, #0a3d62 40%, #1e5f74 100%);
}

.section--cover.cover-forest {
	background-image: linear-gradient(135deg, #0a1f15 0%, #1b4332 50%, #2d6a4f 100%);
}

.section--cover.cover-gold {
	background-image: linear-gradient(135deg, #001a33 0%, #003366 40%, #C6952B 100%);
}

.section--cover.cover-earth {
	background-image: linear-gradient(135deg, #001a33 0%, #4a3728 50%, #8B4513 100%);
}

.section--cover.cover-sunset {
	background-image: linear-gradient(135deg, #001a33 0%, #003366 35%, #c45e1a 100%);
}

/* ─── COVER HERO SPLIT — angled hero with floating links card ────
   Token: "cover-hero-split" in the section's Custom Class field.
   Turns a photo_wide cover into a full-bleed hero with a diagonal-
   edged navy text panel on the left (badge overflows into the photo)
   and a floating rounded navy links card on the right. The background
   image fills the entire section; the diagonal is a clipped ::before
   on .cover-text so content (especially the badge) can overflow it.
   Stacks on mobile with the text overlaying the photo. */
/* --- section overrides --- */
.cover-hero-split.section--cover {
	padding: 0;
	min-height: auto;
	align-items: stretch;
}

.cover-hero-split.section--cover::after {
	display: none;
}

.cover-hero-split > .section-inner {
	max-width: none;
	padding: 0;
}

/* --- grid --- */
.cover-hero-split .cover-panel {
	max-width: none;
	display: grid;
	grid-template-columns: 1fr 1fr;
	align-items: stretch;
	min-height: 420px;
}

/* --- left panel: angled light background via ::before --- */
.cover-hero-split .cover-text {
	position: relative;
	padding: var(--space-10) 16% var(--space-10) clamp(var(--space-8), 5vw, var(--space-16));
	display: flex;
	flex-direction: column;
	justify-content: center;
	color: var(--au-navy-deep);
	z-index: 2;
}

.cover-hero-split .cover-text::before {
	content: "";
	position: absolute;
	inset: 0;
	background: var(--au-cream);
	clip-path: polygon(0 0, 100% 0, 82% 100%, 0 100%);
	z-index: -1;
}

/* --- right panel: floating card --- */
.cover-hero-split .cover-links {
	align-self: center;
	justify-self: end;
	background: rgba(0, 20, 46, 0.92);
	border-radius: 6px;
	padding: var(--space-8) var(--space-6);
	max-width: 380px;
	margin: var(--space-6) clamp(var(--space-6), 3vw, var(--space-12));
	color: var(--au-white);
	z-index: 2;
}

/* --- eyebrow --- */
.cover-hero-split .cover-hero-eyebrow {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--au-navy);
	margin-bottom: var(--space-5);
}

.cover-hero-split .cover-hero-eyebrow::before {
	content: "";
	display: block;
	width: 48px;
	height: 3px;
	background: var(--au-gold);
	margin-bottom: var(--space-3);
}

/* --- heading + badge row --- */
.cover-hero-split .cover-hero-heading {
	display: flex;
	align-items: center;
	gap: var(--space-5);
}

.cover-hero-split .cover-hero-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 3.5vw, 3.5rem);
	color: var(--au-navy-deep);
	line-height: 1.1;
	margin: 0;
}

.cover-hero-split .cover-hero-subtitle {
	font-size: var(--text-xs);
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--au-navy);
	margin-top: var(--space-2);
}

.cover-hero-split .cover-hero-badge {
	width: clamp(100px, 12vw, 170px);
	height: auto;
	flex-shrink: 0;
}

/* --- tagline --- */
.cover-hero-split .cover-hero-tagline {
	font-family: var(--font-serif);
	font-size: var(--text-lg);
	font-style: italic;
	color: var(--au-warm-gray);
	line-height: 1.6;
	margin-top: var(--space-5);
}

/* --- links card content --- */
.cover-hero-split .cover-links h2 {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-white);
	margin-bottom: var(--space-5);
	padding-bottom: var(--space-3);
	border-bottom: 2px solid var(--au-gold);
}

.cover-hero-split .cover-hero-nav {
	list-style: none;
	padding: 0;
	margin: 0;
}

.cover-hero-split .cover-hero-nav li + li {
	border-top: 1px solid rgba(255, 255, 255, 0.12);
}

.cover-hero-split .cover-hero-nav a {
	display: flex;
	align-items: center;
	padding: var(--space-3) var(--space-2);
	color: var(--au-white);
	text-decoration: none;
	font-size: var(--text-sm);
	transition: background 0.2s;
}

.cover-hero-split .cover-hero-nav a:hover {
	background: rgba(255, 255, 255, 0.06);
	text-decoration: none;
}

.cover-hero-split .cover-hero-nav a::before {
	content: "";
	width: 7px;
	height: 7px;
	border-right: 2px solid var(--au-gold);
	border-top: 2px solid var(--au-gold);
	transform: rotate(45deg);
	flex-shrink: 0;
	margin-right: var(--space-3);
}

/* --- tablet --- */
@media (max-width: 980px) {
	.cover-hero-split .cover-panel {
		min-height: 360px;
	}
	.cover-hero-split .cover-text {
		padding-right: 20%;
	}
	.cover-hero-split .cover-text::before {
		clip-path: polygon(0 0, 100% 0, 85% 100%, 0 100%);
	}
	.cover-hero-split .cover-links {
		max-width: 320px;
		padding: var(--space-6) var(--space-5);
	}
	.cover-hero-split .cover-hero-badge {
		width: clamp(80px, 10vw, 120px);
	}
}
/* --- mobile: text over photo, angled reveal, links below --- */
@media (max-width: 760px) {
	.cover-hero-split .cover-panel {
		grid-template-columns: 1fr;
		min-height: auto;
	}
	.cover-hero-split .cover-text {
		padding: var(--space-8) var(--gutter) var(--space-16) var(--gutter);
	}
	.cover-hero-split .cover-text::before {
		background: rgba(255, 253, 247, 0.94);
		clip-path: polygon(0 0, 100% 0, 100% 82%, 0 100%);
	}
	.cover-hero-split .cover-links {
		max-width: none;
		margin: 0;
		margin-top: var(--space-10);
		border-radius: 0;
		justify-self: stretch;
		align-self: stretch;
		padding: var(--space-8) var(--gutter);
	}
	.cover-hero-split .cover-hero-heading {
		gap: var(--space-4);
	}
	.cover-hero-split .cover-hero-badge {
		width: 90px;
	}
}
/* shared full-bleed background video (hero + cover) */
.feature-video {
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
}

.feature-video iframe {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 177.78vh;
	min-width: 100%;
	height: 56.25vw;
	min-height: 100%;
	border: 0;
}

/* ─── optional hero extras (var-gated in components/hero.tt) ───
   Used by the department template: a gold eyebrow above the title and a
   CTA pair below the lead. Absent on pages that don't set them, so the
   main-site hero is unchanged. */
.hero-eye {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: var(--au-gold);
	font-weight: 600;
	margin-bottom: var(--space-3);
}

.hero-ctas {
	display: flex;
	gap: var(--space-4);
	flex-wrap: wrap;
	margin-top: var(--space-8);
}

/* Ghost button on the hero's dark ground — the demo's refined treatment:
   quiet by default (translucent border, dimmed text), and on hover it lifts
   with a faint fill and a full gold outline. Scoped to .hero-ctas so it
   overrides the light-ground base .btn-ghost (gold text) without touching it
   elsewhere. */
.hero-ctas .btn-ghost {
	background: transparent;
	color: rgba(255, 255, 255, 0.75);
	border-color: rgba(255, 255, 255, 0.3);
}

.hero-ctas .btn-ghost:hover {
	background: rgba(255, 255, 255, 0.08);
	border-color: var(--au-gold);
	color: var(--au-white);
}

/* ════════════════════════════════════════════════════════════
   page.css  ·  interior page layout — side nav + content
   Depends on: tokens.css (and chrome.css for .nav-tree styling)
   Used by department content pages: a sticky side-nav column beside
   the main CKEditor body. Stacks to one column on narrow screens.
   ════════════════════════════════════════════════════════════ */
.page-layout {
	max-width: var(--max-width);
	margin-inline: auto;
	padding: var(--space-10) var(--gutter);
	display: grid;
	grid-template-columns: 240px minmax(0, 1fr);
	gap: var(--space-10);
	align-items: start;
}

/* Sticky under the header, but capped to the viewport so a tall menu scrolls
   inside itself instead of hiding its lower items below the fold (a sticky box
   doesn't scroll on its own — without this cap you'd have to scroll the whole
   page to reach the bottom links). */
.page-sidebar {
	position: sticky;
	top: calc(var(--header-height) + var(--space-3));
	max-height: calc(100vh - var(--header-height) - var(--space-6));
	overflow-y: auto;
	overscroll-behavior: contain;
	/* hidden until hover so a tall nav doesn't show a scrollbar on load */
	scrollbar-width: none; /* Firefox */
	scrollbar-color: var(--au-gray-300) transparent;
}

.page-sidebar:hover {
	scrollbar-width: thin;
}

.page-sidebar::-webkit-scrollbar {
	width: 0;
}

.page-sidebar:hover::-webkit-scrollbar {
	width: 6px;
}

.page-sidebar::-webkit-scrollbar-track {
	background: transparent;
}

.page-sidebar::-webkit-scrollbar-thumb {
	background: var(--au-gray-300);
	border-radius: 3px;
}

.page-sidebar::-webkit-scrollbar-thumb:hover {
	background: var(--au-gray-400);
}

/* optional "« Parent unit" link above the dept name (sidebar_backlink hook) */
.sidebar-back {
	display: block;
	padding: 0 var(--space-3) var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	text-decoration: none;
}

.sidebar-back:hover,
.sidebar-back:focus-visible {
	color: var(--au-navy);
	text-decoration: underline;
}

/* optional button row under the hero on full-width pages (au_main.wrap page_links hook) */
.page-links {
	padding: var(--space-6) var(--gutter) 0;
}

.page-links-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2) var(--space-3);
}

.page-dept {
	font-family: var(--font-display);
	font-size: var(--text-md);
	color: var(--au-navy);
	font-weight: 600;
	line-height: 1.3;
	padding: 0 var(--space-3) var(--space-4);
	margin-bottom: var(--space-3);
	border-bottom: 1px solid var(--au-gray-200);
}

/* ─── page content rhythm (the column holds raw CKEditor body) ─── */
.page-main {
	min-width: 0;
}

/* page title — a short gold accent rule marks it as the page header */
.page-main h1 {
	font-size: var(--text-4xl);
	line-height: 1.1;
	position: relative;
	padding-bottom: var(--space-4);
	margin-bottom: var(--space-5);
}

.page-main h1::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: 0;
	width: 2.5rem;
	height: 3px;
	background: var(--au-gold);
	border-radius: 2px;
}

/* content headings — stepped down one level from the display scale so they
   read as inline section dividers, not banner-sized titles */
.page-main h2 {
	font-size: var(--text-2xl);
	margin-top: var(--space-10);
}

.page-main h3 {
	font-size: var(--text-xl);
	margin-top: var(--space-8);
}

.page-main h4 {
	font-size: var(--text-lg);
	margin-top: var(--space-6);
}

.page-main h5, .page-main h6 {
	margin-top: var(--space-6);
}

.page-main p, .page-main ul, .page-main ol, .page-main table, .page-main blockquote, .page-main figure, .page-main pre {
	margin-top: var(--space-4);
}

/* Two separate concerns, don't conflate them:
   · the GRID is a self-contained block, so it takes its top gap from the rule
     above like an accordion or a callout does — that is what separates it from
     the paragraph/image/title before it;
   · a grid CELL starts its own column, so whatever leads a cell must sit flush
     at its top. Without this an <h2> drags its 64px page-section margin into
     the cell and drops the heading far below the top of its column.
   Getting only the second half right is what made the headings collide with the
   image above them on a contact page with text_position "above". */
.page-main .grid > * > :first-child {
	margin-top: 0;
}

/* the lead line right under the title reads as a subtitle — keep it close */
.page-main h1 + h2 {
	margin-top: var(--space-5);
	color: var(--au-navy-light);
}

/* a heading targeted by an in-page anchor (e.g. an "on this page" jump-nav)
   clears the sticky header when scrolled to, instead of hiding under it. */
.page-main :is(h1, h2, h3, h4, h5, h6)[id] {
	scroll-margin-top: calc(var(--header-height) + var(--space-4));
}

/* self-contained blocks that sit in the body copy but aren't in the base rhythm
   list — give them the same top gap after a heading/paragraph. */
.page-main .accordion, .page-main .callout, .page-main .cta-callout, .page-main .table-wrap, .page-main .grid, .page-main .video {
	margin-top: var(--space-5);
}

/* first element in the column never adds a top gap (title or feature image) */
.page-main > :first-child, .page-feature + * {
	margin-top: 0;
}

/* self-contained components (cards) manage their own internal spacing via
   .card-body's gap — exempt their children from the page-content rhythm so a
   .card-title (h2) or .card-text (p) doesn't inherit the big section margins */
.page-main .card-body > * {
	margin-top: 0;
}

/* an authored h2/h3.card-title keeps the card scale, not the .page-main heading scale */
.page-main .card-title {
	font-size: var(--text-lg);
}

.page-main .sidenote > :first-child {
	margin-top: 0;
}

/* page feature image (the `pageimage` field) — sits above the content */
.page-feature {
	width: 100%;
	height: auto;
	border-radius: var(--radius-lg);
	margin-bottom: var(--space-8);
}

/* inline carousel in page body — shorter than the base 3/2 default */
.page-main > .carousel {
	aspect-ratio: 16/9;
	margin-bottom: var(--space-8);
}

.page-feature-wrap {
	position: relative;
	border-radius: var(--radius-lg);
	overflow: hidden;
	margin-bottom: var(--space-8);
}

.page-feature-wrap .page-feature {
	margin-bottom: 0;
	border-radius: 0;
}

.page-feature-caption {
	position: absolute;
	bottom: 0;
	left: 0;
	right: 0;
	padding: var(--space-4) var(--space-5);
	background: linear-gradient(transparent, rgba(0, 31, 63, 0.85));
	color: var(--au-white);
	display: flex;
	align-items: baseline;
	gap: var(--space-3);
	flex-wrap: wrap;
}

.page-feature-caption strong {
	font-family: var(--font-display);
	font-size: var(--text-md);
	font-weight: 600;
}

.page-feature-caption span {
	font-size: var(--text-sm);
	opacity: 0.85;
}

[data-dialog-open].page-feature-wrap {
	cursor: pointer;
}

[data-dialog-open].page-feature-wrap:hover .page-feature-caption {
	background: linear-gradient(transparent, rgba(0, 31, 63, 0.95));
}

/* page-feature-top — carousel or hero image above the sidebar grid,
   constrained to the content max-width (not full-bleed). */
.page-feature-top {
	max-width: var(--max-width);
	margin-inline: auto;
	padding: var(--space-6) var(--gutter) 0;
}

.page-feature-top .carousel-feature {
	border-radius: var(--radius-lg);
	aspect-ratio: 16/9;
}

.page-feature-top .carousel-feature .carousel-slide img {
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.page-feature-banner {
	width: 100%;
	display: block;
	border-radius: var(--radius-lg);
	-o-object-fit: cover;
	   object-fit: cover;
	aspect-ratio: 16/9;
}

/* ─── content-advanced: sections inside the content column ───
   When content_advanced.dt renders sections in .page-main the full-bleed
   section bands live inside the content column — backgrounds span the
   column width, .section-inner handles inner padding. Vertical padding is
   tightened from the full-width --space-12 (80px) to --space-8 (40px) so
   the bands don't overwhelm the narrower column. */
.page-main > .carousel {
	margin-bottom: var(--space-6);
}

.page-main > .section {
	padding-block: var(--space-8);
	padding-inline: 0;
}

.page-main > .section .section-inner {
	max-width: none;
}

.page-main > .section--flush-top {
	padding-top: var(--space-4);
}

.page-main > .section--flush-bottom {
	padding-bottom: var(--space-4);
}

.page-main > .section:first-child,
.page-main > .carousel + .section,
.page-main > .page-feature + .section,
.page-main > h1 + .section {
	padding-top: 0;
}

.page-main > .section:last-child {
	padding-bottom: var(--space-6);
}

/* ─── breadcrumb-dropdown nav (solo layout; chrome/crumbs.tt · js/crumbs.js) ─── */
.crumbs {
	margin-bottom: var(--space-8);
}

.crumbs-list {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	list-style: none;
	margin: 0;
	padding: 0;
	font-size: var(--text-sm);
}

.crumb {
	position: relative;
}

.crumb + .crumb::before {
	content: "›";
	color: var(--au-gray-400);
	margin: 0 var(--space-2);
}

.crumb-link {
	background: none;
	border: 0;
	cursor: pointer;
	font: inherit;
	color: var(--au-navy-light);
	padding: 0;
	text-decoration: none;
}

.crumb-link:hover {
	color: var(--au-gold);
}

.crumb-link[aria-expanded=true] {
	color: var(--au-navy);
	font-weight: 600;
}

.crumb.is-current > .crumb-link, .crumb-static {
	color: var(--au-warm-gray);
}

.crumb-x {
	display: none;
	margin-left: var(--space-2);
	color: var(--au-gray-400);
	font-weight: 400;
}

.crumb-link[aria-expanded=true] .crumb-x {
	display: inline;
}

/* the dropdown */
.crumb-menu {
	position: absolute;
	top: 100%;
	left: 0;
	min-width: 220px;
	list-style: none;
	margin: var(--space-2) 0 0;
	padding: var(--space-2);
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-top: 3px solid var(--au-gold);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-lg);
	opacity: 0;
	visibility: hidden;
	transform: translateY(-6px);
	transition: opacity var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), visibility var(--duration-base);
	z-index: 50;
}

.crumb.open > .crumb-menu {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}

.crumb-menu li {
	margin: 0;
}

.crumb-menu li + li {
	margin-top: 0;
}

.crumb-menu a {
	display: block;
	padding: var(--space-2) var(--space-3);
	color: var(--au-text);
	text-decoration: none;
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
	white-space: nowrap;
}

.crumb-menu a:hover {
	background: var(--au-cream);
	color: var(--au-navy);
}

.crumb-menu a.is-onpath {
	color: var(--au-navy);
	font-weight: 600;
}

.crumb-menu a[aria-current=page] {
	color: var(--au-navy);
	font-weight: 600;
	background: var(--au-gold-pale);
}

.crumb-menu .crumb-self {
	margin-bottom: var(--space-1);
	padding-bottom: var(--space-1);
	border-bottom: 1px solid var(--au-gray-200);
}

/* no-sidebar variant (sidenav == "off") — breadcrumb sits at the top, so it
   needs less headroom than the sidebar layout */
.page-layout--solo {
	grid-template-columns: minmax(0, 1fr);
	max-width: var(--max-width-narrow);
	padding-top: var(--space-5);
}

/* page_wide = 1 (set by a folder wrapper): a solo page at full site width, for
   multi-column directory pages like /academics/ */
.page-layout--wide {
	max-width: var(--max-width);
}

/* sidebar calls-to-action (academics-default) */
.sidebar-cta {
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	margin-top: var(--space-6);
}

.sidebar-cta .btn {
	width: 100%;
	justify-content: flex-start;
	padding: var(--space-2) var(--space-3);
	font-size: var(--text-xs);
	letter-spacing: 1px;
	border: 0;
	background: var(--au-gray-100);
	color: var(--au-navy);
}

.sidebar-cta .btn:hover {
	background: var(--au-gray-200);
	color: var(--au-navy);
	transform: none;
	box-shadow: none;
}

.sidebar-cta .btn i {
	width: 1.25rem;
	text-align: center;
	color: var(--au-gray-400);
	font-size: var(--text-sm);
}

.sidebar-cta .btn-primary {
	background: var(--au-gold-pale);
	color: var(--au-navy);
}

.sidebar-cta .btn-primary:hover {
	background: var(--au-gold-light);
	color: var(--au-navy);
	box-shadow: none;
}

.sidebar-cta .btn-primary i {
	color: var(--au-gold);
}

/* sidebar link lists (interior.wrap `sidebar_links`) */
.sidebar-links {
	margin-top: var(--space-6);
}

.sidebar-links-title {
	margin: 0 0 var(--space-2);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--au-gold);
}

.sidebar-links ul {
	list-style: none;
	margin: 0;
	padding: 0;
	border-left: 2px solid var(--au-gray-200);
}

.sidebar-links a {
	display: block;
	padding: 5px var(--space-3);
	font-size: var(--text-sm);
	line-height: 1.35;
	color: var(--au-navy);
	text-decoration: none;
}

.sidebar-links a:hover {
	color: var(--au-navy-light);
	background: var(--au-gray-100);
}

.sidebar-cta .btn-primary:hover i {
	color: var(--au-navy);
}

/* ─── mobile section-nav disclosure ───
   Desktop: the toggle is hidden and the tree shows as a normal sticky column.
   Mobile: the whole menu collapses behind the toggle so content leads. */
.sidebar-toggle {
	display: none;
}

@media (max-width: 820px) {
	.page-layout {
		grid-template-columns: 1fr;
		gap: var(--space-6);
		padding-block: var(--space-8);
	}
	.page-sidebar {
		position: static;
		max-height: none;
		overflow: visible;
	}
	.sidebar-toggle {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: var(--space-3);
		width: 100%;
		padding: var(--space-3) var(--space-4);
		background: var(--au-cream);
		border: 1px solid var(--au-gray-200);
		border-radius: var(--radius-md);
		font-size: var(--text-base);
		font-weight: 600;
		color: var(--au-navy);
		cursor: pointer;
	}
	.sidebar-caret {
		width: 9px;
		height: 9px;
		flex-shrink: 0;
		border-right: 2px solid currentColor;
		border-bottom: 2px solid currentColor;
		transform: rotate(45deg);
		transition: transform var(--duration-base) var(--ease-out);
	}
	.sidebar-toggle[aria-expanded=true] .sidebar-caret {
		transform: rotate(-135deg);
	}
	.sidebar-nav {
		display: none;
		margin-top: var(--space-3);
	}
	.page-sidebar.open .sidebar-nav {
		display: block;
	}
	.page-sidebar.open .page-dept {
		display: none;
	} /* dept name already in the toggle */
}
/* ─── A-Z directory (services/index.html) ─── */
.az-bar {
	display: flex;
	justify-content: center;
	flex-wrap: wrap;
	border-bottom: 1px solid var(--au-gray-200);
	margin-bottom: var(--space-5);
}

.az-bar .tab-btn {
	padding: var(--space-2) var(--space-3);
	min-width: 2em;
	text-align: center;
}

.az-bar .tab-btn.active {
	background: transparent;
}

.az-list {
	-moz-columns: 2;
	     columns: 2;
	-moz-column-gap: var(--space-8);
	     column-gap: var(--space-8);
	list-style: none;
	padding: 0;
	margin: 0;
}

.az-list li {
	-moz-column-break-inside: avoid;
	     break-inside: avoid;
	padding: var(--space-1) 0;
}

.az-list a {
	color: var(--au-navy);
	text-decoration: none;
}

.az-list a:hover {
	text-decoration: underline;
}

.az-sub {
	padding-left: var(--space-5);
}

.az-suggest {
	margin-top: var(--space-8);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	text-align: center;
}

@media (max-width: 600px) {
	.az-list {
		-moz-columns: 1;
		     columns: 1;
	}
}
/* Blog / newsletter feed posts (templates/blog.dt): one .card per post, stacked */
.blog-posts {
	display: grid;
	gap: var(--space-6);
	margin-top: var(--space-6);
}

/* ════════════════════════════════════════════════════════════
   chrome.css  ·  site footer + subpage nav tree
   (the header lives in header.css / chrome/header.tt)
   Depends on: tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── FOOTER ─── */
.site-footer {
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.75);
	padding: var(--space-12) var(--gutter) var(--space-6);
}

.site-footer a {
	color: rgba(255, 255, 255, 0.75);
	text-decoration: none;
}

.site-footer a:hover {
	color: var(--au-gold-light);
}

/* "Privacy choices" reopens the consent preferences (code/consent.tt) - a button dressed as a footer link */
.footer-consent {
	padding: 0;
	border: 0;
	background: none;
	font: inherit;
	color: rgba(255, 255, 255, 0.75);
	cursor: pointer;
}

.footer-consent:hover {
	color: var(--au-gold-light);
}

.site-footer-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: grid;
	grid-template-columns: 1.6fr 1fr 1fr 1fr;
	gap: var(--space-8);
}

.footer-brand img {
	width: 160px;
	margin-bottom: var(--space-4);
}

.footer-tagline {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-white);
	line-height: 1.3;
}

.footer-meta {
	margin-top: var(--space-4);
	font-size: var(--text-sm);
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
}

.footer-col h3 {
	font-size: var(--text-xs);
	letter-spacing: 2px;
	text-transform: uppercase;
	color: var(--au-gold-light);
	margin-bottom: var(--space-3);
	font-weight: 600;
}

.footer-col ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	font-size: var(--text-sm);
}

.site-footer-bottom {
	max-width: var(--max-width);
	margin: var(--space-8) auto 0;
	padding-top: var(--space-5);
	border-top: 1px solid rgba(255, 255, 255, 0.12);
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-4);
	align-items: center;
	justify-content: space-between;
	font-size: var(--text-sm);
}

.footer-legal {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-4);
	align-items: center;
}

.footer-social {
	display: flex;
	gap: var(--space-4);
}

.footer-social a {
	display: inline-flex;
	color: rgba(255, 255, 255, 0.75);
}

.footer-social svg {
	width: 22px;
	height: 22px;
	fill: currentColor;
}

@media (max-width: 920px) {
	.site-footer-inner {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 560px) {
	.site-footer-inner {
		grid-template-columns: 1fr;
	}
}
/* ─── DEPARTMENT PRE-FOOTER BAND (chrome/dept_footer.tt) ─── */
.dept-footer {
	background: var(--au-cream);
	border-top: 1px solid var(--au-gray-200);
	padding: var(--space-8) var(--gutter);
}

.dept-footer-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-6) var(--space-10);
}

.dept-footer-logo img {
	max-height: 56px;
	width: auto;
}

.dept-footer-block {
	display: flex;
	align-items: center;
	gap: var(--space-5);
}

.dept-social {
	display: flex;
	align-items: center;
	gap: var(--space-4);
	list-style: none;
	margin: 0;
	padding: 0;
}

/* reset the global `li + li { margin-top }` reading-rhythm rule (base.css) — it
   leaks in and pushes every icon but the first down 8px, so with the centered
   flex line the first icon rides high. */
.dept-social li {
	margin: 0;
}

.dept-social a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.5em;
	height: 1.5em;
	line-height: 1;
	color: var(--au-navy);
	font-size: var(--text-xl);
	text-decoration: none;
	transition: color var(--duration-base);
}

.dept-social i {
	line-height: 1;
}

/* Flickr has no FontAwesome badge glyph (only bare dots), so draw the matching
   navy tile ourselves: a small square chip with the dots knocked out in cream,
   sized to sit alongside the square-badge glyphs of the other networks. */
.dept-social .fa-flickr {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 0.82em;
	height: 0.82em;
	background: var(--au-navy);
	color: var(--au-cream);
	border-radius: 0.14em;
}

.dept-social .fa-flickr::before {
	font-size: 0.62em;
	line-height: 1;
}

.dept-social a:hover .fa-flickr {
	background: var(--au-gold);
}

.dept-social a:hover {
	color: var(--au-gold);
}

.dept-contact {
	list-style: none;
	margin: 0;
	padding: 0;
	font-size: var(--text-sm);
	color: var(--au-text);
	display: flex;
	flex-direction: column;
	gap: var(--space-1);
}

.dept-contact a {
	color: var(--au-navy-light);
	text-decoration: none;
}

.dept-contact a:hover {
	color: var(--au-gold);
}

.dept-label {
	font-weight: 600;
	font-size: var(--text-base);
	color: var(--au-navy);
	margin-bottom: var(--space-2);
}

.dept-address {
	font-size: var(--text-sm);
	color: var(--au-text);
	line-height: 1.5;
}

.dept-address strong {
	font-size: var(--text-base);
	color: var(--au-navy);
}

@media (max-width: 700px) {
	.dept-footer-inner {
		flex-direction: column;
		align-items: flex-start;
		gap: var(--space-5);
	}
}
/* ─── SUBPAGE NAV TREE (chrome/nav.tt) — collapsible accordion ─── */
.nav-tree {
	list-style: none;
	margin: 0;
	padding: 0;
}

.nav-tree li {
	position: relative;
}

.nav-tree li + li {
	margin-top: 0;
} /* neutralize base.css li+li inside the tree */
.nav-tree a {
	display: block;
	padding: var(--space-1) var(--space-3);
	line-height: 1.35;
	color: var(--au-text);
	text-decoration: none;
	border-left: 2px solid transparent;
	font-size: var(--text-sm);
}

.nav-tree a:hover {
	color: var(--au-navy);
	border-left-color: var(--au-gray-300);
}

.nav-tree .nav-tree {
	padding-left: var(--space-4);
}

/* active trail parent (a branch on the path) = paler gold bar; scoped to
   .has-children so a spuriously-active leaf (e.g. site-root "Home") stays plain */
.nav-tree .is-active.has-children > .nav-tree-row > a {
	border-left-color: var(--au-gold-light);
}

/* current page = full gold bar + bold (after the trail rule so it wins) */
.nav-tree .is-current > a,
.nav-tree .is-current > .nav-tree-row > a {
	color: var(--au-navy);
	font-weight: 600;
	border-left-color: var(--au-gold);
}

/* branch row: link + collapse toggle */
.nav-tree-row {
	display: flex;
	align-items: center;
}

.nav-tree-row > a {
	flex: 1;
}

.nav-tree-toggle {
	flex-shrink: 0;
	width: 36px;
	align-self: stretch;
	display: flex;
	align-items: center;
	justify-content: center;
	background: none;
	border: 0;
	cursor: pointer;
	color: var(--au-warm-gray);
}

.nav-tree-toggle::before {
	content: "";
	width: 7px;
	height: 7px;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: rotate(45deg);
	transition: transform var(--duration-base) var(--ease-out);
}

.nav-tree-toggle:hover {
	color: var(--au-navy);
}

.nav-tree li.is-open > .nav-tree-row .nav-tree-toggle::before {
	transform: rotate(-135deg);
}

/* collapse children unless the branch is open (active trail is pre-opened) */
.nav-tree li.has-children > .nav-tree {
	display: none;
}

.nav-tree li.has-children.is-open > .nav-tree {
	display: block;
}

/* mobile: comfortable, finger-friendly rows (desktop stays tight) */
@media (max-width: 820px) {
	.nav-tree a {
		padding-block: var(--space-3);
		line-height: 1.4;
	}
}
/* ─── section-nav · a department's sibling sub-sites (chrome/section_nav.tt) ───
   A slim full-width bar under the main header. Leads with the department NAME
   (the site identity — links home, styled as a title, not a tab), then the
   sub-sites (ITS: Client Services / AV / Network / …). Current sub-site marked
   with a gold tab-underline; the strip scrolls horizontally if it overflows.
   Alignment: the gutter lives on the full-bleed bar (like .section), and the
   inner is a pure max-width column, so the bar's content shares ONE left edge
   with the header and the page content (header.css applies the same model). */
.section-nav {
	background: var(--au-white);
	border-bottom: 1px solid var(--au-gray-200);
	box-shadow: var(--shadow-sm);
	padding-inline: var(--gutter);
}

.section-nav-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	align-items: stretch;
	gap: var(--space-8);
}

/* site identity — the department name; links home; reads as a title. A hairline
   divides it from the sub-site tabs. */
.section-nav-title {
	display: flex;
	align-items: center;
	flex: none; /* don't shrink — the tab strip absorbs overflow */
	font-family: var(--font-display);
	font-weight: 600;
	font-size: var(--text-md);
	color: var(--au-navy);
	text-decoration: none;
	white-space: nowrap;
	padding-right: var(--space-8);
	margin-right: var(--space-2);
	border-right: 1px solid var(--au-gray-200);
}

.section-nav-title:hover {
	color: var(--au-gold);
}

.section-nav-links {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	gap: var(--space-6);
	/* min-width:0 keeps the strip shrinkable so js/section-nav.js can detect
	   overflow (scrollWidth > clientWidth) and move tabs to More; overflow stays
	   visible so a tab's pages dropdown can escape the bar. (overflow-x:auto would
	   force overflow-y to auto and clip the dropdown.) */
	min-width: 0;
	overflow: visible;
}

/* margin-top:0 undoes the global base.css `li + li { margin-top }`, which was
   dropping every tab after the first below the top (the first looked raised). */
.section-nav-links li {
	flex: none;
	margin-top: 0;
}

.section-nav-links a {
	display: block;
	padding: var(--space-4) 0;
	font-size: var(--text-sm);
	color: var(--au-navy-light);
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 2px solid transparent;
	transition: color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out);
}

.section-nav-links a:hover {
	color: var(--au-gold);
}

.section-nav-links a.is-current {
	color: var(--au-navy);
	font-weight: 600;
	border-bottom-color: var(--au-gold);
}

/* highlighted tab (e.g. Donate) — gold text, semibold; no fill so it doesn't
   compete with the Give/Visit/Apply buttons in the utility bar */
.section-nav-links a.is-highlight {
	color: var(--au-gold);
	font-weight: 600;
}

.section-nav-links a.is-highlight:hover {
	color: var(--au-gold-dark, var(--au-gold));
}

/* the toggle is hidden in strip mode; JS reveals it when collapsed */
.section-nav-toggle {
	display: none;
}

/* ── collapsed mode — the tab strip becomes a dropdown, in TWO stages ──
   js/section-nav.js collapses as width tightens, so it never clips and never
   jumps straight to a full-width sheet:
     .is-collapsed            → SIDE-BY-SIDE: the title stays left, a compact
                                dropdown pill sits to its right. Kicks in as soon
                                as the full tab strip would overflow — keeps wide
                                views looking intentional.
     .is-collapsed.is-stacked → STACKED: the title becomes a small gold eyebrow
                                with a full-width pill beneath it. Only when even
                                title + pill can't sit side-by-side (narrow/phone).
   The open list is an anchored floating menu (under the pill in side-by-side,
   full-width in stacked). Content-aware, not a guessed breakpoint. Without JS
   the strip just scrolls — the dropdown needs JS to open anyway. */
.section-nav.is-collapsed {
	background: transparent;
	border-bottom: 0;
	box-shadow: none;
}

.section-nav.is-collapsed .section-nav-inner {
	position: relative; /* anchor for the floating list */
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-3);
	padding-block: var(--space-3);
}

/* no inline tabs follow the title now, so drop its divider */
.section-nav.is-collapsed .section-nav-title {
	border-right: 0;
	padding-right: 0;
	margin-right: 0;
}

/* the dropdown pill — current page + caret */
.section-nav.is-collapsed .section-nav-toggle {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-4);
	min-width: 11rem;
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	font-family: inherit;
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--au-navy);
	cursor: pointer;
}

/* side-by-side (default): pill hugs the right end of the title's row */
.section-nav.is-collapsed:not(.is-stacked) .section-nav-toggle {
	margin-left: auto;
}

/* stacked: title → eyebrow, pill → full width beneath it */
.section-nav.is-collapsed.is-stacked .section-nav-inner {
	flex-direction: column;
	align-items: stretch;
	gap: var(--space-2);
}

.section-nav.is-collapsed.is-stacked .section-nav-title {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--au-gold);
	white-space: normal;
}

.section-nav.is-collapsed.is-stacked .section-nav-toggle {
	width: 100%;
}

.section-nav-caret {
	width: 9px;
	height: 9px;
	flex-shrink: 0;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: rotate(45deg);
	transition: transform var(--duration-base) var(--ease-out);
}

.section-nav-toggle[aria-expanded=true] .section-nav-caret {
	transform: rotate(-135deg);
}

/* the sibling list — a floating menu below the bar, anchored to the inner */
.section-nav.is-collapsed .section-nav-links {
	display: none;
	position: absolute;
	top: 100%;
	z-index: 50;
	flex-direction: column;
	gap: 0;
	overflow: hidden;
	margin-top: var(--space-1);
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-md);
	max-height: 70vh;
	overflow-y: auto;
}

/* side-by-side: compact menu under the right-hand pill */
.section-nav.is-collapsed:not(.is-stacked) .section-nav-links {
	right: 0;
	width: -moz-max-content;
	width: max-content;
	max-width: 100%;
	min-width: 14rem;
}

/* stacked: full-width menu */
.section-nav.is-collapsed.is-stacked .section-nav-links {
	left: 0;
	right: 0;
}

.section-nav.is-collapsed.open .section-nav-links {
	display: flex;
}

.section-nav.is-collapsed .section-nav-links li {
	flex: none;
	margin-top: 0;
	border-bottom: 1px solid var(--au-gray-100);
}

.section-nav.is-collapsed .section-nav-links li:last-child {
	border-bottom: 0;
}

.section-nav.is-collapsed .section-nav-links a {
	padding: var(--space-3) var(--space-4);
	white-space: normal;
	border-bottom: 0; /* the tab-underline is a desktop treatment */
}

/* current row: gold left accent + pale wash instead of the tab underline */
.section-nav.is-collapsed .section-nav-links a.is-current {
	border-bottom: 0;
	background: var(--au-gold-pale);
	box-shadow: inset 3px 0 0 var(--au-gold);
}

/* ── priority+ overflow — a "More ▾" at the end of the strip ──
   When the strip almost fits, js/section-nav.js keeps the tabs that fit inline
   and tucks the rest under this button (rather than collapsing the whole thing
   to a pill). So wide views stay a real tab row. JS hides overflow tabs
   (li.is-hidden) and clones them into the menu; it toggles `hidden` on the
   whole control when nothing overflows, and hides it entirely once the nav
   collapses to the pill. */
.section-nav-links li.is-hidden {
	display: none;
}

.section-nav-more {
	position: relative;
	flex: none;
	display: flex;
	align-items: center;
}

.section-nav-more[hidden] {
	display: none;
}

.section-nav.is-collapsed .section-nav-more {
	display: none;
}

.section-nav-more-btn {
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
	padding: var(--space-4) 0;
	margin-left: var(--space-6);
	font-family: inherit;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
	background: none;
	border: 0;
	border-bottom: 2px solid transparent;
	white-space: nowrap;
	cursor: pointer;
}

.section-nav-more-btn:hover {
	color: var(--au-gold);
}

.section-nav-more-btn[aria-expanded=true] .section-nav-caret {
	transform: rotate(-135deg);
}

.section-nav-more-menu {
	display: none;
	position: absolute;
	top: 100%;
	right: 0;
	z-index: 50;
	margin: 0;
	padding: 0;
	list-style: none;
	min-width: 14rem;
	max-width: 80vw;
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-md);
	overflow: hidden;
	max-height: 70vh;
	overflow-y: auto;
}

.section-nav-more.is-open .section-nav-more-menu {
	display: block;
}

.section-nav-more-menu li {
	margin-top: 0;
	border-bottom: 1px solid var(--au-gray-100);
}

.section-nav-more-menu li:last-child {
	border-bottom: 0;
}

.section-nav-more-menu a {
	display: block;
	padding: var(--space-3) var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-navy-light);
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 0;
}

.section-nav-more-menu a:hover {
	color: var(--au-gold);
	background: var(--au-cream);
}

.section-nav-more-menu a.is-current {
	color: var(--au-navy);
	font-weight: 600;
	background: var(--au-gold-pale);
	box-shadow: inset 3px 0 0 var(--au-gold);
}

/* ── sub-site dropdowns · one level of a sub-site's pages per tab ──
   A tab with child pages gets a caret button; clicking it opens a menu of that
   sub-site's pages, so subpages are reachable from the bar (the section-nav only
   appears on pages that have no sidebar). js/section-nav.js toggles .is-open on
   the .section-nav-item. In the STRIP the menu is an absolute dropdown; in the
   collapsed pill and the More menu it drops inline as an indented accordion. */
.section-nav-item {
	position: relative;
	display: flex;
	align-items: center;
}

.section-nav-sub-toggle {
	display: inline-flex;
	align-items: center;
	align-self: stretch;
	padding: 0 var(--space-2);
	background: none;
	border: 0;
	cursor: pointer;
	color: var(--au-navy-light);
}

.section-nav-sub-toggle:hover {
	color: var(--au-gold);
}

.section-nav-sub-toggle .section-nav-caret {
	width: 6px;
	height: 6px;
}

.section-nav-sub-toggle[aria-expanded=true] .section-nav-caret {
	transform: rotate(-135deg);
}

/* the pages menu — a floating dropdown in the strip */
.section-nav-menu {
	display: none;
	position: absolute;
	top: 100%;
	left: 0;
	z-index: 50;
	margin: 0;
	padding: 0;
	list-style: none;
	min-width: 13rem;
	max-width: 22rem;
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-md);
	overflow: hidden;
	max-height: 70vh;
	overflow-y: auto;
}

.section-nav-item.is-open > .section-nav-menu {
	display: block;
}

/* desktop strip: also reveal a tab's pages on hover / keyboard focus, so the
   tab's own click stays free to navigate to its home page (the caret click
   remains the touch fallback). Scoped to the strip — the collapsed pill and the
   More menu keep their click accordion. */
.section-nav:not(.is-collapsed) .section-nav-links > .section-nav-item:focus-within > .section-nav-menu {
	display: block;
}

@media (hover: hover) {
	.section-nav:not(.is-collapsed) .section-nav-links > .section-nav-item:hover > .section-nav-menu {
		display: block;
	}
}
.section-nav-menu li {
	margin: 0;
	flex: none;
	border-bottom: 1px solid var(--au-gray-100);
}

.section-nav-menu li:last-child {
	border-bottom: 0;
}

.section-nav-menu a {
	display: block;
	padding: var(--space-3) var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-navy-light);
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 0;
}

.section-nav-menu a:hover {
	color: var(--au-gold);
	background: var(--au-cream);
}

.section-nav-menu a.is-current {
	color: var(--au-navy);
	font-weight: 600;
	background: var(--au-gold-pale);
	box-shadow: inset 3px 0 0 var(--au-gold);
}

/* nested (accordion) form — in the collapsed pill and inside the More menu the
   pages menu drops inline below its tab instead of floating. */
.section-nav.is-collapsed .section-nav-item,
.section-nav-more-menu .section-nav-item {
	flex-wrap: wrap;
}

/* link takes the row (min-width:0 so it can shrink), caret sits inline beside it
   (not stretched — stretch was dropping it onto its own line), menu wraps below */
.section-nav.is-collapsed .section-nav-item > a,
.section-nav-more-menu .section-nav-item > a {
	flex: 1;
	min-width: 0;
}

.section-nav.is-collapsed .section-nav-item > .section-nav-sub-toggle,
.section-nav-more-menu .section-nav-item > .section-nav-sub-toggle {
	flex: none;
	align-self: center;
}

.section-nav.is-collapsed .section-nav-menu,
.section-nav-more-menu .section-nav-menu {
	position: static;
	flex: 0 0 100%;
	min-width: 0;
	max-width: none;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	background: transparent;
	margin: 0;
	max-height: none;
}

.section-nav.is-collapsed .section-nav-menu a,
.section-nav-more-menu .section-nav-menu a {
	padding-left: var(--space-8);
}

/* ─── CMS edit shortcut (shell.wrap) ───
   Rendered only for a signed-in user with modify permission on the page. A small
   translucent gold pill pinned to the top-centre that brightens on hover and
   links to the CMS editor. `margin-bottom: -1lh` cancels its own height so it
   floats over the header instead of pushing content down. Admin affordance —
   never shown to normal visitors. */
.cms-edit-bar {
	position: sticky;
	top: 0;
	z-index: 1000;
	display: block;
	width: -moz-max-content;
	width: max-content;
	max-width: 100%;
	margin: 0 auto -1lh var(--gutter); /* left-aligned (right margin auto) */
	padding: 0 var(--space-4);
	background: var(--au-gold);
	color: var(--au-navy-deep);
	font-size: var(--text-sm);
	font-weight: 600;
	line-height: 2;
	text-decoration: none;
	white-space: nowrap;
	border-radius: 0 0 var(--radius-md) var(--radius-md);
	box-shadow: 0 2px 10px rgba(0, 0, 0, 0.25);
	opacity: 0.5;
	transition: opacity var(--duration-base) var(--ease-out);
}

/* `a.` prefix beats base.css `a:not(.btn):hover` so the label stays navy (readable
   on the gold), not gold-on-gold */
a.cms-edit-bar:hover,
a.cms-edit-bar:focus-visible {
	opacity: 1;
	color: var(--au-navy-deep);
}

/* ════════════════════════════════════════════════════════════
   header.css  ·  site header — utility bar + full-width mega-menu
   Depends on: tokens.css · buttons/forms come from their own partials.
   Behaviour : js/header.js (self-inits on [data-header]).
   Markup    : templates/chrome/header.tt.

   Responsive stages:
     ≥980  all six section links in the bar
     ≤980  Research + About fold into the "Menu" panel (overflow only)
     ≤768  core sections fold in too; Menu is the whole nav (columns
           stack; section titles become collapsible)
     ≤600  utility bar hides; Give/Apply ride in the bar beside Menu
   ════════════════════════════════════════════════════════════ */
/* header-scoped resets. :where() holds specificity at 0-0-1 (like a bare
   element selector) so component rules such as .nav-link — which set their own
   color/background — always win over these instead of being overridden. */
:where(.au-header) a {
	text-decoration: none;
	color: inherit;
}

:where(.au-header) button {
	background: none;
	border: 0;
	cursor: pointer;
	color: inherit;
	font-family: inherit;
	line-height: inherit;
}

/* base.css styles bare lists globally (`li + li` top-margin, `ul` padding-left);
   the header's lists use flex + gap, so neutralize that here. */
.au-header ul {
	margin: 0;
	padding: 0;
}

.au-header li + li {
	margin-top: 0;
}

/* the whole header sticks — sticky on `.main-nav` alone can't work because its
   parent `.au-header` is only header-tall, so it has no room to stick within */
.au-header {
	position: sticky;
	top: 0;
	z-index: 100;
}

/* ─── UTILITY BAR (audience + give/apply + search) ─── */
.util-nav {
	position: relative;
	z-index: 100;
	background: var(--au-navy-deep);
	border-bottom: 1px solid rgba(255, 255, 255, 0.06);
}

/* content container: max-width with a gutter floor, in ONE property so the bar
   itself stays padding-free (the mega dropdown is absolutely positioned inside
   .main-nav and must stay full-bleed). Puts header content on the same left
   edge as .section content — see css/chrome.css .section-nav. */
.util-inner {
	width: min(100% - 2 * var(--gutter), var(--max-width));
	margin-inline: auto;
	display: flex;
	justify-content: flex-end;
	align-items: center;
	gap: var(--space-1);
}

.util-inner a {
	font-size: var(--text-xs);
	color: rgba(255, 255, 255, 0.55);
	padding: var(--space-2) var(--space-3);
	letter-spacing: 0.3px;
	transition: color 0.15s;
	white-space: nowrap;
}

.util-inner a:hover {
	color: var(--au-white);
}

.util-inner .util-accent {
	color: var(--au-gold-light);
	font-weight: 600;
} /* Give, Visit */
.util-inner .util-accent:hover {
	color: var(--au-gold);
}

.util-inner .util-cta {
	color: var(--au-navy-deep);
	font-weight: 700;
	background: var(--au-gold);
	border-radius: var(--radius-full);
	padding: var(--space-1) var(--space-4);
	margin-left: var(--space-1);
	transition: background var(--duration-base) var(--ease-out);
} /* Apply — primary */
.util-inner .util-cta:hover {
	color: var(--au-navy-deep);
	background: var(--au-gold-light);
}

/* ─── MAIN BAR (logo + section nav) ─── */
.main-nav {
	position: relative;
	z-index: 100;
	background: var(--au-navy);
	box-shadow: 0 2px 20px rgba(0, 0, 0, 0.15);
}

.main-inner {
	width: min(100% - 2 * var(--gutter), var(--max-width));
	margin-inline: auto;
	display: flex;
	align-items: center;
	gap: var(--space-6);
}

.nav-logo {
	display: flex;
	align-items: center;
	padding-block: var(--space-3);
	margin-right: auto;
	flex-shrink: 0;
	-webkit-user-select: none;
	-moz-user-select: none;
	     user-select: none;
}

.nav-logo img {
	display: block;
	height: 40px;
	width: auto;
	-webkit-user-drag: none;
} /* Safari: don't let the logo image be selected/dragged */
.main-links {
	display: flex;
	list-style: none;
}

.nav-item {
	position: static;
}

.nav-link {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: var(--text-sm);
	color: rgba(255, 255, 255, 0.78);
	padding: var(--space-5) var(--space-4);
	border-bottom: 3px solid transparent;
	transition: all var(--duration-base);
	white-space: nowrap;
}

.nav-link:hover, .nav-link[aria-expanded=true] {
	color: var(--au-white);
	border-bottom-color: var(--au-gold);
	background: rgba(255, 255, 255, 0.05);
}

.nav-link .caret {
	width: 8px;
	height: 8px;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: rotate(45deg);
	margin-top: -3px;
	transition: transform var(--duration-base);
}

.nav-link[aria-expanded=true] .caret {
	transform: rotate(-135deg);
	margin-top: 2px;
}

/* ─── FULL-WIDTH MEGA PANEL ─── */
.mega {
	position: absolute;
	left: 0;
	right: 0;
	top: 100%;
	background: var(--au-white);
	border-top: 3px solid var(--au-gold);
	box-shadow: var(--shadow-lg);
	opacity: 0;
	visibility: hidden;
	transform: translateY(-8px);
	transition: opacity var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), visibility var(--duration-base);
	z-index: 90;
}

.mega.open {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}

.mega-inner {
	width: min(100% - 2 * var(--gutter), var(--max-width));
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-6);
	padding-block: var(--space-8);
}

.mega-col {
	flex: 1 1 190px;
	min-width: 170px;
}

.mega-col h4 {
	font-family: var(--font-body);
	font-size: var(--text-xs);
	letter-spacing: 1.5px;
	text-transform: uppercase;
	color: var(--au-gold);
	font-weight: 600;
	margin-bottom: var(--space-4);
	padding-bottom: var(--space-2);
	border-bottom: 1px solid var(--au-gray-200);
}

.mega-col h4 a {
	color: var(--au-navy);
}

.mega-col ul {
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
}

.mega-col a {
	font-size: var(--text-sm);
	color: var(--au-text);
	transition: color 0.15s;
}

.mega-col a:hover {
	color: var(--au-gold);
}

.mega-cta {
	margin-top: var(--space-4);
	display: inline-block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
}

.mega-cta:hover {
	color: var(--au-gold);
}

.mega-feature {
	flex: 1 1 260px;
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	border-radius: var(--radius-lg);
	padding: var(--space-6);
	color: var(--au-white);
	align-self: stretch;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
}

.mega-feature .fk {
	font-size: var(--text-xs);
	letter-spacing: 2px;
	text-transform: uppercase;
	color: var(--au-gold-light);
	font-weight: 600;
	margin-bottom: var(--space-2);
}

.mega-feature h3 {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	margin-bottom: var(--space-3);
	line-height: 1.25;
}

.mega-feature a {
	color: var(--au-gold-light);
	font-weight: 600;
	font-size: var(--text-sm);
}

/* scrim behind an open panel */
.nav-scrim {
	position: fixed;
	inset: 0;
	background: rgba(0, 26, 51, 0.45);
	opacity: 0;
	visibility: hidden;
	transition: opacity var(--duration-base), visibility var(--duration-base);
	z-index: 80;
}

body.mega-open .nav-scrim {
	opacity: 1;
	visibility: visible;
}

/* focus the open menu: recede the other bar items, keep the active one lit */
body.mega-open .nav-link {
	opacity: 0.45;
}

body.mega-open .nav-link[aria-expanded=true] {
	opacity: 1;
}

/* ─── SEARCH (icon in the bar → full-width panel) ─── */
.search-item {
	display: flex;
} /* stretch the button to full bar height so the icon centers */
.nav-search-btn {
	padding-inline: var(--space-4);
}

.nav-search-btn svg {
	width: 18px;
	height: 18px;
}

.mega-search-inner {
	flex-direction: column;
	align-items: stretch;
	padding-block: var(--space-8);
}

.site-search {
	width: 100%;
	max-width: 760px;
	margin-inline: auto;
}

.search-label {
	display: block;
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-navy);
	margin-bottom: var(--space-5);
}

.search-field {
	display: flex;
	align-items: center;
	gap: var(--space-3);
	padding: var(--space-1) var(--space-2) var(--space-1) var(--space-5);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-full);
	transition: border-color var(--duration-base) var(--ease-out);
}

.search-field:focus-within {
	border-color: var(--au-gold);
}

.search-field > svg {
	width: 22px;
	height: 22px;
	color: var(--au-gray-400);
	flex-shrink: 0;
}

.search-field input {
	flex: 1;
	min-width: 0;
	border: 0;
	outline: 0;
	background: none;
	color: var(--au-text);
	font-size: var(--text-md);
	padding: var(--space-3) 0;
}

.search-go {
	flex-shrink: 0;
	background: var(--au-navy);
	color: var(--au-white);
	border-radius: var(--radius-full);
	padding: var(--space-3) var(--space-6);
	font-size: var(--text-sm);
	font-weight: 600;
	transition: all var(--duration-base) var(--ease-out);
}

.search-go:hover {
	background: var(--au-gold);
	color: var(--au-navy-deep);
}

.search-hint {
	margin-top: var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-gray-400);
}

.search-hint a {
	color: var(--au-navy-light);
	font-weight: 600;
}

.search-hint a:hover {
	color: var(--au-gold);
}

/* ─── "MENU" TRIGGER (overflow) + compact Give/Apply ─── */
.menu-item {
	display: none;
}

.nav-menu-btn {
	gap: var(--space-2);
}

.nav-menu-btn .ham {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 4px;
	width: 20px;
	height: 1.6em;
}

.nav-menu-btn .ham span {
	height: 2px;
	background: currentColor;
	border-radius: 2px;
	transition: transform var(--duration-base) var(--ease-out), opacity var(--duration-base);
}

.nav-menu-btn[aria-expanded=true] .ham span:nth-child(1) {
	transform: translateY(6px) rotate(45deg);
}

.nav-menu-btn[aria-expanded=true] .ham span:nth-child(2) {
	opacity: 0;
}

.nav-menu-btn[aria-expanded=true] .ham span:nth-child(3) {
	transform: translateY(-6px) rotate(-45deg);
}

.mega-col-info {
	margin-left: auto;
	background: var(--au-cream);
	border-radius: var(--radius-md);
	padding: var(--space-5);
}

.mega-col-info h4 {
	color: var(--au-navy);
}

.menu-actions {
	display: flex;
	gap: var(--space-2);
	margin-top: var(--space-4);
}

.menu-actions .nc-btn {
	flex: 1;
	text-align: center;
	padding: var(--space-3);
	border: 2px solid transparent;
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
	font-weight: 600;
	transition: all var(--duration-base) var(--ease-out);
}

.menu-actions .nc-give, .menu-actions .nc-visit {
	background: transparent;
	color: var(--au-navy);
	border-color: var(--au-navy);
}

.menu-actions .nc-give:hover, .menu-actions .nc-visit:hover {
	background: var(--au-navy);
	color: var(--au-white);
	transform: translateY(-2px);
	box-shadow: var(--shadow-md);
}

.menu-actions .nc-apply {
	background: var(--au-gold);
	color: var(--au-white);
	border-color: var(--au-gold);
}

.menu-actions .nc-apply:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-white);
	transform: translateY(-2px);
	box-shadow: 0 6px 20px rgba(198, 149, 43, 0.3);
}

/* Menu panel = overflow only: hide columns for sections still in the bar */
#mega-menu .mcol-core, #mega-menu .mcol-info {
	display: none;
}

.nav-compact {
	display: none;
	align-items: center;
	gap: var(--space-2);
}

.nav-compact .nc-btn {
	font-size: var(--text-sm);
	font-weight: 600;
	padding: var(--space-2) var(--space-4);
	border: 2px solid transparent;
	border-radius: var(--radius-sm);
	white-space: nowrap;
	transition: all var(--duration-base) var(--ease-out);
}

.nav-compact .nc-give, .nav-compact .nc-visit {
	color: var(--au-gold-light);
	border-color: rgba(255, 255, 255, 0.35);
}

.nav-compact .nc-give:hover, .nav-compact .nc-visit:hover {
	background: rgba(255, 255, 255, 0.1);
	border-color: var(--au-gold-light);
	color: var(--au-white);
	transform: translateY(-2px);
}

.nav-compact .nc-apply {
	background: var(--au-gold);
	color: var(--au-white);
}

.nav-compact .nc-apply:hover {
	background: var(--au-gold-light);
	transform: translateY(-2px);
	box-shadow: 0 6px 20px rgba(198, 149, 43, 0.3);
}

@media (max-width: 1200px) {
	.nav-link {
		padding-inline: var(--space-3);
	}
	.main-inner {
		gap: var(--space-5);
	}
}
@media (max-width: 980px) {
	.util-inner a {
		padding-inline: var(--space-2);
	}
	.nav-link {
		padding-inline: var(--space-2);
	}
	.nav-item.secondary {
		display: none;
	}
	.menu-item {
		display: block;
	}
}
@media (max-width: 768px) {
	.nav-item:not(.menu-item):not(.search-item) {
		display: none;
	}
	.mega {
		max-height: calc(100vh - 130px);
		overflow: auto;
	}
	.search-label {
		font-size: var(--text-lg);
	}
	.mega-inner {
		flex-direction: column;
		gap: var(--space-2);
	}
	.mega-col {
		flex: none;
	}
	.mega-col-info {
		margin-left: 0;
	}
	.mega-feature {
		display: none;
	}
	#mega-menu .mcol-core {
		display: block;
	}
	/* collapsible section titles in the mobile Menu */
	#mega-menu .mega-col:not(.mcol-info) {
		border-bottom: 1px solid var(--au-gray-200);
		padding-bottom: var(--space-3);
	}
	#mega-menu .mega-col:not(.mcol-info) > h4 {
		display: flex;
		justify-content: space-between;
		align-items: center;
		cursor: pointer;
		margin-bottom: 0;
		border-bottom: 0;
		padding-bottom: 0;
	}
	#mega-menu .mega-col:not(.mcol-info) > h4 a {
		pointer-events: none;
		color: inherit;
	}
	#mega-menu .mega-col:not(.mcol-info) > h4::after {
		content: "";
		width: 8px;
		height: 8px;
		border-right: 2px solid currentColor;
		border-bottom: 2px solid currentColor;
		transform: rotate(45deg);
		transition: transform var(--duration-base);
	}
	#mega-menu .mega-col:not(.mcol-info).open > h4::after {
		transform: rotate(-135deg);
	}
	#mega-menu .mega-col:not(.mcol-info) > ul {
		display: none;
		padding-top: var(--space-3);
	}
	#mega-menu .mega-col:not(.mcol-info).open > ul {
		display: block;
	}
}
@media (max-width: 600px) {
	.util-nav {
		display: none;
	}
	.nav-compact {
		display: flex;
	}
	#mega-menu .mcol-info {
		display: block;
	}
	/* reclaim room: tighter side padding + gaps on the compact bar */
	.main-inner {
		gap: var(--space-3);
		padding-inline: var(--space-4);
	}
	.nav-search-btn {
		padding-inline: var(--space-3);
	}
	.nav-logo img {
		height: 34px;
	}
}
@media (max-width: 480px) {
	/* three CTAs won't fit with the logo + search + Menu — shed from the left */
	.nav-compact .nc-give {
		display: none;
	}
}
@media (max-width: 400px) {
	/* only Apply remains on the bar; Give/Visit stay in the Menu panel */
	.nav-compact .nc-visit {
		display: none;
	}
	.main-inner {
		gap: var(--space-2);
	}
}
/* ════════════════════════════════════════════════════════════
   au-buttons.css  ·  Button & CTA styles
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
.btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--space-2);
	font-family: var(--font-body);
	font-weight: 700;
	font-size: var(--text-sm);
	letter-spacing: 1.5px;
	text-transform: uppercase;
	text-decoration: none;
	text-align: center; /* a label that wraps stays centred in the button */
	padding: var(--space-4) var(--space-6);
	border-radius: var(--radius-sm);
	border: 2px solid transparent;
	cursor: pointer;
	transition: all var(--duration-base) var(--ease-out);
}

.btn:hover {
	transform: translateY(-1px);
}

.btn:active {
	transform: translateY(0);
}

/* Primary — Gold */
.btn-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
}

/* lighten the gold on hover while KEEPING the navy label — navy on the lighter
   gold reads with more contrast, not less (the old wash-out was the gold text,
   now fixed via a:not(.btn):hover in base.css). */
.btn-primary:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-navy-deep);
	box-shadow: 0 4px 16px rgba(198, 149, 43, 0.35);
}

/* Secondary — Navy */
.btn-secondary {
	background: var(--au-navy);
	color: var(--au-white);
	border-color: var(--au-navy);
}

.btn-secondary:hover {
	background: var(--au-navy-deep);
	box-shadow: 0 4px 16px rgba(0, 51, 102, 0.3);
}

/* Outline */
.btn-outline {
	background: transparent;
	color: var(--au-navy);
	border-color: var(--au-navy);
}

.btn-outline:hover {
	background: var(--au-navy);
	color: var(--au-white);
}

/* on the dark bands an outline button turns white (navy-on-navy otherwise) */
:is(.section--navy, .section--navy-mid, .section--navy-bright, .section--nile-blue,
.section--chathams-blue, .section--fiord-blue, .section--fiord-blue-textured) .btn-outline {
	color: var(--au-white);
	border-color: rgba(255, 255, 255, 0.7);
}

:is(.section--navy, .section--navy-mid, .section--navy-bright, .section--nile-blue,
.section--chathams-blue, .section--fiord-blue, .section--fiord-blue-textured) .btn-outline:hover {
	background: var(--au-white);
	border-color: var(--au-white);
	color: var(--au-navy);
}

/* buttons on a photo band's panel: .cover-panel a colors every link light gold
   and underlines it on hover, which would wash out a button's label */
.cover-panel .btn,
.cover-panel .btn:hover {
	text-decoration: none;
}

.cover-panel .btn-primary,
.cover-panel .btn-primary:hover {
	color: var(--au-navy-deep);
}

.cover-panel .btn-outline {
	color: var(--au-white);
	border-color: rgba(255, 255, 255, 0.7);
}

.cover-panel .btn-outline:hover {
	background: var(--au-white);
	border-color: var(--au-white);
	color: var(--au-navy);
}

/* Ghost */
.btn-ghost {
	background: transparent;
	color: var(--au-gold);
	border-color: transparent;
}

.btn-ghost:hover {
	background: var(--au-gold-pale);
}

/* Sizes */
.btn-sm {
	padding: var(--space-2) var(--space-4);
	font-size: var(--text-xs);
}

.btn-lg {
	padding: var(--space-5) var(--space-8);
	font-size: var(--text-base);
}

/* Button row — a group of CTAs in authored content: <p class="btn-row">.
   Even gaps; each button grows to share its line, so a narrow column stacks
   them full-width and a wide one lines them up. */
.btn-row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-3);
}

.btn-row > .btn {
	flex: 1 1 auto;
}

/* ════════════════════════════════════════════════════════════
   au-forms.css  ·  Form controls
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* Labels */
.label {
	display: block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-1);
}

.label-required::after {
	content: " *";
	color: var(--au-error);
}

.helper {
	font-size: var(--text-xs);
	color: var(--au-gray-400);
	margin-top: var(--space-1);
}

.error-msg {
	font-size: var(--text-xs);
	color: var(--au-error);
	margin-top: var(--space-1);
	font-weight: 500;
}

/* Text Input */
.input {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	outline: none;
	transition: border-color var(--duration-base);
}

.input::-moz-placeholder {
	color: var(--au-gray-400);
}

.input::placeholder {
	color: var(--au-gray-400);
}

.input:focus {
	border-color: var(--au-gold);
}

.input-error {
	border-color: var(--au-error) !important;
}

/* Dark variant */
.input-dark {
	background: rgba(255, 255, 255, 0.06);
	border-color: rgba(255, 255, 255, 0.15);
	color: var(--au-white);
}

.input-dark:focus {
	border-color: var(--au-gold);
}

/* Select */
.select {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-8) var(--space-3) var(--space-4);
	outline: none;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	background-image: url("data:image/svg+xml,...chevron...");
	background-repeat: no-repeat;
	background-position: right 16px center;
	cursor: pointer;
}

.select:focus {
	border-color: var(--au-gold);
}

/* Textarea */
.textarea {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	resize: vertical;
	min-height: 100px;
}

.textarea:focus {
	border-color: var(--au-gold);
}

/* Checkbox & Radio */
.check-group {
	display: flex;
	flex-direction: column;
	gap: var(--space-3);
}

.check-label {
	display: flex;
	align-items: center;
	gap: var(--space-3);
	cursor: pointer;
	font-size: var(--text-base);
}

.checkbox, .radio {
	width: 20px;
	height: 20px;
	accent-color: var(--au-gold);
}

.radio {
	accent-color: var(--au-navy);
}

/* Toggle Switch */
.toggle {
	position: relative;
	width: 48px;
	height: 26px;
}

.toggle input {
	opacity: 0;
	width: 0;
	height: 0;
	position: absolute;
}

.toggle-track {
	position: absolute;
	inset: 0;
	background: var(--au-gray-300);
	border-radius: var(--radius-full);
	transition: background var(--duration-base);
}

.toggle-track::after {
	content: "";
	position: absolute;
	width: 20px;
	height: 20px;
	background: var(--au-white);
	border-radius: 50%;
	top: 3px;
	left: 3px;
	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
	transition: transform var(--duration-base) var(--ease-out);
}

.toggle input:checked + .toggle-track {
	background: var(--au-navy);
}

.toggle input:checked + .toggle-track::after {
	transform: translateX(22px);
}

/* Range Slider */
.range {
	width: 100%;
	height: 6px;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	background: var(--au-gray-200);
	border-radius: var(--radius-full);
}

.range::-webkit-slider-thumb {
	-webkit-appearance: none;
	        appearance: none;
	width: 22px;
	height: 22px;
	background: var(--au-navy);
	border-radius: 50%;
	border: 3px solid var(--au-white);
	box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
}

/* File Upload */
.file-upload {
	border: 2px dashed var(--au-gray-300);
	border-radius: var(--radius-md);
	padding: var(--space-6) var(--space-5);
	text-align: center;
	cursor: pointer;
	transition: all var(--duration-base);
}

.file-upload:hover {
	border-color: var(--au-gold);
	background: var(--au-gold-pale);
}

/* Layout helpers */
.form-group {
	margin-bottom: var(--space-5);
}

.form-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-4);
}

@media (max-width: 600px) {
	.form-row {
		grid-template-columns: 1fr;
	}
}
/* multi-column checkbox/radio list for long option sets (e.g. 16 project types).
   Boxes align to the first line so wrapping labels stay tidy. */
.check-group--cols {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--space-3) var(--space-6);
}

.check-group--cols .check-label {
	align-items: flex-start;
}

.check-group--cols .checkbox, .check-group--cols .radio {
	flex-shrink: 0;
	margin-top: 2px;
}

@media (max-width: 560px) {
	.check-group--cols {
		grid-template-columns: 1fr;
	}
}
/* form scaffold — constrain width, reset the fieldset chrome, style the legend */
.form {
	max-width: 680px;
}

.form fieldset {
	border: 0;
	margin: 0;
	padding: 0;
}

.form legend {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-navy);
	line-height: 1.2;
	margin-bottom: var(--space-6);
}

/* ─── Legacy CMS forms (.auform) ───
   The sitewide form macros (templates/forms/*) emit bare elements with
   class="auform" on the <form> and class="generic_element" wrappers.
   The form template also injects the legacy /css/forms.css AFTER index.css,
   so we scope under .page-main to win by specificity. */
.page-main .auform {
	max-width: 680px;
}

.page-main .auform .generic_element {
	margin-bottom: var(--space-3);
	clear: none;
}

.page-main .auform .help_message {
	min-height: 0;
}

.page-main .auform label {
	display: block;
	float: none;
	width: auto;
	text-align: left;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-1);
	margin-right: 0;
}

.page-main .auform input[type=text],
.page-main .auform input[type=email],
.page-main .auform input[type=tel],
.page-main .auform input[type=url],
.page-main .auform input[type=search],
.page-main .auform input[type=number] {
	width: 100%;
	float: none;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	outline: none;
	transition: border-color var(--duration-base);
}

.page-main .auform input[type=text]:focus,
.page-main .auform input[type=email]:focus,
.page-main .auform input[type=tel]:focus {
	border-color: var(--au-gold);
	background: var(--au-white);
}

.page-main .auform textarea {
	width: 100%;
	float: none;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	resize: vertical;
	min-height: 100px;
	outline: none;
}

.page-main .auform textarea:focus {
	border-color: var(--au-gold);
	background: var(--au-white);
}

.page-main .auform select {
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-2) var(--space-3);
	outline: none;
}

.page-main .auform select:focus {
	border-color: var(--au-gold);
}

.page-main .auform input[type=submit] {
	-webkit-appearance: none;
	-moz-appearance: none;
	     appearance: none;
	font-family: var(--font-display);
	font-size: var(--text-sm);
	font-weight: 600;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--au-navy);
	background-color: var(--au-gold);
	background-image: none;
	border: 0;
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-6);
	margin: var(--space-5) 0 0;
	cursor: pointer;
	transition: background-color var(--duration-base), transform var(--duration-base);
}

.page-main .auform input[type=submit]:hover {
	background-color: var(--au-gold-light);
	transform: translateY(-1px);
}

/* phone macro: three small inputs in a row */
.page-main .auform .phone {
	display: flex;
	align-items: center;
	gap: var(--space-2);
	flex-wrap: wrap;
}

.page-main .auform .phone label {
	width: 100%;
	float: none;
}

.page-main .auform .phone select {
	flex: 0 0 auto;
}

.page-main .auform .phone input.fluid {
	width: auto;
	flex: 1;
	min-width: 60px;
}

.page-main .auform .phone span {
	color: var(--au-gray-400);
}

/* ════════════════════════════════════════════════════════════
   au-tables.css  ·  Data tables
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* Band-aware: cell text, borders and stripes read the section's --band-* context
   tokens (set on dark bands in layout.css), so a table dropped on a dark band —
   e.g. inside a dark accordion — adapts instead of rendering dark-on-dark. Falls
   back to the light-table look off a band. */
.table-wrap {
	overflow-x: auto;
	border-radius: var(--radius-lg);
	border: 2px solid var(--band-card-border, var(--au-gray-200));
}

.table {
	width: 100%;
	border-collapse: collapse;
	font-size: var(--text-sm);
}

/* inside a wrap, the wrap owns the outer spacing and the table sits flush to the
   rounded border. Without this, the page-content rhythm's top margin on <table>
   opens a blank strip between the border and the header row (the wrap is its own
   block-formatting context, so the margin can't collapse away). */
.table-wrap > .table {
	margin: 0;
}

.table thead {
	background: var(--au-navy);
}

.table th {
	color: var(--au-white);
	font-weight: 600;
	font-size: var(--text-xs);
	letter-spacing: 1px;
	text-transform: uppercase;
	text-align: left;
	padding: var(--space-3) var(--space-4);
}

/* Two-row (grouped) headers: a heading spanning several columns centres over
   them with a faint rule beneath, and a heading spanning both rows sits on the
   bottom line, level with the column names (exam schedule: "If your class
   meets at" beside Monday..Thursday under "Your examination is scheduled for"). */
.table thead th[colspan] {
	text-align: center;
	border-bottom: 1px solid rgba(255, 255, 255, 0.25);
}

.table thead th[rowspan] {
	vertical-align: bottom;
}

.table td,
.table tbody th {
	padding: var(--space-3) var(--space-4);
	border-bottom: 1px solid var(--band-card-border, var(--au-gray-200));
	color: var(--band-body, var(--au-text));
}

.table tbody th {
	font-weight: 700;
	background: var(--band-card-bg, var(--au-cream));
	vertical-align: top;
}

/* Striped rows */
.table-striped tbody tr:nth-child(even) td {
	background: var(--band-card-bg, rgba(0, 51, 102, 0.02));
}

/* Grouped rows — band alternate row GROUPS, not alternate rows.
   Use one <tbody> per group (that is what tbody is for) and give the table
   .table--grouped: alternate groups get a tinted band and a heavier rule
   above it. This is the variant for tables whose first column is a rowspan
   category label — row-level .table-striped would stripe straight across those
   groups and fight them. Replaces the legacy flat-grey `background-color` fills
   that CKEditor/Word pastes used for the same purpose. */
.table--grouped tbody:nth-of-type(odd) td {
	background: var(--band-card-bg, var(--au-cream));
}

.table--grouped tbody + tbody td {
	border-top: 2px solid var(--band-card-border, var(--au-gray-200));
}

/* Row hover — last so it wins over both banding variants (equal specificity).
   Opt out with .table--nohover. Row highlighting misreads on tables that use
   rowspan: hovering a row cannot light up the spanning category/contact cells
   (those belong to the group's FIRST <tr>), so the highlight comes out ragged
   and half-applied. The :not() keeps the banding intact — it simply never arms
   the hover — rather than trying to repaint the cell back to its band colour. */
.table:not(.table--nohover) tbody tr:hover td {
	background: var(--band-raised, var(--au-gold-pale));
}

/* No-wrap cells — for grids of short values (times, codes, amounts) that
   otherwise break at the hyphen in a narrow column ("10:30-" / "12:30"). The
   table grows instead and scrolls inside its .table-wrap; authored <br>s still
   break. First used on /academics/exam_schedule.html. */
.table--nowrap td {
	white-space: nowrap;
}

/* Compact variant */
.table-compact th,
.table-compact td {
	padding: var(--space-2) var(--space-3);
	font-size: var(--text-xs);
}

/* ─── Responsive: table → cards on mobile ─── */
@media (max-width: 600px) {
	.table-responsive thead {
		display: none;
	}
	.table-responsive tbody tr {
		display: block;
		margin-bottom: var(--space-3);
		border: 1px solid var(--band-card-border, var(--au-gray-200));
		border-radius: var(--radius-md);
	}
	.table-responsive tbody td {
		display: flex;
		justify-content: space-between;
		padding: var(--space-2) var(--space-3);
	}
	/* Label from data-label attribute */
	.table-responsive tbody td::before {
		content: attr(data-label);
		font-weight: 600;
		font-size: var(--text-xs);
		text-transform: uppercase;
		color: var(--band-heading, var(--au-navy));
	}
}
/* ════════════════════════════════════════════════════════════
   au-feedback.css  ·  Callouts & progress
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── Callouts / alerts ─── */
.callout {
	padding: var(--space-4) var(--space-5);
	border-radius: var(--radius-md);
	font-size: var(--text-sm);
	display: flex;
	align-items: flex-start;
	gap: var(--space-3);
	line-height: 1.6;
}

/* [hidden] alone can't hide a display:flex box — make the attribute win */
.callout[hidden] {
	display: none;
}

.callout-info {
	background: #EBF3FA;
	color: var(--au-info);
	border-left: 3px solid var(--au-info);
}

.callout-warning {
	background: var(--au-gold-pale);
	color: #8A6A1E;
	border-left: 3px solid var(--au-gold);
}

.callout-success {
	background: #EBF5EE;
	color: var(--au-success);
	border-left: 3px solid var(--au-success);
}

.callout-error {
	background: #FBECEC;
	color: var(--au-error);
	border-left: 3px solid var(--au-error);
}

/* ─── CTA callout — a set-apart panel: a message beside an action button.
   The clean replacement for the old <table> "excerpt + button" pattern; wraps
   to stacked (text over button) on narrow widths. Text is a <div>, not <p>, so
   it doesn't inherit the .page-main paragraph rhythm. ─── */
.cta-callout {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-4) var(--space-6);
	margin: var(--space-8) 0;
	padding: var(--space-6) var(--space-8);
	background: var(--au-gold-pale);
	border-left: 4px solid var(--au-gold);
	border-radius: var(--radius-md);
}

.cta-callout-text {
	flex: 1 1 320px;
	font-size: var(--text-md);
	color: var(--au-navy);
	line-height: 1.6;
}

.cta-callout .btn {
	flex-shrink: 0;
}

/* ─── sidenote — a boxed aside that floats beside the body on wide screens
   (e.g. "how to submit a request"); the surrounding text wraps around it.
   Unfloats to a full-width block on narrow screens. ─── */
.sidenote {
	float: right;
	width: 300px;
	max-width: 42%;
	margin: var(--space-1) 0 var(--space-5) var(--space-8);
	padding: var(--space-5) var(--space-6);
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-top: 3px solid var(--au-gold);
	border-radius: var(--radius-md);
	font-size: var(--text-sm);
	line-height: 1.6;
}

.sidenote-title {
	font-family: var(--font-display);
	font-size: var(--text-md);
	font-weight: 600;
	color: var(--au-navy);
	line-height: 1.25;
}

@media (max-width: 640px) {
	.sidenote {
		float: none;
		width: auto;
		max-width: none;
		margin-left: 0;
	}
}
/* ─── Progress bar ─── */
.progress-wrap {
	background: var(--au-gray-200);
	border-radius: var(--radius-lg);
	height: 36px;
	overflow: hidden;
	box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.06);
}

.progress-fill {
	height: 100%;
	border-radius: var(--radius-lg);
	background: linear-gradient(90deg, var(--au-navy) 0%, var(--au-navy-light) 100%);
	display: flex;
	align-items: center;
	justify-content: flex-end;
	padding-right: var(--space-4);
	transition: width 2s var(--ease-out);
	position: relative;
}

/* Gold accent edge */
.progress-fill::after {
	content: "";
	position: absolute;
	right: 0;
	top: 0;
	bottom: 0;
	width: 50px;
	background: linear-gradient(90deg, transparent, rgba(198, 149, 43, 0.5));
	border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
}

.progress-label {
	color: var(--au-white);
	font-weight: 700;
	font-size: var(--text-sm);
	position: relative;
	z-index: 2;
}

/* ════════════════════════════════════════════════════════════
   steps.css  ·  numbered step-by-step (how-to guides)
   Depends on: tokens.css
   An ordered list of procedure steps — a gold number badge per step,
   joined by a vertical connector line, with the instruction and an
   (optionally framed) screenshot indented in the step column.

   Authoring (CKEditor-safe — no icons, no manual "Step N", no numbers):
     <ol class="steps">
       <li>
         <p>Do the thing.</p>                     (lead instruction)
         <figure><img src="…" alt="…"></figure>  (optional screenshot)
       </li>
       …
     </ol>
   The numbers and connector line are generated with CSS counters +
   ::before/::after, so the markup stays a clean ordered list. The number
   badge IS the step label, so no "Step 1" text is needed.
   ════════════════════════════════════════════════════════════ */
.steps {
	list-style: none;
	counter-reset: step;
	margin: var(--space-8) 0;
	padding: 0;
}

.steps > li {
	counter-increment: step;
	position: relative;
	margin: 0; /* cancel the global `li + li` gap */
	padding-left: 4rem; /* the badge column */
	padding-bottom: var(--space-10); /* room for the connector to the next step */
}

.steps > li:last-child {
	padding-bottom: 0;
}

/* the number badge */
.steps > li::before {
	content: counter(step);
	position: absolute;
	left: 0;
	top: 0;
	width: 2.5rem;
	height: 2.5rem;
	border-radius: 50%;
	background: var(--au-gold);
	color: var(--au-navy-deep);
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--font-display);
	font-weight: 600;
	font-size: var(--text-lg);
	z-index: 1; /* sit above the connector line */
}

/* the connector line linking a step to the next (not after the last step) */
.steps > li:not(:last-child)::after {
	content: "";
	position: absolute;
	left: 1.25rem; /* centred under the 2.5rem badge */
	top: 3rem; /* just below the badge */
	bottom: 0;
	width: 2px;
	background: var(--au-gray-200);
	transform: translateX(-1px);
}

.steps > li > :first-child {
	margin-top: 0;
}

/* the lead instruction — slightly larger, and nudged down ~0.4rem so its first
   line sits vertically centered against the number badge (the number does the
   "Step N" labelling, so no eyebrow is needed). */
.steps > li > p:first-child {
	font-size: var(--text-md);
	line-height: 1.6;
	margin: 0.4rem 0 0;
}

/* any following text in a step */
.steps p {
	margin: var(--space-2) 0 0;
	line-height: 1.6;
}

/* framed screenshot: hairline border, rounded corners, soft lift; capped so a
   large capture doesn't fill the whole column. Left edge lines up with the text. */
.steps figure {
	margin: var(--space-4) 0 0;
}

.steps figure img {
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-sm);
	max-width: 440px;
	width: 100%;
}

/* phone screenshots (tall, ~300px wide): keep them phone-sized instead of
   stretching to 440px. <ol class="steps steps--phone"> */
.steps--phone figure img {
	max-width: 260px;
}

.steps figcaption {
	margin-top: var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
}

/* tighten the badge column on small screens */
@media (max-width: 560px) {
	.steps > li {
		padding-left: 3.25rem;
	}
	.steps > li::before {
		width: 2.1rem;
		height: 2.1rem;
		font-size: var(--text-md);
	}
	.steps > li:not(:last-child)::after {
		left: 1.05rem;
		top: 2.5rem;
	}
}
/* ════════════════════════════════════════════════════════════
   au-disclosure.css  ·  Accordion & tabbed panels
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── Accordion ─── */
/* Band-aware: reads the section's --band-* context tokens (set on dark bands in
   layout.css) so the accordion adapts automatically — light triggers + dark text
   on light bands, translucent triggers + light text on dark bands — with no
   variant class to remember. Falls back to the light look off a band. */
.accordion {
	border: 2px solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	overflow: hidden;
}

.accordion-item {
	border-bottom: 1px solid var(--band-card-border, var(--au-gray-200));
	/* when deep-linked (js/accordion.js opens the panel and scrolls here), clear
	   the sticky header so the question isn't hidden underneath it. */
	scroll-margin-top: calc(var(--header-height) + var(--space-3));
}

.accordion-item:last-child {
	border-bottom: none;
}

.accordion-item > :is(h1, h2, h3, h4, h5, h6) {
	margin: 0;
	font-size: inherit;
}

.accordion-trigger {
	width: 100%;
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: var(--space-4) var(--space-5);
	background: var(--band-card-bg, var(--au-white));
	border: none;
	cursor: pointer;
	font-family: var(--font-body);
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--band-heading, var(--au-navy));
	text-align: left;
	transition: background var(--duration-fast);
}

.accordion-trigger:hover,
.accordion-trigger[aria-expanded=true] {
	background: var(--band-raised, var(--au-gold-pale));
}

/* a CMS-authored title is sometimes wrapped in a heading (e.g. <h3>). The global
   base.css `h1..h6 { color: navy }` would then paint it dark — invisible on a
   dark band. Tie any heading inside the trigger to the trigger's own band-aware
   colour, and strip the heading's page margins so it sits in the button. */
.accordion-trigger :is(h1, h2, h3, h4, h5, h6) {
	color: inherit;
	margin: 0;
}

.accordion-trigger a {
	color: inherit;
	text-decoration: none;
	pointer-events: none;
}

/* Secondary text on a trigger — a qualifier that belongs with the title rather
   than inside the panel (e.g. "2025-2026 Verification Forms · for classes
   between August 2025 & July 2026"). Legacy Bootstrap panels put this in a
   <span> beside the toggle inside .panel-heading; it has nowhere else to go
   once the heading becomes a button. Lighter and lower-contrast than the
   title, and it wraps rather than squeezing the icon. */
.accordion-note {
	display: block;
	margin-top: var(--space-1);
	font-weight: 400;
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-gray-600));
}

/* the title + note stack on the left; the icon stays pinned right */
.accordion-trigger > :not(.accordion-icon) {
	flex: 1 1 auto;
}

.accordion-trigger .accordion-icon {
	flex: 0 0 auto;
}

/* Plus/minus icon via pseudo-elements */
.accordion-icon {
	width: 20px;
	height: 20px;
	position: relative;
}

.accordion-icon::before,
.accordion-icon::after {
	content: "";
	position: absolute;
	background: var(--band-accent, var(--au-navy));
	border-radius: 2px;
	transition: transform var(--duration-base) var(--ease-out);
}

.accordion-icon::before {
	width: 14px;
	height: 2px;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

.accordion-icon::after {
	width: 2px;
	height: 14px;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

/* Rotate vertical bar to form minus */
.accordion-trigger[aria-expanded=true] .accordion-icon::after {
	transform: translate(-50%, -50%) rotate(90deg);
	opacity: 0;
}

/* Auto-icon: triggers without an explicit .accordion-icon span get +/− via
   ::after (common in content converted from Bootstrap panels). */
.accordion-trigger:not(:has(.accordion-icon))::after {
	content: "";
	flex: 0 0 20px;
	width: 20px;
	height: 20px;
	margin-left: var(--space-3);
	background: linear-gradient(var(--band-accent, var(--au-navy)), var(--band-accent, var(--au-navy))) 50%/14px 2px no-repeat, linear-gradient(var(--band-accent, var(--au-navy)), var(--band-accent, var(--au-navy))) 50%/2px 14px no-repeat;
	transition: var(--duration-base) var(--ease-out);
}

.accordion-trigger[aria-expanded=true]:not(:has(.accordion-icon))::after {
	background: linear-gradient(var(--band-accent, var(--au-navy)), var(--band-accent, var(--au-navy))) 50%/14px 2px no-repeat;
}

/* Anchor remnants from Bootstrap collapse toggles: strip link styling so the
   trigger text looks like normal text, not a hyperlink. */
.accordion-trigger a {
	color: inherit;
	text-decoration: none;
}

/* Flag/icon images inside triggers: override base.css block display,
   size to text, and vertically center with the label. */
.accordion-trigger img {
	display: inline;
	height: 1.2em;
	width: auto;
	vertical-align: middle;
	margin-right: var(--space-2);
}

.accordion-panel {
	max-height: 0;
	overflow: hidden;
	transition: max-height var(--duration-slow) var(--ease-out);
}

/* the open height is set inline by js/accordion.js from the panel's real content
   (no fixed cap here — a hardcoded max-height clipped long panels and hid the
   body's bottom padding). */
.accordion-body {
	padding: var(--space-4) var(--space-5) var(--space-6);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
}

/* links inside the panel follow the band: normal link blue on light, gold on a
   dark band (where navy-blue would vanish). Hover stays gold on both. */
.accordion-body a {
	color: var(--band-accent, var(--au-navy-light));
}

/* headings authored in the rich-text panel follow the band heading colour too,
   so an <h3>/<strong> block stays legible on a dark band. */
.accordion-body :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* Fallback: panels whose content sits in a plain <div> (no .accordion-body class)
   still get body padding and typography. Common in Bootstrap-converted panels. */
.accordion-panel > div:not([class]) {
	padding: var(--space-4) var(--space-5) var(--space-6);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
}

.accordion-panel > div:not([class]) a {
	color: var(--band-accent, var(--au-navy-light));
}

.accordion-panel > div:not([class]) :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* ─── Tabbed panels ─── */
/* Boxed Tabs */
.tabs {
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-lg);
	overflow: hidden;
}

.tab-list {
	display: flex;
	background: var(--au-cream);
	border-bottom: 2px solid var(--au-gray-200);
	overflow-x: auto;
}

.tab-btn {
	font-family: var(--font-body);
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-warm-gray);
	background: transparent;
	border: none;
	padding: var(--space-4) var(--space-5);
	cursor: pointer;
	white-space: nowrap;
	position: relative;
}

.tab-btn:hover {
	color: var(--au-navy);
}

.tab-btn.active {
	color: var(--au-navy);
	background: var(--au-white);
}

/* Gold underline on active tab */
.tab-btn.active::after {
	content: "";
	position: absolute;
	bottom: 0;
	left: 0;
	right: 0;
	height: 3px;
	background: var(--au-gold);
}

.tab-panel {
	display: none;
	padding: var(--space-5);
}

.tab-panel.active {
	display: block;
}

/* ─── Pill-Style Filter Tabs ─── */
.tab-list-pills {
	display: flex;
	gap: var(--space-2);
	flex-wrap: wrap;
	margin-bottom: var(--space-5);
}

.tab-pill {
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--au-warm-gray);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-sm);
	padding: var(--space-2) var(--space-4);
	cursor: pointer;
}

.tab-pill:hover {
	border-color: var(--au-navy);
	color: var(--au-navy);
}

.tab-pill.active {
	background: var(--au-navy);
	border-color: var(--au-navy);
	color: var(--au-white);
}

/* dialog.css · native <dialog> modal
   Trigger: [data-dialog-open="<id>"] opens <dialog id="<id>">
   JS: js/dialog.js (self-inits via init.js) */
.dialog {
	border: 0;
	border-radius: var(--radius-md);
	padding: 0;
	margin: auto;
	max-width: min(640px, 100vw - var(--space-8));
	max-height: calc(100vh - var(--space-10));
	max-height: calc(100dvh - var(--space-10));
	width: 100%;
	box-shadow: var(--shadow-lg);
	overflow: hidden;
}

.dialog[open] {
	display: flex;
	flex-direction: column;
}

.dialog:focus {
	outline: none;
}

/* the page behind a modal doesn't scroll */
html:has(.dialog[open]) {
	overflow: hidden;
}

.dialog::backdrop {
	background: rgba(0, 31, 63, 0.55);
	backdrop-filter: blur(2px);
	-webkit-backdrop-filter: blur(2px);
}

.dialog-header {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-4);
	border-bottom: 1px solid var(--au-gray-200);
}

.dialog .dialog-title {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--au-navy);
	margin: 0;
	line-height: 1.3;
}

.dialog-close {
	flex-shrink: 0;
	background: none;
	border: 0;
	cursor: pointer;
	font-size: 1.25rem;
	line-height: 1;
	color: var(--au-gray-400);
	/* 44px tap target without growing the header */
	padding: var(--space-2) var(--space-3);
	margin: calc(-1 * var(--space-2)) calc(-1 * var(--space-3));
	transition: color var(--duration-base);
}

.dialog-close:focus {
	outline: none;
}

.dialog-close:focus-visible {
	outline: 2px solid var(--au-gold);
	outline-offset: 2px;
	border-radius: var(--radius-sm);
}

.dialog-close:hover {
	color: var(--au-navy);
}

.dialog-body {
	padding: var(--space-4) var(--space-5);
	overflow-y: auto;
	overscroll-behavior: contain;
	font-size: var(--text-base);
	line-height: 1.6;
	color: var(--au-text);
}

.dialog-body > :first-child {
	margin-top: 0;
}

.dialog-body p + p {
	margin-top: var(--space-4);
}

.dialog-body img {
	max-width: 100%;
	height: auto;
	border-radius: var(--radius-md);
	margin-top: var(--space-4);
}

.dialog-body .dialog-img {
	display: block;
	width: 100%;
	max-height: 45vh;
	-o-object-fit: contain;
	   object-fit: contain;
	margin: 0 0 var(--space-4);
	background: var(--au-cream);
}

.dialog-lead {
	font-weight: 600;
	color: var(--au-navy);
}

.dialog-body :is(h2, h3, h4) {
	margin-top: var(--space-5);
	color: var(--au-navy);
}

.dialog-body :is(ul, ol) {
	margin-top: var(--space-3);
	padding-left: var(--space-5);
}

.dialog-body a {
	color: var(--au-navy-light);
}

@media (max-width: 600px) {
	.dialog[open] {
		max-width: 100vw;
		max-height: 100vh;
		max-height: 100dvh;
		height: 100%;
		border-radius: 0;
		margin: 0;
	}
	.dialog-header {
		padding: var(--space-2) var(--space-3);
	}
	.dialog-body {
		padding: var(--space-4);
	}
}
/* clickable triggers */
[data-dialog-open] {
	cursor: pointer;
}

[data-dialog-open]:focus-visible {
	outline: 2px solid var(--au-gold);
	outline-offset: 3px;
}

.card[data-dialog-open]:hover {
	box-shadow: var(--shadow-md);
	transition: box-shadow var(--duration-base);
}

/* ════════════════════════════════════════════════════════════
   au-media.css  ·  Carousel, gallery & video
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── Carousel ─── */
.carousel {
	position: relative;
	overflow: hidden;
	border-radius: var(--radius-lg);
	/* set --carousel-ratio on the element for photos of another shape (e.g.
	   style="--carousel-ratio: 720 / 325"); the phone caption layout below reads it */
	aspect-ratio: var(--carousel-ratio, 3/2);
}

.carousel-track {
	display: flex;
	height: 100%;
	transition: transform 0.5s var(--ease-out);
}

.carousel-slide {
	flex: 0 0 100%;
	height: 100%;
	position: relative;
}

.carousel-slide img {
	width: 100%;
	height: 100%;
	display: block;
	-o-object-fit: cover;
	   object-fit: cover;
}

/* Size variants override the default aspect ratio */
.carousel-compact {
	aspect-ratio: unset;
}

.carousel-compact .carousel-slide img {
	height: 320px;
}

.carousel-hero {
	aspect-ratio: unset;
	border-radius: 0;
}

.carousel-hero .carousel-slide img {
	height: 480px;
}

/* ── Peek variant ──
   Film-strip carousel: all images scaled to the same height, each slide
   is as wide as its image's natural proportions. Clicking centers the next
   image; narrower images show more of the neighboring slides on each side.
   The .carousel--peek has overflow:visible; .carousel-peek-wrap clips it. */
.carousel-peek-wrap {
	overflow: hidden;
}

.carousel--peek {
	overflow: visible;
	max-width: 850px;
	margin: 0 auto;
	aspect-ratio: 2/1; /* panoramic; overrides 3/2 from .carousel */
}

.carousel--peek .carousel-slide {
	flex: 0 0 auto; /* natural width per image, not 100% */
	height: 100%;
}

.carousel--peek .carousel-slide img {
	height: 100%;
	width: auto;
	display: block;
	-o-object-fit: initial;
	   object-fit: initial;
}

/* Caption overlay */
.carousel-caption {
	position: absolute;
	bottom: 0;
	left: 0;
	right: 0;
	padding: var(--space-8) var(--space-6) var(--space-5);
	background: linear-gradient(transparent, rgba(0, 0, 0, 0.7));
	color: var(--au-white);
}

/* Prev/Next buttons */
.carousel-btn {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	width: 40px;
	height: 40px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.9);
	border: none;
	cursor: pointer;
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
	z-index: 2;
	font-size: 18px;
	color: var(--au-navy);
}

.carousel-prev {
	left: var(--space-3);
}

.carousel-next {
	right: var(--space-3);
}

/* Dot indicators */
.carousel-dots {
	position: absolute;
	bottom: var(--space-3);
	left: 50%;
	transform: translateX(-50%);
	display: flex;
	gap: 8px;
	z-index: 2;
}

.carousel-dot {
	width: 10px;
	height: 10px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.5);
	border: none;
	cursor: pointer;
}

.carousel-dot.active {
	background: var(--au-white);
	transform: scale(1.2);
}

/* ── Captions on phones ──
   The caption is an overlay, which suits a line on a tall photo; on a phone a
   sentence or two covers most of the picture, faces included
   (/services/research/communityengagement/). Up to 640px a carousel with
   captions puts each caption BELOW its photo on a navy panel: the photo keeps
   the carousel's ratio, the slides stretch to the longest caption, and the
   arrows and dots stay on the photo (container units: 100cqi is the carousel's
   width, so width / ratio is the photo's height). Peek carousels are left alone. */
@media (max-width: 640px) {
	.carousel:not(.carousel--peek):has(.carousel-caption) {
		aspect-ratio: auto;
		container-type: inline-size;
		background: var(--au-navy-deep);
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-track,
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-slide {
		height: auto;
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-slide {
		display: flex;
		flex-direction: column;
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-slide img {
		height: auto;
		aspect-ratio: var(--carousel-ratio, 3/2);
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-caption {
		position: static;
		flex: 1;
		background: var(--au-navy-deep);
		padding: var(--space-4) var(--space-4) var(--space-5);
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-btn {
		top: calc(100cqi / (var(--carousel-ratio, 3/2)) / 2);
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-dots {
		bottom: auto;
		top: calc(100cqi / (var(--carousel-ratio, 3/2)) - var(--space-3) - 12px);
	}
}
/* ─── Photo gallery + lightbox ─── */
.gallery {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
	gap: var(--space-3);
}

.gallery-item {
	position: relative;
	overflow: hidden;
	border-radius: var(--radius-md);
	cursor: pointer;
	aspect-ratio: 4/3;
}

.gallery-item img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
	transition: transform var(--duration-base);
}

.gallery-item:hover img {
	transform: scale(1.05);
}

/* Gallery orientation variants — add the modifier to the .gallery element in CKEditor source:
   .gallery--portrait  → tall/phone shots (headshots, portraits)
   .gallery--square    → square thumbnails
   .gallery--natural   → each image shows at its own natural proportions (masonry columns) */
.gallery--portrait .gallery-item {
	aspect-ratio: 3/4;
}

.gallery--square .gallery-item {
	aspect-ratio: 1;
}

.gallery--natural {
	display: block;
	-moz-columns: 3;
	     columns: 3;
	-moz-column-gap: var(--space-3);
	     column-gap: var(--space-3);
}

.gallery--natural .gallery-item {
	aspect-ratio: unset;
	-moz-column-break-inside: avoid;
	     break-inside: avoid;
	margin-bottom: var(--space-3);
}

.gallery--natural .gallery-item img {
	width: 100%;
	height: auto;
	-o-object-fit: unset;
	   object-fit: unset;
}

@media (max-width: 600px) {
	.gallery--natural {
		-moz-columns: 2;
		     columns: 2;
	}
}
/* Lightbox overlay */
.lightbox {
	position: fixed;
	inset: 0;
	background: rgba(0, 10, 20, 0.92);
	z-index: 1100;
	display: flex;
	align-items: center;
	justify-content: center;
	opacity: 0;
	visibility: hidden;
	transition: all var(--duration-base);
}

.lightbox.open {
	opacity: 1;
	visibility: visible;
}

.lightbox-img {
	max-width: 90vw;
	max-height: 85vh;
	-o-object-fit: contain;
	   object-fit: contain;
	border-radius: var(--radius-md);
	box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
}

.lightbox-close,
.lightbox-nav {
	position: absolute;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.1);
	border: none;
	color: var(--au-white);
	cursor: pointer;
	width: 44px;
	height: 44px;
	display: flex;
	align-items: center;
	justify-content: center;
}

.lightbox-close {
	top: var(--space-5);
	right: var(--space-5);
}

.lightbox-prev {
	top: 50%;
	left: var(--space-5);
}

.lightbox-next {
	top: 50%;
	right: var(--space-5);
}

/* ─── Video embeds ─── */
.video {
	position: relative;
	border-radius: var(--radius-lg);
	overflow: hidden;
	background: #000;
	align-self: start;
	aspect-ratio: 16/9;
}

.video iframe,
.video video {
	display: block;
	width: 100%;
	height: 100%;
	border: none;
}

/* text beside a video (video.tt content_position left/right) — centred on it */
.video-side {
	align-self: center;
}

.video-side :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* 16:9 responsive wrapper */
.video-responsive {
	position: relative;
	aspect-ratio: 16/9;
}

.video-responsive iframe,
.video-responsive video {
	display: block;
	width: 100%;
	height: 100%;
	border: none;
}

/* Poster thumbnail + play button */
.video-poster {
	position: relative;
	cursor: pointer;
}

.video-poster img {
	width: 100%;
	display: block;
	aspect-ratio: 16/9;
	-o-object-fit: cover;
	   object-fit: cover;
}

.video-play {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 72px;
	height: 72px;
	border-radius: 50%;
	background: rgba(0, 51, 102, 0.85);
	border: 3px solid rgba(255, 255, 255, 0.3);
	display: flex;
	align-items: center;
	justify-content: center;
}

/* CSS triangle play icon */
.video-play::after {
	content: "";
	border-style: solid;
	border-width: 12px 0 12px 22px;
	border-color: transparent transparent transparent var(--au-white);
	margin-left: 4px;
}

.video-poster:hover .video-play {
	background: var(--au-navy);
	border-color: var(--au-gold);
	transform: translate(-50%, -50%) scale(1.1);
}

.video-caption {
	padding: var(--space-3) var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	background: var(--au-cream);
}

/* ════════════════════════════════════════════════════════════
   team.css  ·  staff / "meet the team" grid  (deptstaffindex.dt)
   Depends on: tokens.css
   A responsive grid of people — portrait photo, name, role, contact.
   Photos lead (they get the space); the old Photo/Name/Contact table is gone.
   ════════════════════════════════════════════════════════════ */
.team {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
	gap: var(--space-10) var(--space-6);
}

/* intro content above the grid (the index page's above_content) — space it off
   the photos instead of relying on authored blank paragraphs. */
.page-main > :not(h1) + .team {
	margin-top: var(--space-8);
}

.team-photo {
	position: relative;
	display: block;
	overflow: hidden;
	aspect-ratio: 3/4;
	border-radius: var(--radius-md);
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	text-decoration: none;
}

/* no photo (or a broken one): initials on one of eight brand gradients (from the design guide's image
   placeholders), picked from the person's initials and name lengths.
   The photo sits on top of the initials, so they only show when there is no photo. */
.team-photo--g1 {
	background: linear-gradient(150deg, var(--au-navy-light), var(--au-gold));
}

.team-photo--g2 {
	background: linear-gradient(120deg, var(--au-navy-deep), var(--au-navy));
}

.team-photo--g3 {
	background: linear-gradient(165deg, var(--au-navy), var(--au-gold-light));
}

.team-photo--g4 {
	background: linear-gradient(210deg, var(--au-gold), var(--au-navy));
}

.team-photo--g5 {
	background: linear-gradient(45deg, var(--au-navy-deep), var(--au-navy-light));
}

.team-photo--g6 {
	background: linear-gradient(20deg, var(--au-navy-light), var(--au-gold-light));
}

.team-photo--g7 {
	background: radial-gradient(circle at 80% 15%, rgba(232, 184, 75, 0.55), transparent 55%), linear-gradient(180deg, var(--au-navy), var(--au-navy-deep));
}

/* flowing mesh gradient (js/team.js): one pattern flows across every photo tile of a grid; the script
   shifts each tile's background by its offset in the grid, so the tiles read as windows onto one surface.
   The pattern is a Colorffy-style "mesh gradient": 8 broad brand-colour points (navy, light/deep navy,
   gold, light gold) with very wide falloff, in a 1300px 1500px unit that repeats. Every point that
   crosses the unit's edge is copied to the opposite side, so the repeat has no seams. */
.team--flow .team-photo {
	background-image: radial-gradient(442px 510px at -104px -45px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(442px 510px at -104px 1455px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(442px 510px at 1196px -45px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(442px 510px at 1196px 1455px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(546px 630px at 260px -420px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(546px 630px at 260px 1080px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(546px 630px at 1560px -420px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(546px 630px at 1560px 1080px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(520px 600px at -182px 869px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(520px 600px at 1118px 869px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(546px 630px at 286px 240px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(546px 630px at 286px 1740px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(546px 630px at 1586px 240px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(546px 630px at 1586px 1740px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(585px 675px at 130px 630px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(585px 675px at 130px 2130px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(585px 675px at 1430px 630px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(585px 675px at 1430px 2130px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(780px 900px at -584px -210px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(780px 900px at -584px 1290px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(780px 900px at 715px -210px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(780px 900px at 715px 1290px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(780px 900px at 2015px -210px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(780px 900px at 2015px 1290px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(715px 825px at -624px -750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at -624px 750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at -624px 2250px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 676px -750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 676px 750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 676px 2250px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 1976px -750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 1976px 750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 1976px 2250px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(780px 900px at -364px 330px, rgba(0, 26, 51, 0.95) 0%, rgba(0, 26, 51, 0.55) 35%, rgba(0, 26, 51, 0.15) 70%, rgba(0, 26, 51, 0) 100%), radial-gradient(780px 900px at -364px 1830px, rgba(0, 26, 51, 0.95) 0%, rgba(0, 26, 51, 0.55) 35%, rgba(0, 26, 51, 0.15) 70%, rgba(0, 26, 51, 0) 100%), radial-gradient(780px 900px at 936px 330px, rgba(0, 26, 51, 0.95) 0%, rgba(0, 26, 51, 0.55) 35%, rgba(0, 26, 51, 0.15) 70%, rgba(0, 26, 51, 0) 100%), radial-gradient(780px 900px at 936px 1830px, rgba(0, 26, 51, 0.95) 0%, rgba(0, 26, 51, 0.55) 35%, rgba(0, 26, 51, 0.15) 70%, rgba(0, 26, 51, 0) 100%), linear-gradient(var(--au-navy), var(--au-navy));
	background-size: 1300px 1500px;
	background-repeat: repeat;
}

.team-initials {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--font-display);
	font-size: clamp(2.5rem, 6vw, 3.5rem);
	font-weight: 600;
	letter-spacing: 0.02em;
	color: rgba(255, 255, 255, 0.92);
	text-shadow: 0 1px 3px rgba(0, 26, 51, 0.35); /* keeps white initials legible on the gold end */
	text-transform: uppercase;
}

.team-photo img {
	position: relative;
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	object-fit: cover;
	transition: transform var(--duration-base) var(--ease-out);
}

.team-photo:hover img {
	transform: scale(1.04);
}

.team-name {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	line-height: 1.2;
	margin-top: var(--space-4);
}

.team-name a {
	color: var(--au-navy);
	text-decoration: none;
}

.team-name a:hover {
	color: var(--au-gold);
}

.team-role {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.4;
	margin-top: var(--space-1);
	/* long titles stop at three lines; the full one is in the title attribute and on the profile */
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 3;
	line-clamp: 3;
	overflow: hidden;
}

/* a heading between several team grids on one page (e.g. /chhs/faculty/: one grid per school) */
.page-main .team-group {
	margin: var(--space-12) 0 var(--space-6);
	padding-top: var(--space-6);
	border-top: 1px solid var(--au-gray-200);
}

.page-main h1 + .team-group {
	margin-top: var(--space-6);
	padding-top: 0;
	border-top: 0;
}

.team-contact {
	list-style: none;
	margin: var(--space-3) 0 0;
	padding: 0;
	font-size: var(--text-sm);
	color: var(--au-text);
	display: flex;
	flex-direction: column;
	gap: var(--space-1);
}

.team-contact a {
	color: var(--au-navy-light);
	text-decoration: none;
}

.team-contact a:hover {
	color: var(--au-gold);
}

.team-contact .team-appt {
	font-weight: 600;
}

/* ════════════════════════════════════════════════════════════
   individual staff profile  (deptstaffitem.dt) — renders inside .page-main.
   FOUR selectable layouts, chosen per section (index CT) or per person
   (item CT): .staff--feature · .staff--card · .staff--centered · .staff--split.
   Shared pieces first, then per-layout blocks.
   ════════════════════════════════════════════════════════════ */
/* ─── shared: portrait, name, role, facts, links, contact chips, body ─── */
.staff-portrait img {
	display: block;
	width: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
	background: var(--au-gray-200);
}

.page-main h1.staff-name {
	margin: 0;
	padding-bottom: 0;
	font-size: var(--text-3xl);
	line-height: 1.05;
	letter-spacing: -0.01em;
	color: var(--au-navy);
}

.page-main h1.staff-name::after {
	display: none;
} /* no page-header gold rule here */
.page-main .staff-role {
	margin: var(--space-2) 0 0;
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	font-size: var(--text-lg);
	line-height: 1.35;
	color: var(--au-navy-light);
}

.page-main .staff-facts {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	font-size: var(--text-base);
}

.staff-facts li {
	display: flex;
	gap: var(--space-4);
}

.staff-facts li > span:last-child {
	min-width: 0;
	overflow-wrap: break-word;
}

.staff-facts .fact-label {
	flex: 0 0 4.5rem;
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--au-warm-gray);
	padding-top: 0.25em;
}

.staff-facts a {
	color: var(--au-navy-light);
	text-decoration: none;
}

.staff-facts a:hover {
	color: var(--au-gold);
}

.page-main .staff-links {
	list-style: none;
	margin: var(--space-4) 0 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	font-size: var(--text-sm);
}

.staff-links a {
	color: var(--au-navy-light);
	text-decoration: none;
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
}

.staff-links a:hover {
	color: var(--au-gold);
}

.staff-links i {
	color: var(--au-gold);
	font-size: 0.85em;
	width: 1em;
	text-align: center;
}

/* contact chips/pills (feature + centered) */
.staff-contact {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-3);
}

.staff-contact a {
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
	font-size: var(--text-sm);
	text-decoration: none;
	padding: var(--space-2) var(--space-4);
	border-radius: var(--radius-full);
	transition: background var(--duration-fast) var(--ease-out);
}

.staff-contact svg {
	width: 15px;
	height: 15px;
	fill: none;
	stroke-width: 1.8;
	flex-shrink: 0;
}

/* appointment button (card + split reuse .btn) */
.staff-appt {
	margin-top: var(--space-6);
}

/* shared prose body — gold Plex-Mono eyebrows on the section headings */
.staff-body {
	margin-top: var(--space-10);
	overflow-wrap: break-word;
}

.page-main .staff-body h2 {
	font-family: var(--font-mono);
	font-weight: 600;
	font-size: var(--text-xs);
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--au-gold);
	margin-top: var(--space-8);
	margin-bottom: var(--space-3);
}

.page-main .staff-body > h2:first-child {
	margin-top: 0;
}

.staff-body p {
	line-height: 1.72;
}

/* ─── A · Editorial Feature — navy hero band, gold-framed portrait ─── */
.staff--feature .staff-hero {
	position: relative;
	overflow: hidden;
	border-radius: var(--radius-lg);
	padding: var(--space-8);
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-deep));
	color: #fff;
}

.staff--feature .staff-hero::before {
	content: "";
	position: absolute;
	right: -80px;
	top: -80px;
	width: 260px;
	height: 260px;
	border-radius: 50%;
	background: radial-gradient(circle, rgba(232, 184, 75, 0.14), transparent 68%);
}

.staff--feature .staff-hero-inner {
	position: relative;
	display: grid;
	grid-template-columns: 180px 1fr;
	gap: var(--space-8);
	align-items: center;
}

.staff--feature .staff-portrait {
	width: 180px;
}

.staff--feature .staff-portrait img {
	aspect-ratio: 4/5;
	border-radius: var(--radius-md);
	border: 3px solid rgba(232, 184, 75, 0.85);
	box-shadow: 0 14px 34px rgba(0, 0, 0, 0.4);
}

.page-main .staff--feature h1.staff-name {
	color: #fff;
	font-size: var(--text-4xl);
	line-height: 1.02;
}

.staff--feature .staff-role {
	color: #e7ddc9;
}

.staff--feature .staff-contact {
	margin-top: var(--space-5);
}

.staff--feature .staff-contact a {
	color: #fff;
	background: rgba(255, 255, 255, 0.09);
	border: 1px solid rgba(255, 255, 255, 0.16);
}

.staff--feature .staff-contact a:hover {
	background: rgba(255, 255, 255, 0.16);
}

.staff--feature .staff-contact svg {
	stroke: var(--au-gold-light);
}

.staff--feature .staff-contact a.is-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
	font-weight: 600;
}

.staff--feature .staff-contact a.is-primary svg {
	stroke: var(--au-navy-deep);
}

.staff--feature .staff-links {
	margin-top: var(--space-6);
}

.staff--feature .staff-body {
	max-width: 70ch;
}

@media (max-width: 560px) {
	.staff--feature .staff-hero-inner {
		grid-template-columns: 1fr;
		justify-items: start;
	}
}
/* ─── B · Contact Card Rail — sticky cream card + scrolling bio ─── */
.staff--card .staff-cols {
	display: grid;
	grid-template-columns: 280px 1fr;
	gap: var(--space-8);
	align-items: start;
	min-width: 0;
}

.staff--card .staff-card {
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-top: 3px solid var(--au-gold);
	border-radius: var(--radius-lg);
	padding: var(--space-5);
	box-shadow: var(--shadow-md);
	position: sticky;
	top: calc(var(--header-height) + var(--space-3));
}

.staff--card .staff-portrait img {
	aspect-ratio: 4/5;
	border-radius: var(--radius-md);
	margin-bottom: var(--space-4);
}

.page-main .staff--card h1.staff-name {
	font-size: var(--text-2xl);
}

.staff--card .staff-role {
	font-size: var(--text-md);
}

.staff--card .staff-facts {
	border-top: 1px solid var(--au-gray-200);
	margin-top: var(--space-4);
	padding-top: var(--space-4);
	font-size: var(--text-sm);
}

.staff--card .fact-label {
	flex: 0 0 3.5rem;
}

.staff--card .staff-appt {
	display: flex;
	width: 100%;
	margin-top: var(--space-4);
}

.staff--card .staff-body {
	margin-top: 0;
	min-width: 0;
}

@media (max-width: 720px) {
	.staff--card .staff-cols {
		grid-template-columns: 1fr;
	}
	.staff--card .staff-card {
		position: static;
	}
}
/* ─── C · Centered Portrait — symmetrical, gold corner + flourish ─── */
.staff--centered {
	max-width: 760px;
	margin-inline: auto;
	text-align: center;
}

.staff--centered .staff-portrait {
	position: relative;
	width: 210px;
	margin: 0 auto var(--space-5);
}

.staff--centered .staff-portrait img {
	aspect-ratio: 4/5;
	border-radius: var(--radius-lg);
}

.staff--centered .staff-portrait::after {
	content: "";
	position: absolute;
	right: -12px;
	bottom: -12px;
	width: 64px;
	height: 64px;
	border-right: 3px solid var(--au-gold);
	border-bottom: 3px solid var(--au-gold);
	border-radius: 0 0 var(--radius-lg) 0;
}

.staff--centered .staff-rule {
	width: 44px;
	height: 3px;
	margin: var(--space-4) auto;
	background: var(--au-gold);
	border-radius: 2px;
}

.staff--centered .staff-role {
	color: var(--au-warm-gray);
}

.staff--centered .staff-contact {
	justify-content: center;
	margin-top: var(--space-5);
}

.staff--centered .staff-contact a {
	color: var(--au-navy);
	background: var(--au-gold-pale);
	border: 1px solid #f0e2c4;
}

.staff--centered .staff-contact a:hover {
	background: #fbeecf;
}

.staff--centered .staff-contact svg {
	stroke: var(--au-gold);
}

.staff--centered .staff-contact a.is-primary {
	background: var(--au-navy);
	color: #fff;
	border-color: var(--au-navy);
}

.staff--centered .staff-contact a.is-primary svg {
	stroke: var(--au-gold-light);
}

.staff--centered .staff-body {
	max-width: 62ch;
	margin: var(--space-8) auto 0;
	padding-top: var(--space-8);
	border-top: 1px solid var(--au-gray-200);
	text-align: left;
}

/* ─── D · Split Feature — full-height portrait + cream panel ─── */
.staff--split .staff-top {
	display: grid;
	grid-template-columns: 42% 1fr;
	border-radius: var(--radius-lg);
	overflow: hidden;
}

.staff--split .staff-portrait {
	height: 100%;
}

.staff--split .staff-portrait img {
	height: 100%;
	min-height: 360px;
	border-radius: 0;
}

.staff--split .staff-panel {
	background: var(--au-cream);
	padding: var(--space-8);
	display: flex;
	flex-direction: column;
	justify-content: center;
}

.page-main .staff--split h1.staff-name {
	font-size: var(--text-3xl);
}

.staff--split .staff-role {
	color: var(--au-navy-light);
}

.staff--split .staff-facts {
	margin-top: var(--space-5);
}

.staff--split .staff-appt {
	align-self: start;
}

.staff--split .staff-body {
	max-width: 74ch;
}

@media (max-width: 640px) {
	.staff--split .staff-top {
		grid-template-columns: 1fr;
	}
	.staff--split .staff-portrait img {
		min-height: 300px;
	}
}
/* ════════════════════════════════════════════════════════════
   bio directory — portrait grid  (components/bio.tt)
   Photo-forward people cards: a portrait headshot on top, then name +
   blurb. Auto-fills across the section and reflows down (…→3→2→1) as the
   viewport narrows — no breakpoints needed. Reads as a faculty directory,
   distinct from the columns card grid and the Meet-the-Team portrait grid.
   ════════════════════════════════════════════════════════════ */
/* standalone rich-text intro above the directory (the section's "text" area).
   Band-aware so it reads on dark bands; a readable measure for plain copy. */
.bio-intro {
	max-width: var(--max-width-text);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
	margin-bottom: var(--space-10);
}

.bio-intro > :first-child {
	margin-top: 0;
}

.bio-intro :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

.bio-intro a {
	color: var(--band-accent, var(--au-navy-light));
}

.bio-intro p + p {
	margin-top: var(--space-4);
}

.bio-directory {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
	gap: var(--space-8) var(--space-6);
}

.bio-entry {
	display: flex;
	flex-direction: column;
}

.bio-photo img {
	display: block;
	width: 100%;
	aspect-ratio: 4/5;
	-o-object-fit: cover;
	   object-fit: cover;
	border-radius: var(--radius-md);
	background: var(--au-gray-200);
}

.bio-name {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--band-heading, var(--au-navy));
	line-height: 1.2;
	margin-top: var(--space-4);
}

.bio-blurb {
	margin-top: var(--space-2);
	color: var(--band-body, var(--au-warm-gray));
	font-size: var(--text-sm);
	line-height: 1.6;
	overflow-wrap: break-word;
}

.bio-blurb p + p {
	margin-top: var(--space-2);
}

/* single-person bio — horizontal card instead of the portrait-grid column */
.bio-entry:only-child {
	grid-column: 1/-1;
	background: var(--au-cream);
	border-radius: var(--radius-lg);
	padding: var(--space-6);
	max-width: 640px;
}

.bio-entry:only-child .bio-photo img {
	aspect-ratio: 3/4;
}

@media (min-width: 601px) {
	.bio-entry:only-child {
		flex-direction: row;
		gap: var(--space-6);
	}
	.bio-entry:only-child .bio-photo {
		flex: 0 0 200px;
	}
	.bio-entry:only-child .bio-detail {
		min-width: 0;
	}
	.bio-entry:only-child .bio-name {
		margin-top: 0;
	}
}
@media (max-width: 600px) {
	.bio-entry:only-child .bio-photo {
		max-width: 200px;
	}
}
/* bio + split token (Custom Class "split-3-2" / "split-2-3", the same tokens the
   columns grid uses): the people on one side as horizontal cards, the section's
   intro text beside them, as the legacy homepage bio feature laid them out. */
@media (min-width: 761px) {
	:is(.split-3-2, .split-2-3) > .section-inner:has(> .bio-directory) {
		display: grid;
		-moz-column-gap: var(--space-10);
		     column-gap: var(--space-10);
		align-items: start;
	}
	.split-3-2 > .section-inner:has(> .bio-directory) {
		grid-template-columns: 3fr 2fr;
	}
	.split-2-3 > .section-inner:has(> .bio-directory) {
		grid-template-columns: 2fr 3fr;
	}
	:is(.split-3-2, .split-2-3) > .section-inner > .section-head {
		grid-column: 1/-1;
	}
	:is(.split-3-2, .split-2-3) > .section-inner > .bio-directory {
		grid-column: 1;
		grid-row: 2;
	}
	:is(.split-3-2, .split-2-3) > .section-inner > .bio-intro {
		grid-column: 2;
		grid-row: 2;
		margin-bottom: 0;
	}
}
:is(.split-3-2, .split-2-3) .bio-directory {
	grid-template-columns: 1fr;
	gap: var(--space-5);
}

:is(.split-3-2, .split-2-3) .bio-entry {
	flex-direction: row;
	gap: var(--space-5);
	background: var(--au-white);
	border-radius: var(--radius-md);
	padding: var(--space-5);
	max-width: none;
}

:is(.split-3-2, .split-2-3) .bio-photo {
	flex: 0 0 160px;
}

:is(.split-3-2, .split-2-3) .bio-detail {
	min-width: 0;
}

:is(.split-3-2, .split-2-3) .bio-name {
	margin-top: 0;
}

@media (max-width: 480px) {
	:is(.split-3-2, .split-2-3) .bio-photo {
		flex-basis: 110px;
	}
}
/* decorative image-only rows span the whole grid width */
.bio-figure {
	grid-column: 1/-1;
}

.bio-figure img {
	width: 100%;
	border-radius: var(--radius-lg);
}

/* ════════════════════════════════════════════════════════════
   dept.css  ·  department section-page template (dept_main.wrap)
   Depends on: tokens.css, layout.css (.section bands)

   A department variant of the homepage-advanced display: a sticky dark
   navy rail (department identity + section jump-nav + CTAs) beside the
   normal page.dt section stack. Same sections, same content types —
   only the surround differs.

   ONE rail, two states (the demo's separate sidebar + icon-strip are
   merged so there's a single set of markup to maintain):
     ≥1080   full rail, labels visible
     <1080   collapses to a slim dot strip; the toggle opens it as an
             overlay panel over a backdrop
   ════════════════════════════════════════════════════════════ */
:root {
	--dept-rail-w: 250px; /* expanded rail */
	--dept-strip-w: 60px; /* collapsed dot strip */
}

/* ─── LAYOUT ─── */
.dept-layout {
	display: flex;
	align-items: flex-start;
}

.dept-main {
	flex: 1;
	min-width: 0;
}

/* Sections inside the dept column keep the band system but sit in a
   narrower measure, so the inner max-width rarely binds — pull the
   horizontal padding in a little so content isn't crowded to the rail. */
.dept-main .section {
	padding-inline: var(--space-8);
}

.dept-main .section-inner {
	max-width: 1000px;
	margin-inline: 0;
}

/* ─── RAIL ─── */
.dept-rail {
	width: var(--dept-rail-w);
	flex-shrink: 0;
	position: sticky;
	top: var(--header-height);
	height: calc(100vh - var(--header-height));
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.85);
	border-right: 1px solid rgba(255, 255, 255, 0.07);
	display: flex;
	flex-direction: column;
	overflow: hidden;
	z-index: 60;
	transition: width var(--duration-base) var(--ease-out);
}

.dept-rail-scroll {
	flex: 1;
	overflow-y: auto;
	overscroll-behavior: contain;
	padding: var(--space-6) 0 var(--space-4);
	scrollbar-width: thin;
	scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
}

.dept-rail-scroll::-webkit-scrollbar {
	width: 6px;
}

.dept-rail-scroll::-webkit-scrollbar-thumb {
	background: rgba(255, 255, 255, 0.2);
	border-radius: 3px;
}

/* department identity */
.dept-id {
	padding: 0 var(--space-5) var(--space-5);
}

.dept-id-eye {
	display: block;
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--au-gold-light);
	margin-bottom: var(--space-1);
}

.dept-id-name {
	display: block;
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	line-height: 1.25;
	color: var(--au-white);
}

/* jump-nav */
.dept-nav-title {
	padding: 0 var(--space-5) var(--space-3);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.45);
}

.dept-link {
	display: flex;
	align-items: center;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-5);
	font-size: var(--text-sm);
	line-height: 1.35;
	color: rgba(255, 255, 255, 0.72);
	text-decoration: none;
	border-left: 2px solid transparent;
	transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);
}

.dept-link:hover {
	background: rgba(255, 255, 255, 0.06);
	color: var(--au-white);
}

.dept-link.is-current {
	color: var(--au-white);
	font-weight: 600;
	border-left-color: var(--au-gold);
	background: rgba(255, 255, 255, 0.05);
}

/* wayfinding dot — the demo used six hues; kept on-palette here, with the
   active state (gold, filled) carrying the signal instead of colour count */
.dept-dot {
	flex-shrink: 0;
	width: 9px;
	height: 9px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.28);
	transition: background var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out);
}

.dept-link.is-current .dept-dot {
	background: var(--au-gold);
	transform: scale(1.25);
}

.dept-link-label {
	min-width: 0;
}

/* rail footer — CTAs + dept mark */
.dept-rail-bottom {
	flex-shrink: 0;
	padding: var(--space-4) var(--space-5) var(--space-5);
	border-top: 1px solid rgba(255, 255, 255, 0.08);
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
}

.dept-cta {
	display: block;
	text-align: center;
	padding: var(--space-3) var(--space-4);
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
	font-weight: 600;
	text-decoration: none;
	border: 2px solid transparent;
	transition: all var(--duration-base) var(--ease-out);
}

.dept-cta-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
}

.dept-cta-primary:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-navy-deep);
}

.dept-cta-ghost {
	color: var(--au-gold-light);
	border-color: rgba(255, 255, 255, 0.3);
}

.dept-cta-ghost:hover {
	background: rgba(255, 255, 255, 0.08);
	border-color: var(--au-gold-light);
	color: var(--au-white);
}

/* institutional lockup at the foot of the rail */
.dept-mark {
	margin-top: var(--space-4);
	opacity: 0.75;
}

.dept-mark img {
	height: 26px;
	width: auto;
}

.dept-mark a:hover {
	opacity: 1;
}

/* toggle — hidden on desktop, becomes the strip control below 1080 */
.dept-rail-toggle {
	display: none;
	align-items: center;
	gap: var(--space-3);
	width: 100%;
	padding: var(--space-4) var(--space-5);
	background: none;
	border: 0;
	border-bottom: 1px solid rgba(255, 255, 255, 0.08);
	color: var(--au-white);
	cursor: pointer;
	text-align: left;
}

.dept-ham {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 4px;
	width: 18px;
	flex-shrink: 0;
}

.dept-ham span {
	height: 2px;
	background: currentColor;
	border-radius: 2px;
	transition: transform var(--duration-base) var(--ease-out), opacity var(--duration-base);
}

.dept-rail-toggle[aria-expanded=true] .dept-ham span:nth-child(1) {
	transform: translateY(6px) rotate(45deg);
}

.dept-rail-toggle[aria-expanded=true] .dept-ham span:nth-child(2) {
	opacity: 0;
}

.dept-rail-toggle[aria-expanded=true] .dept-ham span:nth-child(3) {
	transform: translateY(-6px) rotate(-45deg);
}

.dept-toggle-label {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.14em;
	text-transform: uppercase;
}

.dept-backdrop {
	display: none;
	position: fixed;
	inset: 0;
	background: rgba(0, 26, 51, 0.45);
	opacity: 0;
	visibility: hidden;
	transition: opacity var(--duration-base), visibility var(--duration-base);
	z-index: 55;
}

body.dept-rail-open .dept-backdrop {
	opacity: 1;
	visibility: visible;
}

/* ─── COLLAPSED STRIP (<1080) ─── */
@media (max-width: 1080px) {
	.dept-rail {
		width: var(--dept-strip-w);
	}
	.dept-rail-toggle {
		display: flex;
	}
	.dept-backdrop {
		display: block;
	}
	/* strip state: dots only */
	.dept-rail .dept-id,
	.dept-rail .dept-nav-title,
	.dept-rail .dept-rail-bottom,
	.dept-rail .dept-link-label,
	.dept-rail .dept-toggle-label {
		display: none;
	}
	.dept-link {
		justify-content: center;
		padding-inline: 0;
	}
	/* expanded overlay */
	.dept-rail.is-open {
		width: var(--dept-rail-w);
		box-shadow: 0 12px 40px rgba(0, 0, 0, 0.35);
	}
	.dept-rail.is-open .dept-id,
	.dept-rail.is-open .dept-nav-title,
	.dept-rail.is-open .dept-rail-bottom,
	.dept-rail.is-open .dept-link-label,
	.dept-rail.is-open .dept-toggle-label {
		display: block;
	}
	.dept-rail.is-open .dept-rail-bottom {
		display: flex;
	}
	.dept-rail.is-open .dept-link {
		justify-content: flex-start;
		padding-inline: var(--space-5);
	}
	.dept-main .section {
		padding-inline: var(--space-6);
	}
}
/* below the strip's usefulness: rail goes horizontal-free, content leads */
/* Very narrow: the rail STAYS a vertical side strip — it never becomes a
   full-width bar across the top (that's how the demo's icon strip behaves,
   and it keeps the page nav reachable without scrolling back up). Only the
   strip width and the content gutters tighten. */
@media (max-width: 700px) {
	:root {
		--dept-strip-w: 48px;
	}
	.dept-main .section {
		padding-inline: var(--space-5);
	}
	.dept-stats, .dept-enroll {
		padding-inline: var(--space-5);
	}
	/* the expanded overlay leaves a sliver of content + backdrop visible */
	.dept-rail.is-open {
		width: min(var(--dept-rail-w), 78vw);
	}
	.dept-link {
		padding-block: var(--space-3);
	} /* finger-friendly dots */
}
/* ════════════════════════════════════════════════════════════
   stats band  (components/stats.tt · content type `stats`)
   ════════════════════════════════════════════════════════════ */
.stats-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
	gap: var(--space-6);
}

.stat {
	text-align: center;
}

.stat-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 3rem;
	height: 3rem;
	margin-bottom: var(--space-3);
	border-radius: var(--radius-full);
	background: var(--band-icon-bg, var(--au-gold-pale));
	color: var(--band-icon-fg, var(--au-gold));
	font-size: var(--text-lg);
}

.stat-num {
	font-family: var(--font-display);
	font-size: var(--text-3xl);
	font-weight: 600;
	line-height: 1;
	color: var(--band-heading, var(--au-navy));
}

.stat-label {
	margin-top: var(--space-2);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.4;
}

/* on a dark band */
/* ════════════════════════════════════════════════════════════
   CTA bar  (components/cta-bar.tt · content type `cta_bar`)
   A slim full-width band: a message beside an action button.
   ════════════════════════════════════════════════════════════ */
.cta-bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-4) var(--space-8);
}

.cta-bar-text {
	flex: 1 1 320px;
	font-family: var(--font-display);
	font-size: var(--text-xl);
	line-height: 1.3;
	color: var(--band-heading, var(--au-navy));
}

.cta-bar .btn {
	flex-shrink: 0;
}

/* ════════════════════════════════════════════════════════════
   TOP CHROME BANDS (dept_main.wrap) — compact strips between the
   hero and the rail, matching the department demo. These are NOT
   .section bands: the demo's are slim (a navy stats strip and a gold
   enrolment bar), where a full .section's 80px rhythm reads far too
   heavy directly under the hero.

   They re-skin the shared .stat* / cta pieces rather than duplicating
   markup, so components/stats.tt keeps its roomier in-flow treatment.
   ════════════════════════════════════════════════════════════ */
/* stats strip — navy, light-on-dark, hairline dividers between cells */
.dept-stats {
	background: var(--au-navy);
	padding: var(--space-5) var(--gutter);
}

.dept-stats-inner {
	max-width: var(--max-width);
	margin-inline: auto;
}

.dept-stats .stats-grid {
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 0;
}

.dept-stats .stat {
	padding: var(--space-3) var(--space-5);
	position: relative;
}

.dept-stats .stat + .stat::before {
	content: "";
	position: absolute;
	left: 0;
	top: 18%;
	bottom: 18%;
	width: 1px;
	background: rgba(255, 255, 255, 0.14);
}

/* bare gold glyph — no pale circle chip at this size */
.dept-stats .stat-icon {
	width: auto;
	height: auto;
	margin: 0 auto var(--space-2);
	background: none;
	border-radius: 0;
	color: var(--au-gold);
	font-size: var(--text-lg);
}

.dept-stats .stat-num {
	font-size: var(--text-lg);
	color: var(--au-white);
	margin-bottom: var(--space-1);
}

.dept-stats .stat-label {
	font-size: var(--text-xs);
	color: rgba(255, 255, 255, 0.5);
	line-height: 1.5;
	margin-top: 0;
}

@media (max-width: 760px) {
	.dept-stats .stats-grid {
		grid-template-columns: 1fr;
	}
	.dept-stats .stat + .stat::before {
		left: 18%;
		right: 18%;
		top: 0;
		bottom: auto;
		width: auto;
		height: 1px;
	}
}
/* enrolment bar — slim gold strip, serif message + dark button */
.dept-enroll {
	background: var(--au-gold);
	padding: var(--space-3) var(--gutter);
}

.dept-enroll-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-3) var(--space-5);
}

.dept-enroll-text {
	font-family: var(--font-display);
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--au-navy-deep);
	line-height: 1.35;
}

.dept-enroll-text small {
	display: block;
	font-family: var(--font-body);
	font-weight: 400;
	font-size: var(--text-xs);
	color: rgba(0, 26, 51, 0.72);
	margin-top: 2px;
}

.dept-enroll .btn {
	flex-shrink: 0;
}

/* ════════════════════════════════════════════════════════════
   variants.css  ·  section style variants
   Depends on: tokens.css, layout.css (.section bands + --band-* tokens)

   Alternate looks for existing content types, selected by a `col-<name>`
   token in a section's custom_class and dispatched by the content type's
   renderer (see components/columns.tt → components/columns/*.tt). One
   content type + one CMS form drives many displays; this file holds their
   markup styling. Add a variant: a components/columns/<name>.tt renderer,
   an entry in columns.tt's variant_map, and a block here.

   Band adaptation is via the --band-* CONTEXT TOKENS layout.css sets on dark
   bands — there are NO per-band selector lists here. The rule of thumb:
     · content sitting on a WHITE card (programs) keeps light-mode colours;
       only the card chrome (border width, shadow) reads the band tokens.
     · content directly on the band, or on a translucent card (careers,
       intro, quote, profile) reads the band tokens for its text too.
   ════════════════════════════════════════════════════════════ */
/* ─── col-programs · program cards (white card; only chrome tracks the band) ───
   Two modes from one renderer: a PHOTO card (badge over image + whole-card
   link) when a photo is uploaded, and a flat TEXT card (gold top rule) when
   it isn't. auto-fit so N items fill the row rather than leaving empty tracks. */
.programs-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: var(--space-6);
}

.program-card {
	display: flex;
	flex-direction: column;
	background: var(--au-white);
	border: var(--band-card-border-w, 1px) solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	overflow: hidden;
	box-shadow: var(--band-card-shadow, none);
	text-decoration: none;
	transition: box-shadow var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out);
}

.program-card:hover {
	box-shadow: var(--band-card-shadow-hover, var(--shadow-md));
	transform: translateY(-2px);
}

/* text card: gold top rule + padded body (media card pads .program-body instead) */
.program-card:not(.program-card--media) {
	border-top: 3px solid var(--au-gold);
	padding: var(--space-6);
}

/* photo header */
.program-img {
	position: relative;
	aspect-ratio: 4/3;
	background: var(--au-gray-200);
}

.program-img img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
	display: block;
}

.program-overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(0, 26, 51, 0.4), transparent 45%);
}

.program-badge {
	position: absolute;
	left: var(--space-4);
	bottom: var(--space-4);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--au-gold-light);
	background: rgba(0, 26, 51, 0.82);
	padding: var(--space-1) var(--space-3);
	border-radius: var(--radius-full);
}

.program-body {
	display: flex;
	flex-direction: column;
	flex: 1;
	padding: var(--space-6);
}

.program-kicker {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--au-gold);
	margin-bottom: var(--space-2);
}

.program-name {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	font-weight: 600;
	color: var(--au-navy);
	line-height: 1.2;
}

.program-name a {
	color: inherit;
	text-decoration: none;
}

.program-name a:hover {
	color: var(--au-navy-light);
}

.program-card--media:hover .program-name {
	color: var(--au-navy-light);
}

.program-desc {
	margin-top: var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.6;
	flex: 1;
}

.program-link {
	margin-top: var(--space-4);
	align-self: flex-start;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
	text-decoration: none;
}

.program-link:hover {
	color: var(--au-gold);
}

/* optional section-header CTA button (leading header card's link) */
.section-head-cta {
	margin-top: var(--space-6);
}

/* media-card CTA — gold mono cue with a nudging chevron */
.program-cta {
	margin-top: var(--space-4);
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--au-gold);
}

.program-cta svg {
	width: 13px;
	height: 13px;
	fill: none;
	stroke: currentColor;
	stroke-width: 2.5;
	transition: transform var(--duration-base) var(--ease-out);
}

.program-card--media:hover .program-cta svg {
	transform: translateX(3px);
}

/* ─── col-quote · impact pull-quote (on the band) ─── */
.impact-quote {
	max-width: 760px;
	margin-inline: auto;
	text-align: center;
}

.impact-quote blockquote {
	border: 0;
	margin: 0;
	padding: 0;
	font-family: var(--font-display);
	font-style: italic;
	font-size: clamp(var(--text-xl), 3.5vw, var(--text-3xl));
	line-height: 1.35;
	color: var(--band-heading, var(--au-navy));
}

.impact-quote blockquote p {
	margin: 0;
}

.impact-quote blockquote p + p {
	margin-top: var(--space-3);
}

.impact-quote blockquote::before {
	content: "“";
	display: block;
	font-size: 3rem;
	line-height: 0.6;
	color: var(--au-gold);
	margin-bottom: var(--space-3);
}

.impact-quote figcaption {
	margin-top: var(--space-5);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
}

.impact-cite-name {
	font-weight: 700;
	color: var(--band-heading, var(--au-navy));
}

.impact-cite-role {
	display: block;
	font-size: var(--text-xs);
	color: var(--band-body, var(--au-warm-gray));
	margin-top: 2px;
}

/* ─── col-intro · split copy + image collage (on the band) ─── */
.intro-split {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-10);
	align-items: center;
}

.intro-split > .intro-copy:only-child {
	grid-column: 1/-1;
} /* no images → copy spans full width */
.intro-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 3.2vw, var(--text-3xl));
	line-height: 1.15;
	color: var(--band-accent, var(--au-navy));
	font-weight: 400;
}

/* muted white eyebrow so the gold headline leads (overrides the band's gold) */
.intro-copy .section-label {
	margin-bottom: var(--space-3);
	color: rgba(255, 255, 255, 0.7);
}

.intro-body {
	margin-top: var(--space-4);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.8;
}

.intro-body p + p {
	margin-top: var(--space-4);
}

.intro-ctas {
	margin-top: var(--space-6);
	display: flex;
	gap: var(--space-4);
	flex-wrap: wrap;
}

/* ghost button on the (dark) intro band: translucent outline, gold on hover */
.intro-ctas .btn-ghost {
	background: transparent;
	color: rgba(255, 255, 255, 0.82);
	border-color: rgba(255, 255, 255, 0.32);
}

.intro-ctas .btn-ghost:hover {
	background: rgba(255, 255, 255, 0.06);
	border-color: var(--au-gold);
	color: var(--au-white);
}

.intro-media {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-3);
}

.intro-img {
	margin: 0;
	border-radius: var(--radius-md);
	overflow: hidden;
	aspect-ratio: 4/3;
	background: var(--au-gray-200);
}

.intro-img img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.intro-img-wide {
	grid-column: span 2;
	aspect-ratio: 16/7;
}

@media (max-width: 820px) {
	.intro-split {
		grid-template-columns: 1fr;
		gap: var(--space-6);
	}
}
/* ─── col-careers · salary cards (translucent on dark → text tracks the band) ─── */
.career-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: var(--space-5);
}

/* each card is a 2-row subgrid (head / body) sharing the grid's row tracks, so
   the title row sizes to the tallest title in the row — titles collapse to one
   line together when none wrap, and align when one does. The row GAP between
   head and body is the grid's own gap (space-5). */
.career-card {
	display: grid;
	grid-template-rows: subgrid;
	grid-row: span 2;
	background: var(--band-card-bg, var(--au-white));
	border: 1px solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	padding: var(--space-6);
}

.career-deg {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--band-eyebrow, var(--au-gold));
	margin-bottom: var(--space-2);
}

.career-title {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	font-weight: 600;
	color: var(--band-heading, var(--au-navy));
	line-height: 1.2;
}

/* One text area holds salary + source + blurb; the editor marks them up and the
   card styles them to the mockup:
     <strong> (its own line)  → the salary figure: big gold display number
     <em>      (its own line) → the source line: uppercase caps + a hairline under it
     plain paragraph(s)       → the description
   The big-salary treatment is scoped to the FIRST line, so an inline bold inside
   the description stays normal. */
.career-desc {
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
}

.career-desc p {
	margin: 0;
}

.career-desc p + p {
	margin-top: var(--space-3);
}

.career-desc p:first-child strong, .career-desc p:first-child b {
	display: block;
	font-family: var(--font-display);
	font-weight: 400;
	font-size: var(--text-2xl);
	line-height: 1.1;
	color: var(--band-accent, var(--au-gold));
}

.career-desc em, .career-desc i {
	font-style: normal;
	font-size: var(--text-xs);
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--band-body, var(--au-warm-gray));
}

.career-desc p:has(em), .career-desc p:has(i) {
	border-bottom: 1px solid var(--band-hairline, var(--au-gray-200));
	padding-bottom: var(--space-4);
	margin-bottom: var(--space-4);
}

/* ─── col-media · overlay cards, hover-reveal (self-contained; band-agnostic) ─── */
.col-media .section-head {
	margin-bottom: var(--space-8);
} /* tighter head→cards gap than the 64px default */
.media-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: var(--space-5);
}

.media-card {
	position: relative;
	display: block;
	overflow: hidden;
	border-radius: var(--radius-lg);
	aspect-ratio: 4/3;
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	text-decoration: none;
}

.media-card img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.media-overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(0, 26, 51, 0.9) 0%, rgba(0, 26, 51, 0.1) 60%);
}

.media-content {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	padding: var(--space-5);
}

.media-eye {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--au-gold-light);
	margin-bottom: 2px;
}

.media-name {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--au-white);
}

.media-desc {
	margin-top: var(--space-1);
	font-size: var(--text-sm);
	color: rgba(255, 255, 255, 0.72);
	line-height: 1.55;
	max-height: 0;
	opacity: 0;
	overflow: hidden;
	transition: max-height var(--duration-slow) var(--ease-out), opacity var(--duration-base) var(--ease-out);
}

.media-card:hover .media-desc, .media-card:focus-visible .media-desc {
	max-height: 8rem;
	opacity: 1;
}

@media (hover: none) {
	.media-desc {
		max-height: 8rem;
		opacity: 1;
	}
}
/* ─── col-profile · featured person split (on the band) ─── */
.profile-split {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-10);
	align-items: center;
}

.col-profile.flip .profile-media {
	order: 2;
} /* image to the right */
.profile-media {
	border-radius: var(--radius-lg);
	overflow: hidden;
	aspect-ratio: 4/5;
	background: var(--au-gray-200);
}

.profile-media img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.profile-copy .section-label {
	margin-bottom: var(--space-3);
}

.profile-name {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 4vw, var(--text-3xl));
	font-weight: 600;
	line-height: 1.15;
	color: var(--band-heading, var(--au-navy));
}

.profile-cred {
	margin-top: var(--space-1);
	font-size: var(--text-sm);
	letter-spacing: 0.04em;
	color: var(--band-body, var(--au-warm-gray));
}

.profile-bio {
	margin-top: var(--space-4);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.8;
}

.profile-bio p + p {
	margin-top: var(--space-4);
}

/* credential sub-line — an italic first line in the bio content (careers-style
   markup): renders small, light and upright, hugging the name. */
.profile-bio:has(> p:first-child em) {
	margin-top: var(--space-2);
}

.profile-bio > p:first-child em {
	font-style: normal;
	font-size: var(--text-sm);
	letter-spacing: 0.04em;
	color: var(--band-body, var(--au-warm-gray));
}

.profile-bio blockquote {
	color: var(--band-quote, var(--au-navy));
}

@media (max-width: 820px) {
	.profile-split {
		grid-template-columns: 1fr;
		gap: var(--space-6);
	}
	.col-profile.flip .profile-media {
		order: 0;
	}
}
/* ════════════════════════════════════════════════════════════
   programs.css  ·  program explorer (search + filters + show-all)
   Depends on: tokens.css, layout.css (--band-* tokens), variants.css
   (.programs-grid / .program-card — the cards are the col-programs cards)
   Markup: components/programs_explorer.tt · behaviour: js/programs.js
   Reads the band tokens, so it works on white, cream or navy bands.
   ════════════════════════════════════════════════════════════ */
.programs-tools {
	display: flex;
	flex-direction: column;
	gap: var(--space-4);
	margin-bottom: var(--space-5);
}

/* search — icon inside the field */
.programs-search {
	position: relative;
	max-width: 560px;
}

.programs-search svg {
	position: absolute;
	left: var(--space-4);
	top: 50%;
	width: 18px;
	height: 18px;
	transform: translateY(-50%);
	fill: none;
	stroke: var(--au-warm-gray);
	stroke-width: 2.5;
	stroke-linecap: round;
	pointer-events: none;
}

.programs-search .input {
	padding-left: calc(var(--space-4) + 28px);
	border-color: var(--band-hairline, var(--au-gray-200));
}

.programs-search .input:focus {
	border-color: var(--au-gold);
}

/* filter chips + area-of-study select share one look */
.programs-filters {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2);
}

.programs-chip,
.programs-field {
	font-family: var(--font-body);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--band-heading, var(--au-navy));
	background: transparent;
	border: 2px solid var(--band-hairline, var(--au-gray-300));
	border-radius: var(--radius-full);
	padding: var(--space-2) var(--space-4);
	cursor: pointer;
	transition: border-color var(--duration-fast), background var(--duration-fast), color var(--duration-fast);
}

.programs-chip:hover,
.programs-field:hover {
	border-color: var(--band-accent, var(--au-navy));
}

.programs-chip[aria-pressed=true],
.programs-field.is-active {
	background: var(--au-gold);
	border-color: var(--au-gold);
	color: var(--au-navy-deep);
}

.programs-chip:focus-visible,
.programs-field:focus-visible {
	outline: 2px solid var(--au-gold-light);
	outline-offset: 2px;
}

.programs-field {
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	padding-right: calc(var(--space-4) + 16px);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23C6952B' stroke-width='3'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right var(--space-3) center;
	background-size: 12px;
}

.programs-field option {
	color: var(--au-text);
	background: var(--au-white);
	text-transform: none;
}

.programs-status {
	min-height: 1.5em;
	margin-bottom: var(--space-4);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--band-body, var(--au-warm-gray));
}

/* the sheet's images are wide banners — a wider crop than col-programs' 4:3 */
.programs-explorer .program-img {
	aspect-ratio: 16/9;
	overflow: hidden;
}

/* out of flow so a portrait photo (the grad pages' tall_image) can't stretch the frame */
.programs-explorer .program-img img {
	position: absolute;
	inset: 0;
}

/* portrait sources: a centred 16:9 slice lands on chests — favour the upper
   part of the frame, where the faces are */
.programs-explorer .program-img--tall img {
	-o-object-position: 50% 22%;
	   object-position: 50% 22%;
}

.programs-explorer .program-badge {
	max-width: calc(100% - 2 * var(--space-4));
}

.programs-explorer .program-card[hidden] {
	display: none;
}

.program-tags {
	list-style: none;
	margin: var(--space-3) 0 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2);
}

.program-tag {
	font-size: var(--text-xs);
	font-weight: 600;
	color: var(--au-navy);
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-full);
	padding: 2px var(--space-3);
}

.program-tag--accel {
	color: var(--au-navy-deep);
	background: var(--au-gold-pale);
	border-color: rgba(198, 149, 43, 0.35);
}

.programs-explorer .program-body {
	padding: var(--space-5);
}

.programs-explorer .program-cta {
	margin-top: auto;
	padding-top: var(--space-4);
}

.programs-empty {
	padding: var(--space-6) 0;
	text-align: center;
	color: var(--band-body, var(--au-warm-gray));
}

.programs-empty a {
	color: var(--band-link, var(--au-navy-light));
}

.programs-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--space-4);
	margin-top: var(--space-8);
}

/* outline button that reads on a dark band too */
.programs-explorer .programs-all-link {
	color: var(--band-heading, var(--au-navy));
	border-color: currentColor;
}

.programs-explorer .programs-all-link:hover {
	background: var(--au-navy);
	border-color: var(--au-navy);
	color: var(--au-white);
}

.programs-explorer[class*=section--navy] .programs-all-link:hover {
	background: var(--au-white);
	border-color: var(--au-white);
	color: var(--au-navy-deep);
}

@media (max-width: 600px) {
	/* chips scroll sideways instead of stacking four rows deep */
	.programs-filters {
		flex-wrap: nowrap;
		overflow-x: auto;
		padding: 2px 0;
		scrollbar-width: none;
	}
	.programs-filters::-webkit-scrollbar {
		display: none;
	}
	.programs-chip, .programs-field {
		flex: 0 0 auto;
	}
}
/* ════════════════════════════════════════════════════════════
   program pages  ·  templates/undergrad_program.dt
   (/undergrad/academics/programs/<name>/)
   ════════════════════════════════════════════════════════════ */
.program-lead {
	max-width: 52rem;
	font-family: var(--font-display);
	font-size: clamp(var(--text-lg), 1rem + 1.6vw, var(--text-2xl));
	line-height: 1.4;
	color: var(--au-navy);
}

.program-video {
	margin-top: var(--space-6);
	max-width: 60rem;
}

.program-why .btn-row {
	margin-top: var(--space-6);
}

/* one main CTA mid-page: centered, its natural width */
.program-apply {
	justify-content: center;
}

.program-apply > .btn {
	flex: 0 0 auto;
}

/* subheadings sit a clear step below the section titles */
.program-page .section-inner h3 {
	font-size: var(--text-lg);
	margin-top: var(--space-5);
	margin-bottom: var(--space-2);
}

.program-page .program-alumni h3 {
	margin-top: 0;
}

/* learn-more links: their natural width, side by side */
.program-learn-links > .btn {
	flex: 0 0 auto;
}

.program-learn-links {
	margin-top: var(--space-5);
}

.program-learn .section-title {
	margin-bottom: var(--space-4);
}

/* alumni: a gold rule over each name */
.program-alumni .card {
	border-top: 3px solid var(--au-gold);
	border-radius: 0;
}

.program-alumni .card > .card-body {
	padding-top: var(--space-4);
}

/* salary bars: --w is set inline from the salary's share of the largest */
.salary-bars {
	list-style: none;
	margin: var(--space-3) 0 0;
	padding: 0;
	display: grid;
	gap: var(--space-2);
}

.salary-bars li {
	width: var(--w, 100%);
	display: flex;
	justify-content: space-between;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-3);
	background: var(--au-navy);
	color: var(--au-white);
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
}

.salary-amount {
	font-weight: 600;
	color: var(--au-gold-light);
	white-space: nowrap;
}

.salary-note {
	margin-top: var(--space-3);
	font-size: var(--text-xs);
	color: var(--au-warm-gray);
}

.salary-note p {
	margin: 0;
}

/* career word cloud: jquery.awesomecloud draws into this box */
.program-wordcloud {
	height: 320px;
}

/* facts: a text carousel, one fact at a time */
.carousel--text {
	aspect-ratio: auto;
	border-radius: 0;
}

.carousel--text .carousel-slide {
	display: flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	padding: 0 var(--space-12) var(--space-8);
}

.program-fact {
	max-width: 46rem;
	text-align: center;
	font-family: var(--font-display);
	font-size: var(--text-xl);
	line-height: 1.5;
	color: var(--au-navy);
}

.program-fact p {
	margin: 0;
}

.carousel--text .carousel-btn {
	box-shadow: none;
	border: 1px solid var(--au-navy);
	background: transparent;
}

.carousel--text .carousel-btn:hover {
	background: var(--au-navy);
	color: var(--au-white);
}

.carousel--text .carousel-dots {
	bottom: 0;
}

.carousel--text .carousel-dot {
	background: rgba(0, 51, 102, 0.25);
}

.carousel--text .carousel-dot.active {
	background: var(--au-navy);
}

@media (max-width: 640px) {
	.carousel--text .carousel-slide {
		padding-inline: 0;
	}
	.carousel--text .carousel-btn {
		display: none;
	}
}
.program-creative-img,
.program-learn-img {
	width: 100%;
	border-radius: var(--radius-lg);
}

.program-creative .video,
.program-creative .carousel,
.program-creative-img {
	max-width: 60rem;
	margin-inline: auto;
}

.program-creative-caption {
	max-width: 46rem;
	margin: var(--space-4) auto 0;
	text-align: center;
}

.program-creative-caption h3 {
	margin-bottom: var(--space-2);
}

/* a list in a centered caption (premed's medical schools) — balanced columns
   without bullets, which would sit stranded at the left of centered text */
.program-creative-caption ul {
	-moz-columns: 3 12rem;
	     columns: 3 12rem;
	-moz-column-gap: var(--space-6);
	     column-gap: var(--space-6);
	list-style: none;
	padding: 0;
	margin-top: var(--space-4);
}

.program-creative-caption li {
	-moz-column-break-inside: avoid;
	     break-inside: avoid;
}

/* phones and small tablets: the program banners are 5:2 photos composed for a
   wide band (subjects off to the sides, a few with a "More For Less" badge in the
   corner). Cover-cropping them to a near-square hero kept only the middle 40%,
   so show the whole photo across the top and put the title on navy below it.
   Wider screens get .hero--ratio (set in undergrad_program.dt): a 5:2 band, the
   whole photo, title over it. (body.program-page = bodyclass in the dt) */
@media (max-width: 760px) {
	body.program-page .hero {
		display: block;
		min-height: 0;
		aspect-ratio: auto; /* undo .hero--ratio's 5:2 box, which would clip the title */
		padding-top: 40%;
		background-size: 100% auto;
		background-position: top center;
	}
	body.program-page .hero::after {
		display: none;
	}
	body.program-page .hero-inner {
		padding: var(--space-5) var(--gutter) var(--space-6);
	}
	body.program-page .hero-title {
		text-shadow: none;
	}
}
/* audio.css · custom audio player styled to the AU design system
   Markup: [data-audio] wrapping an <audio> element
   JS: js/audio.js builds the UI and self-inits via init.js */
.audio-player {
	background: var(--au-navy);
	border-radius: var(--radius-lg);
	color: var(--au-white);
	max-width: 540px;
	margin: var(--space-5) auto;
	box-shadow: var(--shadow-md);
	padding: var(--space-3) var(--space-4);
}

.audio-player-controls {
	display: flex;
	align-items: center;
	gap: var(--space-3);
}

.audio-player-btn {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border-radius: var(--radius-full);
	border: 2px solid var(--au-gold);
	background: transparent;
	color: var(--au-gold);
	cursor: pointer;
	transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);
	padding: 0;
}

.audio-player-btn:hover,
.audio-player-btn:focus-visible {
	background: var(--au-gold);
	color: var(--au-navy);
	outline: none;
}

.audio-player-btn svg {
	width: 18px;
	height: 18px;
	fill: currentColor;
}

.audio-player-track {
	flex: 1 1 auto;
	min-width: 0;
}

.audio-player-title {
	font-family: var(--font-display);
	font-size: 10px;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.45);
	text-align: center;
	padding-bottom: 4px;
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}

.audio-player-bar {
	position: relative;
	height: 6px;
	background: rgba(255, 255, 255, 0.2);
	border-radius: var(--radius-full);
	cursor: pointer;
	overflow: hidden;
}

.audio-player-bar:hover {
	height: 8px;
}

.audio-player-fill {
	position: absolute;
	top: 0;
	left: 0;
	height: 100%;
	width: 0%;
	background: var(--au-gold);
	border-radius: var(--radius-full);
	transition: width 80ms linear;
	pointer-events: none;
}

.audio-player-time {
	display: flex;
	justify-content: space-between;
	font-family: var(--font-mono);
	font-size: 11px;
	color: rgba(255, 255, 255, 0.5);
	-webkit-user-select: none;
	   -moz-user-select: none;
	        user-select: none;
	padding-top: 3px;
	line-height: 1;
}

.audio-player-vol {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
}

.audio-player-vol button {
	background: none;
	border: none;
	color: rgba(255, 255, 255, 0.7);
	cursor: pointer;
	padding: 0;
	display: flex;
}

.audio-player-vol button:hover {
	color: var(--au-gold-light);
}

.audio-player-vol svg {
	width: 18px;
	height: 18px;
	fill: currentColor;
}

@media (max-width: 380px) {
	.audio-player {
		padding: var(--space-2) var(--space-3);
	}
	.audio-player-controls {
		gap: var(--space-2);
	}
	.audio-player-btn {
		width: 36px;
		height: 36px;
	}
	.audio-player-vol {
		display: none;
	}
}
/* ════════════════════════════════════════════════════════════
   compat.css  ·  legacy content patterns in authored section bodies
   Depends on: tokens.css
   Covers the CTA bar, Bootstrap grid columns in card bodies, and
   legacy font references. These patterns appear in homepage-advanced
   bodies that can't be safely round-tripped through cms_edit.
   ════════════════════════════════════════════════════════════ */
/* ── Bootstrap grid → flex ──
   Authored card bodies using .row + .col-* get a simple flex layout.
   Covers the Welcome intro (8/4 text+image split) and any similar
   legacy two- or three-column body. */
.card-text > .row,
.card-text > div > .row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-6);
	align-items: center; /* text beside an image sits centred on it, like the split tokens */
}

.card-text [class*=col-md-8],
.card-text [class*=col-md-7] {
	flex: 2 1 400px;
	min-width: 0;
}

.card-text [class*=col-md-4],
.card-text [class*=col-md-5] {
	flex: 1 1 240px;
	min-width: 0;
}

.card-text [class*=col-md-6] {
	flex: 1 1 300px;
	min-width: 0;
}

.card-text [class*=col-md-12] {
	flex: 1 1 100%;
}

/* 4-across grid (CTA bar): card-text with col-lg-3 children */
.card-text:has(> [class*=col-lg-3]) {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-4);
	align-items: stretch;
}

.card-text > [class*=col-lg-3] {
	flex: 1 1 200px;
	min-width: 0;
	display: flex;
}

/* ── CTA widget ──
   4-across icon+label action blocks on homepages. Legacy markup uses
   .cta + .cta-* with IconSweets-Deluxe icons; restyled for 2027 with
   FA7 icon substitution. Uses !important to win over /css/cta.css,
   which cta-row.tt loads as a <link> after index.css. */
.cta {
	position: relative;
	display: flex !important;
	align-items: center !important;
	justify-content: flex-start !important;
	gap: var(--space-4);
	padding: var(--space-4) var(--space-5) !important;
	background: var(--au-white) !important;
	border-left: 4px solid var(--au-gold) !important;
	border-radius: var(--radius-sm);
	color: var(--au-navy) !important;
	cursor: pointer;
	transition: background var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-out);
}

.cta:hover {
	background: var(--au-cream) !important;
	transform: translateY(-2px);
	box-shadow: var(--shadow-sm);
}

/* cta-row.tt wraps everything in ONE <a>; admissions markup uses separate <a>s.
   Handle both: a direct-child <a> that wraps .icon + .cta-title is the content
   wrapper, not a stretched-link anchor — make it flex and strip underline.
   cta-row-buttons.tt adds class="btn btn-gray" to the same <a>; neutralize
   that button styling so the card look wins. */
.cta > a {
	display: flex !important;
	align-items: center;
	gap: var(--space-3);
	text-decoration: none !important;
	color: inherit !important;
	width: 100%;
}

/* admissions markup: separate <a> inside .cta-title → keep pointer-events normal */
.cta > a:only-child {
	flex: 1;
}

/* cta-row-buttons.tt adds .btn.btn-gray to the anchor — strip it back to plain */
.cta > a.btn {
	border: none !important;
	border-radius: 0 !important;
	padding: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
	font-size: inherit !important;
	font-weight: inherit !important;
	letter-spacing: inherit !important;
	text-transform: none !important;
	justify-content: flex-start !important;
}

.cta > a.btn:hover {
	background: transparent !important;
	box-shadow: none !important;
	transform: none !important;
	color: inherit !important;
}

/* icon replacement: IconSweets-Deluxe → FA7 Pro */
.cta .icon {
	display: flex !important;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	float: none !important;
	margin: 0 !important;
}

.cta .icon span {
	display: inline-flex;
	width: 1.5em;
	height: 1.5em;
	align-items: center;
	justify-content: center;
	font-size: var(--text-xl);
	color: transparent !important;
	overflow: hidden;
}

.cta .icon span::before {
	font-family: "Font Awesome 7 Pro";
	font-weight: 900;
	font-size: var(--text-xl);
	line-height: 1;
	color: var(--au-gold) !important;
	-moz-osx-font-smoothing: grayscale;
	-webkit-font-smoothing: antialiased;
}

.cta .icon .icon-safari::before {
	content: "\f14e";
}

.cta .icon .icon-globe2::before {
	content: "\f0ac";
}

.cta .icon .icon-airplane::before {
	content: "\f072";
}

.cta .icon .icon-write::before {
	content: "\f044";
}

.cta .icon .icon-info::before {
	content: "\f05a";
}

.cta .icon .icon-calendar-day::before {
	content: "\f783";
}

.cta .icon a {
	display: contents;
}

/* label — strip cta.css colored backgrounds */
.cta .cta-title {
	font-family: var(--font-display);
	font-weight: 600;
	font-size: var(--text-md);
	line-height: 1.3;
	float: none !important;
	margin-left: 0 !important;
	text-transform: none !important;
	color: var(--au-navy) !important;
}

/* admissions markup has <a> inside .cta-title; cta-row.tt has it outside */
.cta .cta-title a {
	color: var(--au-navy);
	text-decoration: none;
}

.cta .cta-title a:hover {
	color: var(--au-navy-light);
}

.cta .title {
	display: inline !important;
	background: transparent !important;
	color: inherit !important;
	padding: 0 !important;
	margin: 0 !important;
	line-height: 1.3 !important;
	font-weight: 600;
}

/* ── .btn inside .grid: keep natural size, don't stretch as a grid cell ──
   Authored content sometimes wraps sibling buttons in a <div class="grid">.
   .grid > * normally gets flex:1 1 280px (card width), which stretches each
   button to a full row. Override so they size to their own content and can
   sit side-by-side. */
.card-text .grid > .btn,
.card-body .grid > .btn {
	flex: 1 1 0 !important;
	width: 0 !important;
	min-width: 0 !important;
	align-self: flex-start;
}

/* ── pull-left: neutralize in flex contexts ── */
.cta .pull-left,
.card-text .pull-left {
	float: none;
}

/* ── Legacy cta-row.tt: section.columns + Bootstrap container/row ──
   The shared cta-row.tt emits <section class="columns background_color_*">
   with a Bootstrap .container > .row > .col-sm-N grid. Give the band
   the right padding/background and make the row flex. */
section.columns {
	padding: var(--space-12) var(--gutter);
}

section.columns[class*=background_color_cararra-gray],
section.columns[class*=background_color_seashell-gray],
section.columns[class*=background_color_stone] {
	background: var(--au-stone);
}

section.columns[class*=background_color_ecru-white],
section.columns[class*=background_color_cream] {
	background: var(--au-cream);
}

section.columns[class*=background_color_nile-blue],
section.columns[class*=background_color_fiord-blue],
section.columns[class*=background_color_chathams-blue] {
	background: var(--au-navy-deep);
}

section.columns .container {
	max-width: var(--max-width);
	margin-inline: auto;
}

section.columns .container > .row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-6);
	justify-content: center;
}

section.columns .container > .row > [class*=col-] {
	flex: 1 1 200px;
	min-width: 0;
}

/* ── Legacy thread.tt: the programs carousels (/undergrad/academics/) ──
   code/templates/thread.tt is shared with the live site and brings its own
   carousel CSS/JS (thread-style.css, programs-thread.js); it emits
   <section class="programs-thread-section background_color_*"> + a Bootstrap
   .container/.row. Restore the legacy band around it: the darkest navy, gold
   sans headings, the close-top/close-bottom seams between stacked threads. */
section.programs-thread-section {
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.85);
	padding: var(--space-10) var(--gutter);
	--band-heading: var(--au-white);
	--band-body: rgba(255, 255, 255, 0.66);
}

section.programs-thread-section.close-top {
	padding-top: var(--space-5);
}

section.programs-thread-section.close-bottom {
	padding-bottom: var(--space-5);
}

section.programs-thread-section .container {
	max-width: var(--max-width);
	margin-inline: auto;
}

section.programs-thread-section h2 {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-3) var(--space-4);
	font-family: var(--font-sans);
	font-size: var(--text-2xl);
	font-weight: 600;
	color: var(--au-gold);
	margin-bottom: var(--space-4);
}

/* keep the legacy carousel's own small outline buttons and tile type (the 2027
   .btn is larger, uppercase and filled) */
section.programs-thread-section .btn {
	padding: 6px 12px;
	font-size: 14px;
	text-transform: none;
	letter-spacing: 0;
	border-width: 1px;
	min-height: 0;
}

section.programs-thread-section .thread-expand-button {
	background: transparent;
	color: var(--au-gold);
	border-color: var(--au-gold);
}

section.programs-thread-section .thread-expand-button:hover {
	background: var(--au-gold);
	color: var(--au-navy-deep);
}

section.programs-thread-section .programs-tile-body h4 {
	font-family: var(--font-sans);
	font-size: 18px;
	color: #fff;
}

/* ── Inline disclosure embed (replaces Bootstrap modals for iframes) ── */
.transfer-embed {
	max-height: 0;
	overflow: hidden;
	transition: max-height 0.4s ease;
}

.transfer-embed.is-open {
	max-height: 500px;
}

/* ── Bootstrap .modal → 2027 overlay ──
   Legacy pages use .modal divs with data-toggle/data-dismiss.
   modal.js adds/removes .is-open; CSS controls visibility. */
.modal {
	display: none;
	position: fixed;
	inset: 0;
	z-index: 2000;
	overflow-y: auto;
	overscroll-behavior: contain;
	background: rgba(0, 31, 63, 0.6);
	backdrop-filter: blur(2px);
	-webkit-backdrop-filter: blur(2px);
	padding: var(--space-8) var(--gutter);
}

.modal.is-open {
	display: flex;
	align-items: flex-start;
	justify-content: center;
}

.modal-dialog {
	background: var(--au-white);
	border-radius: var(--radius-lg);
	max-width: 720px;
	width: 100%;
	margin: auto;
	box-shadow: var(--shadow-xl);
	overflow: hidden;
}

.modal-content {
	padding: var(--space-6) !important;
}

/* header: manually-authored photo + name div (legacy profiles page markup) —
   only applies when the first child is NOT the auto-injected header */
.modal-content > div:first-child:not(.modal-auto-header) {
	display: flex;
	gap: var(--space-5);
	align-items: flex-start;
	margin-bottom: var(--space-5);
}

.modal-content > div:first-child:not(.modal-auto-header) > div:first-child img {
	width: 100px;
	height: 100px;
	-o-object-fit: cover;
	   object-fit: cover;
	border-radius: 50%;
	display: block;
}

.modal-content > div:first-child:not(.modal-auto-header) > div:last-child {
	display: flex;
	flex-direction: column;
	justify-content: center;
}

.modal-content > div:first-child:not(.modal-auto-header) > div:last-child h2 {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-navy);
	margin: 0 0 var(--space-2);
	font-weight: 600;
}

.modal-content > div:first-child:not(.modal-auto-header) > div:last-child p {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	margin: 0;
	line-height: 1.5;
}

/* .card-subtitle — a plain muted line under the card title (program, year, role).
   No gold/uppercase treatment; pulled into the modal header as the subtitle. */
.card-subtitle {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	margin: 0;
	line-height: 1.4;
}

/* auto-header injected by modal.js — photo circle + name + subtitle row */
.modal-auto-header {
	display: flex;
	gap: var(--space-5);
	align-items: flex-start;
	padding-bottom: var(--space-5);
	margin-bottom: var(--space-5);
	border-bottom: 1px solid var(--au-gray-200);
}

.modal-auto-photo {
	width: 100px;
	height: 100px;
	border-radius: 50%;
	-o-object-fit: cover;
	   object-fit: cover;
	-o-object-position: top;
	   object-position: top;
	flex-shrink: 0;
	display: block;
}

.modal-auto-text {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: var(--space-1);
}

.modal-auto-name {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	font-weight: 600;
	color: var(--au-navy);
	margin: 0;
	line-height: 1.2;
}

.modal-auto-subtitle {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	margin: 0;
	font-style: italic;
	line-height: 1.4;
}

/* strip &nbsp; spacer divs used as horizontal rules */
.modal-content [style*=border-top] {
	border: none !important;
	border-top: 1px solid var(--au-gray-200) !important;
	margin: var(--space-5) 0 !important;
	height: 0 !important;
}

/* story body */
.modal-body {
	font-size: var(--text-sm);
	line-height: 1.75;
	color: var(--au-text);
}

.modal-body p {
	margin-top: var(--space-3);
}

.modal-body p:first-child {
	margin-top: 0;
}

/* h3 section headings get a divider line above them automatically —
   no need for manual <hr> or border-top divs in the modal markup */
.modal-body h3 {
	font-family: var(--font-display);
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--au-navy);
	margin: var(--space-6) 0 var(--space-2);
	padding-top: var(--space-6);
	border-top: 1px solid var(--au-gray-200);
}

/* first h3 in the body — no divider above it whether the h3 is a direct child
   or wrapped in a plain div (the original markup wrapped each section in <div>) */
.modal-body h3:first-child,
.modal-body > div:first-child > h3:first-child {
	margin-top: 0;
	padding-top: 0;
	border-top: none;
}

/* standard close row — .modal-footer (preferred) or legacy [align="right"] */
.modal-footer {
	display: flex;
	justify-content: flex-end;
	padding-top: var(--space-5);
	margin-top: var(--space-5);
	border-top: 1px solid var(--au-gray-200);
}

.modal-content [align=right] {
	margin-top: var(--space-5);
	text-align: right;
}

[data-dismiss=modal] {
	cursor: pointer;
}

/* X close button — injected by modal.js into .modal-content top-right */
.modal-content {
	position: relative;
}

.modal-close-x {
	position: absolute;
	top: var(--space-4);
	right: var(--space-4);
	background: none;
	border: none;
	color: var(--au-warm-gray);
	cursor: pointer;
	font-size: var(--text-lg);
	padding: var(--space-2);
	line-height: 1;
	z-index: 1;
}

.modal-close-x:hover {
	color: var(--au-navy);
}

/* ── Profile portrait + button grid ──
   .feature-inner wraps alternating portrait rows and button rows in authored
   profile pages. layout.css uses literal 280px, so override flex directly.
   150px fits 3 per row at 500px wide sidebar content (3×150 + 2×24gap = 498px).
   Selector covers both portrait grids and adjacent button-row grids. */
.page-main .feature-inner .grid > div {
	flex: 1 1 150px !important;
	min-width: 0;
}

.page-main .grid:has(> div > img) > div {
	flex: 1 1 150px !important;
}

.page-main .grid > div:has(> img) {
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-lg);
	overflow: hidden;
	display: flex;
	flex-direction: column;
}

.page-main .grid > div:has(> img) > img {
	width: 100%;
	aspect-ratio: 1/1;
	-o-object-fit: cover;
	   object-fit: cover;
	-o-object-position: top;
	   object-position: top;
}

.page-main .grid > div:has(> img) > h2 {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-navy);
	font-weight: 600;
	margin: 0;
	padding: var(--space-4) var(--space-4) var(--space-1);
}

.page-main .grid > div:has(> img) > p.description {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.5;
	margin: 0;
	padding: 0 var(--space-4) var(--space-4);
}

/* profile "read story" button rows: full-width buttons, text wraps */
.page-main .grid > div > p > button.btn-lg {
	width: 100%;
	justify-content: center;
	white-space: normal;
	text-align: center;
	line-height: 1.3;
	min-height: 3.5rem;
}

@media (max-width: 600px) {
	.modal {
		padding: var(--space-4) var(--space-3);
	}
	.modal-content {
		padding: var(--space-5) !important;
	}
	.modal-content > div:first-child {
		flex-direction: column;
	}
	.modal-content > div:first-child > div:first-child img {
		width: 80px;
		height: 80px;
	}
}
/* ── Bootstrap form classes → 2027 styles ──
   Forms authored with Bootstrap .form-group / .form-control / .checkbox.
   Maps to the same visual result as forms.css .input/.select/.label. */
.form-group {
	margin-bottom: var(--space-5);
}

.form-group > label {
	display: block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-2);
}

.form-control {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	outline: none;
	transition: border-color var(--duration-base);
	box-sizing: border-box;
}

.form-control:focus {
	border-color: var(--au-gold);
}

select.form-control {
	cursor: pointer;
}

textarea.form-control {
	resize: vertical;
	min-height: 120px;
}

/* Bootstrap .checkbox: div.checkbox > label > input[type=checkbox] + text.
   forms.css treats .checkbox as a 20×20px custom input, but Bootstrap uses it
   as a wrapper DIV. Override size on div.checkbox so the label can be full height. */
div.checkbox {
	width: auto !important;
	height: auto !important;
	margin: var(--space-2) 0;
}

div.checkbox label {
	display: flex !important;
	align-items: flex-start;
	gap: var(--space-3);
	font-weight: 400;
	cursor: pointer;
	padding-left: 0 !important;
}

.checkbox input[type=checkbox] {
	position: static !important;
	margin: 2px 0 0 !important;
	flex-shrink: 0;
	width: 1rem;
	height: 1rem;
	accent-color: var(--au-gold);
	cursor: pointer;
}

/* scrollable checkbox container */
.programs-wrapper {
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-4);
	max-height: 280px;
	overflow-y: auto;
}

.programs-wrapper strong {
	display: block;
	font-size: var(--text-xs);
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--au-navy);
	margin: var(--space-3) 0 var(--space-2);
}

.programs-wrapper strong:first-child {
	margin-top: 0;
}

.programs-wrapper hr {
	border: none;
	border-top: 1px solid var(--au-gray-200);
	margin: var(--space-3) 0;
}

/* helper text + required asterisk */
.text-danger {
	color: var(--au-error);
}

.text-muted {
	color: var(--au-warm-gray);
	font-size: var(--text-xs);
	font-weight: 400;
}

/* ── CKEditor text-align:center on <p> containing an img ──
   CKEditor centers images by setting text-align:center on the wrapping <p>.
   base.css makes img display:block, which ignores text-align — translate to
   margin:auto so the author's intent is honored. */
p[style*="text-align: center"] > img,
p[style*="text-align:center"] > img {
	margin-inline: auto;
}

/* ── Legacy font references ──
   AkkuratLight was the old site's body font, not loaded in 2027. Override
   to the design-system stack so the text doesn't fall to a random serif. */
[style*=AkkuratLight],
[style*=Akkurat] {
	font-family: var(--font-body) !important;
}

/* ── Bootstrap responsive embed (.embed-responsive) ──
   Legacy content wraps YouTube/Vimeo iframes in this; Bootstrap's CSS
   isn't loaded on the 2027 chain so the iframe collapses. */
.embed-responsive {
	position: relative;
	display: block;
	width: 100%;
	padding: 0;
	overflow: hidden;
}

.embed-responsive::before {
	content: "";
	display: block;
}

.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	border: 0;
}

.embed-responsive-16by9::before {
	padding-top: 56.25%;
}

.embed-responsive-4by3::before {
	padding-top: 75%;
}

.embed-responsive-1by1::before {
	padding-top: 100%;
}

/* ── img-responsive (Bootstrap) ── */
.card-text .img-responsive {
	max-width: 100%;
	height: auto !important;
}

/* ── responsive ── */
@media (max-width: 760px) {
	.card-text > .row,
	.card-text > div > .row {
		gap: var(--space-4);
	}
	.card-text:has(> [class*=col-lg-3]) {
		gap: var(--space-3);
	}
	.card-text > [class*=col-lg-3] {
		flex-basis: calc(50% - var(--space-3));
	}
	section.columns .container > .row {
		gap: var(--space-3);
	}
	section.columns .container > .row > [class*=col-] {
		flex-basis: calc(50% - var(--space-3));
	}
}
@media (max-width: 480px) {
	.card-text > [class*=col-lg-3] {
		flex-basis: 100%;
	}
	section.columns .container > .row > [class*=col-] {
		flex-basis: 100%;
	}
}
/* ── Hand-built breadcrumbs ──
   Legacy section pages carry a "Breadcrumbs" columns section (Custom Class
   "breadcrumbs") whose card body is a .breadcrumb-container of .crumb divs
   separated by .delimiter divs ("&gt;") and Bootstrap .mobile-delimiter spacers.
   Unstyled they stack as a list of links; lay them out as one compact trail
   in the 2027 crumb look and slim the band to fit. */
.section.breadcrumbs {
	padding-block: var(--space-4);
}

.section.breadcrumbs .card,
.section.breadcrumbs .card-body {
	padding: 0;
}

.breadcrumb-container {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: var(--space-1) var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
}

.breadcrumb-container .mobile-delimiter {
	display: none;
}

.breadcrumb-container .delimiter {
	font-size: 0;
}

.breadcrumb-container .delimiter::before {
	content: "›";
	font-size: var(--text-sm);
	color: var(--au-gray-400);
}

.breadcrumb-container .crumb a {
	color: var(--au-navy-light);
}

.breadcrumb-container .crumb-leaf {
	color: var(--au-navy);
	font-weight: 600;
}

/* ── Bootstrap 3 bits authored inside section bodies ──
   Hand-written section content (e.g. /life/housing/timberridge/) still uses
   Bootstrap's buttons, alerts, panels and responsive embeds. Map them onto the
   2027 look so they don't fall back to bare text or zero-height iframes. */
.card-text .btn-blue,
.card-text .btn-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
}

.card-text .btn-blue:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-navy-deep);
}

.card-text .btn-default {
	background: transparent;
	color: var(--au-navy);
	border-color: var(--au-navy);
}

.card-text .btn-default:hover {
	background: var(--au-navy);
	color: var(--au-white);
}

.card-text p:not(.btn-row) > .btn + .btn {
	margin-left: var(--space-3);
}

.card-text .alert {
	margin-block: var(--space-4);
	padding: var(--space-4) var(--space-5);
	border-radius: var(--radius-md);
	background: var(--au-cream);
	border-left: 3px solid var(--au-gold);
}

.card-text .alert-warning {
	background: var(--au-gold-pale);
	color: #6e5418;
}

.card-text .alert-info {
	background: var(--au-cream);
}

.card-text .alert :is(h2, h3, h4) {
	color: inherit;
	margin-top: 0;
}

.card-text .panel {
	margin-block: var(--space-3);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	background: var(--au-white);
}

.card-text .panel-body {
	padding: var(--space-4) var(--space-5);
}

.card-text .embed-responsive {
	position: relative;
	width: 100%;
	aspect-ratio: 16/9;
	overflow: hidden;
	border-radius: var(--radius-md);
}

.card-text .embed-responsive-4by3 {
	aspect-ratio: 4/3;
}

.card-text .embed-responsive-item {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	border: 0;
}

.card-text .small {
	font-size: var(--text-xs);
}

.card-text .text-muted {
	color: var(--au-warm-gray);
}

/* legacy `btn-gold` (CKEditor-authored, e.g. the /faith/missions/ "Apply Here")
   -- the 2027 gold button. Without it the link renders as bare gold text. */
.btn.btn-gold {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
}

.btn.btn-gold:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-navy-deep);
}

/* legacy blog-blocks-rule.dt (agenda feed as a post list, e.g. /faith/events.html):
   the thumbnail sat in a Bootstrap col-md-3 floated beside the post. Restore the
   float so the photo stays a thumbnail instead of a full-width centred poster. */
.agenda-feed-blog .post-image {
	margin-bottom: var(--space-4);
}

.agenda-feed-blog .post-image img {
	max-height: none;
}

.agenda-feed-blog h3 {
	margin-top: 0;
}

.agenda-feed-blog h3 a {
	text-decoration: none;
}

.agenda-feed-blog h5 {
	margin: var(--space-1) 0 var(--space-3);
	font-family: var(--font-body);
	font-size: var(--text-sm);
	font-weight: 400;
	color: var(--au-gold);
}

.agenda-feed-blog .clearfix {
	clear: both;
}

.agenda-feed-blog .clearfix hr {
	margin: var(--space-5) 0;
}

@media (min-width: 768px) {
	.agenda-feed-blog .post-image {
		float: left;
		width: 25%;
		padding-right: var(--space-5);
	}
}
/* legacy `.top-button-menu` (CKEditor-authored program menu on the School of
   Leadership pages, styled by a folder specific.css the 2027 chain doesn't load):
   a row of navy tiles that wraps on narrow screens. The &nbsp;s between the
   links collapse into the flex gap. */
.top-button-menu {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2);
	margin-block: var(--space-4);
	font-size: 0;
}

.top-button-menu a {
	flex: 1 1 110px;
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 60px;
	padding: var(--space-2) var(--space-3);
	border-radius: var(--radius-md);
	background: var(--au-navy);
	color: var(--au-white);
	font-size: var(--text-sm);
	font-weight: 600;
	letter-spacing: 0.04em;
	line-height: 1.2;
	text-align: center;
	text-decoration: none;
}

.top-button-menu a:hover {
	background: var(--au-navy-deep);
	color: var(--au-white);
}

/* ════════════════════════════════════════════════════════════
   clickdimensions.css  ·  ClickDimensions forms in the 2027 look
   A ClickDimensions form (`data-cd-widget-container="form"`) is drawn
   client-side by SurveyJS: root `.sd-root-modern`, themed by `--sjs-*`
   custom properties the embed writes as INLINE styles on that root. Inline
   beats any stylesheet rule, so the variable overrides need !important.
   The embed itself stays untouched -- this only restyles what it draws.
   First used on /apply/request/.
   ════════════════════════════════════════════════════════════ */
[data-cd-widget-container] .sd-root-modern {
	--sjs-font-family: var(--font-body) !important;
	--sjs-font-size: 16px !important;
	--sjs-corner-radius: var(--radius-md) !important;
	--sjs-base-unit: 8px !important;
	--sjs-general-backcolor: var(--au-white) !important;
	--sjs-general-backcolor-dark: var(--au-cream) !important;
	--sjs-general-backcolor-dim: transparent !important;
	--sjs-general-backcolor-dim-light: var(--au-white) !important;
	--sjs-general-backcolor-dim-dark: var(--au-cream) !important;
	--sjs-general-forecolor: var(--au-text) !important;
	--sjs-general-forecolor-light: var(--au-warm-gray) !important;
	--sjs-general-dim-forecolor: var(--au-text) !important;
	--sjs-general-dim-forecolor-light: var(--au-warm-gray) !important;
	--sjs-primary-backcolor: var(--au-navy) !important;
	--sjs-primary-backcolor-dark: var(--au-navy-deep) !important;
	--sjs-primary-backcolor-light: rgba(198,149,43,0.15) !important;
	--sjs-primary-forecolor: var(--au-white) !important;
	--sjs-secondary-backcolor: var(--au-gold) !important;
	--sjs-secondary-backcolor-light: rgba(198,149,43,0.25) !important;
	--sjs-secondary-backcolor-semi-light: rgba(198,149,43,0.1) !important;
	--sjs-special-yellow: var(--au-gold) !important;
	--sjs-special-yellow-light: var(--au-gold-pale) !important;
	--sjs-special-red: var(--au-error) !important;
	--sjs-special-red-light: rgba(184,50,50,0.08) !important;
	--sjs-border-default: var(--au-gray-300) !important;
	--sjs-border-light: var(--au-gray-200) !important;
	--sjs-border-inside: var(--au-gray-200) !important;
	--sjs-shadow-small: none !important;
	--sjs-shadow-medium: var(--shadow-md) !important;
	--sjs-shadow-inner: none !important;
	--sjs-shadow-inner-reset: none !important;
	--sjs-font-questiontitle-size: var(--text-sm) !important;
	--sjs-font-questiontitle-color: var(--au-text) !important;
	--sjs-font-questiondescription-size: var(--text-sm) !important;
	--sjs-font-questiondescription-color: var(--au-warm-gray) !important;
	--sjs-font-editorfont-size: var(--text-base) !important;
	--sjs-font-editorfont-color: var(--au-text) !important;
	--sjs-font-editorfont-placeholdercolor: var(--au-warm-gray) !important;
	--sjs-font-surveytitle-family: var(--font-display) !important;
	--sjs-font-headertitle-family: var(--font-display) !important;
	--sjs-font-headertitle-color: var(--au-navy) !important;
	--sjs-font-headerdescription-color: var(--au-warm-gray) !important;
	--sjs-font-headerdescription-weight: 400 !important;
	--sjs-font-pagedescription-color: var(--au-warm-gray) !important;
	font-family: var(--font-body);
	background: var(--au-cream) !important;
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-lg);
	overflow: hidden;
}

/* header: the embed's faint campus-sketch tile and centered display type
   become a plain 2027 card header */
[data-cd-widget-container] .sd-root-modern .sv-header__background-image {
	display: none;
}

[data-cd-widget-container] .sd-root-modern .sv-header {
	background: transparent !important;
}

/* the header is a 3x3 grid with the text in the centre cell: drop the empty
   cells and let the text run the card's full width, left-aligned */
[data-cd-widget-container] .sd-root-modern .sv-header__content {
	display: block !important;
	padding: var(--space-6) var(--space-6) 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sv-header__cell--empty {
	display: none !important;
}

[data-cd-widget-container] .sd-root-modern .sv-header__cell {
	width: auto !important;
}

[data-cd-widget-container] .sd-root-modern .sv-header__cell-content {
	align-items: flex-start !important;
	text-align: left !important;
	max-width: none !important;
	padding: 0 !important;
	gap: var(--space-2) !important;
}

[data-cd-widget-container] .sd-root-modern .sv-header__title,
[data-cd-widget-container] .sd-root-modern .sv-header__title .sv-string-viewer {
	font-family: var(--font-display) !important;
	font-size: var(--text-2xl) !important;
	font-weight: 400 !important;
	line-height: 1.2 !important;
	color: var(--au-navy) !important;
	text-align: left !important;
}

[data-cd-widget-container] .sd-root-modern .sv-header__description,
[data-cd-widget-container] .sd-root-modern .sv-header__description .sv-string-viewer {
	font-family: var(--font-body) !important;
	font-size: var(--text-base) !important;
	font-weight: 400 !important;
	line-height: 1.5 !important;
	color: var(--au-warm-gray) !important;
	text-align: left !important;
}

/* body: no per-question white frames -- fields sit straight on the card */
[data-cd-widget-container] .sd-root-modern .sd-body,
[data-cd-widget-container] .sd-root-modern .sd-body.sd-body--responsive {
	padding: var(--space-5) var(--space-6) var(--space-6) !important;
	max-width: none !important;
}

[data-cd-widget-container] .sd-root-modern .sd-element--with-frame {
	background: transparent !important;
	box-shadow: none !important;
	border: 0 !important;
	padding: 0 !important;
	margin: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-page {
	padding: 0 !important;
}

/* a row's cells are SurveyJS wrappers sized flex: 1 1 50% with their own
   padding-left gutter, so no column-gap here (it would wrap every pair) */
[data-cd-widget-container] .sd-root-modern .sd-row {
	margin-top: var(--space-4) !important;
	row-gap: var(--space-4);
}

[data-cd-widget-container] .sd-root-modern .sd-row:first-child {
	margin-top: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-row > .sd-row__question {
	margin-left: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-question__title {
	font-weight: 600;
}

/* a composite field whose title the form hides (the phone panel) would
   otherwise be two bare boxes: label it with the question's own name */
[data-cd-widget-container] .sd-root-modern .sd-element--complex[data-name]:not(:has(> .sd-question__header))::before {
	content: attr(data-name);
	display: block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-1);
}

[data-cd-widget-container] .sd-root-modern .sd-element--complex,
[data-cd-widget-container] .sd-root-modern .sd-element--complex .sd-panel__content {
	padding: 0 !important;
}

/* the embed's own nested !important rule pads the composite's top with this
   var; zero the var, since its selector outranks ours */
[data-cd-widget-container] .sd-root-modern .sd-element--complex.sd-element--with-frame {
	--sd-base-vertical-padding: 0px !important;
}

[data-cd-widget-container] .sd-root-modern .sd-element--complex .sd-row {
	flex-wrap: nowrap !important;
	margin-top: 0 !important;
}

/* country code fixed and narrow, number takes the rest (the cells are the
   SurveyJS wrapper divs with inline flex/max-width) */
[data-cd-widget-container] .sd-root-modern .sd-element--complex .sd-row > div:first-child {
	flex: 0 0 calc(var(--cd-code-width, 9.5rem) + 40px) !important;
	max-width: none !important;
	min-width: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-element--complex .sd-row > div + div {
	flex: 1 1 auto !important;
	max-width: none !important;
	min-width: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-element--nested {
	padding: 0 !important;
	margin: 0 !important;
}

/* side-by-side fields line up on their inputs when only one has a label */
[data-cd-widget-container] .sd-root-modern .sd-page > .sd-row {
	align-items: flex-end;
}

/* inputs = .input from forms.css */
[data-cd-widget-container] .sd-root-modern .sd-input {
	font-family: var(--font-body) !important;
	font-size: var(--text-base) !important;
	color: var(--au-text);
	background: var(--au-white) !important;
	border: 2px solid var(--au-gray-200) !important;
	border-radius: var(--radius-md) !important;
	box-shadow: none !important;
	padding: var(--space-3) var(--space-4) !important;
	box-sizing: border-box !important;
	width: 100% !important;
	height: 3.25rem !important;
	min-height: 0 !important;
	line-height: 1.5 !important;
	transition: border-color var(--duration-base);
}

[data-cd-widget-container] .sd-root-modern textarea.sd-input,
[data-cd-widget-container] .sd-root-modern .sd-comment {
	height: auto !important;
	min-height: 7rem !important;
}

[data-cd-widget-container] .sd-root-modern .sd-dropdown {
	display: flex !important;
	align-items: center;
}

[data-cd-widget-container] .sd-root-modern .sd-input::-moz-placeholder, [data-cd-widget-container] .sd-root-modern .sd-dropdown__filter-string-input::-moz-placeholder {
	color: var(--au-warm-gray);
	opacity: 1;
}

[data-cd-widget-container] .sd-root-modern .sd-input::placeholder,
[data-cd-widget-container] .sd-root-modern .sd-dropdown__filter-string-input::placeholder {
	color: var(--au-warm-gray);
	opacity: 1;
}

[data-cd-widget-container] .sd-root-modern .sd-input:focus,
[data-cd-widget-container] .sd-root-modern .sd-input:focus-within,
[data-cd-widget-container] .sd-root-modern .sd-input.sd-input--focused {
	border-color: var(--au-gold) !important;
	box-shadow: none !important;
	outline: none;
}

[data-cd-widget-container] .sd-root-modern .sd-input.sd-input--error,
[data-cd-widget-container] .sd-root-modern .sd-question--error .sd-input {
	border-color: var(--au-error) !important;
}

[data-cd-widget-container] .sd-root-modern .sd-dropdown {
	padding-right: var(--space-6) !important;
}

[data-cd-widget-container] .sd-root-modern .sd-dropdown > * {
	min-height: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-dropdown__value {
	font-size: var(--text-base) !important;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

[data-cd-widget-container] .sd-root-modern .sd-question__erbox {
	font-size: var(--text-sm);
	color: var(--au-error);
	background: transparent !important;
	padding: var(--space-1) 0 0 !important;
	margin: 0 !important;
}

/* footer: the submit is the gold .btn-primary */
[data-cd-widget-container] .sd-root-modern .sd-footer,
[data-cd-widget-container] .sd-root-modern .sd-body__navigation {
	padding: var(--space-5) 0 0 !important;
	margin: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-btn,
[data-cd-widget-container] .sd-root-modern .sd-navigation__next-btn,
[data-cd-widget-container] .sd-root-modern .sd-navigation__complete-btn {
	font-family: var(--font-body) !important;
	font-weight: 700 !important;
	font-size: var(--text-sm) !important;
	letter-spacing: 1.5px;
	text-transform: uppercase;
	line-height: 1.2 !important;
	color: var(--au-navy-deep) !important;
	background: var(--au-gold) !important;
	border: 2px solid var(--au-gold) !important;
	border-radius: var(--radius-md) !important;
	box-shadow: none !important;
	padding: var(--space-4) var(--space-6) !important;
	min-width: 0 !important;
	width: auto;
	max-width: 100%;
	box-sizing: border-box !important;
	white-space: normal !important;
	transition: background var(--duration-fast), box-shadow var(--duration-fast);
}

[data-cd-widget-container] .sd-root-modern .sd-btn:hover {
	background: var(--au-gold-light) !important;
	border-color: var(--au-gold-light) !important;
	box-shadow: 0 4px 16px rgba(198, 149, 43, 0.35) !important;
}

[data-cd-widget-container] .sd-root-modern .sd-btn:focus-visible {
	outline: 2px solid var(--au-navy);
	outline-offset: 2px;
}

/* the "thank you" panel after submit */
[data-cd-widget-container] .sd-root-modern .sd-completedpage {
	font-family: var(--font-body) !important;
	color: var(--au-text) !important;
	padding: var(--space-6) !important;
}

@media (max-width: 600px) {
	[data-cd-widget-container] .sd-root-modern .sv-header__content {
		padding: var(--space-5) var(--space-4) 0 !important;
	}
	[data-cd-widget-container] .sd-root-modern .sd-body,
	[data-cd-widget-container] .sd-root-modern .sd-body.sd-body--responsive {
		padding: var(--space-4) var(--space-4) var(--space-5) !important;
	}
	[data-cd-widget-container] .sd-root-modern .sv-header__title,
	[data-cd-widget-container] .sd-root-modern .sv-header__title .sv-string-viewer {
		font-size: var(--text-xl) !important;
	}
	[data-cd-widget-container] .sd-root-modern .sd-btn {
		width: 100% !important;
	}
	[data-cd-widget-container] .sd-root-modern {
		--cd-code-width: 6.5rem;
	}
}
/*# sourceMappingURL=data:application/json;base64,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REFBMEQ7QUFDM0Q7O0FBRUE7Q0FDQyxpQ0FBaUM7Q0FDakMsbUJBQW1CO0FBQ3BCOztBQUVBLHVDQUF1QztBQUN2QztDQUNDLHdDQUF3QztDQUN4QyxnQ0FBZ0M7Q0FDaEMsa0NBQWtDO0FBQ25DOztBQUVBO0NBQ0M7RUFDQyxtREFBbUQ7Q0FDcEQ7Q0FDQTs7RUFFQyxnRUFBZ0U7Q0FDakU7Q0FDQTs7RUFFQyxvQ0FBb0M7Q0FDckM7Q0FDQTtFQUNDLHNCQUFzQjtDQUN2QjtDQUNBO0VBQ0MsdUJBQXVCO0NBQ3hCO0FBQ0QiLCJmaWxlIjoiaW5kZXguY3NzIiwic291cmNlc0NvbnRlbnQiOlsiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyogaW5kZXguc2NzcyDihpIgaW5kZXguY3NzICDCtyAgc2VydmVkIGF0IC9jb2RlLzIwMjcvaW5kZXguY3NzXG4gICBDbGVhbiBzaGVsbCAobm8gQm9vdHN0cmFwLCBubyBhdS0gcHJlZml4KS4gTG9hZCBvcmRlcjogdG9rZW5zIOKGklxuICAgYmFzZSDihpIgbGF5b3V0L2NhcmQg4oaSIGNvbXBvbmVudHMuIFJlY29tcGlsZSBhZnRlciBhbnkgZWRpdDpcbiAgIG5weCBzYXNzIGluZGV4LnNjc3MgaW5kZXguY3NzIC0tbm8tc291cmNlLW1hcFxuICAgTk9URTogdGhlIENNUyBvbmx5IHJlYnVpbGRzIGluZGV4LmNzcyB3aGVuIFRISVMgZmlsZSBpcyBzYXZlZCDigJQgZWRpdGluZyBhXG4gICBwYXJ0aWFsIHVuZGVyIGNzcy8gYWxvbmUgZG9lcyBub3QgdHJpZ2dlciBpdC4gUmUtc2F2ZSB0aGlzIGZpbGUgYWZ0ZXIgYW55XG4gICBwYXJ0aWFsIGVkaXQuICovXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGF1LXRva2Vucy5jc3MgIMK3ICBBVSBEZXNpZ24gU3lzdGVtIGN1c3RvbSBwcm9wZXJ0aWVzXG4gICBUaGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYWxsIGRlc2lnbiB0b2tlbnMuXG4gICBFdmVyeSBvdGhlciBwYXJ0aWFsIHJlZmVyZW5jZXMgdGhlc2UgdmlhIHZhcigpLlxuICAgSWYgeW91ciBtYXN0ZXIgYWxyZWFkeSBkZWZpbmVzIDpyb290LCBvbWl0IHRoaXMgZmlsZS5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuOnJvb3Qge1xuXHQvKiDilIDilIDilIAgQ09MT1I6IFByaW1hcnkg4pSA4pSA4pSAICovXG5cdC0tYXUtbmF2eTogIzAwMzM2Njtcblx0LS1hdS1uYXZ5LWRlZXA6ICMwMDFhMzM7XG5cdC0tYXUtbmF2eS1taWQ6ICMwMDJhNDg7IC8qIGJldHdlZW4gZGVlcCBhbmQgbmF2eTsgbWF0Y2hlcyB0aGVtZS1jb2xvciAqL1xuXHQtLWF1LW5hdnktbGlnaHQ6ICMwMDQwODA7XG5cdC0tYXUtZ29sZDogI0M2OTUyQjtcblx0LS1hdS1nb2xkLWxpZ2h0OiAjRThCODRCO1xuXHQtLWF1LWdvbGQtcGFsZTogI0ZERjVFNjtcblx0Lyog4pSA4pSA4pSAIENPTE9SOiBOZXV0cmFsIOKUgOKUgOKUgCAqL1xuXHQtLWF1LWNyZWFtOiAjRkFGOEY1O1xuXHQtLWF1LXN0b25lOiAjRUNFQUU0OyAvKiB3YXJtIGxpZ2h0LWdyYXkgYmFuZCwgYSBzdGVwIGRlZXBlciB0aGFuIGNyZWFtICovXG5cdC0tYXUtd2hpdGU6ICNGRkZGRkY7XG5cdC0tYXUtd2FybS1ncmF5OiAjNkI2NTYwO1xuXHQtLWF1LWdyYXktMjAwOiAjRThFNERGO1xuXHQtLWF1LWdyYXktMzAwOiAjRDFDQkM0O1xuXHQtLWF1LWdyYXktNDAwOiAjQjVBRkE4O1xuXHQtLWF1LXRleHQ6ICMyQTI1MjI7XG5cdC8qIOKUgOKUgOKUgCBDT0xPUjogU2VtYW50aWMg4pSA4pSA4pSAICovXG5cdC0tYXUtc3VjY2VzczogIzJEN0Q0Njtcblx0LS1hdS13YXJuaW5nOiAjQzY5NTJCO1xuXHQtLWF1LWVycm9yOiAjQjgzMjMyO1xuXHQtLWF1LWluZm86ICMyODY4QTY7XG5cdC8qIOKUgOKUgOKUgCBUWVBPR1JBUEhZIOKUgOKUgOKUgCAqL1xuXHQtLWZvbnQtZGlzcGxheTogXCJJQk0gUGxleCBTZXJpZlwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZjtcblx0LS1mb250LWJvZHk6IFwiSUJNIFBsZXggU2Fuc1wiLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7XG5cdC0tZm9udC1tb25vOiBcIklCTSBQbGV4IE1vbm9cIiwgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG5cdC8qIOKUgOKUgOKUgCBUWVBFIFNDQUxFIChNYWpvciBUaGlyZCDigJQgMS4yNSkg4pSA4pSA4pSAICovXG5cdC0tdGV4dC14czogMC43NXJlbTsgLyogMTJweCAqL1xuXHQtLXRleHQtc206IDAuODc1cmVtOyAvKiAxNHB4ICovXG5cdC0tdGV4dC1iYXNlOiAxcmVtOyAvKiAxNnB4ICovXG5cdC0tdGV4dC1tZDogMS4xMjVyZW07IC8qIDE4cHggKi9cblx0LS10ZXh0LWxnOiAxLjI1cmVtOyAvKiAyMHB4ICovXG5cdC0tdGV4dC14bDogMS41NjNyZW07IC8qIDI1cHggKi9cblx0LS10ZXh0LTJ4bDogMS45NTNyZW07IC8qIH4zMXB4ICovXG5cdC0tdGV4dC0zeGw6IDIuNDQxcmVtOyAvKiB+MzlweCAqL1xuXHQtLXRleHQtNHhsOiAzLjA1MnJlbTsgLyogfjQ5cHggKi9cblx0Lyog4pSA4pSA4pSAIFNQQUNJTkcgKDhweCBiYXNlKSDilIDilIDilIAgKi9cblx0LS1zcGFjZS0xOiAwLjI1cmVtOyAvKiA0cHggKi9cblx0LS1zcGFjZS0yOiAwLjVyZW07IC8qIDhweCAqL1xuXHQtLXNwYWNlLTM6IDAuNzVyZW07IC8qIDEycHggKi9cblx0LS1zcGFjZS00OiAxcmVtOyAvKiAxNnB4ICovXG5cdC0tc3BhY2UtNTogMS41cmVtOyAvKiAyNHB4ICovXG5cdC0tc3BhY2UtNjogMnJlbTsgLyogMzJweCAqL1xuXHQtLXNwYWNlLTg6IDNyZW07IC8qIDQ4cHggKi9cblx0LS1zcGFjZS0xMDogNHJlbTsgLyogNjRweCAqL1xuXHQtLXNwYWNlLTEyOiA1cmVtOyAvKiA4MHB4ICovXG5cdC0tc3BhY2UtMTY6IDYuMjVyZW07IC8qIDEwMHB4ICovXG5cdC8qIOKUgOKUgOKUgCBMQVlPVVQg4pSA4pSA4pSAICovXG5cdC0tbWF4LXdpZHRoOiAxMjAwcHg7XG5cdC0tbWF4LXdpZHRoLW5hcnJvdzogOTAwcHg7XG5cdC0tbWF4LXdpZHRoLXRleHQ6IDcwMHB4O1xuXHQtLWd1dHRlcjogMi41cmVtO1xuXHQtLWhlYWRlci1oZWlnaHQ6IDYuNzVyZW07IC8qIGFwcHJveCBzdGlja3kgaGVhZGVyIGhlaWdodDsgc3RpY2t5IG9mZnNldHMgcmVmZXJlbmNlIGl0ICovXG5cdC8qIOKUgOKUgOKUgCBCT1JERVJTICYgUkFESUkg4pSA4pSA4pSAICovXG5cdC0tcmFkaXVzLXNtOiA0cHg7XG5cdC0tcmFkaXVzLW1kOiA4cHg7XG5cdC0tcmFkaXVzLWxnOiAxMnB4O1xuXHQtLXJhZGl1cy1mdWxsOiA5OTk5cHg7XG5cdC8qIOKUgOKUgOKUgCBTSEFET1dTIOKUgOKUgOKUgCAqL1xuXHQtLXNoYWRvdy1zbTogMCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNik7XG5cdC0tc2hhZG93LW1kOiAwIDRweCAxNnB4IHJnYmEoMCwwLDAsMC4wOCk7XG5cdC0tc2hhZG93LWxnOiAwIDhweCAzMnB4IHJnYmEoMCwwLDAsMC4xMCk7XG5cdC0tc2hhZG93LXhsOiAwIDE2cHggNDhweCByZ2JhKDAsMCwwLDAuMTQpO1xuXHQvKiDilIDilIDilIAgVFJBTlNJVElPTlMg4pSA4pSA4pSAICovXG5cdC0tZWFzZS1vdXQ6IGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KTtcblx0LS1lYXNlLXNwcmluZzogY3ViaWMtYmV6aWVyKDAuMzQsIDEuNTYsIDAuNjQsIDEpO1xuXHQtLWR1cmF0aW9uLWZhc3Q6IDE1MG1zO1xuXHQtLWR1cmF0aW9uLWJhc2U6IDMwMG1zO1xuXHQtLWR1cmF0aW9uLXNsb3c6IDUwMG1zO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGZvbnRzLmNzcyAgwrcgIHNlbGYtaG9zdGVkIElCTSBQbGV4ICAod29mZjIgaW4gL2NvZGUvMjAyNy9mb250cy8pXG4gICBGYW1pbHkgbmFtZXMgbWF0Y2ggdGhlIC0tZm9udC0qIHRva2Vucy4gT25seSB0aGUgd2VpZ2h0cy9zdHlsZXMgdGhlXG4gICBzeXN0ZW0gYWN0dWFsbHkgdXNlcyBhcmUgZGVjbGFyZWQgKFNhbnMgNDAwLzYwMC83MDAgKyBpdGFsaWMsIFNlcmlmXG4gICA0MDAvNjAwICsgaXRhbGljLCBNb25vIDQwMCkuIGZvbnQtZGlzcGxheTogc3dhcCB0byBhdm9pZCBGT0lULlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5AZm9udC1mYWNlIHtcblx0Zm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGZvbnQtZGlzcGxheTogc3dhcDtcblx0c3JjOiB1cmwoXCIvY29kZS8yMDI3L2ZvbnRzL2libS1wbGV4LXNhbnMtNDAwLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpO1xufVxuQGZvbnQtZmFjZSB7XG5cdGZvbnQtZmFtaWx5OiBcIklCTSBQbGV4IFNhbnNcIjtcblx0Zm9udC1zdHlsZTogaXRhbGljO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRmb250LWRpc3BsYXk6IHN3YXA7XG5cdHNyYzogdXJsKFwiL2NvZGUvMjAyNy9mb250cy9pYm0tcGxleC1zYW5zLTQwMC1pdGFsaWMud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG59XG5AZm9udC1mYWNlIHtcblx0Zm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtZGlzcGxheTogc3dhcDtcblx0c3JjOiB1cmwoXCIvY29kZS8yMDI3L2ZvbnRzL2libS1wbGV4LXNhbnMtNjAwLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpO1xufVxuQGZvbnQtZmFjZSB7XG5cdGZvbnQtZmFtaWx5OiBcIklCTSBQbGV4IFNhbnNcIjtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXHRmb250LXdlaWdodDogNzAwO1xuXHRmb250LWRpc3BsYXk6IHN3YXA7XG5cdHNyYzogdXJsKFwiL2NvZGUvMjAyNy9mb250cy9pYm0tcGxleC1zYW5zLTcwMC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKTtcbn1cbkBmb250LWZhY2Uge1xuXHRmb250LWZhbWlseTogXCJJQk0gUGxleCBTZXJpZlwiO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGZvbnQtZGlzcGxheTogc3dhcDtcblx0c3JjOiB1cmwoXCIvY29kZS8yMDI3L2ZvbnRzL2libS1wbGV4LXNlcmlmLTQwMC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKTtcbn1cbkBmb250LWZhY2Uge1xuXHRmb250LWZhbWlseTogXCJJQk0gUGxleCBTZXJpZlwiO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGZvbnQtZGlzcGxheTogc3dhcDtcblx0c3JjOiB1cmwoXCIvY29kZS8yMDI3L2ZvbnRzL2libS1wbGV4LXNlcmlmLTQwMC1pdGFsaWMud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG59XG5AZm9udC1mYWNlIHtcblx0Zm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2VyaWZcIjtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRmb250LWRpc3BsYXk6IHN3YXA7XG5cdHNyYzogdXJsKFwiL2NvZGUvMjAyNy9mb250cy9pYm0tcGxleC1zZXJpZi02MDAud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG59XG5AZm9udC1mYWNlIHtcblx0Zm9udC1mYW1pbHk6IFwiSUJNIFBsZXggTW9ub1wiO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGZvbnQtZGlzcGxheTogc3dhcDtcblx0c3JjOiB1cmwoXCIvY29kZS8yMDI3L2ZvbnRzL2libS1wbGV4LW1vbm8tNDAwLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpO1xufVxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBiYXNlLmNzcyAgwrcgIHJlc2V0ICsgYmFyZS1lbGVtZW50IHR5cG9ncmFwaHlcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3NcbiAgIEdMT0JBTCAoY2xlYW4gc2hlbGwg4oCUIG5vIEJvb3RzdHJhcCB0byBjb2V4aXN0IHdpdGgsIHNvIG5vIC5hdVxuICAgc2NvcGUpLiBPbi1icmFuZCBkZWZhdWx0cyBmb3IgcmF3IEhUTUwgc28gQ0tFZGl0b3IgY29udGVudCByZWFkc1xuICAgY29ycmVjdGx5IHdpdGggbm8gZXh0cmEgY2xhc3Nlcy4gQ29tcG9uZW50IGNsYXNzZXMgbGF5ZXIgb24gdG9wLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4qLCAqOjpiZWZvcmUsICo6OmFmdGVyIHtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKiB7XG5cdG1hcmdpbjogMDtcbn1cblxuaHRtbCB7XG5cdC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcblx0c2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XG59XG5cbmltZywgcGljdHVyZSwgc3ZnLCB2aWRlbyB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRtYXgtd2lkdGg6IDEwMCU7XG5cdGhlaWdodDogYXV0bztcbn1cblxuLyogc2V2ZXJhbCBpbWFnZXMgYXV0aG9yZWQgc2lkZSBieSBzaWRlIGluIG9uZSBwYXJhZ3JhcGggb3IgaGVhZGluZyAoYmFkZ2VzLFxuICAgc29jaWFsIGljb25zLCBsb2dvcyAtLSAvY2Vpcy9sZWFkZXJzaGlwX3NjaG9vbC8pIHN0YXkgb24gb25lIGxpbmUsIGFzIHRoZXkgZGlkXG4gICBiZWZvcmUgdGhlIGJsb2NrIHJlc2V0IGFib3ZlOyBhIGxvbmUgaW1hZ2Uga2VlcHMgZGlzcGxheTpibG9jayAqL1xuOmlzKHAsIGgyLCBoMywgaDQsIGg1LCBoNik6aGFzKD4gaW1nLCA+IGEgPiBpbWcpOmhhcyg+IGltZyArIGltZywgPiBpbWcgKyBhLCA+IGEgKyBpbWcsID4gYSArIGEpIGltZyB7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuaW5wdXQsIGJ1dHRvbiwgdGV4dGFyZWEsIHNlbGVjdCB7XG5cdGZvbnQ6IGluaGVyaXQ7XG5cdGNvbG9yOiBpbmhlcml0O1xufVxuXG5ib2R5IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0bGluZS1oZWlnaHQ6IDEuNjtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHQtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuXHQvKiBzdGlja3kgZm9vdGVyOiB0aGUgcGFnZSBpcyBhIGZ1bGwtdmlld3BvcnQtdGFsbCBjb2x1bW4gc28gdGhhdCBvbiBzaG9ydFxuXHQgICBwYWdlcyB0aGUgZm9vdGVycyAoZGVwdCBwcmUtZm9vdGVyICsgZ2xvYmFsIHNpdGUgZm9vdGVyKSBzZXR0bGUgYXQgdGhlXG5cdCAgIGJvdHRvbSBvZiB0aGUgc2NyZWVuIGluc3RlYWQgb2YgZmxvYXRpbmcgbWlkLXZpZXdwb3J0LiBUaGUgPG1haW4+IGNvbnRlbnRcblx0ICAgZ3Jvd3MgdG8gYWJzb3JiIHRoZSBzbGFjazsgaGVhZGVyL2Zvb3RlcnMga2VlcCB0aGVpciBuYXR1cmFsIGhlaWdodC5cblx0ICAgV29ya3Mgd2l0aCB0aGUgc3RpY2t5IGhlYWRlciAoc3RpY2t5IHBvc2l0aW9uaW5nIGlzIHVuYWZmZWN0ZWQgYnkgdGhlXG5cdCAgIGNvbHVtbiBmbGV4IGNvbnRleHQpLiAqL1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRtaW4taGVpZ2h0OiAxMDB2aDtcblx0bWluLWhlaWdodDogMTAwZHZoOyAvKiBwcm9ncmVzc2l2ZTogZXhjbHVkZSBtb2JpbGUgYnJvd3NlciBjaHJvbWUgd2hlcmUgc3VwcG9ydGVkICovXG59XG5cbi8qIHRoZSBjb250ZW50IGFyZWEgaXMgdGhlIG9ubHkgZmxleCBjaGlsZCB0aGF0IGdyb3dzOyBldmVyeXRoaW5nIGVsc2VcbiAgIChoZWFkZXIsIGRlcHQtZm9vdGVyLCBzaXRlLWZvb3RlciwgMC1oZWlnaHQgc2NyaXB0cykga2VlcHMgaXRzIHNpemUuICovXG5ib2R5ID4gbWFpbiB7XG5cdGZsZXg6IDEgMCBhdXRvO1xufVxuXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0dGV4dC13cmFwOiBiYWxhbmNlO1xufVxuXG4vKiBvbmUgd2VpZ2h0IGFjcm9zcyBhbGwgbGV2ZWxzIOKAlCBoaWVyYXJjaHkgY29tZXMgZnJvbSBzaXplICgrIHRoZSBzZXJpZi9uYXZ5XG4gICB2cyBzYW5zL2dyYXkgY29udHJhc3QgYWdhaW5zdCBib2R5KSwgbm90IHdlaWdodC4gS2VlcGluZyBldmVyeSBoZWFkaW5nIGF0IHRoZVxuICAgbGlnaHQgZGlzcGxheSB3ZWlnaHQgYXZvaWRzIGEgc21hbGxlciBoZWFkaW5nIChoNCkgcmVhZGluZyBhcyBib2xkZXIgdGhhbiBhXG4gICBsYXJnZXIgb25lIChoMykuIENvbXBvbmVudHMgdGhhdCB3YW50IGEgaGVhdmllciBsYWJlbCAoLmNhcmQtdGl0bGUsXG4gICAuZm9vdGVyLWNvbCBoMywgLm1lZ2EtY29sIGg0KSBzZXQgdGhlaXIgb3duIGZvbnQtd2VpZ2h0LiAqL1xuaDEge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtNHhsKTtcbn1cblxuaDIge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtM3hsKTtcbn1cblxuaDMge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtMnhsKTtcbn1cblxuaDQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xufVxuXG5oNSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG59XG5cbmg2IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRsZXR0ZXItc3BhY2luZzogMC41cHg7XG59XG5cbnAge1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG5wICsgcCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG5hIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtbGluaywgdmFyKC0tYXUtbmF2eS1saWdodCkpO1xuXHR0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcblx0dGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG5cdHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IDFweDtcblx0dHJhbnNpdGlvbjogY29sb3IgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4vKiBidXR0b25zIG1hbmFnZSB0aGVpciBvd24gaG92ZXIgY29sb3JzIOKAlCBleGNsdWRlIHRoZW0gc28gdGhlIGxpbmstaG92ZXIgZ29sZFxuICAgZG9lc24ndCB3YXNoIG91dCAuYnRuIGxhYmVscyAoZXNwLiAuYnRuLXByaW1hcnkgb24gaXRzIGdvbGQgYmFja2dyb3VuZCkuICovXG5hOm5vdCguYnRuKTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWxpbmstaG92ZXIsIHZhcigtLWF1LWdvbGQpKTtcbn1cblxuc3Ryb25nLCBiIHtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuZW0sIGkge1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbnNtYWxsIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxudWwsIG9sIHtcblx0cGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS01KTtcblx0bGluZS1oZWlnaHQ6IDEuNztcbn1cblxubGkgKyBsaSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xufVxuXG5ibG9ja3F1b3RlIHtcblx0Ym9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0cGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS01KTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS02KSAwO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbmhyIHtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTgpIDA7XG59XG5cbmNvZGUsIGtiZCwgc2FtcCB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IDAuOWVtO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdHBhZGRpbmc6IDAuMTVlbSAwLjRlbTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcbn1cblxucHJlIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRvdmVyZmxvdy14OiBhdXRvO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0bGluZS1oZWlnaHQ6IDEuNjtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS01KSAwO1xufVxuXG5wcmUgY29kZSB7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdHBhZGRpbmc6IDA7XG5cdGJvcmRlci1yYWRpdXM6IDA7XG5cdGZvbnQtc2l6ZTogaW5oZXJpdDtcblx0Y29sb3I6IGluaGVyaXQ7XG59XG5cbi8qIHZpc3VhbGx5LWhpZGRlbiAoc2NyZWVuLXJlYWRlciBvbmx5KSAqL1xuLnNyLW9ubHkge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHdpZHRoOiAxcHg7XG5cdGhlaWdodDogMXB4O1xuXHRwYWRkaW5nOiAwO1xuXHRtYXJnaW46IC0xcHg7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdGJvcmRlcjogMDtcbn1cblxuLyog4pSA4pSA4pSAIGljb24gbGluayBsaXN0IOKUgOKUgOKUgFxuICAgQSB0aWR5LCBzZWxmLWNvbHVtbmluZyBsaXN0IG9mIGljb24gKyBsaW5rIHJvd3MgZm9yIHJpY2gtdGV4dCBib2RpZXNcbiAgIChhY2NvcmRpb24gcGFuZWxzLCBwYWdlIGNvbnRlbnQpLiBBdXRob3JzIGFkZCBjbGFzcz1cImxpbmstbGlzdFwiIHRvIGEgPHVsPjtcbiAgIGVhY2ggPGxpPiBob2xkcyBhIEZvbnRBd2Vzb21lIDxpPiArIGFuIDxhPi4gVGhlIGljb24gdGFrZXMgdGhlIGJhbmQgYWNjZW50XG4gICAoZ29sZCBvbiBkYXJrIC8gbGlnaHQgYmFuZHMpOyB0aGUgbGluayBjb2xvdXIgY29tZXMgZnJvbSB0aGUgc3Vycm91bmRpbmdcbiAgIGNvbnRleHQgKGUuZy4gZ29sZCBpbnNpZGUgYSBkYXJrLWJhbmQgYWNjb3JkaW9uKS4gQ29sbGFwc2VzIHRvIG9uZSBjb2x1bW5cbiAgIG9uIG5hcnJvdyB3aWR0aHMuIEl0ZW1zIHdpdGhvdXQgYW4gaWNvbiBzdGlsbCBhbGlnbiBjbGVhbmx5LiAqL1xuLmxpbmstbGlzdCB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNCkgMDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMjYwcHgsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTYpO1xufVxuXG4ubGluay1saXN0IGxpIHtcblx0bWFyZ2luOiAwO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogYmFzZWxpbmU7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5saW5rLWxpc3QgbGkgPiBpIHtcblx0ZmxleDogbm9uZTtcblx0d2lkdGg6IDEuMTVlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LWdvbGQpKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBsYXlvdXQuY3NzICDCtyAgc2VjdGlvbiBiYW5kcyArIHRoZSBmbGV4aWJsZSBncmlkXG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzXG5cbiAgIC5zZWN0aW9uICAgZnVsbC1ibGVlZCBiYW5kICh2ZXJ0aWNhbCByaHl0aG0gKyBiZyB2YXJpYW50KVxuICAgLnNlY3Rpb24taW5uZXIgICBjZW50ZXJlZCBtYXgtd2lkdGggY29sdW1uXG4gICAuZ3JpZCAgICAgIGZsZXgtd3JhcDsgYW55IG51bWJlciBvZiBjaGlsZHJlbiBmbG93IGFuZCBmaWxsIOKAlFxuICAgICAgICAgICAgICB0aGUgcmVuZGVyZXJzIG5ldmVyIGNvbXB1dGUgYSBjb2x1bW4gY291bnQuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIOKUgOKUgOKUgCBTRUNUSU9OIOKUgOKUgOKUgCAqL1xuLnNlY3Rpb24ge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xMikgdmFyKC0tZ3V0dGVyKTtcbn1cblxuLyogU2FtZS1jb2xvciBiYW5kcyBhYnV0OiBjb2xsYXBzZSB0aGUgZG91YmxlZCBzZWFtIHRvIGEgc2luZ2xlLCBjb250aW51b3VzXG4gICBnYXAgKG5vdCB6ZXJvIOKAlCBjb250ZW50IG11c3Qgbm90IGNvbGxpZGUpLiBCb3RoIHNpZGVzIHRyaW0gdG8gLS1zcGFjZS02LFxuICAgc28gYSBzYW1lLWNvbG9yIHNlYW0gcmVhZHMgYXMgb25lIGJhbmQgd2l0aCB+NjRweCBiZXR3ZWVuIGl0cyBjb250ZW50LiAqL1xuLnNlY3Rpb24tLWZsdXNoLXRvcCB7XG5cdHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnNlY3Rpb24tLWZsdXNoLWJvdHRvbSB7XG5cdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnNlY3Rpb24taW5uZXIge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG59XG5cbi5zZWN0aW9uLWhlYWQge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLnNlY3Rpb24tbGFiZWwge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogM3B4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1leWVicm93LCB2YXIoLS1hdS1nb2xkKSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uc2VjdGlvbi10aXRsZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IGNsYW1wKHZhcigtLXRleHQtMnhsKSwgMy41dncsIHZhcigtLXRleHQtM3hsKSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcblx0bGluZS1oZWlnaHQ6IDEuMjtcbn1cblxuLnNlY3Rpb24tZGVzYyB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aC10ZXh0KTtcblx0bGluZS1oZWlnaHQ6IDEuNztcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi8qIOKUgOKUgOKUgCBCQUNLR1JPVU5EIEJBTkRTIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgVGhlIENNUyBiYWNrZ3JvdW5kX2NvbG9yIGZpZWxkIHN1cHBsaWVzIHRoZSBtb2RpZmllciBuYW1lIOKGkiB0aGUgYXV0aG9yXG4gICBwaWNrcyBmcm9tIHRoaXMgcGFsZXR0ZS4gTGlnaHQgYmFuZHMgc2V0IG9ubHkgYSBiYWNrZ3JvdW5kOyBEQVJLIGJhbmRzXG4gICBhbHNvIHB1Ymxpc2ggYSBzZXQgb2YgYC0tYmFuZC0qYCBDT05URVhUIFRPS0VOUyB0aGF0IGNvbXBvbmVudHMgcmVhZFxuICAgKGhlYWRpbmdzLCBib2R5LCBjYXJkcywgaGFpcmxpbmVzLCDigKYpLiBUaGF0J3MgdGhlIHdob2xlIHBvaW50OiBhXG4gICBjb21wb25lbnQgc3R5bGVzIGEgZGFyayBiYW5kIG9uY2UsIHRocm91Z2ggdGhlIHRva2Vucywgc28gYWRkaW5nIGEgbmV3XG4gICBiYW5kIGlzIGEgc2luZ2xlIGRlZmluaXRpb24gaGVyZSDigJQgbm90IGFuIGVkaXQgaW4gZXZlcnkgY29tcG9uZW50LlxuXG4gICBQYWxldHRlOlxuICAgICBsaWdodCAg4oaSICAod2hpdGUgZGVmYXVsdCkgwrcgY3JlYW0gwrcgc3RvbmUoZ3JheSkgwrcgZ29sZFxuICAgICBkYXJrICAg4oaSICBuYXZ5KGRlZXApIMK3IG5hdnktbWlkIMK3IG5hdnktYnJpZ2h0XG4gICBMZWdhY3kgLmN0IHZhbHVlcyBhcmUgYWxpYXNlZCBvbnRvIHRoZSBuZWFyZXN0IG5ldyBiYW5kIChkZWxldGUgdGhlXG4gICBhbGlhcyBzZWxlY3RvcnMgb25jZSB0aGUgLmN0IGRyb3Bkb3ducyBhcmUgdHJpbW1lZCB0byB0aGUgbmFtZXMgYWJvdmUpLiAqL1xuLyogbGlnaHQgYmFuZHMgKi9cbi5zZWN0aW9uLS1jcmVhbSxcbi5zZWN0aW9uLS1lY3J1LXdoaXRlIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xufVxuXG4uc2VjdGlvbi0tc3RvbmUsXG4uc2VjdGlvbi0tZ3JheSxcbi5zZWN0aW9uLS1zZWFzaGVsbC1ncmF5LFxuLnNlY3Rpb24tLWNhcmFycmEtZ3JheSxcbi5zZWN0aW9uLS1jYXJhcnJhLWdyYXktdGV4dHVyZWQge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1zdG9uZSk7XG59XG5cbi5zZWN0aW9uLS1nb2xkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcbn1cblxuLyogZGFyayBiYW5kcyDigJQgYmFja2dyb3VuZCArIHRoZSBzaGFyZWQgY29udGV4dCB0b2tlbnMgKi9cbi5zZWN0aW9uLS1uYXZ5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuLnNlY3Rpb24tLW5hdnktbWlkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1taWQpO1xufVxuXG4uc2VjdGlvbi0tbmF2eS1icmlnaHQge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnNlY3Rpb24tLW5pbGUtYmx1ZSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi8qIGNoYXRoYW1zLWJsdWUgd2FzIHRoZSBMSUdIVEVSIGxlZ2FjeSBibHVlICgjMTQzRTZFKSDigJQga2VlcCBpdCBsaWdodGVyIChtYXBzIHRvXG4gICAtLWF1LW5hdnkgIzAwMzM2NikgcmF0aGVyIHRoYW4gY29sbGFwc2luZyBpdCBpbnRvIHRoZSBkYXJrZXN0IGJhbmQuICovXG4uc2VjdGlvbi0tY2hhdGhhbXMtYmx1ZSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uc2VjdGlvbi0tZmlvcmQtYmx1ZSxcbi5zZWN0aW9uLS1maW9yZC1ibHVlLXRleHR1cmVkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuLnNlY3Rpb24tLW5hdnksXG4uc2VjdGlvbi0tbmF2eS1taWQsXG4uc2VjdGlvbi0tbmF2eS1icmlnaHQsXG4uc2VjdGlvbi0tbmlsZS1ibHVlLFxuLnNlY3Rpb24tLWNoYXRoYW1zLWJsdWUsXG4uc2VjdGlvbi0tZmlvcmQtYmx1ZSxcbi5zZWN0aW9uLS1maW9yZC1ibHVlLXRleHR1cmVkIHtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7XG5cdC0tYmFuZC1oZWFkaW5nOiB2YXIoLS1hdS13aGl0ZSk7XG5cdC0tYmFuZC1ib2R5OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjYpO1xuXHQtLWJhbmQtZXllYnJvdzogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdC0tYmFuZC1hY2NlbnQ6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHQvKiBob3Zlci9leHBhbmRlZCBzdXJmYWNlIChhY2NvcmRpb24gaGVhZGVyKTogYSBzdWJ0bGUgdHJhbnNsdWNlbnQtd2hpdGUgbGlmdC5cblx0ICAgKEEgZ29sZCB3YXNoIG11ZGRpZWQgYWdhaW5zdCB0aGUgYmx1ZSBiYW5kLikgKi9cblx0LS1iYW5kLWxpbms6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHQtLWJhbmQtbGluay1ob3ZlcjogdmFyKC0tYXUtd2hpdGUpO1xuXHQtLWJhbmQtcmFpc2VkOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDkpO1xuXHQtLWJhbmQtaGFpcmxpbmU6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7XG5cdC0tYmFuZC1xdW90ZTogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTtcblx0LS1iYW5kLWNhcmQtYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7XG5cdC0tYmFuZC1jYXJkLWJvcmRlcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuXHQtLWJhbmQtY2FyZC1ib3JkZXItdzogMDtcblx0LS1iYW5kLWNhcmQtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjI1KSwgMCAxNHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjI4KTtcblx0LS1iYW5kLWNhcmQtc2hhZG93LWhvdmVyOiAwIDZweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4zKSwgMCAyMnB4IDQ4cHggcmdiYSgwLCAwLCAwLCAwLjM2KTtcblx0LS1iYW5kLWljb24tYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7XG5cdC0tYmFuZC1pY29uLWZnOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLyog4pSA4pSA4pSAIEdSSUQg4oCUIGZsZXhpYmxlIGZsZXggKHVua25vd24gaXRlbSBjb3VudHMpIOKUgOKUgOKUgCAqL1xuLmdyaWQge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5ncmlkID4gKiB7XG5cdGZsZXg6IDEgMSAyODBweDtcblx0bWluLXdpZHRoOiAwO1xufSAvKiBtaW4td2lkdGg6IGEgd2lkZSB0YWJsZS9pZnJhbWUgaW5zaWRlIHNjcm9sbHMgaW4gaXRzIC50YWJsZS13cmFwIGluc3RlYWQgb2Ygc3RyZXRjaGluZyB0aGUgY29sdW1uICovXG4vKiBjb21wYWN0IHZhcmlhbnQg4oCUIGEgdGlnaHRlciBmbGV4IG1pbiBzbyBjYXJkcyBwYWNrIGNsb3NlciBhbmQgMy11cCBob2xkc1xuICAgYWNyb3NzIGEgc2lkZWJhciBjb250ZW50IGNvbHVtbiwgcmVzaXppbmcgc21vb3RobHkgKHRoZSBkZWZhdWx0IDI4MHB4IG9ubHlcbiAgIGZpdHMgdHdvKS4gV29ya3MgYXMgYSBzZWN0aW9uLWxldmVsIHRva2VuIChDdXN0b20gQ2xhc3MgXCJjb21wYWN0XCIpIG9yXG4gICBkaXJlY3RseSBvbiB0aGUgZ3JpZCAoY2xhc3M9XCJncmlkIGdyaWQtLWNvbXBhY3RcIikuICovXG4uZ3JpZC0tY29tcGFjdCA+ICoge1xuXHRmbGV4OiAxIDEgMjAwcHg7XG59XG5cbi5jb21wYWN0IC5ncmlkID4gKiB7XG5cdGZsZXg6IDEgMSAyMDBweDtcbn1cblxuLyog4pSA4pSA4pSAIFNQTElUIOKAlCBhc3ltbWV0cmljIHR3by1jb2x1bW4gZmVhdHVyZSByb3dzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgRm9yIGltYWdlLW9uLW9uZS1zaWRlIC8gdGV4dC1vbi10aGUtb3RoZXIgcm93cyB0aGUgZmxleCBncmlkIGNhbid0IGRvLFxuICAgYmVjYXVzZSBpdCBzaXplcyBldmVyeSBjaGlsZCBlcXVhbGx5LiBBIFNFQ1RJT04gdG9rZW4gKHR5cGVkIGluIHRoZSBzZWN0aW9uJ3NcbiAgIEN1c3RvbSBDbGFzcyBmaWVsZCkgc3dhcHMgdGhlIGdyaWQgdG8gYSBmaXhlZCB0d28tdHJhY2sgbGF5b3V0IHdpdGggYSB3aWRlICtcbiAgIG5hcnJvdyBzcGxpdDpcbiAgICAgc3BsaXQtMi0zICAg4oaSIDJmciAzZnIgICAobGVmdCBuYXJyb3dlciwgcmlnaHQgd2lkZXIpXG4gICAgIHNwbGl0LTMtMiAgIOKGkiAzZnIgMmZyICAgKGxlZnQgd2lkZXIsICAgcmlnaHQgbmFycm93ZXIpXG4gICBXaGljaCBzaWRlIGlzIHRoZSBpbWFnZSBpcyBqdXN0IHRoZSBPUkRFUiBvZiB0aGUgdHdvIGNhcmRzIOKAlCBwdXQgdGhlIGltYWdlXG4gICBjYXJkIGZpcnN0IGZvciBpbWFnZS1sZWZ0LCBzZWNvbmQgZm9yIGltYWdlLXJpZ2h0OyBwaWNrIHRoZSB0b2tlbiB0aGF0IG1ha2VzXG4gICB0aGUgaW1hZ2UgdGhlIHNpemUgeW91IHdhbnQuIFJvd3MgYXJlIHZlcnRpY2FsbHkgY2VudGVyZWQgc28gYSBzaG9ydCB0ZXh0XG4gICBibG9jayBzaXRzIGNlbnRlcmVkIGFnYWluc3QgYSB0YWxsZXIgaW1hZ2UuIEJ1aWx0IGZvciBUV08gY2FyZHM7IGEgdGhpcmRcbiAgIHdvdWxkIHdyYXAgdG8gYSBuZXcgcm93LiBDb2xsYXBzZXMgdG8gYSBzaW5nbGUgc3RhY2tlZCBjb2x1bW4gb24gbmFycm93XG4gICBzY3JlZW5zLiBUaGUgdG9rZW4gYWxzbyBsYW5kcyBhcyBhIGNsYXNzIG9uIHRoZSBzZWN0aW9uICh2aWEgY3VzdG9tX2NsYXNzKS4gKi9cbi5zcGxpdC0yLTMgLmdyaWQsXG4uc3BsaXQtMy0yIC5ncmlkIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z2FwOiB2YXIoLS1zcGFjZS04KTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnNwbGl0LTItMyAuZ3JpZCB7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMmZyIDNmcjtcbn1cblxuLnNwbGl0LTMtMiAuZ3JpZCB7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogM2ZyIDJmcjtcbn1cblxuLyogYW4gaW1hZ2Utb25seSBjYXJkIGRlZmF1bHRzIHRvIGFsaWduLXNlbGY6c3RhcnQgKHRvcC1waW5uZWQpOyBpbiBhIHNwbGl0IHdlXG4gICB3YW50IGl0IGNlbnRlcmVkIGluIHRoZSByb3cgbGlrZSBldmVyeXRoaW5nIGVsc2UgKi9cbi5zcGxpdC0yLTMgLmNhcmQtLW1lZGlhLFxuLnNwbGl0LTMtMiAuY2FyZC0tbWVkaWEge1xuXHRhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi8qIHBpbiBib3RoIGNvbHVtbnMgdG8gdGhlIHRvcCBpbnN0ZWFkIG9mIGNlbnRlcmluZyDigJQgY29tYmluZSB3aXRoIHRoZSBzcGxpdFxuICAgdG9rZW4gd2hlbiB0aGUgdGV4dCBpcyBsb25nZXIgdGhhbiB0aGUgaW1hZ2UgKGUuZy4gc3BsaXQtMy0yIHNwbGl0LXRvcCkgKi9cbi5zcGxpdC10b3AgLmdyaWQge1xuXHRhbGlnbi1pdGVtczogc3RhcnQ7XG59XG5cbi5zcGxpdC10b3AgLmNhcmQtLW1lZGlhIHtcblx0YWxpZ24tc2VsZjogc3RhcnQ7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjBweCkge1xuXHQuc3BsaXQtMi0zIC5ncmlkLFxuXHQuc3BsaXQtMy0yIC5ncmlkIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0fVxuXHQuc3BsaXQtMi0zIC5jYXJkLS1tZWRpYSxcblx0LnNwbGl0LTMtMiAuY2FyZC0tbWVkaWEge1xuXHRcdG1heC13aWR0aDogNDAwcHg7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0bWFyZ2luLWlubGluZTogYXV0bztcblx0fVxufVxuLyog4pSA4pSA4pSAIFRFWFQgU0laRSDigJQgc2VjdGlvbi1sZXZlbCBvdmVycmlkZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICBEcm9wIGludG8gYSBzZWN0aW9uJ3MgQ3VzdG9tIENsYXNzIGZpZWxkIHRvIGJ1bXAgdGhlIHRleHQgaW5cbiAgIHRoYXQgcm93IGFib3ZlIHRoZSBjYXJkLXRleHQgZGVmYXVsdCAoMTRweCkuXG4gICAgIHN0YW5kYXJkICDihpIgMTZweCBib2R5IHRleHQgKGNvbWZvcnRhYmxlIHJlYWRpbmcgZm9yIGZ1bGwtd2lkdGggcHJvc2UpXG4gICAgIGxlYWQgICAgICDihpIgMjBweCBib2R5LCAzMXB4IHRpdGxlcywgMS43IGxpbmUtaGVpZ2h0IChpbnRyby93ZWxjb21lKSAqL1xuLnN0YW5kYXJkIC5jYXJkLXRleHQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG59XG5cbi8qIHRoZSBjYXJkIGhlYWRpbmcgc2NhbGUgdG9wcyBvdXQgYXQgMThweCDigJQgYmFyZWx5IGFib3ZlIDE2cHggYm9keSwgc29cbiAgIHN0ZXAgaGVhZGluZ3MgdXAgd2l0aCB0aGUgdGV4dCBvciB0aGUgaGllcmFyY2h5IGZsYXR0ZW5zICovXG4uc3RhbmRhcmQgLmNhcmQtdGV4dCA6aXMoaDEsIGgyKSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG59XG5cbi5zdGFuZGFyZCAuY2FyZC10ZXh0IGgzIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcbn1cblxuLmxlYWQgLmNhcmQtdGl0bGUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtMnhsKTtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5sZWFkIC5jYXJkLXRleHQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG4ubGVhZCAuY2FyZC10ZXh0IDppcyhoMSwgaDIsIGgzKSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG59XG5cbi5sZWFkIC5jYXJkLXRleHQgOmlzKGg0LCBoNSwgaDYpIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcbn1cblxuLnBhZ2UtbWFpbiBwLmxlYWQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGNhcmQuY3NzICDCtyAgdGhlIGNhcmQgIChpbWFnZSAvIGV5ZWJyb3cgLyB0aXRsZSAvIHRleHQgLyBjdGEpXG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzXG4gICBUaGUgc2luZ2xlIGNhcmQgcHJpbWl0aXZlIHVzZWQgYnkgY29sdW1ucywgYmlvcywgZmVlZHMsIGV0Yy5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLmNhcmQge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdC8qIGJvcmRlciArIHNoYWRvdyBjb21lIGZyb20gdGhlIGJhbmQncyBjb250ZXh0IHRva2Vuczogb24gYSBkYXJrIGJhbmQgdGhlXG5cdCAgIGJvcmRlciB3aWR0aCBjb2xsYXBzZXMgdG8gMCAocmVjbGFpbXMgdGhlIDFweCBzdHJpcCB0aGF0IGxlYWtlZCB0aGUgd2hpdGVcblx0ICAgY2FyZCBiZyBhcm91bmQgdGhlIGltYWdlKSBhbmQgdGhlIHNoYWRvdyBkZWVwZW5zLiBMaWdodCBiYW5kcyBmYWxsIGJhY2sgdG9cblx0ICAgdGhlIGhhaXJsaW5lICsgc29mdCBzaGFkb3cuICovXG5cdGJvcmRlcjogdmFyKC0tYmFuZC1jYXJkLWJvcmRlci13LCAxcHgpIHNvbGlkIHZhcigtLWJhbmQtY2FyZC1ib3JkZXIsIHZhcigtLWF1LWdyYXktMjAwKSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdGJveC1zaGFkb3c6IHZhcigtLWJhbmQtY2FyZC1zaGFkb3csIHZhcigtLXNoYWRvdy1zbSkpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHR0cmFuc2l0aW9uOiBib3gtc2hhZG93IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcblx0LyogV2hpdGUtc3VyZmFjZSBjYXJkcyByZXNldCBiYW5kIGxpbmsgdG9rZW5zOyBwbGFpbiBjYXJkcyAodHJhbnNwYXJlbnQsXG5cdCAgIGJhbmQtY29sb3JlZCkgaW5oZXJpdCB0aGUgc2VjdGlvbidzIHRva2VucyBpbnN0ZWFkIOKAlCBzZWUgYmVsb3cuICovXG59XG5cbi5jYXJkOmhvdmVyIHtcblx0Ym94LXNoYWRvdzogdmFyKC0tYmFuZC1jYXJkLXNoYWRvdy1ob3ZlciwgdmFyKC0tc2hhZG93LW1kKSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0zMDApKTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xufVxuXG4uY2FyZDpub3QoLmNhcmQtLXBsYWluKSB7XG5cdC0tYmFuZC1saW5rOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0LS1iYW5kLWxpbmstaG92ZXI6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiAuLi5hbmQgdGhlIGJhbmQncyB0ZXh0IGNvbG9ycyB0b286IGEgdGFibGUgb3IgYWNjb3JkaW9uIGluc2lkZSBhIHdoaXRlIGNhcmRcbiAgIG9uIGEgZGFyayBiYW5kIHdhcyB0YWtpbmcgdGhlIGJhbmQncyB3aGl0ZSBib2R5IHRleHQgYW5kIHZhbmlzaGluZ1xuICAgKC9jaGhzL3NwZWVjaC9zZXJ2aWNlcy8gZmVlcykuIEEgYHBsYWluYCBzZWN0aW9uJ3MgY2FyZHMgYXJlIHRyYW5zcGFyZW50LFxuICAgc28gdGhleSBrZWVwIHRoZSBiYW5kJ3MgY29sb3JzLiAqL1xuLnNlY3Rpb246bm90KC5wbGFpbikgLmNhcmQ6bm90KC5jYXJkLS1wbGFpbikge1xuXHQtLWJhbmQtYm9keTogaW5pdGlhbDtcblx0LS1iYW5kLWhlYWRpbmc6IGluaXRpYWw7XG59XG5cbi5jYXJkLWltZy1saW5rIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmNhcmQtaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGFzcGVjdC1yYXRpbzogMTYvOTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWF1LW5hdnkpLCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG5cdC8qIGEgbGlua2VkIGltYWdlIGlzIGEgYnV0dG9uLCBub3QgdGV4dCDigJQgc3RvcCBTYWZhcmkgc2hvd2luZyB0aGUgdGV4dC1zZWxlY3Rcblx0ICAgSS1iZWFtIChhbmQgZHJhZ2dpbmcpIHdoZW4gdGhlIGltYWdlIGhhcyB3b3JkcyBiYWtlZCBpbnRvIGl0LiAqL1xuXHQtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuXHR1c2VyLXNlbGVjdDogbm9uZTtcblx0LXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7XG59XG5cbi8qIGljb24gbGVhZCDigJQgaWNvbi1sZWQgY2FyZHMgKHNlcnZpY2VzIC8gZmVhdHVyZXMpIGluIHBsYWNlIG9mIGEgcGhvdG8gKi9cbi5jYXJkLWljb24ge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdHdpZHRoOiAzLjI1cmVtO1xuXHRoZWlnaHQ6IDMuMjVyZW07XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcbn1cblxuLmNhcmQtYm9keSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpO1xuXHRmbGV4OiAxO1xufVxuXG4uY2FyZC1leWVicm93IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDFweDtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi5jYXJkLXRpdGxlIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGluZS1oZWlnaHQ6IDEuMjU7XG59XG5cbi5jYXJkLXRpdGxlIGEge1xuXHRjb2xvcjogaW5oZXJpdDtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uY2FyZC10aXRsZSBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG4uY2FyZC10ZXh0IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG59XG5cbi8qIEF1dGhvcmVkIHJpY2ggdGV4dCDigJQgdGhlIENLRWRpdG9yIGBjb250ZW50YCBmaWVsZCBsYW5kcyB3aG9sZSBpbnNpZGVcbiAgIC5jYXJkLXRleHQsIGFuZCBiYXNlLmNzcyByZXNldHMgZXZlcnkgbWFyZ2luIHRvIDAuIFdpdGhvdXQgcmh5dGhtIGhlcmUgYW5cbiAgIGF1dGhvcmVkIDxoMz4gc2l0cyBmbHVzaCBhZ2FpbnN0IHRoZSBwYXJhZ3JhcGggYWJvdmUgaXQgYW5kIHRoZSBibG9jayByZWFkc1xuICAgYXMgb25lIGx1bXAgKC5wYWdlLW1haW4gcmUtZXN0YWJsaXNoZXMgdGhlIHNhbWUgcmh5dGhtIGZvciBwYWdlIGNvbnRlbnQ7XG4gICB0aGVzZSBhcmUgdGhlIGNhcmQtc2NhbGUgZXF1aXZhbGVudHMg4oCUIHRpZ2h0ZXIsIGJlY2F1c2UgYSBjYXJkIGlzIGEgbXVjaFxuICAgbmFycm93ZXIgbWVhc3VyZSkuXG5cbiAgIEhlYWRpbmcgU0laRSBtYXR0ZXJzIHRvbzogYmFzZS5jc3MgZ2l2ZXMgaDMgLS10ZXh0LTJ4bCwgd2hpY2ggaXMgbGFyZ2VyIHRoYW5cbiAgIHRoZSBjYXJkJ3Mgb3duIC5jYXJkLXRpdGxlICgtLXRleHQtbGcpLCBzbyBhbiBhdXRob3JlZCBoZWFkaW5nIHdhc1xuICAgb3V0LXNob3V0aW5nIHRoZSB0aXRsZSBpdCBzaXRzIHVuZGVyLiBTdGVwcGVkIGRvd24gc28gdGhlIGhpZXJhcmNoeSByZWFkc1xuICAgY2FyZC10aXRsZSA+IGF1dGhvcmVkIGhlYWRpbmcgPiBib2R5LlxuXG4gICBGaXJzdCBjaGlsZCBzaXRzIGZsdXNoIHRvIHRoZSB0b3Ag4oCUIC5jYXJkLWJvZHkncyBmbGV4IGdhcCBhbHJlYWR5IHNwYWNlcyBpdFxuICAgZnJvbSB0aGUgdGl0bGUgYWJvdmUuICovXG4uY2FyZC10ZXh0ID4gOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLmNhcmQtdGV4dCA6aXMocCwgdWwsIG9sLCB0YWJsZSwgYmxvY2txdW90ZSwgZmlndXJlKSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uY2FyZC10ZXh0IDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGluZS1oZWlnaHQ6IDEuMjU7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLyogSGVhZGluZyBzY2FsZSBmb3IgYXV0aG9yZWQgY2FyZCB0ZXh0LiBiYXNlLmNzcyBzaXplcyBoZWFkaW5ncyBmb3IgYSBmdWxsXG4gICBwYWdlIChoMyBpcyAtLXRleHQtMnhsIC8gMzFweCksIHdoaWNoIGluc2lkZSBhIGNhcmQgb3V0LXNob3V0cyB0aGVcbiAgIC5jYXJkLXRpdGxlIGFib3ZlIGl0LiBSZXNjYWxlZCB0byBzaXQgYmV0d2VlbiB0aGUgY2FyZCB0aXRsZSAoLS10ZXh0LWxnIC9cbiAgIDIwcHgpIGFuZCB0aGUgYm9keSBjb3B5ICgtLXRleHQtc20gLyAxNHB4KSDigJQgYnV0IGVhY2ggbGV2ZWwgc3RpbGwgc3RlcHMsIHNvXG4gICBjaG9vc2luZyBoMiB2cyBoMyB2cyBoNCBjb250aW51ZXMgdG8gbWVhbiBzb21ldGhpbmcuIGg1L2g2IHJ1biBvdXQgb2Ygcm9vbVxuICAgb24gc2l6ZSBhbG9uZSBpbiBhIDE04oCTMjBweCBiYW5kLCBzbyB0aGV5IHNlcGFyYXRlIGJ5IHdlaWdodCBhbmQgbGV0dGVyZm9ybVxuICAgaW5zdGVhZCwgdGhlIHNhbWUgdHJpY2sgYmFzZS5jc3MgdXNlcyBmb3IgaDYuICovXG4uY2FyZC10ZXh0IGgxIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcbn1cblxuLmNhcmQtdGV4dCBoMiB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG59XG5cbi5jYXJkLXRleHQgaDMge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG59XG5cbi5jYXJkLXRleHQgaDQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNzAwO1xufVxuXG4uY2FyZC10ZXh0IGg1IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLmNhcmQtdGV4dCBoNiB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGxldHRlci1zcGFjaW5nOiAwLjVweDtcbn1cblxuLyogYSBoZWFkaW5nIGJlbG9uZ3Mgd2l0aCB0aGUgdGV4dCB1bmRlciBpdCDigJQga2VlcCB0aGF0IGdhcCB0aWdodGVyICovXG4uY2FyZC10ZXh0IDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSArIDppcyhwLCB1bCwgb2wpIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5jYXJkLWN0YSB7XG5cdG1hcmdpbi10b3A6IGF1dG87XG5cdGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uY2FyZC1jdGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIGxpbmtlZCBjYXJkIOKAlCB0aGUgd2hvbGUgY2FyZCBpcyB0aGUgY2xpY2sgdGFyZ2V0IChhIFwic3RyZXRjaGVkIGxpbmtcIiksIHNvIHlvdVxuICAgZG9uJ3QgaGF2ZSB0byBoaXQgdGhlIGxpbmsgdGV4dCBleGFjdGx5LiBUaGUgY2FyZCdzIGxpbmsgc3RyZXRjaGVzIHRvIGNvdmVyXG4gICBpdDsgdGhlIHBvaW50ZXIgY3Vyc29yIGZvbGxvd3MuIChUZXh0IHNlbGVjdGlvbiBpbnNpZGUgaXMgdHJhZGVkIGZvciB0aGUgZnVsbFxuICAgY2xpY2sgYXJlYSDigJQgZXhwZWN0ZWQgZm9yIGEgY2FyZC1hcy1hLWxpbmsuKSAqL1xuLmNhcmQtLWxpbmtlZCB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmNhcmQtLWxpbmtlZCA6aXMoLmNhcmQtaW1nLWxpbmssIC5jYXJkLXRpdGxlIGEsIC5jYXJkLWN0YSk6OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcbn1cblxuLyogbWVkaWEtb25seSBjYXJkIChpbWFnZSwgbm8gYm9keSk6IHNob3cgdGhlIGltYWdlIGF0IGl0cyBuYXR1cmFsIHJhdGlvIHdpdGggYWxsXG4gICBmb3VyIGNvcm5lcnMgcm91bmRlZCwgYW5kIGRvbid0IHN0cmV0Y2ggdG8gYSB0YWxsZXIgc2libGluZyAod2hpY2ggd291bGQgbGVhdmVcbiAgIGFuIHVuLXJvdW5kZWQgc3RyaXAgb2YgY2FyZCBiZWxvdyB0aGUgaW1hZ2UpLiAqL1xuLmNhcmQtLW1lZGlhIHtcblx0YWxpZ24tc2VsZjogc3RhcnQ7XG59XG5cbi8qIG5vIHBsYWNlaG9sZGVyIGdyYWRpZW50IGhlcmUg4oCUIGltYWdlLW9ubHkgY2FyZHMgYXJlIHVzdWFsbHkgdHJhbnNwYXJlbnQgbG9nb3NcbiAgIG9yIGdyYXBoaWNzLCBhbmQgdGhlIG5hdnkgZmlsbCB3b3VsZCBzaG93IHRocm91Z2ggYW5kIGJveCB0aGVtIGluLiBMZXQgdGhlXG4gICBjYXJkL2JhbmQgYmVoaW5kIHNob3cgaW5zdGVhZC4gKFBob3RvIGNhcmRzIGtlZXAgdGhlIGdyYWRpZW50IGFzIGEgbG9hZGluZy9cbiAgIGZhbGxiYWNrIGJhY2tkcm9wLikgKi9cbi5jYXJkLS1tZWRpYSAuY2FyZC1pbWcge1xuXHRhc3BlY3QtcmF0aW86IGF1dG87XG5cdGhlaWdodDogYXV0bztcblx0YmFja2dyb3VuZDogbm9uZTtcbn1cblxuLyogcG9ydHJhaXQgc2VjdGlvbiB0b2tlbiAoQ3VzdG9tIENsYXNzIFwicG9ydHJhaXRcIikg4oCUIGZvciByb3dzIG9mIHBlb3BsZTogdGhlXG4gICBkZWZhdWx0IDE2OjkgY3JvcCBzbGljZXMgYSBoZWFkc2hvdCB0aHJvdWdoIHRoZSBmYWNlLCBzbyBjcm9wIHRvIDQ6NSBhbmRcbiAgIGFuY2hvciB0byB0aGUgdG9wIHRvIGtlZXAgaGVhZHMgaW4gZnJhbWUuIEFsc28gd29ya3Mgb24gYSBzaW5nbGUgY2FyZC4gKi9cbi5wb3J0cmFpdCAuY2FyZC1pbWcsXG4uY2FyZC0tcG9ydHJhaXQgLmNhcmQtaW1nIHtcblx0YXNwZWN0LXJhdGlvOiA0LzU7XG5cdG9iamVjdC1wb3NpdGlvbjogdG9wO1xufVxuXG4vKiByb3dzIG9mIHBlb3BsZSBnZXQgZXF1YWwgY29sdW1uczogaW4gYSBzZWN0aW9uIHRoYXQgd3JhcHMsIHRoZSBzaG9ydCBsYXN0XG4gICByb3cga2VlcHMgdGhlIGNhcmQgd2lkdGggaW5zdGVhZCBvZiBzdHJldGNoaW5nIHR3byBwaG90b3MgYWNyb3NzIHRoZSBiYW5kO1xuICAgYSBzZWN0aW9uIHdpdGggYSBzaW5nbGUgcm93IHN0aWxsIGZpbGxzIGl0IChhdXRvLWZpdCBjb2xsYXBzZXMgZW1wdHkgdHJhY2tzKSAqL1xuLnBvcnRyYWl0IC5ncmlkIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heChtaW4oMTAwJSwgMjMwcHgpLCAxZnIpKTtcbn1cblxuLyogd2l0aCBgY29tcGFjdGA6IGF0IG1vc3QgZm91ciBjb2x1bW5zIChlYWNoIGF0IGxlYXN0IDIwMHB4KSwgc28gYSByb3cgb2ZcbiAgIGZvdXIgZml0cyBhdCBsYXB0b3Agd2lkdGhzLCBhbmQgYSBzaG9ydCByb3cgKDIgb3IgMyBwZW9wbGUpIGtlZXBzIHRoZSBzYW1lXG4gICBjYXJkIHdpZHRoIGluc3RlYWQgb2Ygc3RyZXRjaGluZyBhY3Jvc3MgdGhlIGJhbmQgKC9jaGhzL3B1YmxpY2hlYWx0aC9mYWN1bHR5LykgKi9cbi5wb3J0cmFpdC5jb21wYWN0IC5ncmlkIHtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIG1heCgyMDBweCwgKDEwMCUgLSAzICogdmFyKC0tc3BhY2UtNSkpIC8gNCkpLCAxZnIpKTtcbn1cblxuLyogbmF0dXJhbCBzZWN0aW9uIHRva2VuIChDdXN0b20gQ2xhc3MgXCJuYXR1cmFsXCIpIOKAlCBlYWNoIGNhcmQgaW1hZ2UgYXQgaXRzIG93blxuICAgc2hhcGUsIHVuY3JvcHBlZDogZm9yIGEgcm93IG9mIHNxdWFyZSAob3Igb3RoZXJ3aXNlIG1hdGNoaW5nKSBwaG90b3MgdGhhdCBhXG4gICAxNjo5IHN0cmlwIHdvdWxkIHNsaWNlIHRocm91Z2ggdGhlIGhlYWRzICgvY2FzL21hdGgvIFwiV2h5IFN0dWR5IE1hdGhcIikgKi9cbi5uYXR1cmFsIC5jYXJkLWltZyB7XG5cdGFzcGVjdC1yYXRpbzogYXV0bztcbn1cblxuLyogZmFjZXMgc2VjdGlvbiB0b2tlbiAoQ3VzdG9tIENsYXNzIFwiZmFjZXNcIikg4oCUIHRhbGwgcGhvdG9zIG9mIHBlb3BsZSBpbiBhIHJvd1xuICAgb2Ygd2lkZSBjYXJkcyAoL2Nhcy9hZ3JpY3VsdHVyZS8pOiBhIDE2Ojkgc2xpY2UgdGhyb3VnaCB0aGUgbWlkZGxlIG9mIGFcbiAgIHBvcnRyYWl0IHBob3RvIGN1dHMgb2ZmIHRoZSBoZWFkcywgc28gY3JvcCA0OjMgYW5kIGtlZXAgdGhlIHVwcGVyIHBhcnQgKi9cbi5mYWNlcyAuY2FyZC1pbWcge1xuXHRhc3BlY3QtcmF0aW86IDQvMztcblx0b2JqZWN0LXBvc2l0aW9uOiA1MCUgMTUlO1xufVxuXG4vKiBwbGFpbiB2YXJpYW50IOKAlCBubyBmaWxsIChlLmcuIG9uIGEgY29sb3JlZCBiYW5kKS4gb3ZlcmZsb3c6dmlzaWJsZSBiZWNhdXNlIHRoZVxuICAgY2FyZCBoYXMgbm8gZmlsbC9ib3JkZXIgdG8gY2xpcCwgdGhlIGltYWdlIHJvdW5kcyBpdHNlbGYsIGFuZCB0aGUgcm91bmRlZC1jb3JuZXJcbiAgIGNsaXAgd2FzIGN1dHRpbmcgZGVzY2VuZGVycyAodGhlIFwiZ1wiKSBvZmYgYSBjYXB0aW9uIHNpdHRpbmcgZmx1c2ggdG8gdGhlIGJvdHRvbS4gKi9cbi5jYXJkLS1wbGFpbiB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRib3gtc2hhZG93OiBub25lO1xuXHRib3JkZXI6IDA7XG5cdG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4uY2FyZC0tcGxhaW46aG92ZXIge1xuXHR0cmFuc2Zvcm06IG5vbmU7XG5cdGJveC1zaGFkb3c6IG5vbmU7XG5cdGJvcmRlcjogMDtcbn1cblxuLyogb24gYSBwbGFpbiBjYXJkIChubyBmaWxsIC8gbm8gb3V0bGluZSkgdGhlIGltYWdlIGlzIGEgc3RhbmRhbG9uZSB0aWxlIOKAlCByb3VuZFxuICAgQUxMIGZvdXIgY29ybmVycyAodGhlIGNhcmQncyBjbGlwIG9ubHkgcm91bmRzIHRoZSB0b3AsIHNpbmNlIHRoZSBib2R5IHNpdHNcbiAgIGJlbG93KSwgYW5kIHB1bGwgdGhlIGNhcHRpb24gZmx1c2gtbGVmdCB1bmRlciBpdCB3aXRoIHRpZ2h0IHRvcCBwYWRkaW5nLiAqL1xuLyogY2hpbGQgY29tYmluYXRvcnM6IGEgLmNhcmQgYXV0aG9yZWQgSU5TSURFIGEgcGxhaW4gY2FyZCdzIHJpY2ggdGV4dCAoYSBuZXN0ZWRcbiAgIGdyaWQgb2YgY2FyZHMpIGtlZXBzIGl0cyBvd24gcGFkZGluZyBhbmQgaW1hZ2UgY29ybmVycy4gKi9cbi5jYXJkLS1wbGFpbiA+IC5jYXJkLWltZywgLmNhcmQtLXBsYWluID4gLmNhcmQtaW1nLWxpbmsgLmNhcmQtaW1nIHtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbn1cblxuLyogYSAuY2FyZC1pbWcgYXV0aG9yZWQgaW4gdGhlIHJpY2ggdGV4dCAoaW1hZ2UgcGxhY2VkIGFib3ZlIGEgdGl0bGUgaW4gdGhlXG4gICBjb250ZW50LCBlLmcuIC91bmRlcmdyYWQpIGlzIGEgc3RhbmRhbG9uZSB0aWxlIHRvbyDigJQgcm91bmQgaXQgdGhlIHNhbWUgd2F5LiAqL1xuLmNhcmQtdGV4dCAuY2FyZC1pbWcge1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xufVxuXG4uY2FyZC0tcGxhaW4gPiAuY2FyZC1ib2R5IHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgMCAwO1xufVxuXG4vKiBwbGFpbiBjYXJkcyBzaXQgZGlyZWN0bHkgb24gdGhlIGJhbmQsIHNvIHRoZWlyIHRleHQgZm9sbG93cyB0aGUgYmFuZCB0b2tlbnMgKi9cbi5jYXJkLS1wbGFpbiAuY2FyZC10aXRsZSB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLmNhcmQtLXBsYWluIC5jYXJkLXRleHQge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcbn1cblxuLyogaGVhZGluZ3MgYXV0aG9yZWQgaW5zaWRlIHRoZSByaWNoLXRleHQgY29udGVudCBmb2xsb3cgdGhlIGJhbmQgdG9vIOKAlCBvdGhlcndpc2VcbiAgIGFuIDxoMj4gaW4gYSBwbGFpbiBjYXJkIHN0YXlzIG5hdnkgYW5kIGRpc2FwcGVhcnMgb24gYSBkYXJrIGJhbmQuICovXG4uY2FyZC0tcGxhaW4gLmNhcmQtdGV4dCA6aXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNikge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi8qIGBwbGFpbmAgc2VjdGlvbiB0b2tlbiAoQ3VzdG9tIENsYXNzKTogZXZlcnkgY2FyZCBpbiB0aGUgc2VjdGlvbiBkcm9wcyBpdHNcbiAgIGNocm9tZSBhbmQgcmVhZHMgYXMgdGV4dCBvbiB0aGUgYmFuZCAtLSBmb3IgaW50cm8gLyBzdGF0ZW1lbnQgcm93cyBidWlsdCBhc1xuICAgb25lIHRleHQtb25seSBjb2x1bW5zIGNhcmQsIHdoaWNoIG90aGVyd2lzZSBzaXQgaW4gYSBib3JkZXJlZCBib3guIFNhbWUgbG9va1xuICAgYXMgZWFjaCBjYXJkJ3Mgb3duIFwidHJhbnNwYXJlbnRcIiBzd2l0Y2gsIHNldCBvbmNlIGZvciB0aGUgc2VjdGlvbi4gKi9cbi5zZWN0aW9uLnBsYWluIC5ncmlkID4gLmNhcmQge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Ym94LXNoYWRvdzogbm9uZTtcblx0Ym9yZGVyOiAwO1xuXHRvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLnNlY3Rpb24ucGxhaW4gLmdyaWQgPiAuY2FyZDpob3ZlciB7XG5cdHRyYW5zZm9ybTogbm9uZTtcblx0Ym94LXNoYWRvdzogbm9uZTtcblx0Ym9yZGVyOiAwO1xufVxuXG4uc2VjdGlvbi5wbGFpbiAuZ3JpZCA+IC5jYXJkID4gLmNhcmQtYm9keSB7XG5cdHBhZGRpbmc6IDA7XG59XG5cbi5zZWN0aW9uLnBsYWluIC5ncmlkID4gLmNhcmQgLmNhcmQtdGV4dCB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xufVxuXG4vKiDilIDilIDilIAgYnlsaW5lOiBhIHNtYWxsIHJvdW5kIHBvcnRyYWl0ICsgbmFtZS90aXRsZSB1bmRlciBhdXRob3JlZCB0ZXh0XG4gICAoZS5nLiBhIGRlYW4ncyBtZXNzYWdlKS4gPGRpdiBjbGFzcz1cImJ5bGluZVwiPjxpbWcg4oCmPjxwPjxzdHJvbmc+TmFtZTwvc3Ryb25nPjxicj5UaXRsZTwvcD48L2Rpdj4gKi9cbi5ieWxpbmUge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmJ5bGluZSBpbWcge1xuXHR3aWR0aDogODhweDtcblx0aGVpZ2h0OiA4OHB4O1xuXHRmbGV4OiBub25lO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0b2JqZWN0LXBvc2l0aW9uOiB0b3A7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLmNhcmQtdGV4dCAuYnlsaW5lIHAge1xuXHRtYXJnaW46IDA7XG59XG5cbi8qIOKUgOKUgOKUgCBsb2dvLXRpbGU6IG9uZSBzcG9uc29yL3BhcnRuZXIgcGVyIGNvbHVtbnMgY2FyZCDigJQgYSBsb2dvIChvcHRpb25hbGx5IGxpbmtlZClcbiAgIG9yLCB3aGVuIHRoZXJlJ3Mgbm8gbG9nbywgdGhlIG5hbWUg4oCUIGNlbnRlcmVkIGluIGEgYm94IG9mIGV2ZW4gaGVpZ2h0IHNvIGEgcm93XG4gICBvZiBtaXhlZCBsb2dvcyBsaW5lcyB1cC4gPGRpdiBjbGFzcz1cImxvZ28tdGlsZVwiPjxhIGhyZWbigKY+PGltZyDigKY+PC9hPjwvZGl2PiAqL1xuLmxvZ28tdGlsZSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRtaW4taGVpZ2h0OiAxMjBweDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCk7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLmxvZ28tdGlsZSBpbWcge1xuXHRtYXgtaGVpZ2h0OiA5NnB4O1xuXHR3aWR0aDogYXV0bztcblx0bWF4LXdpZHRoOiAxMDAlO1xuXHRvYmplY3QtZml0OiBjb250YWluO1xufVxuXG4ubG9nby10aWxlIGEge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcbn1cblxuLyogYSByb3cgb2YgbG9nb3MgYXV0aG9yZWQgaW4gb25lIHJpY2gtdGV4dCBhcmVhICgvY2FzL3N0ZW0vaW52ZW50LyBzcG9uc29ycyk6XG4gICA8ZGl2IGNsYXNzPVwibG9nby1ncmlkXCI+PGRpdiBjbGFzcz1cImxvZ28tdGlsZVwiPjxpbWcg4oCmPjwvZGl2PuKApjwvZGl2PiDigJQgZXF1YWxcbiAgIGNvbHVtbnMgdGhhdCBmaXQgZml2ZSBhY3Jvc3MsIGVhY2ggbG9nbyBmcmFtZWQgaW4gYSBsaWdodCB0aWxlICovXG4ubG9nby1ncmlkIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heChtaW4oMTAwJSwgMTUwcHgpLCAxZnIpKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLmxvZ28tZ3JpZCA+IC5sb2dvLXRpbGUge1xuXHRtaW4taGVpZ2h0OiAxMjhweDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG59XG5cbi5sb2dvLWdyaWQgPiAubG9nby10aWxlIGltZyB7XG5cdG1heC1oZWlnaHQ6IDgwcHg7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgZmVhdHVyZS5jc3MgIMK3ICBmdWxsLWJsZWVkIGZlYXR1cmUgYmxvY2tzIOKAlCBwYWdlIGhlcm8gKyBjb3ZlciBiYW5kXG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzLCBsYXlvdXQuY3NzICguc2VjdGlvbiAvIC5zZWN0aW9uLWlubmVyKVxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiDilIDilIDilIAgSEVSTyDigJQgcGFnZS10b3AgYmFubmVyIChpbWFnZSBvciBiYWNrZ3JvdW5kIHZpZGVvKSDilIDilIDilIAgKi9cbi5oZXJvIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHQvKiB3YXMgNzB2aCDigJQgZ3JldyB1bmJvdW5kZWQgb24gdGFsbCBkZXNrdG9wcy4gQ2FwIGl0OiBhIHNlbnNpYmxlIGZsb29yLCBhXG5cdCAgIG1vZGVzdCB2aWV3cG9ydC1yZWxhdGl2ZSBwcmVmZXJlbmNlLCBhbmQgYSBjZWlsaW5nIHNvIGJpZyBzY3JlZW5zIGRvbid0IGdldFxuXHQgICBhIGh1Z2UgYmFuZCBvZiBlbXB0eSBpbWFnZS4gQ29udGVudCBzdGlsbCBleHBhbmRzIGl0IGlmIGl0IG5lZWRzIHRvLiAqL1xuXHRtaW4taGVpZ2h0OiBjbGFtcCgzMjBweCwgNDZ2aCwgNDYwcHgpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogZmxleC1lbmQ7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCkgY2VudGVyL2NvdmVyIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1pbWFnZTogdmFyKC0taGVyby1pbWcsIG5vbmUpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBoZXJvLnR0IC8gcGhvdG8td2lkZS50dCBzZXQgLS1oZXJvLWltZyAoL2kvbGFyZ2UsIDEyMDBweCwgdGhlIHBob3RvJ3Mgb3duXG4gICBzaGFwZSkgYW5kIC0taGVyby1pbWctd2lkZSAoL2kvaG9tZXBhZ2UtaGVybywgMjQwMHg5NjAgNToyIGNlbnRyZSBjcm9wIC0tXG4gICBzaGFycGVyIEFORCBhIHNtYWxsZXIgZmlsZSkuIFBhc3QgcGhvbmUgd2lkdGggdGhlIGJhbmQgaXMgYWJvdXQgNToyIG9yIHdpZGVyLFxuICAgc28gdGhlIGNlbnRyZSBjcm9wIHNob3dzIHdoYXQgY292ZXItY3JvcHBpbmcgd291bGQgYW55d2F5LiBBIHRvcC9ib3R0b21cbiAgIGhlcm9fY3JvcCBrZWVwcyB0aGUgZnVsbCBwaG90bywgc2luY2UgdGhhdCBwcmVzZXQgYWx3YXlzIGNyb3BzIHRoZSBjZW50cmUuICovXG5AbWVkaWEgKG1pbi13aWR0aDogNzYxcHgpIHtcblx0Lmhlcm86bm90KC5oZXJvLS1jcm9wLXRvcCk6bm90KC5oZXJvLS1jcm9wLWJvdHRvbSksXG5cdC5zZWN0aW9uLnNlY3Rpb24tLWNvdmVyIHsgLyogZG91YmxlZDogLnNlY3Rpb24tLWNvdmVyJ3Mgb3duIHJ1bGUgY29tZXMgbGF0ZXIgKi9cblx0XHRiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS1oZXJvLWltZy13aWRlLCB2YXIoLS1oZXJvLWltZywgbm9uZSkpO1xuXHR9XG59XG4uaGVybzo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQgMjAlLCByZ2JhKDAsIDI2LCA1MSwgMC43NSkgNzAlLCByZ2JhKDAsIDI2LCA1MSwgMC45KSk7XG59XG5cbi5oZXJvLWlubmVyIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR6LWluZGV4OiAyO1xuXHR3aWR0aDogMTAwJTtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xMikgdmFyKC0tZ3V0dGVyKTtcbn1cblxuLmhlcm8tdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiBjbGFtcCh2YXIoLS10ZXh0LTN4bCksIDZ2dywgdmFyKC0tdGV4dC00eGwpKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0bWF4LXdpZHRoOiAxOGNoO1xuXHR0ZXh0LXNoYWRvdzogMCAycHggMTJweCByZ2JhKDAsIDIwLCA0MCwgMC42KTtcbn1cblxuLmhlcm8tY2FwdGlvbiB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aC10ZXh0KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcblx0bGluZS1oZWlnaHQ6IDEuNztcbn1cblxuLyogbGlua3MgaW4gdGhlIGNhcHRpb24gcmVhZCBsaWdodCBvbiB0aGUgcGhvdG8gKHRoZSBiYXNlIGxpbmsgbmF2eSBkaXNhcHBlYXJzKSAqL1xuLmhlcm8tY2FwdGlvbiBhIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xufVxuXG4uaGVyby1jb250YWN0IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG59XG5cbi5oZXJvLWNvbnRhY3QgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLyog4pSA4pSA4pSAIEhFUk8gQUJPVkUg4oCUIHNob3J0ZXIgYmFubmVyIGZvciBpbnRlcmlvciBwYWdlcyB3aXRoIHNpZGViYXIgYmVsb3cg4pSA4pSA4pSAICovXG4uaGVyby0tYWJvdmUge1xuXHRtaW4taGVpZ2h0OiBjbGFtcCgyMDBweCwgMzB2aCwgMzQwcHgpO1xufVxuXG4uaGVyby0tYWJvdmUgLmhlcm8tdGl0bGUge1xuXHRmb250LXNpemU6IGNsYW1wKHZhcigtLXRleHQtMnhsKSwgNXZ3LCB2YXIoLS10ZXh0LTN4bCkpO1xufVxuXG4vKiDilIDilIDilIAgSEVSTyBHUkFQSElDIOKAlCBjYW1wYWlnbiBhcnQgdGhhdCBjYXJyaWVzIGl0cyBvd24gaGVhZGxpbmUg4pSA4pSA4pSAXG4gICBwcm9wcy5zdHlsZS5oZXJvID0gXCJncmFwaGljXCIuIFRoZSBiYW5kIHRha2VzIHRoZSBhcnQncyA1OjIgcHJvcG9ydGlvbnMgc29cbiAgIGNvdmVyLWNyb3BwaW5nIGNhbid0IGN1dCB0aGUgbGV0dGVyaW5nLCBkcm9wcyB0aGUgZGFya2VuaW5nIGdyYWRpZW50LCBhbmRcbiAgIGtlZXBzIHRoZSBwYWdlIDxoMT4gZm9yIHNjcmVlbiByZWFkZXJzL1NFTyBidXQgdmlzdWFsbHkgaGlkZGVuIHNvIGl0IGNhbid0XG4gICBjb2xsaWRlIHdpdGggdGhlIHdvcmRzIGJha2VkIGludG8gdGhlIGltYWdlLiAqL1xuLmhlcm8tLWdyYXBoaWMge1xuXHRtaW4taGVpZ2h0OiAwO1xuXHRhc3BlY3QtcmF0aW86IDUvMjtcbn1cblxuLmhlcm8tLWdyYXBoaWM6OmFmdGVyLFxuLmhlcm8tLWJhcmU6OmFmdGVyIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLmhlcm8tLWdyYXBoaWMgLmhlcm8taW5uZXIge1xuXHRwYWRkaW5nOiAwO1xufVxuXG4vKiBoZXJvLS1iYXJlIChzZXQgYnkgaGVyby50dCk6IG5vdGhpbmcgaXMgd3JpdHRlbiBvdmVyIHRoZSBwaG90bywgc28gaXQgbG9zZXMgdGhlXG4gICBncmFkaWVudCB0b28gYW5kIGl0cyB0aXRsZSBpcyBzY3JlZW4tcmVhZGVyIG9ubHksIGF0IHRoZSBiYW5kJ3MgdXN1YWwgaGVpZ2h0ICovXG4uaGVyby0tZ3JhcGhpYyAuaGVyby10aXRsZSxcbi5oZXJvLS1iYXJlIC5oZXJvLXRpdGxlIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR3aWR0aDogMXB4O1xuXHRoZWlnaHQ6IDFweDtcblx0bWFyZ2luOiAtMXB4O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4vKiDilIDilIDilIAgSEVSTyBSQVRJTyDigJQgdGhlIHdob2xlIHBob3RvLCBhdCB0aGUgbGVnYWN5IGhvbWVwYWdlIGhlcm8ncyA1OjIg4pSA4pSA4pSAXG4gICBwcm9wcy5zdHlsZS5oZXJvID0gXCJyYXRpb1wiLiBMaWtlIFwiZ3JhcGhpY1wiIHRoZSBiYW5kIHRha2VzIHRoZSBpbWFnZSdzIDU6MlxuICAgcHJvcG9ydGlvbnMgaW5zdGVhZCBvZiBhIGZpeGVkIGhlaWdodCwgc28gYSAyNDAweDk2MCBoZXJvIGlzIG5ldmVyXG4gICBjb3Zlci1jcm9wcGVkIChubyBjdXQtb2ZmIGhlYWRzKSwgYnV0IHRoZSB0aXRsZSwgY2FwdGlvbiBhbmQgZGFya2VuaW5nXG4gICBncmFkaWVudCBzdGF5LiBPbiBwaG9uZXMgaXQgZmFsbHMgYmFjayB0byB0aGUgZGVmYXVsdCBoZWlnaHQgc28gdGhlIHRpdGxlXG4gICBzdGlsbCBmaXRzIG92ZXIgdGhlIGltYWdlLiAqL1xuLmhlcm8tLXJhdGlvIHtcblx0bWluLWhlaWdodDogMDtcblx0YXNwZWN0LXJhdGlvOiA1LzI7XG59XG5cbi5oZXJvLS1yYXRpbyAuaGVyby1pbm5lciB7XG5cdHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTYpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHtcblx0Lmhlcm8tLXJhdGlvIHtcblx0XHRhc3BlY3QtcmF0aW86IGF1dG87XG5cdFx0bWluLWhlaWdodDogMjYwcHg7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBIRVJPIENST1Ag4oCUIHByb3BzLnN0eWxlLmhlcm9fY3JvcCA9IFwidG9wXCI6IGtlZXAgdGhlIHVwcGVyIHBhcnQgb2YgdGhlXG4gICBwaG90by4gU2VwYXJhdGUgZnJvbSBwcm9wcy5zdHlsZS5oZXJvIHNvIGl0IGNvbWJpbmVzIHdpdGggXCJyYXRpb1wiIChhIDM6MlxuICAgcGhvdG8gaW4gdGhlIDU6MiBiYW5kLCBwZW9wbGUgaGlnaCBpbiB0aGUgZnJhbWU7IC9jYXMvYWdyaWN1bHR1cmUvYWdjZW50ZXIvKSAqL1xuLmhlcm8tLWNyb3AtdG9wIHtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDE1JTtcbn1cblxuLyogXCJib3R0b21cIjogcGVvcGxlIGxvdyBpbiB0aGUgZnJhbWUgKGEgZ3JvdXAgcGhvdG8gc3RhbmRpbmcgaW4gZnJvbnQgb2YgYVxuICAgYnVpbGRpbmc7IC9jaGhzL251cnNpbmcvYXBwbHkvKSAqL1xuLmhlcm8tLWNyb3AtYm90dG9tIHtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDgwJTtcbn1cblxuLyog4pSA4pSA4pSAIEhFUk8gU1BMSVQg4oCUIHRleHQgbGVmdCwgcGhvdG8gY2FyZCByaWdodCwgc29saWQgbmF2eSDilIDilIDilIAgKi9cbi5oZXJvLS1zcGxpdCB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDtcblx0bWluLWhlaWdodDogYXV0bztcbn1cblxuLmhlcm8tLXNwbGl0OjphZnRlciB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5oZXJvLS1zcGxpdCAuaGVyby1pbm5lciB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0xMCk7XG59XG5cbi5oZXJvLS1zcGxpdCAuaGVyby10aXRsZSB7XG5cdHRleHQtc2hhZG93OiBub25lO1xufVxuXG4uaGVyby0tc3BsaXQgLmhlcm8tbWVkaWEgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGFzcGVjdC1yYXRpbzogNC8zO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2MHB4KSB7XG5cdC5oZXJvLS1zcGxpdCAuaGVyby1pbm5lciB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0fVxuXHQuaGVyby0tc3BsaXQgLmhlcm8tbWVkaWEge1xuXHRcdG9yZGVyOiAtMTtcblx0fVxuXHQuaGVyby0tc3BsaXQgLmhlcm8tbWVkaWEgaW1nIHtcblx0XHRhc3BlY3QtcmF0aW86IDE2Lzk7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBDT1ZFUiDigJQgZnVsbC1ibGVlZCBwaG90by92aWRlbyBiYW5kIHdpdGggYSBjb250ZW50IHBhbmVsIOKUgOKUgOKUgCAqL1xuLnNlY3Rpb24tLWNvdmVyIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRtaW4taGVpZ2h0OiA2MHZoO1xuXHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS0xMik7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpIGNlbnRlci9jb3ZlciBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWhlcm8taW1nLCBub25lKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnNlY3Rpb24tLWNvdmVyOjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0aW5zZXQ6IDA7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgwLCAyNiwgNTEsIDAuOCksIHJnYmEoMCwgMjYsIDUxLCAwLjIpKTtcbn1cblxuLyogTm8gY29udGVudCBwYW5lbCDihpIgbm8gb3ZlcmxheTsgbGV0IHRoZSBwaG90byBzaG93IHVub2JzY3VyZWQuICovXG4uc2VjdGlvbi0tY292ZXI6bm90KDpoYXMoLmNvdmVyLXBhbmVsKSk6OmFmdGVyIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLyogd2lkdGg6MTAwJSBzdG9wcyB0aGUgZmxleCBiYW5kIGZyb20gY29sbGFwc2luZyAuc2VjdGlvbi1pbm5lciBkb3duIHRvIHRoZVxuICAgcGFuZWwncyB3aWR0aCAod2hpY2ggaXMgd2hhdCBjZW50cmVzIGl0KSDigJQgaW5zdGVhZCBpdCBmaWxscyB0aGUgY29udGVudCBjb2x1bW5cbiAgIChtYXgtd2lkdGgsIGNlbnRyZWQpLCBnaXZpbmcgdGhlIHBhbmVsIHJvb20gdG8gc2hpZnQgbGVmdC9yaWdodCB3aXRoaW4gaXQgYW5kXG4gICBhbGlnbmluZyB0aG9zZSBlZGdlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBwYWdlLiAqL1xuLnNlY3Rpb24tLWNvdmVyID4gLnNlY3Rpb24taW5uZXIge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHotaW5kZXg6IDI7XG5cdHdpZHRoOiAxMDAlO1xufVxuXG4uY292ZXItcGFuZWwge1xuXHRtYXgtd2lkdGg6IDU0MHB4O1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xufVxuXG4uY292ZXItcGFuZWwgOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpIHtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyogY29udGVudCBsaW5rcyBvbiB0aGUgY292ZXIncyBkYXJrIGdyb3VuZCDigJQgbGlnaHQgZ29sZCwgbm8gZGVmYXVsdCB1bmRlcmxpbmVcbiAgICh0aGUgbmF2eSArIHVuZGVybGluZSBkZWZhdWx0IGlzIHVucmVhZGFibGUgb24gdGhlIGltYWdlKS4gVGhpcyBpcyB0aGUgaGFwcHlcbiAgIGRlZmF1bHQsIHNvIGF1dGhvcnMgZG9uJ3QgbmVlZCB0byBoYW5kLWNvbG9yIGV2ZXJ5IGxpbmsuICovXG4uY292ZXItcGFuZWwgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uY292ZXItcGFuZWwgYTpob3ZlciB7XG5cdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uY292ZXItcGFuZWwgLmNhcmQtY3RhIHtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyog4pSA4pSAIEZlYXR1cmUtbGluayBwYXR0ZXJuOiA8YT48c3Ryb25nPkhlYWRpbmc8L3N0cm9uZz48ZW0+U3ViLUNUQTwvZW0+PC9hPlxuICAgV29ya3MgaW4gYm90aCB0aGUgaGVybyBjYXB0aW9uICguaGVyby1jYXB0aW9uKSBhbmQgdGhlIGNvdmVyIHBhbmVsICguY292ZXItcGFuZWwpLlxuICAgU3R5bGVkIHRvIG1hdGNoIHRoZSBob21lcGFnZSBmZWF0dXJlIGxpbms6IGRhcmsgbmF2eSBib3gsIHNlcmlmIGhlYWRsaW5lLCB3aGl0ZSBzdWItbGluZS5cbiAgIEF1dGhvcnMgdXNlIEJvbGQgKyBJdGFsaWMgaW4gQ0tFZGl0b3IgYW5kIHdyYXAgYm90aCBpbiBhIGxpbmsuICovXG4uaGVyby1jYXB0aW9uIGE6aGFzKD4gc3Ryb25nKSxcbi5jb3Zlci1wYW5lbCBhOmhhcyg+IHN0cm9uZykge1xuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMjYsIDUxLCAwLjgyKTtcblx0Ym9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZykgPiBzdHJvbmcsXG4uY292ZXItcGFuZWwgYTpoYXMoPiBzdHJvbmcpID4gc3Ryb25nIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNlcmlmKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZykgPiBzcGFuLFxuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZykgPiBlbSxcbi5jb3Zlci1wYW5lbCBhOmhhcyg+IHN0cm9uZykgPiBzcGFuLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKSA+IGVtIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5oZXJvLWNhcHRpb24gYTpoYXMoPiBzdHJvbmcpOmhvdmVyLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKTpob3ZlciB7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZyk6aG92ZXIgPiBzdHJvbmcsXG4uY292ZXItcGFuZWwgYTpoYXMoPiBzdHJvbmcpOmhvdmVyID4gc3Ryb25nIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xufVxuXG4uaGVyby1jYXB0aW9uIGE6aGFzKD4gc3Ryb25nKTpob3ZlciA+IHNwYW4sXG4uaGVyby1jYXB0aW9uIGE6aGFzKD4gc3Ryb25nKTpob3ZlciA+IGVtLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKTpob3ZlciA+IHNwYW4sXG4uY292ZXItcGFuZWwgYTpoYXMoPiBzdHJvbmcpOmhvdmVyID4gZW0ge1xuXHR0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogQ0tFZGl0b3IgaW5zZXJ0cyBhIDxicj4gYmV0d2VlbiB0aGUgPHN0cm9uZz4gYW5kIDxlbT47IHN1cHByZXNzIGl0IHNpbmNlXG4gICBib3RoIGFyZSBhbHJlYWR5IGRpc3BsYXk6YmxvY2suICovXG4uaGVyby1jYXB0aW9uIGE6aGFzKD4gc3Ryb25nKSA+IGJyLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKSA+IGJyIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLyog4pSA4pSA4pSAIGNvdmVyIG92ZXJsYXkgYWxpZ25tZW50IOKUgOKUgOKUgFxuICAgVGhlIHBhbmVsIGlzIENFTlRFUkVEIGJ5IGRlZmF1bHQuIERyb3AgYSB0b2tlbiBpbnRvIHRoZSBzZWN0aW9uJ3MgQ3VzdG9tIENsYXNzXG4gICB0byBzaGlmdCBpdCB0byB0aGUgcGFnZSdzIGNvbnRlbnQtY29sdW1uIGVkZ2U7IHRoZSBncmFkaWVudCdzIGRhcmsgc2lkZSBmb2xsb3dzXG4gICBzbyB0aGUgb3ZlcmxheSB0ZXh0IHN0YXlzIGxlZ2libGUgb3ZlciBpdDpcbiAgICAgY292ZXItbGVmdCAgIOKGkiBwYW5lbCBvbiB0aGUgTEVGVCAgKGdyYWRpZW50IGFscmVhZHkgZGFya2VucyB0aGUgbGVmdClcbiAgICAgY292ZXItcmlnaHQgIOKGkiBwYW5lbCBvbiB0aGUgUklHSFQgKGdyYWRpZW50IGZsaXBzIHRvIGRhcmtlbiB0aGUgcmlnaHQpXG4gICBQYW5lbCB3aWR0aCwgdmVydGljYWwgY2VudGVyaW5nIGFuZCB0ZXh0LWFsaWdubWVudCBhcmUgdW5jaGFuZ2VkIOKAlCBvbmx5IHRoZVxuICAgaG9yaXpvbnRhbCBwbGFjZW1lbnQgKGFuZCwgZm9yIHRoZSByaWdodCwgdGhlIGdyYWRpZW50IGRpcmVjdGlvbikgc3dpdGNoLiAqL1xuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWxlZnQgLmNvdmVyLXBhbmVsIHtcblx0bWFyZ2luLWlubGluZTogMCBhdXRvO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItcmlnaHQgLmNvdmVyLXBhbmVsIHtcblx0bWFyZ2luLWlubGluZTogYXV0byAwO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItcmlnaHQ6OmFmdGVyIHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDI3MGRlZywgcmdiYSgwLCAyNiwgNTEsIDAuOCksIHJnYmEoMCwgMjYsIDUxLCAwLjIpKTtcbn1cblxuLyogY292ZXItdGl0bGUgKEN1c3RvbSBDbGFzcyk6IGEgcGhvdG8gYmFuZCB0aGF0IGNhcnJpZXMgb25lIHNob3J0IGhlYWRsaW5lIC0tXG4gICB0aGUgbGVnYWN5IFwiY3JlYXRpdmUtdGV4dFwiIHRpdGxlIGJhbmRzICgvY2FzL3ZhY2QvIFwiU3R1ZGVudCBXb3JrXCIpLiBTaG9ydGVyXG4gICBiYW5kLCBhbiBldmVuIHdhc2ggaW5zdGVhZCBvZiB0aGUgc2lkZSBncmFkaWVudCwgYmlnIGNlbnRyZWQgc2VyaWYgdGl0bGUuICovXG4uc2VjdGlvbi0tY292ZXIuY292ZXItdGl0bGUge1xuXHRtaW4taGVpZ2h0OiA0MHZoO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItdGl0bGU6OmFmdGVyIHtcblx0YmFja2dyb3VuZDogcmdiYSgwLCAyNiwgNTEsIDAuNCk7XG59XG5cbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci10aXRsZSAuY292ZXItcGFuZWwge1xuXHRtYXgtd2lkdGg6IG5vbmU7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogY2xhbXAoMi4yNXJlbSwgNnZ3LCA0LjVyZW0pO1xuXHRsaW5lLWhlaWdodDogMS4xO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItdGl0bGUgLmNvdmVyLXBhbmVsIHN0cm9uZyB7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi8qIOKUgOKUgOKUgCBjb3ZlciBncmFkaWVudCBiYWNrZ3JvdW5kcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgIERyb3AgYSBncmFkaWVudCB0b2tlbiBpbnRvIEN1c3RvbSBDbGFzcyB0byBnaXZlIHRoZSBjb3ZlciBhIHJpY2hcbiAgIGJhY2tncm91bmQgd2l0aG91dCBuZWVkaW5nIGEgcGhvdG8uIElmIHRoZSBhdXRob3IgQUxTTyB1cGxvYWRzIGFcbiAgIHBob3RvLCB0aGUgaW5saW5lIGJhY2tncm91bmQtaW1hZ2Ugb3ZlcnJpZGVzIHRoZSBDU1MgZ3JhZGllbnRcbiAgIG5hdHVyYWxseSDigJQgbm8gIWltcG9ydGFudCwgbm8gcmVuZGVyZXIgY2hhbmdlLlxuICAgICBjb3Zlci1uYXZ5ICAgIOKGkiBkZWVwIGRpYWdvbmFsIG5hdnkgc3dlZXAgKGJyYW5kIGRlZmF1bHQpXG4gICAgIGNvdmVyLW9jZWFuICAg4oaSIG5hdnktdG8tdGVhbCwgY29vbGVyIGFuZCBtb3JlIGR5bmFtaWNcbiAgICAgY292ZXItZm9yZXN0ICDihpIgZGVlcCBncmVlblxuICAgICBjb3Zlci1nb2xkICAgIOKGkiBuYXZ5LXRvLWdvbGQsIHdhcm0gYW5kIGludml0aW5nXG4gICAgIGNvdmVyLWVhcnRoICAg4oaSIG5hdnktdG8tYnJvd24sIGdyb3VuZGVkXG4gICAgIGNvdmVyLXN1bnNldCAg4oaSIG5hdnktdG8tb3JhbmdlLCBib2xkIGFuZCBlbmVyZ2V0aWNcbiAgIFRoZSBzY3JpbSBvdmVybGF5IGlzIHN1cHByZXNzZWQgZm9yIGdyYWRpZW50IGNvdmVycyDigJQgdGhlIGdyYWRpZW50XG4gICBpdHNlbGYgcHJvdmlkZXMgZW5vdWdoIGNvbnRyYXN0IGZvciB3aGl0ZSB0ZXh0LiAqL1xuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLW5hdnksXG4uc2VjdGlvbi0tY292ZXIuY292ZXItb2NlYW4sXG4uc2VjdGlvbi0tY292ZXIuY292ZXItZm9yZXN0LFxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWdvbGQsXG4uc2VjdGlvbi0tY292ZXIuY292ZXItZWFydGgsXG4uc2VjdGlvbi0tY292ZXIuY292ZXItc3Vuc2V0IHtcblx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLW5hdnk6OmFmdGVyLFxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLW9jZWFuOjphZnRlcixcbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1mb3Jlc3Q6OmFmdGVyLFxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWdvbGQ6OmFmdGVyLFxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWVhcnRoOjphZnRlcixcbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1zdW5zZXQ6OmFmdGVyIHtcblx0YmFja2dyb3VuZDogbm9uZTtcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLW5hdnkge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDAxYTMzIDAlLCAjMDAzMzY2IDUwJSwgIzAwNGE2ZSAxMDAlKTtcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLW9jZWFuIHtcblx0YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwMWEzMyAwJSwgIzBhM2Q2MiA0MCUsICMxZTVmNzQgMTAwJSk7XG59XG5cbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1mb3Jlc3Qge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMGExZjE1IDAlLCAjMWI0MzMyIDUwJSwgIzJkNmE0ZiAxMDAlKTtcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWdvbGQge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDAxYTMzIDAlLCAjMDAzMzY2IDQwJSwgI0M2OTUyQiAxMDAlKTtcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWVhcnRoIHtcblx0YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwMWEzMyAwJSwgIzRhMzcyOCA1MCUsICM4QjQ1MTMgMTAwJSk7XG59XG5cbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1zdW5zZXQge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDAxYTMzIDAlLCAjMDAzMzY2IDM1JSwgI2M0NWUxYSAxMDAlKTtcbn1cblxuLyog4pSA4pSA4pSAIENPVkVSIEhFUk8gU1BMSVQg4oCUIGFuZ2xlZCBoZXJvIHdpdGggZmxvYXRpbmcgbGlua3MgY2FyZCDilIDilIDilIDilIBcbiAgIFRva2VuOiBcImNvdmVyLWhlcm8tc3BsaXRcIiBpbiB0aGUgc2VjdGlvbidzIEN1c3RvbSBDbGFzcyBmaWVsZC5cbiAgIFR1cm5zIGEgcGhvdG9fd2lkZSBjb3ZlciBpbnRvIGEgZnVsbC1ibGVlZCBoZXJvIHdpdGggYSBkaWFnb25hbC1cbiAgIGVkZ2VkIG5hdnkgdGV4dCBwYW5lbCBvbiB0aGUgbGVmdCAoYmFkZ2Ugb3ZlcmZsb3dzIGludG8gdGhlIHBob3RvKVxuICAgYW5kIGEgZmxvYXRpbmcgcm91bmRlZCBuYXZ5IGxpbmtzIGNhcmQgb24gdGhlIHJpZ2h0LiBUaGUgYmFja2dyb3VuZFxuICAgaW1hZ2UgZmlsbHMgdGhlIGVudGlyZSBzZWN0aW9uOyB0aGUgZGlhZ29uYWwgaXMgYSBjbGlwcGVkIDo6YmVmb3JlXG4gICBvbiAuY292ZXItdGV4dCBzbyBjb250ZW50IChlc3BlY2lhbGx5IHRoZSBiYWRnZSkgY2FuIG92ZXJmbG93IGl0LlxuICAgU3RhY2tzIG9uIG1vYmlsZSB3aXRoIHRoZSB0ZXh0IG92ZXJsYXlpbmcgdGhlIHBob3RvLiAqL1xuLyogLS0tIHNlY3Rpb24gb3ZlcnJpZGVzIC0tLSAqL1xuLmNvdmVyLWhlcm8tc3BsaXQuc2VjdGlvbi0tY292ZXIge1xuXHRwYWRkaW5nOiAwO1xuXHRtaW4taGVpZ2h0OiBhdXRvO1xuXHRhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQuc2VjdGlvbi0tY292ZXI6OmFmdGVyIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgPiAuc2VjdGlvbi1pbm5lciB7XG5cdG1heC13aWR0aDogbm9uZTtcblx0cGFkZGluZzogMDtcbn1cblxuLyogLS0tIGdyaWQgLS0tICovXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItcGFuZWwge1xuXHRtYXgtd2lkdGg6IG5vbmU7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcblx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cdG1pbi1oZWlnaHQ6IDQyMHB4O1xufVxuXG4vKiAtLS0gbGVmdCBwYW5lbDogYW5nbGVkIGxpZ2h0IGJhY2tncm91bmQgdmlhIDo6YmVmb3JlIC0tLSAqL1xuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLXRleHQge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEwKSAxNiUgdmFyKC0tc3BhY2UtMTApIGNsYW1wKHZhcigtLXNwYWNlLTgpLCA1dncsIHZhcigtLXNwYWNlLTE2KSk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0ei1pbmRleDogMjtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLXRleHQ6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0aW5zZXQ6IDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Y2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMTAwJSAwLCA4MiUgMTAwJSwgMCAxMDAlKTtcblx0ei1pbmRleDogLTE7XG59XG5cbi8qIC0tLSByaWdodCBwYW5lbDogZmxvYXRpbmcgY2FyZCAtLS0gKi9cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1saW5rcyB7XG5cdGFsaWduLXNlbGY6IGNlbnRlcjtcblx0anVzdGlmeS1zZWxmOiBlbmQ7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMjAsIDQ2LCAwLjkyKTtcblx0Ym9yZGVyLXJhZGl1czogNnB4O1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS04KSB2YXIoLS1zcGFjZS02KTtcblx0bWF4LXdpZHRoOiAzODBweDtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS02KSBjbGFtcCh2YXIoLS1zcGFjZS02KSwgM3Z3LCB2YXIoLS1zcGFjZS0xMikpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHR6LWluZGV4OiAyO1xufVxuXG4vKiAtLS0gZXllYnJvdyAtLS0gKi9cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLWV5ZWJyb3cge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMmVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1leWVicm93OjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlwiO1xuXHRkaXNwbGF5OiBibG9jaztcblx0d2lkdGg6IDQ4cHg7XG5cdGhlaWdodDogM3B4O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi8qIC0tLSBoZWFkaW5nICsgYmFkZ2Ugcm93IC0tLSAqL1xuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8taGVhZGluZyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLXRpdGxlIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogY2xhbXAodmFyKC0tdGV4dC0yeGwpLCAzLjV2dywgMy41cmVtKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdG1hcmdpbjogMDtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tc3VidGl0bGUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4xOGVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1iYWRnZSB7XG5cdHdpZHRoOiBjbGFtcCgxMDBweCwgMTJ2dywgMTcwcHgpO1xuXHRoZWlnaHQ6IGF1dG87XG5cdGZsZXgtc2hyaW5rOiAwO1xufVxuXG4vKiAtLS0gdGFnbGluZSAtLS0gKi9cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLXRhZ2xpbmUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1zZXJpZik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4vKiAtLS0gbGlua3MgY2FyZCBjb250ZW50IC0tLSAqL1xuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWxpbmtzIGgyIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tbmF2IHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0cGFkZGluZzogMDtcblx0bWFyZ2luOiAwO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1uYXYgbGkgKyBsaSB7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1uYXYgYSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTIpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycztcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tbmF2IGE6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLW5hdiBhOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlwiO1xuXHR3aWR0aDogN3B4O1xuXHRoZWlnaHQ6IDdweDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0dHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuXHRmbGV4LXNocmluazogMDtcblx0bWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLyogLS0tIHRhYmxldCAtLS0gKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA5ODBweCkge1xuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItcGFuZWwge1xuXHRcdG1pbi1oZWlnaHQ6IDM2MHB4O1xuXHR9XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci10ZXh0IHtcblx0XHRwYWRkaW5nLXJpZ2h0OiAyMCU7XG5cdH1cblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLXRleHQ6OmJlZm9yZSB7XG5cdFx0Y2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMTAwJSAwLCA4NSUgMTAwJSwgMCAxMDAlKTtcblx0fVxuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItbGlua3Mge1xuXHRcdG1heC13aWR0aDogMzIwcHg7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtNSk7XG5cdH1cblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tYmFkZ2Uge1xuXHRcdHdpZHRoOiBjbGFtcCg4MHB4LCAxMHZ3LCAxMjBweCk7XG5cdH1cbn1cbi8qIC0tLSBtb2JpbGU6IHRleHQgb3ZlciBwaG90bywgYW5nbGVkIHJldmVhbCwgbGlua3MgYmVsb3cgLS0tICovXG5AbWVkaWEgKG1heC13aWR0aDogNzYwcHgpIHtcblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLXBhbmVsIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0XHRtaW4taGVpZ2h0OiBhdXRvO1xuXHR9XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci10ZXh0IHtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS04KSB2YXIoLS1ndXR0ZXIpIHZhcigtLXNwYWNlLTE2KSB2YXIoLS1ndXR0ZXIpO1xuXHR9XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci10ZXh0OjpiZWZvcmUge1xuXHRcdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTMsIDI0NywgMC45NCk7XG5cdFx0Y2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMTAwJSAwLCAxMDAlIDgyJSwgMCAxMDAlKTtcblx0fVxuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItbGlua3Mge1xuXHRcdG1heC13aWR0aDogbm9uZTtcblx0XHRtYXJnaW46IDA7XG5cdFx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMTApO1xuXHRcdGJvcmRlci1yYWRpdXM6IDA7XG5cdFx0anVzdGlmeS1zZWxmOiBzdHJldGNoO1xuXHRcdGFsaWduLXNlbGY6IHN0cmV0Y2g7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtOCkgdmFyKC0tZ3V0dGVyKTtcblx0fVxuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1oZWFkaW5nIHtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTQpO1xuXHR9XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLWJhZGdlIHtcblx0XHR3aWR0aDogOTBweDtcblx0fVxufVxuLyogc2hhcmVkIGZ1bGwtYmxlZWQgYmFja2dyb3VuZCB2aWRlbyAoaGVybyArIGNvdmVyKSAqL1xuLmZlYXR1cmUtdmlkZW8ge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xuXHR6LWluZGV4OiAwO1xuXHRwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmZlYXR1cmUtdmlkZW8gaWZyYW1lIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDUwJTtcblx0bGVmdDogNTAlO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcblx0d2lkdGg6IDE3Ny43OHZoO1xuXHRtaW4td2lkdGg6IDEwMCU7XG5cdGhlaWdodDogNTYuMjV2dztcblx0bWluLWhlaWdodDogMTAwJTtcblx0Ym9yZGVyOiAwO1xufVxuXG4vKiDilIDilIDilIAgb3B0aW9uYWwgaGVybyBleHRyYXMgKHZhci1nYXRlZCBpbiBjb21wb25lbnRzL2hlcm8udHQpIOKUgOKUgOKUgFxuICAgVXNlZCBieSB0aGUgZGVwYXJ0bWVudCB0ZW1wbGF0ZTogYSBnb2xkIGV5ZWJyb3cgYWJvdmUgdGhlIHRpdGxlIGFuZCBhXG4gICBDVEEgcGFpciBiZWxvdyB0aGUgbGVhZC4gQWJzZW50IG9uIHBhZ2VzIHRoYXQgZG9uJ3Qgc2V0IHRoZW0sIHNvIHRoZVxuICAgbWFpbi1zaXRlIGhlcm8gaXMgdW5jaGFuZ2VkLiAqL1xuLmhlcm8tZXllIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjIyZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5oZXJvLWN0YXMge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4vKiBHaG9zdCBidXR0b24gb24gdGhlIGhlcm8ncyBkYXJrIGdyb3VuZCDigJQgdGhlIGRlbW8ncyByZWZpbmVkIHRyZWF0bWVudDpcbiAgIHF1aWV0IGJ5IGRlZmF1bHQgKHRyYW5zbHVjZW50IGJvcmRlciwgZGltbWVkIHRleHQpLCBhbmQgb24gaG92ZXIgaXQgbGlmdHNcbiAgIHdpdGggYSBmYWludCBmaWxsIGFuZCBhIGZ1bGwgZ29sZCBvdXRsaW5lLiBTY29wZWQgdG8gLmhlcm8tY3RhcyBzbyBpdFxuICAgb3ZlcnJpZGVzIHRoZSBsaWdodC1ncm91bmQgYmFzZSAuYnRuLWdob3N0IChnb2xkIHRleHQpIHdpdGhvdXQgdG91Y2hpbmcgaXRcbiAgIGVsc2V3aGVyZS4gKi9cbi5oZXJvLWN0YXMgLmJ0bi1naG9zdCB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTtcblx0Ym9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7XG59XG5cbi5oZXJvLWN0YXMgLmJ0bi1naG9zdDpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgcGFnZS5jc3MgIMK3ICBpbnRlcmlvciBwYWdlIGxheW91dCDigJQgc2lkZSBuYXYgKyBjb250ZW50XG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzIChhbmQgY2hyb21lLmNzcyBmb3IgLm5hdi10cmVlIHN0eWxpbmcpXG4gICBVc2VkIGJ5IGRlcGFydG1lbnQgY29udGVudCBwYWdlczogYSBzdGlja3kgc2lkZS1uYXYgY29sdW1uIGJlc2lkZVxuICAgdGhlIG1haW4gQ0tFZGl0b3IgYm9keS4gU3RhY2tzIHRvIG9uZSBjb2x1bW4gb24gbmFycm93IHNjcmVlbnMuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi5wYWdlLWxheW91dCB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMTApIHZhcigtLWd1dHRlcik7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMjQwcHggbWlubWF4KDAsIDFmcik7XG5cdGdhcDogdmFyKC0tc3BhY2UtMTApO1xuXHRhbGlnbi1pdGVtczogc3RhcnQ7XG59XG5cbi8qIFN0aWNreSB1bmRlciB0aGUgaGVhZGVyLCBidXQgY2FwcGVkIHRvIHRoZSB2aWV3cG9ydCBzbyBhIHRhbGwgbWVudSBzY3JvbGxzXG4gICBpbnNpZGUgaXRzZWxmIGluc3RlYWQgb2YgaGlkaW5nIGl0cyBsb3dlciBpdGVtcyBiZWxvdyB0aGUgZm9sZCAoYSBzdGlja3kgYm94XG4gICBkb2Vzbid0IHNjcm9sbCBvbiBpdHMgb3duIOKAlCB3aXRob3V0IHRoaXMgY2FwIHlvdSdkIGhhdmUgdG8gc2Nyb2xsIHRoZSB3aG9sZVxuICAgcGFnZSB0byByZWFjaCB0aGUgYm90dG9tIGxpbmtzKS4gKi9cbi5wYWdlLXNpZGViYXIge1xuXHRwb3NpdGlvbjogc3RpY2t5O1xuXHR0b3A6IGNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1zcGFjZS0zKSk7XG5cdG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSAtIHZhcigtLXNwYWNlLTYpKTtcblx0b3ZlcmZsb3cteTogYXV0bztcblx0b3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcblx0LyogaGlkZGVuIHVudGlsIGhvdmVyIHNvIGEgdGFsbCBuYXYgZG9lc24ndCBzaG93IGEgc2Nyb2xsYmFyIG9uIGxvYWQgKi9cblx0c2Nyb2xsYmFyLXdpZHRoOiBub25lOyAvKiBGaXJlZm94ICovXG5cdHNjcm9sbGJhci1jb2xvcjogdmFyKC0tYXUtZ3JheS0zMDApIHRyYW5zcGFyZW50O1xufVxuXG4ucGFnZS1zaWRlYmFyOmhvdmVyIHtcblx0c2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xufVxuXG4ucGFnZS1zaWRlYmFyOjotd2Via2l0LXNjcm9sbGJhciB7XG5cdHdpZHRoOiAwO1xufVxuXG4ucGFnZS1zaWRlYmFyOmhvdmVyOjotd2Via2l0LXNjcm9sbGJhciB7XG5cdHdpZHRoOiA2cHg7XG59XG5cbi5wYWdlLXNpZGViYXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5wYWdlLXNpZGViYXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0zMDApO1xuXHRib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5wYWdlLXNpZGViYXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS00MDApO1xufVxuXG4vKiBvcHRpb25hbCBcIsKrIFBhcmVudCB1bml0XCIgbGluayBhYm92ZSB0aGUgZGVwdCBuYW1lIChzaWRlYmFyX2JhY2tsaW5rIGhvb2spICovXG4uc2lkZWJhci1iYWNrIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5zaWRlYmFyLWJhY2s6aG92ZXIsXG4uc2lkZWJhci1iYWNrOmZvY3VzLXZpc2libGUge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiBvcHRpb25hbCBidXR0b24gcm93IHVuZGVyIHRoZSBoZXJvIG9uIGZ1bGwtd2lkdGggcGFnZXMgKGF1X21haW4ud3JhcCBwYWdlX2xpbmtzIGhvb2spICovXG4ucGFnZS1saW5rcyB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIHZhcigtLWd1dHRlcikgMDtcbn1cblxuLnBhZ2UtbGlua3MtaW5uZXIge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLnBhZ2UtZGVwdCB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjM7XG5cdHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4vKiDilIDilIDilIAgcGFnZSBjb250ZW50IHJoeXRobSAodGhlIGNvbHVtbiBob2xkcyByYXcgQ0tFZGl0b3IgYm9keSkg4pSA4pSA4pSAICovXG4ucGFnZS1tYWluIHtcblx0bWluLXdpZHRoOiAwO1xufVxuXG4vKiBwYWdlIHRpdGxlIOKAlCBhIHNob3J0IGdvbGQgYWNjZW50IHJ1bGUgbWFya3MgaXQgYXMgdGhlIHBhZ2UgaGVhZGVyICovXG4ucGFnZS1tYWluIGgxIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTR4bCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLnBhZ2UtbWFpbiBoMTo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IDA7XG5cdGJvdHRvbTogMDtcblx0d2lkdGg6IDIuNXJlbTtcblx0aGVpZ2h0OiAzcHg7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItcmFkaXVzOiAycHg7XG59XG5cbi8qIGNvbnRlbnQgaGVhZGluZ3Mg4oCUIHN0ZXBwZWQgZG93biBvbmUgbGV2ZWwgZnJvbSB0aGUgZGlzcGxheSBzY2FsZSBzbyB0aGV5XG4gICByZWFkIGFzIGlubGluZSBzZWN0aW9uIGRpdmlkZXJzLCBub3QgYmFubmVyLXNpemVkIHRpdGxlcyAqL1xuLnBhZ2UtbWFpbiBoMiB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0yeGwpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0xMCk7XG59XG5cbi5wYWdlLW1haW4gaDMge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLnBhZ2UtbWFpbiBoNCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4ucGFnZS1tYWluIGg1LCAucGFnZS1tYWluIGg2IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5wYWdlLW1haW4gcCwgLnBhZ2UtbWFpbiB1bCwgLnBhZ2UtbWFpbiBvbCwgLnBhZ2UtbWFpbiB0YWJsZSwgLnBhZ2UtbWFpbiBibG9ja3F1b3RlLCAucGFnZS1tYWluIGZpZ3VyZSwgLnBhZ2UtbWFpbiBwcmUge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyogVHdvIHNlcGFyYXRlIGNvbmNlcm5zLCBkb24ndCBjb25mbGF0ZSB0aGVtOlxuICAgwrcgdGhlIEdSSUQgaXMgYSBzZWxmLWNvbnRhaW5lZCBibG9jaywgc28gaXQgdGFrZXMgaXRzIHRvcCBnYXAgZnJvbSB0aGUgcnVsZVxuICAgICBhYm92ZSBsaWtlIGFuIGFjY29yZGlvbiBvciBhIGNhbGxvdXQgZG9lcyDigJQgdGhhdCBpcyB3aGF0IHNlcGFyYXRlcyBpdCBmcm9tXG4gICAgIHRoZSBwYXJhZ3JhcGgvaW1hZ2UvdGl0bGUgYmVmb3JlIGl0O1xuICAgwrcgYSBncmlkIENFTEwgc3RhcnRzIGl0cyBvd24gY29sdW1uLCBzbyB3aGF0ZXZlciBsZWFkcyBhIGNlbGwgbXVzdCBzaXQgZmx1c2hcbiAgICAgYXQgaXRzIHRvcC4gV2l0aG91dCB0aGlzIGFuIDxoMj4gZHJhZ3MgaXRzIDY0cHggcGFnZS1zZWN0aW9uIG1hcmdpbiBpbnRvXG4gICAgIHRoZSBjZWxsIGFuZCBkcm9wcyB0aGUgaGVhZGluZyBmYXIgYmVsb3cgdGhlIHRvcCBvZiBpdHMgY29sdW1uLlxuICAgR2V0dGluZyBvbmx5IHRoZSBzZWNvbmQgaGFsZiByaWdodCBpcyB3aGF0IG1hZGUgdGhlIGhlYWRpbmdzIGNvbGxpZGUgd2l0aCB0aGVcbiAgIGltYWdlIGFib3ZlIHRoZW0gb24gYSBjb250YWN0IHBhZ2Ugd2l0aCB0ZXh0X3Bvc2l0aW9uIFwiYWJvdmVcIi4gKi9cbi5wYWdlLW1haW4gLmdyaWQgPiAqID4gOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLyogdGhlIGxlYWQgbGluZSByaWdodCB1bmRlciB0aGUgdGl0bGUgcmVhZHMgYXMgYSBzdWJ0aXRsZSDigJQga2VlcCBpdCBjbG9zZSAqL1xuLnBhZ2UtbWFpbiBoMSArIGgyIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLyogYSBoZWFkaW5nIHRhcmdldGVkIGJ5IGFuIGluLXBhZ2UgYW5jaG9yIChlLmcuIGFuIFwib24gdGhpcyBwYWdlXCIganVtcC1uYXYpXG4gICBjbGVhcnMgdGhlIHN0aWNreSBoZWFkZXIgd2hlbiBzY3JvbGxlZCB0bywgaW5zdGVhZCBvZiBoaWRpbmcgdW5kZXIgaXQuICovXG4ucGFnZS1tYWluIDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KVtpZF0ge1xuXHRzY3JvbGwtbWFyZ2luLXRvcDogY2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLXNwYWNlLTQpKTtcbn1cblxuLyogc2VsZi1jb250YWluZWQgYmxvY2tzIHRoYXQgc2l0IGluIHRoZSBib2R5IGNvcHkgYnV0IGFyZW4ndCBpbiB0aGUgYmFzZSByaHl0aG1cbiAgIGxpc3Qg4oCUIGdpdmUgdGhlbSB0aGUgc2FtZSB0b3AgZ2FwIGFmdGVyIGEgaGVhZGluZy9wYXJhZ3JhcGguICovXG4ucGFnZS1tYWluIC5hY2NvcmRpb24sIC5wYWdlLW1haW4gLmNhbGxvdXQsIC5wYWdlLW1haW4gLmN0YS1jYWxsb3V0LCAucGFnZS1tYWluIC50YWJsZS13cmFwLCAucGFnZS1tYWluIC5ncmlkLCAucGFnZS1tYWluIC52aWRlbyB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4vKiBmaXJzdCBlbGVtZW50IGluIHRoZSBjb2x1bW4gbmV2ZXIgYWRkcyBhIHRvcCBnYXAgKHRpdGxlIG9yIGZlYXR1cmUgaW1hZ2UpICovXG4ucGFnZS1tYWluID4gOmZpcnN0LWNoaWxkLCAucGFnZS1mZWF0dXJlICsgKiB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi8qIHNlbGYtY29udGFpbmVkIGNvbXBvbmVudHMgKGNhcmRzKSBtYW5hZ2UgdGhlaXIgb3duIGludGVybmFsIHNwYWNpbmcgdmlhXG4gICAuY2FyZC1ib2R5J3MgZ2FwIOKAlCBleGVtcHQgdGhlaXIgY2hpbGRyZW4gZnJvbSB0aGUgcGFnZS1jb250ZW50IHJoeXRobSBzbyBhXG4gICAuY2FyZC10aXRsZSAoaDIpIG9yIC5jYXJkLXRleHQgKHApIGRvZXNuJ3QgaW5oZXJpdCB0aGUgYmlnIHNlY3Rpb24gbWFyZ2lucyAqL1xuLnBhZ2UtbWFpbiAuY2FyZC1ib2R5ID4gKiB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi8qIGFuIGF1dGhvcmVkIGgyL2gzLmNhcmQtdGl0bGUga2VlcHMgdGhlIGNhcmQgc2NhbGUsIG5vdCB0aGUgLnBhZ2UtbWFpbiBoZWFkaW5nIHNjYWxlICovXG4ucGFnZS1tYWluIC5jYXJkLXRpdGxlIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcbn1cblxuLnBhZ2UtbWFpbiAuc2lkZW5vdGUgPiA6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4vKiBwYWdlIGZlYXR1cmUgaW1hZ2UgKHRoZSBgcGFnZWltYWdlYCBmaWVsZCkg4oCUIHNpdHMgYWJvdmUgdGhlIGNvbnRlbnQgKi9cbi5wYWdlLWZlYXR1cmUge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiBhdXRvO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLyogaW5saW5lIGNhcm91c2VsIGluIHBhZ2UgYm9keSDigJQgc2hvcnRlciB0aGFuIHRoZSBiYXNlIDMvMiBkZWZhdWx0ICovXG4ucGFnZS1tYWluID4gLmNhcm91c2VsIHtcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLnBhZ2UtZmVhdHVyZS13cmFwIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLnBhZ2UtZmVhdHVyZS13cmFwIC5wYWdlLWZlYXR1cmUge1xuXHRtYXJnaW4tYm90dG9tOiAwO1xuXHRib3JkZXItcmFkaXVzOiAwO1xufVxuXG4ucGFnZS1mZWF0dXJlLWNhcHRpb24ge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGJvdHRvbTogMDtcblx0bGVmdDogMDtcblx0cmlnaHQ6IDA7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHJnYmEoMCwgMzEsIDYzLCAwLjg1KSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0ZmxleC13cmFwOiB3cmFwO1xufVxuXG4ucGFnZS1mZWF0dXJlLWNhcHRpb24gc3Ryb25nIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5wYWdlLWZlYXR1cmUtY2FwdGlvbiBzcGFuIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0b3BhY2l0eTogMC44NTtcbn1cblxuW2RhdGEtZGlhbG9nLW9wZW5dLnBhZ2UtZmVhdHVyZS13cmFwIHtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG5bZGF0YS1kaWFsb2ctb3Blbl0ucGFnZS1mZWF0dXJlLXdyYXA6aG92ZXIgLnBhZ2UtZmVhdHVyZS1jYXB0aW9uIHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCByZ2JhKDAsIDMxLCA2MywgMC45NSkpO1xufVxuXG4vKiBwYWdlLWZlYXR1cmUtdG9wIOKAlCBjYXJvdXNlbCBvciBoZXJvIGltYWdlIGFib3ZlIHRoZSBzaWRlYmFyIGdyaWQsXG4gICBjb25zdHJhaW5lZCB0byB0aGUgY29udGVudCBtYXgtd2lkdGggKG5vdCBmdWxsLWJsZWVkKS4gKi9cbi5wYWdlLWZlYXR1cmUtdG9wIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1ndXR0ZXIpIDA7XG59XG5cbi5wYWdlLWZlYXR1cmUtdG9wIC5jYXJvdXNlbC1mZWF0dXJlIHtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xufVxuXG4ucGFnZS1mZWF0dXJlLXRvcCAuY2Fyb3VzZWwtZmVhdHVyZSAuY2Fyb3VzZWwtc2xpZGUgaW1nIHtcblx0aGVpZ2h0OiAxMDAlO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcbn1cblxuLnBhZ2UtZmVhdHVyZS1iYW5uZXIge1xuXHR3aWR0aDogMTAwJTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRhc3BlY3QtcmF0aW86IDE2Lzk7XG59XG5cbi8qIOKUgOKUgOKUgCBjb250ZW50LWFkdmFuY2VkOiBzZWN0aW9ucyBpbnNpZGUgdGhlIGNvbnRlbnQgY29sdW1uIOKUgOKUgOKUgFxuICAgV2hlbiBjb250ZW50X2FkdmFuY2VkLmR0IHJlbmRlcnMgc2VjdGlvbnMgaW4gLnBhZ2UtbWFpbiB0aGUgZnVsbC1ibGVlZFxuICAgc2VjdGlvbiBiYW5kcyBsaXZlIGluc2lkZSB0aGUgY29udGVudCBjb2x1bW4g4oCUIGJhY2tncm91bmRzIHNwYW4gdGhlXG4gICBjb2x1bW4gd2lkdGgsIC5zZWN0aW9uLWlubmVyIGhhbmRsZXMgaW5uZXIgcGFkZGluZy4gVmVydGljYWwgcGFkZGluZyBpc1xuICAgdGlnaHRlbmVkIGZyb20gdGhlIGZ1bGwtd2lkdGggLS1zcGFjZS0xMiAoODBweCkgdG8gLS1zcGFjZS04ICg0MHB4KSBzb1xuICAgdGhlIGJhbmRzIGRvbid0IG92ZXJ3aGVsbSB0aGUgbmFycm93ZXIgY29sdW1uLiAqL1xuLnBhZ2UtbWFpbiA+IC5jYXJvdXNlbCB7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTYpO1xufVxuXG4ucGFnZS1tYWluID4gLnNlY3Rpb24ge1xuXHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS04KTtcblx0cGFkZGluZy1pbmxpbmU6IDA7XG59XG5cbi5wYWdlLW1haW4gPiAuc2VjdGlvbiAuc2VjdGlvbi1pbm5lciB7XG5cdG1heC13aWR0aDogbm9uZTtcbn1cblxuLnBhZ2UtbWFpbiA+IC5zZWN0aW9uLS1mbHVzaC10b3Age1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5wYWdlLW1haW4gPiAuc2VjdGlvbi0tZmx1c2gtYm90dG9tIHtcblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xufVxuXG4ucGFnZS1tYWluID4gLnNlY3Rpb246Zmlyc3QtY2hpbGQsXG4ucGFnZS1tYWluID4gLmNhcm91c2VsICsgLnNlY3Rpb24sXG4ucGFnZS1tYWluID4gLnBhZ2UtZmVhdHVyZSArIC5zZWN0aW9uLFxuLnBhZ2UtbWFpbiA+IGgxICsgLnNlY3Rpb24ge1xuXHRwYWRkaW5nLXRvcDogMDtcbn1cblxuLnBhZ2UtbWFpbiA+IC5zZWN0aW9uOmxhc3QtY2hpbGQge1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtNik7XG59XG5cbi8qIOKUgOKUgOKUgCBicmVhZGNydW1iLWRyb3Bkb3duIG5hdiAoc29sbyBsYXlvdXQ7IGNocm9tZS9jcnVtYnMudHQgwrcganMvY3J1bWJzLmpzKSDilIDilIDilIAgKi9cbi5jcnVtYnMge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLmNydW1icy1saXN0IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRhbGlnbi1pdGVtczogYmFzZWxpbmU7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLmNydW1iIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uY3J1bWIgKyAuY3J1bWI6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwi4oC6XCI7XG5cdGNvbG9yOiB2YXIoLS1hdS1ncmF5LTQwMCk7XG5cdG1hcmdpbjogMCB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLmNydW1iLWxpbmsge1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Zm9udDogaW5oZXJpdDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHRwYWRkaW5nOiAwO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5jcnVtYi1saW5rOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uY3J1bWItbGlua1thcmlhLWV4cGFuZGVkPXRydWVdIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4uY3J1bWIuaXMtY3VycmVudCA+IC5jcnVtYi1saW5rLCAuY3J1bWItc3RhdGljIHtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG59XG5cbi5jcnVtYi14IHtcblx0ZGlzcGxheTogbm9uZTtcblx0bWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNlLTIpO1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xuXHRmb250LXdlaWdodDogNDAwO1xufVxuXG4uY3J1bWItbGlua1thcmlhLWV4cGFuZGVkPXRydWVdIC5jcnVtYi14IHtcblx0ZGlzcGxheTogaW5saW5lO1xufVxuXG4vKiB0aGUgZHJvcGRvd24gKi9cbi5jcnVtYi1tZW51IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDEwMCU7XG5cdGxlZnQ6IDA7XG5cdG1pbi13aWR0aDogMjIwcHg7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtMikgMCAwO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcblx0b3BhY2l0eTogMDtcblx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCk7XG5cdHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCB2aXNpYmlsaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpO1xuXHR6LWluZGV4OiA1MDtcbn1cblxuLmNydW1iLm9wZW4gPiAuY3J1bWItbWVudSB7XG5cdG9wYWNpdHk6IDE7XG5cdHZpc2liaWxpdHk6IHZpc2libGU7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLmNydW1iLW1lbnUgbGkge1xuXHRtYXJnaW46IDA7XG59XG5cbi5jcnVtYi1tZW51IGxpICsgbGkge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4uY3J1bWItbWVudSBhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmNydW1iLW1lbnUgYTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uY3J1bWItbWVudSBhLmlzLW9ucGF0aCB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLmNydW1iLW1lbnUgYVthcmlhLWN1cnJlbnQ9cGFnZV0ge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG59XG5cbi5jcnVtYi1tZW51IC5jcnVtYi1zZWxmIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7XG5cdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS0xKTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLyogbm8tc2lkZWJhciB2YXJpYW50IChzaWRlbmF2ID09IFwib2ZmXCIpIOKAlCBicmVhZGNydW1iIHNpdHMgYXQgdGhlIHRvcCwgc28gaXRcbiAgIG5lZWRzIGxlc3MgaGVhZHJvb20gdGhhbiB0aGUgc2lkZWJhciBsYXlvdXQgKi9cbi5wYWdlLWxheW91dC0tc29sbyB7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoLW5hcnJvdyk7XG5cdHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLyogcGFnZV93aWRlID0gMSAoc2V0IGJ5IGEgZm9sZGVyIHdyYXBwZXIpOiBhIHNvbG8gcGFnZSBhdCBmdWxsIHNpdGUgd2lkdGgsIGZvclxuICAgbXVsdGktY29sdW1uIGRpcmVjdG9yeSBwYWdlcyBsaWtlIC9hY2FkZW1pY3MvICovXG4ucGFnZS1sYXlvdXQtLXdpZGUge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG59XG5cbi8qIHNpZGViYXIgY2FsbHMtdG8tYWN0aW9uIChhY2FkZW1pY3MtZGVmYXVsdCkgKi9cbi5zaWRlYmFyLWN0YSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4uc2lkZWJhci1jdGEgLmJ0biB7XG5cdHdpZHRoOiAxMDAlO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMXB4O1xuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktMTAwKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uc2lkZWJhci1jdGEgLmJ0bjpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktMjAwKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHR0cmFuc2Zvcm06IG5vbmU7XG5cdGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5zaWRlYmFyLWN0YSAuYnRuIGkge1xuXHR3aWR0aDogMS4yNXJlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4uc2lkZWJhci1jdGEgLmJ0bi1wcmltYXJ5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uc2lkZWJhci1jdGEgLmJ0bi1wcmltYXJ5OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym94LXNoYWRvdzogbm9uZTtcbn1cblxuLnNpZGViYXItY3RhIC5idG4tcHJpbWFyeSBpIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBzaWRlYmFyIGxpbmsgbGlzdHMgKGludGVyaW9yLndyYXAgYHNpZGViYXJfbGlua3NgKSAqL1xuLnNpZGViYXItbGlua3Mge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnNpZGViYXItbGlua3MtdGl0bGUge1xuXHRtYXJnaW46IDAgMCB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnNpZGViYXItbGlua3MgdWwge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4uc2lkZWJhci1saW5rcyBhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHBhZGRpbmc6IDVweCB2YXIoLS1zcGFjZS0zKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0bGluZS1oZWlnaHQ6IDEuMzU7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uc2lkZWJhci1saW5rcyBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTEwMCk7XG59XG5cbi5zaWRlYmFyLWN0YSAuYnRuLXByaW1hcnk6aG92ZXIgaSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLyog4pSA4pSA4pSAIG1vYmlsZSBzZWN0aW9uLW5hdiBkaXNjbG9zdXJlIOKUgOKUgOKUgFxuICAgRGVza3RvcDogdGhlIHRvZ2dsZSBpcyBoaWRkZW4gYW5kIHRoZSB0cmVlIHNob3dzIGFzIGEgbm9ybWFsIHN0aWNreSBjb2x1bW4uXG4gICBNb2JpbGU6IHRoZSB3aG9sZSBtZW51IGNvbGxhcHNlcyBiZWhpbmQgdGhlIHRvZ2dsZSBzbyBjb250ZW50IGxlYWRzLiAqL1xuLnNpZGViYXItdG9nZ2xlIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDgyMHB4KSB7XG5cdC5wYWdlLWxheW91dCB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0XHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS04KTtcblx0fVxuXHQucGFnZS1zaWRlYmFyIHtcblx0XHRwb3NpdGlvbjogc3RhdGljO1xuXHRcdG1heC1oZWlnaHQ6IG5vbmU7XG5cdFx0b3ZlcmZsb3c6IHZpc2libGU7XG5cdH1cblx0LnNpZGViYXItdG9nZ2xlIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdFx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRcdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdH1cblx0LnNpZGViYXItY2FyZXQge1xuXHRcdHdpZHRoOiA5cHg7XG5cdFx0aGVpZ2h0OiA5cHg7XG5cdFx0ZmxleC1zaHJpbms6IDA7XG5cdFx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHRcdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG5cdFx0dHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuXHRcdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG5cdH1cblx0LnNpZGViYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLnNpZGViYXItY2FyZXQge1xuXHRcdHRyYW5zZm9ybTogcm90YXRlKC0xMzVkZWcpO1xuXHR9XG5cdC5zaWRlYmFyLW5hdiB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0XHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQucGFnZS1zaWRlYmFyLm9wZW4gLnNpZGViYXItbmF2IHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQucGFnZS1zaWRlYmFyLm9wZW4gLnBhZ2UtZGVwdCB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fSAvKiBkZXB0IG5hbWUgYWxyZWFkeSBpbiB0aGUgdG9nZ2xlICovXG59XG4vKiDilIDilIDilIAgQS1aIGRpcmVjdG9yeSAoc2VydmljZXMvaW5kZXguaHRtbCkg4pSA4pSA4pSAICovXG4uYXotYmFyIHtcblx0ZGlzcGxheTogZmxleDtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5hei1iYXIgLnRhYi1idG4ge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0bWluLXdpZHRoOiAyZW07XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmF6LWJhciAudGFiLWJ0bi5hY3RpdmUge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLmF6LWxpc3Qge1xuXHRjb2x1bW5zOiAyO1xuXHRjb2x1bW4tZ2FwOiB2YXIoLS1zcGFjZS04KTtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0cGFkZGluZzogMDtcblx0bWFyZ2luOiAwO1xufVxuXG4uYXotbGlzdCBsaSB7XG5cdGJyZWFrLWluc2lkZTogYXZvaWQ7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEpIDA7XG59XG5cbi5hei1saXN0IGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmF6LWxpc3QgYTpob3ZlciB7XG5cdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uYXotc3ViIHtcblx0cGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmF6LXN1Z2dlc3Qge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS04KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG5cdC5hei1saXN0IHtcblx0XHRjb2x1bW5zOiAxO1xuXHR9XG59XG4vKiBCbG9nIC8gbmV3c2xldHRlciBmZWVkIHBvc3RzICh0ZW1wbGF0ZXMvYmxvZy5kdCk6IG9uZSAuY2FyZCBwZXIgcG9zdCwgc3RhY2tlZCAqL1xuLmJsb2ctcG9zdHMge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRnYXA6IHZhcigtLXNwYWNlLTYpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBjaHJvbWUuY3NzICDCtyAgc2l0ZSBmb290ZXIgKyBzdWJwYWdlIG5hdiB0cmVlXG4gICAodGhlIGhlYWRlciBsaXZlcyBpbiBoZWFkZXIuY3NzIC8gY2hyb21lL2hlYWRlci50dClcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3NcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyog4pSA4pSA4pSAIEZPT1RFUiDilIDilIDilIAgKi9cbi5zaXRlLWZvb3RlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xMikgdmFyKC0tZ3V0dGVyKSB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnNpdGUtZm9vdGVyIGEge1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uc2l0ZS1mb290ZXIgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLyogXCJQcml2YWN5IGNob2ljZXNcIiByZW9wZW5zIHRoZSBjb25zZW50IHByZWZlcmVuY2VzIChjb2RlL2NvbnNlbnQudHQpIC0gYSBidXR0b24gZHJlc3NlZCBhcyBhIGZvb3RlciBsaW5rICovXG4uZm9vdGVyLWNvbnNlbnQge1xuXHRwYWRkaW5nOiAwO1xuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGZvbnQ6IGluaGVyaXQ7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5mb290ZXItY29uc2VudDpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLnNpdGUtZm9vdGVyLWlubmVyIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEuNmZyIDFmciAxZnIgMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4uZm9vdGVyLWJyYW5kIGltZyB7XG5cdHdpZHRoOiAxNjBweDtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5mb290ZXItdGFnbGluZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRsaW5lLWhlaWdodDogMS4zO1xufVxuXG4uZm9vdGVyLW1ldGEge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLmZvb3Rlci1jb2wgaDMge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMnB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4uZm9vdGVyLWNvbCB1bCB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLnNpdGUtZm9vdGVyLWJvdHRvbSB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS04KSBhdXRvIDA7XG5cdHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS01KTtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4uZm9vdGVyLWxlZ2FsIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uZm9vdGVyLXNvY2lhbCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5mb290ZXItc29jaWFsIGEge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XG59XG5cbi5mb290ZXItc29jaWFsIHN2ZyB7XG5cdHdpZHRoOiAyMnB4O1xuXHRoZWlnaHQ6IDIycHg7XG5cdGZpbGw6IGN1cnJlbnRDb2xvcjtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDkyMHB4KSB7XG5cdC5zaXRlLWZvb3Rlci1pbm5lciB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHR9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHtcblx0LnNpdGUtZm9vdGVyLWlubmVyIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0fVxufVxuLyog4pSA4pSA4pSAIERFUEFSVE1FTlQgUFJFLUZPT1RFUiBCQU5EIChjaHJvbWUvZGVwdF9mb290ZXIudHQpIOKUgOKUgOKUgCAqL1xuLmRlcHQtZm9vdGVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS04KSB2YXIoLS1ndXR0ZXIpO1xufVxuXG4uZGVwdC1mb290ZXItaW5uZXIge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRnYXA6IHZhcigtLXNwYWNlLTYpIHZhcigtLXNwYWNlLTEwKTtcbn1cblxuLmRlcHQtZm9vdGVyLWxvZ28gaW1nIHtcblx0bWF4LWhlaWdodDogNTZweDtcblx0d2lkdGg6IGF1dG87XG59XG5cbi5kZXB0LWZvb3Rlci1ibG9jayB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5kZXB0LXNvY2lhbCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcbn1cblxuLyogcmVzZXQgdGhlIGdsb2JhbCBgbGkgKyBsaSB7IG1hcmdpbi10b3AgfWAgcmVhZGluZy1yaHl0aG0gcnVsZSAoYmFzZS5jc3MpIOKAlCBpdFxuICAgbGVha3MgaW4gYW5kIHB1c2hlcyBldmVyeSBpY29uIGJ1dCB0aGUgZmlyc3QgZG93biA4cHgsIHNvIHdpdGggdGhlIGNlbnRlcmVkXG4gICBmbGV4IGxpbmUgdGhlIGZpcnN0IGljb24gcmlkZXMgaGlnaC4gKi9cbi5kZXB0LXNvY2lhbCBsaSB7XG5cdG1hcmdpbjogMDtcbn1cblxuLmRlcHQtc29jaWFsIGEge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdHdpZHRoOiAxLjVlbTtcblx0aGVpZ2h0OiAxLjVlbTtcblx0bGluZS1oZWlnaHQ6IDE7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR0cmFuc2l0aW9uOiBjb2xvciB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLmRlcHQtc29jaWFsIGkge1xuXHRsaW5lLWhlaWdodDogMTtcbn1cblxuLyogRmxpY2tyIGhhcyBubyBGb250QXdlc29tZSBiYWRnZSBnbHlwaCAob25seSBiYXJlIGRvdHMpLCBzbyBkcmF3IHRoZSBtYXRjaGluZ1xuICAgbmF2eSB0aWxlIG91cnNlbHZlczogYSBzbWFsbCBzcXVhcmUgY2hpcCB3aXRoIHRoZSBkb3RzIGtub2NrZWQgb3V0IGluIGNyZWFtLFxuICAgc2l6ZWQgdG8gc2l0IGFsb25nc2lkZSB0aGUgc3F1YXJlLWJhZGdlIGdseXBocyBvZiB0aGUgb3RoZXIgbmV0d29ya3MuICovXG4uZGVwdC1zb2NpYWwgLmZhLWZsaWNrciB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0d2lkdGg6IDAuODJlbTtcblx0aGVpZ2h0OiAwLjgyZW07XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXItcmFkaXVzOiAwLjE0ZW07XG59XG5cbi5kZXB0LXNvY2lhbCAuZmEtZmxpY2tyOjpiZWZvcmUge1xuXHRmb250LXNpemU6IDAuNjJlbTtcblx0bGluZS1oZWlnaHQ6IDE7XG59XG5cbi5kZXB0LXNvY2lhbCBhOmhvdmVyIC5mYS1mbGlja3Ige1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLmRlcHQtc29jaWFsIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5kZXB0LWNvbnRhY3Qge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0xKTtcbn1cblxuLmRlcHQtY29udGFjdCBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5kZXB0LWNvbnRhY3QgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLmRlcHQtbGFiZWwge1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5kZXB0LWFkZHJlc3Mge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi5kZXB0LWFkZHJlc3Mgc3Ryb25nIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3MDBweCkge1xuXHQuZGVwdC1mb290ZXItaW5uZXIge1xuXHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdFx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS01KTtcblx0fVxufVxuLyog4pSA4pSA4pSAIFNVQlBBR0UgTkFWIFRSRUUgKGNocm9tZS9uYXYudHQpIOKAlCBjb2xsYXBzaWJsZSBhY2NvcmRpb24g4pSA4pSA4pSAICovXG4ubmF2LXRyZWUge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG59XG5cbi5uYXYtdHJlZSBsaSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm5hdi10cmVlIGxpICsgbGkge1xuXHRtYXJnaW4tdG9wOiAwO1xufSAvKiBuZXV0cmFsaXplIGJhc2UuY3NzIGxpK2xpIGluc2lkZSB0aGUgdHJlZSAqL1xuLm5hdi10cmVlIGEge1xuXHRkaXNwbGF5OiBibG9jaztcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMSkgdmFyKC0tc3BhY2UtMyk7XG5cdGxpbmUtaGVpZ2h0OiAxLjM1O1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLm5hdi10cmVlIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1hdS1ncmF5LTMwMCk7XG59XG5cbi5uYXYtdHJlZSAubmF2LXRyZWUge1xuXHRwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4vKiBhY3RpdmUgdHJhaWwgcGFyZW50IChhIGJyYW5jaCBvbiB0aGUgcGF0aCkgPSBwYWxlciBnb2xkIGJhcjsgc2NvcGVkIHRvXG4gICAuaGFzLWNoaWxkcmVuIHNvIGEgc3B1cmlvdXNseS1hY3RpdmUgbGVhZiAoZS5nLiBzaXRlLXJvb3QgXCJIb21lXCIpIHN0YXlzIHBsYWluICovXG4ubmF2LXRyZWUgLmlzLWFjdGl2ZS5oYXMtY2hpbGRyZW4gPiAubmF2LXRyZWUtcm93ID4gYSB7XG5cdGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLyogY3VycmVudCBwYWdlID0gZnVsbCBnb2xkIGJhciArIGJvbGQgKGFmdGVyIHRoZSB0cmFpbCBydWxlIHNvIGl0IHdpbnMpICovXG4ubmF2LXRyZWUgLmlzLWN1cnJlbnQgPiBhLFxuLm5hdi10cmVlIC5pcy1jdXJyZW50ID4gLm5hdi10cmVlLXJvdyA+IGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyogYnJhbmNoIHJvdzogbGluayArIGNvbGxhcHNlIHRvZ2dsZSAqL1xuLm5hdi10cmVlLXJvdyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5uYXYtdHJlZS1yb3cgPiBhIHtcblx0ZmxleDogMTtcbn1cblxuLm5hdi10cmVlLXRvZ2dsZSB7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHR3aWR0aDogMzZweDtcblx0YWxpZ24tc2VsZjogc3RyZXRjaDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGJvcmRlcjogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcbn1cblxuLm5hdi10cmVlLXRvZ2dsZTo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcIjtcblx0d2lkdGg6IDdweDtcblx0aGVpZ2h0OiA3cHg7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcblx0dHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4ubmF2LXRyZWUtdG9nZ2xlOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4ubmF2LXRyZWUgbGkuaXMtb3BlbiA+IC5uYXYtdHJlZS1yb3cgLm5hdi10cmVlLXRvZ2dsZTo6YmVmb3JlIHtcblx0dHJhbnNmb3JtOiByb3RhdGUoLTEzNWRlZyk7XG59XG5cbi8qIGNvbGxhcHNlIGNoaWxkcmVuIHVubGVzcyB0aGUgYnJhbmNoIGlzIG9wZW4gKGFjdGl2ZSB0cmFpbCBpcyBwcmUtb3BlbmVkKSAqL1xuLm5hdi10cmVlIGxpLmhhcy1jaGlsZHJlbiA+IC5uYXYtdHJlZSB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5uYXYtdHJlZSBsaS5oYXMtY2hpbGRyZW4uaXMtb3BlbiA+IC5uYXYtdHJlZSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiBtb2JpbGU6IGNvbWZvcnRhYmxlLCBmaW5nZXItZnJpZW5kbHkgcm93cyAoZGVza3RvcCBzdGF5cyB0aWdodCkgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA4MjBweCkge1xuXHQubmF2LXRyZWUgYSB7XG5cdFx0cGFkZGluZy1ibG9jazogdmFyKC0tc3BhY2UtMyk7XG5cdFx0bGluZS1oZWlnaHQ6IDEuNDtcblx0fVxufVxuLyog4pSA4pSA4pSAIHNlY3Rpb24tbmF2IMK3IGEgZGVwYXJ0bWVudCdzIHNpYmxpbmcgc3ViLXNpdGVzIChjaHJvbWUvc2VjdGlvbl9uYXYudHQpIOKUgOKUgOKUgFxuICAgQSBzbGltIGZ1bGwtd2lkdGggYmFyIHVuZGVyIHRoZSBtYWluIGhlYWRlci4gTGVhZHMgd2l0aCB0aGUgZGVwYXJ0bWVudCBOQU1FXG4gICAodGhlIHNpdGUgaWRlbnRpdHkg4oCUIGxpbmtzIGhvbWUsIHN0eWxlZCBhcyBhIHRpdGxlLCBub3QgYSB0YWIpLCB0aGVuIHRoZVxuICAgc3ViLXNpdGVzIChJVFM6IENsaWVudCBTZXJ2aWNlcyAvIEFWIC8gTmV0d29yayAvIOKApikuIEN1cnJlbnQgc3ViLXNpdGUgbWFya2VkXG4gICB3aXRoIGEgZ29sZCB0YWItdW5kZXJsaW5lOyB0aGUgc3RyaXAgc2Nyb2xscyBob3Jpem9udGFsbHkgaWYgaXQgb3ZlcmZsb3dzLlxuICAgQWxpZ25tZW50OiB0aGUgZ3V0dGVyIGxpdmVzIG9uIHRoZSBmdWxsLWJsZWVkIGJhciAobGlrZSAuc2VjdGlvbiksIGFuZCB0aGVcbiAgIGlubmVyIGlzIGEgcHVyZSBtYXgtd2lkdGggY29sdW1uLCBzbyB0aGUgYmFyJ3MgY29udGVudCBzaGFyZXMgT05FIGxlZnQgZWRnZVxuICAgd2l0aCB0aGUgaGVhZGVyIGFuZCB0aGUgcGFnZSBjb250ZW50IChoZWFkZXIuY3NzIGFwcGxpZXMgdGhlIHNhbWUgbW9kZWwpLiAqL1xuLnNlY3Rpb24tbmF2IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc20pO1xuXHRwYWRkaW5nLWlubGluZTogdmFyKC0tZ3V0dGVyKTtcbn1cblxuLnNlY3Rpb24tbmF2LWlubmVyIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogc3RyZXRjaDtcblx0Z2FwOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLyogc2l0ZSBpZGVudGl0eSDigJQgdGhlIGRlcGFydG1lbnQgbmFtZTsgbGlua3MgaG9tZTsgcmVhZHMgYXMgYSB0aXRsZS4gQSBoYWlybGluZVxuICAgZGl2aWRlcyBpdCBmcm9tIHRoZSBzdWItc2l0ZSB0YWJzLiAqL1xuLnNlY3Rpb24tbmF2LXRpdGxlIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0ZmxleDogbm9uZTsgLyogZG9uJ3Qgc2hyaW5rIOKAlCB0aGUgdGFiIHN0cmlwIGFic29yYnMgb3ZlcmZsb3cgKi9cblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zcGFjZS04KTtcblx0bWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjZS0yKTtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4uc2VjdGlvbi1uYXYtdGl0bGU6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5zZWN0aW9uLW5hdi1saW5rcyB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0LyogbWluLXdpZHRoOjAga2VlcHMgdGhlIHN0cmlwIHNocmlua2FibGUgc28ganMvc2VjdGlvbi1uYXYuanMgY2FuIGRldGVjdFxuXHQgICBvdmVyZmxvdyAoc2Nyb2xsV2lkdGggPiBjbGllbnRXaWR0aCkgYW5kIG1vdmUgdGFicyB0byBNb3JlOyBvdmVyZmxvdyBzdGF5c1xuXHQgICB2aXNpYmxlIHNvIGEgdGFiJ3MgcGFnZXMgZHJvcGRvd24gY2FuIGVzY2FwZSB0aGUgYmFyLiAob3ZlcmZsb3cteDphdXRvIHdvdWxkXG5cdCAgIGZvcmNlIG92ZXJmbG93LXkgdG8gYXV0byBhbmQgY2xpcCB0aGUgZHJvcGRvd24uKSAqL1xuXHRtaW4td2lkdGg6IDA7XG5cdG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4vKiBtYXJnaW4tdG9wOjAgdW5kb2VzIHRoZSBnbG9iYWwgYmFzZS5jc3MgYGxpICsgbGkgeyBtYXJnaW4tdG9wIH1gLCB3aGljaCB3YXNcbiAgIGRyb3BwaW5nIGV2ZXJ5IHRhYiBhZnRlciB0aGUgZmlyc3QgYmVsb3cgdGhlIHRvcCAodGhlIGZpcnN0IGxvb2tlZCByYWlzZWQpLiAqL1xuLnNlY3Rpb24tbmF2LWxpbmtzIGxpIHtcblx0ZmxleDogbm9uZTtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLnNlY3Rpb24tbmF2LWxpbmtzIGEge1xuXHRkaXNwbGF5OiBibG9jaztcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0dHJhbnNpdGlvbjogY29sb3IgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpLCBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uc2VjdGlvbi1uYXYtbGlua3MgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnNlY3Rpb24tbmF2LWxpbmtzIGEuaXMtY3VycmVudCB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Ym9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIGhpZ2hsaWdodGVkIHRhYiAoZS5nLiBEb25hdGUpIOKAlCBnb2xkIHRleHQsIHNlbWlib2xkOyBubyBmaWxsIHNvIGl0IGRvZXNuJ3RcbiAgIGNvbXBldGUgd2l0aCB0aGUgR2l2ZS9WaXNpdC9BcHBseSBidXR0b25zIGluIHRoZSB1dGlsaXR5IGJhciAqL1xuLnNlY3Rpb24tbmF2LWxpbmtzIGEuaXMtaGlnaGxpZ2h0IHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4uc2VjdGlvbi1uYXYtbGlua3MgYS5pcy1oaWdobGlnaHQ6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1kYXJrLCB2YXIoLS1hdS1nb2xkKSk7XG59XG5cbi8qIHRoZSB0b2dnbGUgaXMgaGlkZGVuIGluIHN0cmlwIG1vZGU7IEpTIHJldmVhbHMgaXQgd2hlbiBjb2xsYXBzZWQgKi9cbi5zZWN0aW9uLW5hdi10b2dnbGUge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4vKiDilIDilIAgY29sbGFwc2VkIG1vZGUg4oCUIHRoZSB0YWIgc3RyaXAgYmVjb21lcyBhIGRyb3Bkb3duLCBpbiBUV08gc3RhZ2VzIOKUgOKUgFxuICAganMvc2VjdGlvbi1uYXYuanMgY29sbGFwc2VzIGFzIHdpZHRoIHRpZ2h0ZW5zLCBzbyBpdCBuZXZlciBjbGlwcyBhbmQgbmV2ZXJcbiAgIGp1bXBzIHN0cmFpZ2h0IHRvIGEgZnVsbC13aWR0aCBzaGVldDpcbiAgICAgLmlzLWNvbGxhcHNlZCAgICAgICAgICAgIOKGkiBTSURFLUJZLVNJREU6IHRoZSB0aXRsZSBzdGF5cyBsZWZ0LCBhIGNvbXBhY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd24gcGlsbCBzaXRzIHRvIGl0cyByaWdodC4gS2lja3MgaW4gYXMgc29vblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGUgZnVsbCB0YWIgc3RyaXAgd291bGQgb3ZlcmZsb3cg4oCUIGtlZXBzIHdpZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3MgbG9va2luZyBpbnRlbnRpb25hbC5cbiAgICAgLmlzLWNvbGxhcHNlZC5pcy1zdGFja2VkIOKGkiBTVEFDS0VEOiB0aGUgdGl0bGUgYmVjb21lcyBhIHNtYWxsIGdvbGQgZXllYnJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZnVsbC13aWR0aCBwaWxsIGJlbmVhdGggaXQuIE9ubHkgd2hlbiBldmVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlICsgcGlsbCBjYW4ndCBzaXQgc2lkZS1ieS1zaWRlIChuYXJyb3cvcGhvbmUpLlxuICAgVGhlIG9wZW4gbGlzdCBpcyBhbiBhbmNob3JlZCBmbG9hdGluZyBtZW51ICh1bmRlciB0aGUgcGlsbCBpbiBzaWRlLWJ5LXNpZGUsXG4gICBmdWxsLXdpZHRoIGluIHN0YWNrZWQpLiBDb250ZW50LWF3YXJlLCBub3QgYSBndWVzc2VkIGJyZWFrcG9pbnQuIFdpdGhvdXQgSlNcbiAgIHRoZSBzdHJpcCBqdXN0IHNjcm9sbHMg4oCUIHRoZSBkcm9wZG93biBuZWVkcyBKUyB0byBvcGVuIGFueXdheS4gKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Ym9yZGVyLWJvdHRvbTogMDtcblx0Ym94LXNoYWRvdzogbm9uZTtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtaW5uZXIge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7IC8qIGFuY2hvciBmb3IgdGhlIGZsb2F0aW5nIGxpc3QgKi9cblx0ZmxleC13cmFwOiB3cmFwO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLyogbm8gaW5saW5lIHRhYnMgZm9sbG93IHRoZSB0aXRsZSBub3csIHNvIGRyb3AgaXRzIGRpdmlkZXIgKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LXRpdGxlIHtcblx0Ym9yZGVyLXJpZ2h0OiAwO1xuXHRwYWRkaW5nLXJpZ2h0OiAwO1xuXHRtYXJnaW4tcmlnaHQ6IDA7XG59XG5cbi8qIHRoZSBkcm9wZG93biBwaWxsIOKAlCBjdXJyZW50IHBhZ2UgKyBjYXJldCAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtdG9nZ2xlIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS00KTtcblx0bWluLXdpZHRoOiAxMXJlbTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiBzaWRlLWJ5LXNpZGUgKGRlZmF1bHQpOiBwaWxsIGh1Z3MgdGhlIHJpZ2h0IGVuZCBvZiB0aGUgdGl0bGUncyByb3cgKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQ6bm90KC5pcy1zdGFja2VkKSAuc2VjdGlvbi1uYXYtdG9nZ2xlIHtcblx0bWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi8qIHN0YWNrZWQ6IHRpdGxlIOKGkiBleWVicm93LCBwaWxsIOKGkiBmdWxsIHdpZHRoIGJlbmVhdGggaXQgKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQuaXMtc3RhY2tlZCAuc2VjdGlvbi1uYXYtaW5uZXIge1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRhbGlnbi1pdGVtczogc3RyZXRjaDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZC5pcy1zdGFja2VkIC5zZWN0aW9uLW5hdi10aXRsZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsZXR0ZXItc3BhY2luZzogMC4xMmVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQuaXMtc3RhY2tlZCAuc2VjdGlvbi1uYXYtdG9nZ2xlIHtcblx0d2lkdGg6IDEwMCU7XG59XG5cbi5zZWN0aW9uLW5hdi1jYXJldCB7XG5cdHdpZHRoOiA5cHg7XG5cdGhlaWdodDogOXB4O1xuXHRmbGV4LXNocmluazogMDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHR0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5zZWN0aW9uLW5hdi10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXSAuc2VjdGlvbi1uYXYtY2FyZXQge1xuXHR0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcbn1cblxuLyogdGhlIHNpYmxpbmcgbGlzdCDigJQgYSBmbG9hdGluZyBtZW51IGJlbG93IHRoZSBiYXIsIGFuY2hvcmVkIHRvIHRoZSBpbm5lciAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtbGlua3Mge1xuXHRkaXNwbGF5OiBub25lO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogMTAwJTtcblx0ei1pbmRleDogNTA7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQpO1xuXHRtYXgtaGVpZ2h0OiA3MHZoO1xuXHRvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4vKiBzaWRlLWJ5LXNpZGU6IGNvbXBhY3QgbWVudSB1bmRlciB0aGUgcmlnaHQtaGFuZCBwaWxsICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkOm5vdCguaXMtc3RhY2tlZCkgLnNlY3Rpb24tbmF2LWxpbmtzIHtcblx0cmlnaHQ6IDA7XG5cdHdpZHRoOiBtYXgtY29udGVudDtcblx0bWF4LXdpZHRoOiAxMDAlO1xuXHRtaW4td2lkdGg6IDE0cmVtO1xufVxuXG4vKiBzdGFja2VkOiBmdWxsLXdpZHRoIG1lbnUgKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQuaXMtc3RhY2tlZCAuc2VjdGlvbi1uYXYtbGlua3Mge1xuXHRsZWZ0OiAwO1xuXHRyaWdodDogMDtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZC5vcGVuIC5zZWN0aW9uLW5hdi1saW5rcyB7XG5cdGRpc3BsYXk6IGZsZXg7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LWxpbmtzIGxpIHtcblx0ZmxleDogbm9uZTtcblx0bWFyZ2luLXRvcDogMDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMTAwKTtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtbGlua3MgbGk6bGFzdC1jaGlsZCB7XG5cdGJvcmRlci1ib3R0b206IDA7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LWxpbmtzIGEge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcblx0Ym9yZGVyLWJvdHRvbTogMDsgLyogdGhlIHRhYi11bmRlcmxpbmUgaXMgYSBkZXNrdG9wIHRyZWF0bWVudCAqL1xufVxuXG4vKiBjdXJyZW50IHJvdzogZ29sZCBsZWZ0IGFjY2VudCArIHBhbGUgd2FzaCBpbnN0ZWFkIG9mIHRoZSB0YWIgdW5kZXJsaW5lICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1saW5rcyBhLmlzLWN1cnJlbnQge1xuXHRib3JkZXItYm90dG9tOiAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xuXHRib3gtc2hhZG93OiBpbnNldCAzcHggMCAwIHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiDilIDilIAgcHJpb3JpdHkrIG92ZXJmbG93IOKAlCBhIFwiTW9yZSDilr5cIiBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpcCDilIDilIBcbiAgIFdoZW4gdGhlIHN0cmlwIGFsbW9zdCBmaXRzLCBqcy9zZWN0aW9uLW5hdi5qcyBrZWVwcyB0aGUgdGFicyB0aGF0IGZpdCBpbmxpbmVcbiAgIGFuZCB0dWNrcyB0aGUgcmVzdCB1bmRlciB0aGlzIGJ1dHRvbiAocmF0aGVyIHRoYW4gY29sbGFwc2luZyB0aGUgd2hvbGUgdGhpbmdcbiAgIHRvIGEgcGlsbCkuIFNvIHdpZGUgdmlld3Mgc3RheSBhIHJlYWwgdGFiIHJvdy4gSlMgaGlkZXMgb3ZlcmZsb3cgdGFic1xuICAgKGxpLmlzLWhpZGRlbikgYW5kIGNsb25lcyB0aGVtIGludG8gdGhlIG1lbnU7IGl0IHRvZ2dsZXMgYGhpZGRlbmAgb24gdGhlXG4gICB3aG9sZSBjb250cm9sIHdoZW4gbm90aGluZyBvdmVyZmxvd3MsIGFuZCBoaWRlcyBpdCBlbnRpcmVseSBvbmNlIHRoZSBuYXZcbiAgIGNvbGxhcHNlcyB0byB0aGUgcGlsbC4gKi9cbi5zZWN0aW9uLW5hdi1saW5rcyBsaS5pcy1oaWRkZW4ge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZmxleDogbm9uZTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmVbaGlkZGVuXSB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LW1vcmUge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZS1idG4ge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgMDtcblx0bWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNlLTYpO1xuXHRmb250LWZhbWlseTogaW5oZXJpdDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZS1idG46aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlLWJ0blthcmlhLWV4cGFuZGVkPXRydWVdIC5zZWN0aW9uLW5hdi1jYXJldCB7XG5cdHRyYW5zZm9ybTogcm90YXRlKC0xMzVkZWcpO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IHtcblx0ZGlzcGxheTogbm9uZTtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDEwMCU7XG5cdHJpZ2h0OiAwO1xuXHR6LWluZGV4OiA1MDtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtaW4td2lkdGg6IDE0cmVtO1xuXHRtYXgtd2lkdGg6IDgwdnc7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRtYXgtaGVpZ2h0OiA3MHZoO1xuXHRvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZS5pcy1vcGVuIC5zZWN0aW9uLW5hdi1tb3JlLW1lbnUge1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSBsaSB7XG5cdG1hcmdpbi10b3A6IDA7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTEwMCk7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUgbGk6bGFzdC1jaGlsZCB7XG5cdGJvcmRlci1ib3R0b206IDA7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUgYSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdGJvcmRlci1ib3R0b206IDA7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IGEuaXMtY3VycmVudCB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcblx0Ym94LXNoYWRvdzogaW5zZXQgM3B4IDAgMCB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyog4pSA4pSAIHN1Yi1zaXRlIGRyb3Bkb3ducyDCtyBvbmUgbGV2ZWwgb2YgYSBzdWItc2l0ZSdzIHBhZ2VzIHBlciB0YWIg4pSA4pSAXG4gICBBIHRhYiB3aXRoIGNoaWxkIHBhZ2VzIGdldHMgYSBjYXJldCBidXR0b247IGNsaWNraW5nIGl0IG9wZW5zIGEgbWVudSBvZiB0aGF0XG4gICBzdWItc2l0ZSdzIHBhZ2VzLCBzbyBzdWJwYWdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIGJhciAodGhlIHNlY3Rpb24tbmF2IG9ubHlcbiAgIGFwcGVhcnMgb24gcGFnZXMgdGhhdCBoYXZlIG5vIHNpZGViYXIpLiBqcy9zZWN0aW9uLW5hdi5qcyB0b2dnbGVzIC5pcy1vcGVuIG9uXG4gICB0aGUgLnNlY3Rpb24tbmF2LWl0ZW0uIEluIHRoZSBTVFJJUCB0aGUgbWVudSBpcyBhbiBhYnNvbHV0ZSBkcm9wZG93bjsgaW4gdGhlXG4gICBjb2xsYXBzZWQgcGlsbCBhbmQgdGhlIE1vcmUgbWVudSBpdCBkcm9wcyBpbmxpbmUgYXMgYW4gaW5kZW50ZWQgYWNjb3JkaW9uLiAqL1xuLnNlY3Rpb24tbmF2LWl0ZW0ge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5zZWN0aW9uLW5hdi1zdWItdG9nZ2xlIHtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGFsaWduLXNlbGY6IHN0cmV0Y2g7XG5cdHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtMik7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGJvcmRlcjogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG59XG5cbi5zZWN0aW9uLW5hdi1zdWItdG9nZ2xlOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uc2VjdGlvbi1uYXYtc3ViLXRvZ2dsZSAuc2VjdGlvbi1uYXYtY2FyZXQge1xuXHR3aWR0aDogNnB4O1xuXHRoZWlnaHQ6IDZweDtcbn1cblxuLnNlY3Rpb24tbmF2LXN1Yi10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXSAuc2VjdGlvbi1uYXYtY2FyZXQge1xuXHR0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcbn1cblxuLyogdGhlIHBhZ2VzIG1lbnUg4oCUIGEgZmxvYXRpbmcgZHJvcGRvd24gaW4gdGhlIHN0cmlwICovXG4uc2VjdGlvbi1uYXYtbWVudSB7XG5cdGRpc3BsYXk6IG5vbmU7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAxMDAlO1xuXHRsZWZ0OiAwO1xuXHR6LWluZGV4OiA1MDtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtaW4td2lkdGg6IDEzcmVtO1xuXHRtYXgtd2lkdGg6IDIycmVtO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0bWF4LWhlaWdodDogNzB2aDtcblx0b3ZlcmZsb3cteTogYXV0bztcbn1cblxuLnNlY3Rpb24tbmF2LWl0ZW0uaXMtb3BlbiA+IC5zZWN0aW9uLW5hdi1tZW51IHtcblx0ZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIGRlc2t0b3Agc3RyaXA6IGFsc28gcmV2ZWFsIGEgdGFiJ3MgcGFnZXMgb24gaG92ZXIgLyBrZXlib2FyZCBmb2N1cywgc28gdGhlXG4gICB0YWIncyBvd24gY2xpY2sgc3RheXMgZnJlZSB0byBuYXZpZ2F0ZSB0byBpdHMgaG9tZSBwYWdlICh0aGUgY2FyZXQgY2xpY2tcbiAgIHJlbWFpbnMgdGhlIHRvdWNoIGZhbGxiYWNrKS4gU2NvcGVkIHRvIHRoZSBzdHJpcCDigJQgdGhlIGNvbGxhcHNlZCBwaWxsIGFuZCB0aGVcbiAgIE1vcmUgbWVudSBrZWVwIHRoZWlyIGNsaWNrIGFjY29yZGlvbi4gKi9cbi5zZWN0aW9uLW5hdjpub3QoLmlzLWNvbGxhcHNlZCkgLnNlY3Rpb24tbmF2LWxpbmtzID4gLnNlY3Rpb24tbmF2LWl0ZW06Zm9jdXMtd2l0aGluID4gLnNlY3Rpb24tbmF2LW1lbnUge1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuQG1lZGlhIChob3ZlcjogaG92ZXIpIHtcblx0LnNlY3Rpb24tbmF2Om5vdCguaXMtY29sbGFwc2VkKSAuc2VjdGlvbi1uYXYtbGlua3MgPiAuc2VjdGlvbi1uYXYtaXRlbTpob3ZlciA+IC5zZWN0aW9uLW5hdi1tZW51IHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxufVxuLnNlY3Rpb24tbmF2LW1lbnUgbGkge1xuXHRtYXJnaW46IDA7XG5cdGZsZXg6IG5vbmU7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTEwMCk7XG59XG5cbi5zZWN0aW9uLW5hdi1tZW51IGxpOmxhc3QtY2hpbGQge1xuXHRib3JkZXItYm90dG9tOiAwO1xufVxuXG4uc2VjdGlvbi1uYXYtbWVudSBhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0Ym9yZGVyLWJvdHRvbTogMDtcbn1cblxuLnNlY3Rpb24tbmF2LW1lbnUgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xufVxuXG4uc2VjdGlvbi1uYXYtbWVudSBhLmlzLWN1cnJlbnQge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGJveC1zaGFkb3c6IGluc2V0IDNweCAwIDAgdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIG5lc3RlZCAoYWNjb3JkaW9uKSBmb3JtIOKAlCBpbiB0aGUgY29sbGFwc2VkIHBpbGwgYW5kIGluc2lkZSB0aGUgTW9yZSBtZW51IHRoZVxuICAgcGFnZXMgbWVudSBkcm9wcyBpbmxpbmUgYmVsb3cgaXRzIHRhYiBpbnN0ZWFkIG9mIGZsb2F0aW5nLiAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtaXRlbSxcbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUgLnNlY3Rpb24tbmF2LWl0ZW0ge1xuXHRmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi8qIGxpbmsgdGFrZXMgdGhlIHJvdyAobWluLXdpZHRoOjAgc28gaXQgY2FuIHNocmluayksIGNhcmV0IHNpdHMgaW5saW5lIGJlc2lkZSBpdFxuICAgKG5vdCBzdHJldGNoZWQg4oCUIHN0cmV0Y2ggd2FzIGRyb3BwaW5nIGl0IG9udG8gaXRzIG93biBsaW5lKSwgbWVudSB3cmFwcyBiZWxvdyAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtaXRlbSA+IGEsXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IC5zZWN0aW9uLW5hdi1pdGVtID4gYSB7XG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtaXRlbSA+IC5zZWN0aW9uLW5hdi1zdWItdG9nZ2xlLFxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSAuc2VjdGlvbi1uYXYtaXRlbSA+IC5zZWN0aW9uLW5hdi1zdWItdG9nZ2xlIHtcblx0ZmxleDogbm9uZTtcblx0YWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1tZW51LFxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSAuc2VjdGlvbi1uYXYtbWVudSB7XG5cdHBvc2l0aW9uOiBzdGF0aWM7XG5cdGZsZXg6IDAgMCAxMDAlO1xuXHRtaW4td2lkdGg6IDA7XG5cdG1heC13aWR0aDogbm9uZTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItcmFkaXVzOiAwO1xuXHRib3gtc2hhZG93OiBub25lO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0bWFyZ2luOiAwO1xuXHRtYXgtaGVpZ2h0OiBub25lO1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1tZW51IGEsXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IC5zZWN0aW9uLW5hdi1tZW51IGEge1xuXHRwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4vKiDilIDilIDilIAgQ01TIGVkaXQgc2hvcnRjdXQgKHNoZWxsLndyYXApIOKUgOKUgOKUgFxuICAgUmVuZGVyZWQgb25seSBmb3IgYSBzaWduZWQtaW4gdXNlciB3aXRoIG1vZGlmeSBwZXJtaXNzaW9uIG9uIHRoZSBwYWdlLiBBIHNtYWxsXG4gICB0cmFuc2x1Y2VudCBnb2xkIHBpbGwgcGlubmVkIHRvIHRoZSB0b3AtY2VudHJlIHRoYXQgYnJpZ2h0ZW5zIG9uIGhvdmVyIGFuZFxuICAgbGlua3MgdG8gdGhlIENNUyBlZGl0b3IuIGBtYXJnaW4tYm90dG9tOiAtMWxoYCBjYW5jZWxzIGl0cyBvd24gaGVpZ2h0IHNvIGl0XG4gICBmbG9hdHMgb3ZlciB0aGUgaGVhZGVyIGluc3RlYWQgb2YgcHVzaGluZyBjb250ZW50IGRvd24uIEFkbWluIGFmZm9yZGFuY2Ug4oCUXG4gICBuZXZlciBzaG93biB0byBub3JtYWwgdmlzaXRvcnMuICovXG4uY21zLWVkaXQtYmFyIHtcblx0cG9zaXRpb246IHN0aWNreTtcblx0dG9wOiAwO1xuXHR6LWluZGV4OiAxMDAwO1xuXHRkaXNwbGF5OiBibG9jaztcblx0d2lkdGg6IG1heC1jb250ZW50O1xuXHRtYXgtd2lkdGg6IDEwMCU7XG5cdG1hcmdpbjogMCBhdXRvIC0xbGggdmFyKC0tZ3V0dGVyKTsgLyogbGVmdC1hbGlnbmVkIChyaWdodCBtYXJnaW4gYXV0bykgKi9cblx0cGFkZGluZzogMCB2YXIoLS1zcGFjZS00KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsaW5lLWhlaWdodDogMjtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tcmFkaXVzLW1kKSB2YXIoLS1yYWRpdXMtbWQpO1xuXHRib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG5cdG9wYWNpdHk6IDAuNTtcblx0dHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi8qIGBhLmAgcHJlZml4IGJlYXRzIGJhc2UuY3NzIGBhOm5vdCguYnRuKTpob3ZlcmAgc28gdGhlIGxhYmVsIHN0YXlzIG5hdnkgKHJlYWRhYmxlXG4gICBvbiB0aGUgZ29sZCksIG5vdCBnb2xkLW9uLWdvbGQgKi9cbmEuY21zLWVkaXQtYmFyOmhvdmVyLFxuYS5jbXMtZWRpdC1iYXI6Zm9jdXMtdmlzaWJsZSB7XG5cdG9wYWNpdHk6IDE7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGhlYWRlci5jc3MgIMK3ICBzaXRlIGhlYWRlciDigJQgdXRpbGl0eSBiYXIgKyBmdWxsLXdpZHRoIG1lZ2EtbWVudVxuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzcyDCtyBidXR0b25zL2Zvcm1zIGNvbWUgZnJvbSB0aGVpciBvd24gcGFydGlhbHMuXG4gICBCZWhhdmlvdXIgOiBqcy9oZWFkZXIuanMgKHNlbGYtaW5pdHMgb24gW2RhdGEtaGVhZGVyXSkuXG4gICBNYXJrdXAgICAgOiB0ZW1wbGF0ZXMvY2hyb21lL2hlYWRlci50dC5cblxuICAgUmVzcG9uc2l2ZSBzdGFnZXM6XG4gICAgIOKJpTk4MCAgYWxsIHNpeCBzZWN0aW9uIGxpbmtzIGluIHRoZSBiYXJcbiAgICAg4omkOTgwICBSZXNlYXJjaCArIEFib3V0IGZvbGQgaW50byB0aGUgXCJNZW51XCIgcGFuZWwgKG92ZXJmbG93IG9ubHkpXG4gICAgIOKJpDc2OCAgY29yZSBzZWN0aW9ucyBmb2xkIGluIHRvbzsgTWVudSBpcyB0aGUgd2hvbGUgbmF2IChjb2x1bW5zXG4gICAgICAgICAgIHN0YWNrOyBzZWN0aW9uIHRpdGxlcyBiZWNvbWUgY29sbGFwc2libGUpXG4gICAgIOKJpDYwMCAgdXRpbGl0eSBiYXIgaGlkZXM7IEdpdmUvQXBwbHkgcmlkZSBpbiB0aGUgYmFyIGJlc2lkZSBNZW51XG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIGhlYWRlci1zY29wZWQgcmVzZXRzLiA6d2hlcmUoKSBob2xkcyBzcGVjaWZpY2l0eSBhdCAwLTAtMSAobGlrZSBhIGJhcmVcbiAgIGVsZW1lbnQgc2VsZWN0b3IpIHNvIGNvbXBvbmVudCBydWxlcyBzdWNoIGFzIC5uYXYtbGluayDigJQgd2hpY2ggc2V0IHRoZWlyIG93blxuICAgY29sb3IvYmFja2dyb3VuZCDigJQgYWx3YXlzIHdpbiBvdmVyIHRoZXNlIGluc3RlYWQgb2YgYmVpbmcgb3ZlcnJpZGRlbi4gKi9cbjp3aGVyZSguYXUtaGVhZGVyKSBhIHtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRjb2xvcjogaW5oZXJpdDtcbn1cblxuOndoZXJlKC5hdS1oZWFkZXIpIGJ1dHRvbiB7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGJvcmRlcjogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogaW5oZXJpdDtcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XG5cdGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuXG4vKiBiYXNlLmNzcyBzdHlsZXMgYmFyZSBsaXN0cyBnbG9iYWxseSAoYGxpICsgbGlgIHRvcC1tYXJnaW4sIGB1bGAgcGFkZGluZy1sZWZ0KTtcbiAgIHRoZSBoZWFkZXIncyBsaXN0cyB1c2UgZmxleCArIGdhcCwgc28gbmV1dHJhbGl6ZSB0aGF0IGhlcmUuICovXG4uYXUtaGVhZGVyIHVsIHtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xufVxuXG4uYXUtaGVhZGVyIGxpICsgbGkge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4vKiB0aGUgd2hvbGUgaGVhZGVyIHN0aWNrcyDigJQgc3RpY2t5IG9uIGAubWFpbi1uYXZgIGFsb25lIGNhbid0IHdvcmsgYmVjYXVzZSBpdHNcbiAgIHBhcmVudCBgLmF1LWhlYWRlcmAgaXMgb25seSBoZWFkZXItdGFsbCwgc28gaXQgaGFzIG5vIHJvb20gdG8gc3RpY2sgd2l0aGluICovXG4uYXUtaGVhZGVyIHtcblx0cG9zaXRpb246IHN0aWNreTtcblx0dG9wOiAwO1xuXHR6LWluZGV4OiAxMDA7XG59XG5cbi8qIOKUgOKUgOKUgCBVVElMSVRZIEJBUiAoYXVkaWVuY2UgKyBnaXZlL2FwcGx5ICsgc2VhcmNoKSDilIDilIDilIAgKi9cbi51dGlsLW5hdiB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ei1pbmRleDogMTAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTtcbn1cblxuLyogY29udGVudCBjb250YWluZXI6IG1heC13aWR0aCB3aXRoIGEgZ3V0dGVyIGZsb29yLCBpbiBPTkUgcHJvcGVydHkgc28gdGhlIGJhclxuICAgaXRzZWxmIHN0YXlzIHBhZGRpbmctZnJlZSAodGhlIG1lZ2EgZHJvcGRvd24gaXMgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGluc2lkZVxuICAgLm1haW4tbmF2IGFuZCBtdXN0IHN0YXkgZnVsbC1ibGVlZCkuIFB1dHMgaGVhZGVyIGNvbnRlbnQgb24gdGhlIHNhbWUgbGVmdFxuICAgZWRnZSBhcyAuc2VjdGlvbiBjb250ZW50IOKAlCBzZWUgY3NzL2Nocm9tZS5jc3MgLnNlY3Rpb24tbmF2LiAqL1xuLnV0aWwtaW5uZXIge1xuXHR3aWR0aDogbWluKDEwMCUgLSAyICogdmFyKC0tZ3V0dGVyKSwgdmFyKC0tbWF4LXdpZHRoKSk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMSk7XG59XG5cbi51dGlsLWlubmVyIGEge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU1KTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjNweDtcblx0dHJhbnNpdGlvbjogY29sb3IgMC4xNXM7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi51dGlsLWlubmVyIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4udXRpbC1pbm5lciAudXRpbC1hY2NlbnQge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59IC8qIEdpdmUsIFZpc2l0ICovXG4udXRpbC1pbm5lciAudXRpbC1hY2NlbnQ6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi51dGlsLWlubmVyIC51dGlsLWN0YSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRmb250LXdlaWdodDogNzAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xKSB2YXIoLS1zcGFjZS00KTtcblx0bWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNlLTEpO1xuXHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn0gLyogQXBwbHkg4oCUIHByaW1hcnkgKi9cbi51dGlsLWlubmVyIC51dGlsLWN0YTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLyog4pSA4pSA4pSAIE1BSU4gQkFSIChsb2dvICsgc2VjdGlvbiBuYXYpIOKUgOKUgOKUgCAqL1xuLm1haW4tbmF2IHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR6LWluZGV4OiAxMDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRib3gtc2hhZG93OiAwIDJweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG59XG5cbi5tYWluLWlubmVyIHtcblx0d2lkdGg6IG1pbigxMDAlIC0gMiAqIHZhcigtLWd1dHRlciksIHZhcigtLW1heC13aWR0aCkpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4ubmF2LWxvZ28ge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS0zKTtcblx0bWFyZ2luLXJpZ2h0OiBhdXRvO1xuXHRmbGV4LXNocmluazogMDtcblx0LXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcblx0dXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5uYXYtbG9nbyBpbWcge1xuXHRkaXNwbGF5OiBibG9jaztcblx0aGVpZ2h0OiA0MHB4O1xuXHR3aWR0aDogYXV0bztcblx0LXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7XG59IC8qIFNhZmFyaTogZG9uJ3QgbGV0IHRoZSBsb2dvIGltYWdlIGJlIHNlbGVjdGVkL2RyYWdnZWQgKi9cbi5tYWluLWxpbmtzIHtcblx0ZGlzcGxheTogZmxleDtcblx0bGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLm5hdi1pdGVtIHtcblx0cG9zaXRpb246IHN0YXRpYztcbn1cblxuLm5hdi1saW5rIHtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogNnB4O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtNCk7XG5cdGJvcmRlci1ib3R0b206IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0dHJhbnNpdGlvbjogYWxsIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4ubmF2LWxpbms6aG92ZXIsIC5uYXYtbGlua1thcmlhLWV4cGFuZGVkPXRydWVdIHtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG59XG5cbi5uYXYtbGluayAuY2FyZXQge1xuXHR3aWR0aDogOHB4O1xuXHRoZWlnaHQ6IDhweDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHR0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG5cdG1hcmdpbi10b3A6IC0zcHg7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLm5hdi1saW5rW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLmNhcmV0IHtcblx0dHJhbnNmb3JtOiByb3RhdGUoLTEzNWRlZyk7XG5cdG1hcmdpbi10b3A6IDJweDtcbn1cblxuLyog4pSA4pSA4pSAIEZVTEwtV0lEVEggTUVHQSBQQU5FTCDilIDilIDilIAgKi9cbi5tZWdhIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRsZWZ0OiAwO1xuXHRyaWdodDogMDtcblx0dG9wOiAxMDAlO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcblx0b3BhY2l0eTogMDtcblx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLThweCk7XG5cdHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCB2aXNpYmlsaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpO1xuXHR6LWluZGV4OiA5MDtcbn1cblxuLm1lZ2Eub3BlbiB7XG5cdG9wYWNpdHk6IDE7XG5cdHZpc2liaWxpdHk6IHZpc2libGU7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLm1lZ2EtaW5uZXIge1xuXHR3aWR0aDogbWluKDEwMCUgLSAyICogdmFyKC0tZ3V0dGVyKSwgdmFyKC0tbWF4LXdpZHRoKSk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0cGFkZGluZy1ibG9jazogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi5tZWdhLWNvbCB7XG5cdGZsZXg6IDEgMSAxOTBweDtcblx0bWluLXdpZHRoOiAxNzBweDtcbn1cblxuLm1lZ2EtY29sIGg0IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAxLjVweDtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTIpO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4ubWVnYS1jb2wgaDQgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLm1lZ2EtY29sIHVsIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLm1lZ2EtY29sIGEge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdHRyYW5zaXRpb246IGNvbG9yIDAuMTVzO1xufVxuXG4ubWVnYS1jb2wgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLm1lZ2EtY3RhIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG4ubWVnYS1jdGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5tZWdhLWZlYXR1cmUge1xuXHRmbGV4OiAxIDEgMjYwcHg7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWF1LW5hdnkpLCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRhbGlnbi1zZWxmOiBzdHJldGNoO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuXG4ubWVnYS1mZWF0dXJlIC5mayB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAycHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5tZWdhLWZlYXR1cmUgaDMge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG5cdGxpbmUtaGVpZ2h0OiAxLjI1O1xufVxuXG4ubWVnYS1mZWF0dXJlIGEge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG59XG5cbi8qIHNjcmltIGJlaGluZCBhbiBvcGVuIHBhbmVsICovXG4ubmF2LXNjcmltIHtcblx0cG9zaXRpb246IGZpeGVkO1xuXHRpbnNldDogMDtcblx0YmFja2dyb3VuZDogcmdiYSgwLCAyNiwgNTEsIDAuNDUpO1xuXHRvcGFjaXR5OiAwO1xuXHR2aXNpYmlsaXR5OiBoaWRkZW47XG5cdHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSksIHZpc2liaWxpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG5cdHotaW5kZXg6IDgwO1xufVxuXG5ib2R5Lm1lZ2Etb3BlbiAubmF2LXNjcmltIHtcblx0b3BhY2l0eTogMTtcblx0dmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuLyogZm9jdXMgdGhlIG9wZW4gbWVudTogcmVjZWRlIHRoZSBvdGhlciBiYXIgaXRlbXMsIGtlZXAgdGhlIGFjdGl2ZSBvbmUgbGl0ICovXG5ib2R5Lm1lZ2Etb3BlbiAubmF2LWxpbmsge1xuXHRvcGFjaXR5OiAwLjQ1O1xufVxuXG5ib2R5Lm1lZ2Etb3BlbiAubmF2LWxpbmtbYXJpYS1leHBhbmRlZD10cnVlXSB7XG5cdG9wYWNpdHk6IDE7XG59XG5cbi8qIOKUgOKUgOKUgCBTRUFSQ0ggKGljb24gaW4gdGhlIGJhciDihpIgZnVsbC13aWR0aCBwYW5lbCkg4pSA4pSA4pSAICovXG4uc2VhcmNoLWl0ZW0ge1xuXHRkaXNwbGF5OiBmbGV4O1xufSAvKiBzdHJldGNoIHRoZSBidXR0b24gdG8gZnVsbCBiYXIgaGVpZ2h0IHNvIHRoZSBpY29uIGNlbnRlcnMgKi9cbi5uYXYtc2VhcmNoLWJ0biB7XG5cdHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLm5hdi1zZWFyY2gtYnRuIHN2ZyB7XG5cdHdpZHRoOiAxOHB4O1xuXHRoZWlnaHQ6IDE4cHg7XG59XG5cbi5tZWdhLXNlYXJjaC1pbm5lciB7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuXHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLnNpdGUtc2VhcmNoIHtcblx0d2lkdGg6IDEwMCU7XG5cdG1heC13aWR0aDogNzYwcHg7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG59XG5cbi5zZWFyY2gtbGFiZWwge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5zZWFyY2gtZmllbGQge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xKSB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0xKSB2YXIoLS1zcGFjZS01KTtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5zZWFyY2gtZmllbGQ6Zm9jdXMtd2l0aGluIHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnNlYXJjaC1maWVsZCA+IHN2ZyB7XG5cdHdpZHRoOiAyMnB4O1xuXHRoZWlnaHQ6IDIycHg7XG5cdGNvbG9yOiB2YXIoLS1hdS1ncmF5LTQwMCk7XG5cdGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uc2VhcmNoLWZpZWxkIGlucHV0IHtcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IDA7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgMDtcbn1cblxuLnNlYXJjaC1nbyB7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS02KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0dHJhbnNpdGlvbjogYWxsIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLnNlYXJjaC1nbzpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuLnNlYXJjaC1oaW50IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1ncmF5LTQwMCk7XG59XG5cbi5zZWFyY2gtaGludCBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4uc2VhcmNoLWhpbnQgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyog4pSA4pSA4pSAIFwiTUVOVVwiIFRSSUdHRVIgKG92ZXJmbG93KSArIGNvbXBhY3QgR2l2ZS9BcHBseSDilIDilIDilIAgKi9cbi5tZW51LWl0ZW0ge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4ubmF2LW1lbnUtYnRuIHtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLm5hdi1tZW51LWJ0biAuaGFtIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGdhcDogNHB4O1xuXHR3aWR0aDogMjBweDtcblx0aGVpZ2h0OiAxLjZlbTtcbn1cblxuLm5hdi1tZW51LWJ0biAuaGFtIHNwYW4ge1xuXHRoZWlnaHQ6IDJweDtcblx0YmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuXHRib3JkZXItcmFkaXVzOiAycHg7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCksIG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5uYXYtbWVudS1idG5bYXJpYS1leHBhbmRlZD10cnVlXSAuaGFtIHNwYW46bnRoLWNoaWxkKDEpIHtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDZweCkgcm90YXRlKDQ1ZGVnKTtcbn1cblxuLm5hdi1tZW51LWJ0blthcmlhLWV4cGFuZGVkPXRydWVdIC5oYW0gc3BhbjpudGgtY2hpbGQoMikge1xuXHRvcGFjaXR5OiAwO1xufVxuXG4ubmF2LW1lbnUtYnRuW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLmhhbSBzcGFuOm50aC1jaGlsZCgzKSB7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNnB4KSByb3RhdGUoLTQ1ZGVnKTtcbn1cblxuLm1lZ2EtY29sLWluZm8ge1xuXHRtYXJnaW4tbGVmdDogYXV0bztcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLm1lZ2EtY29sLWluZm8gaDQge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5tZW51LWFjdGlvbnMge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLm1lbnUtYWN0aW9ucyAubmMtYnRuIHtcblx0ZmxleDogMTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKTtcblx0Ym9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdHRyYW5zaXRpb246IGFsbCB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5tZW51LWFjdGlvbnMgLm5jLWdpdmUsIC5tZW51LWFjdGlvbnMgLm5jLXZpc2l0IHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLm1lbnUtYWN0aW9ucyAubmMtZ2l2ZTpob3ZlciwgLm1lbnUtYWN0aW9ucyAubmMtdmlzaXQ6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQpO1xufVxuXG4ubWVudS1hY3Rpb25zIC5uYy1hcHBseSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4ubWVudS1hY3Rpb25zIC5uYy1hcHBseTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG5cdGJveC1zaGFkb3c6IDAgNnB4IDIwcHggcmdiYSgxOTgsIDE0OSwgNDMsIDAuMyk7XG59XG5cbi8qIE1lbnUgcGFuZWwgPSBvdmVyZmxvdyBvbmx5OiBoaWRlIGNvbHVtbnMgZm9yIHNlY3Rpb25zIHN0aWxsIGluIHRoZSBiYXIgKi9cbiNtZWdhLW1lbnUgLm1jb2wtY29yZSwgI21lZ2EtbWVudSAubWNvbC1pbmZvIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLm5hdi1jb21wYWN0IHtcblx0ZGlzcGxheTogbm9uZTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLm5hdi1jb21wYWN0IC5uYy1idG4ge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS00KTtcblx0Ym9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdHRyYW5zaXRpb246IGFsbCB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5uYXYtY29tcGFjdCAubmMtZ2l2ZSwgLm5hdi1jb21wYWN0IC5uYy12aXNpdCB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Ym9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzUpO1xufVxuXG4ubmF2LWNvbXBhY3QgLm5jLWdpdmU6aG92ZXIsIC5uYXYtY29tcGFjdCAubmMtdmlzaXQ6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLm5hdi1jb21wYWN0IC5uYy1hcHBseSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4ubmF2LWNvbXBhY3QgLm5jLWFwcGx5OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcblx0Ym94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDE5OCwgMTQ5LCA0MywgMC4zKTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEyMDBweCkge1xuXHQubmF2LWxpbmsge1xuXHRcdHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQubWFpbi1pbm5lciB7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS01KTtcblx0fVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDk4MHB4KSB7XG5cdC51dGlsLWlubmVyIGEge1xuXHRcdHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjZS0yKTtcblx0fVxuXHQubmF2LWxpbmsge1xuXHRcdHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjZS0yKTtcblx0fVxuXHQubmF2LWl0ZW0uc2Vjb25kYXJ5IHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cdC5tZW51LWl0ZW0ge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcblx0Lm5hdi1pdGVtOm5vdCgubWVudS1pdGVtKTpub3QoLnNlYXJjaC1pdGVtKSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXHQubWVnYSB7XG5cdFx0bWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDEzMHB4KTtcblx0XHRvdmVyZmxvdzogYXV0bztcblx0fVxuXHQuc2VhcmNoLWxhYmVsIHtcblx0XHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHR9XG5cdC5tZWdhLWlubmVyIHtcblx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdH1cblx0Lm1lZ2EtY29sIHtcblx0XHRmbGV4OiBub25lO1xuXHR9XG5cdC5tZWdhLWNvbC1pbmZvIHtcblx0XHRtYXJnaW4tbGVmdDogMDtcblx0fVxuXHQubWVnYS1mZWF0dXJlIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cdCNtZWdhLW1lbnUgLm1jb2wtY29yZSB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblx0LyogY29sbGFwc2libGUgc2VjdGlvbiB0aXRsZXMgaW4gdGhlIG1vYmlsZSBNZW51ICovXG5cdCNtZWdhLW1lbnUgLm1lZ2EtY29sOm5vdCgubWNvbC1pbmZvKSB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0XHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG5cdH1cblx0I21lZ2EtbWVudSAubWVnYS1jb2w6bm90KC5tY29sLWluZm8pID4gaDQge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRwYWRkaW5nLWJvdHRvbTogMDtcblx0fVxuXHQjbWVnYS1tZW51IC5tZWdhLWNvbDpub3QoLm1jb2wtaW5mbykgPiBoNCBhIHtcblx0XHRwb2ludGVyLWV2ZW50czogbm9uZTtcblx0XHRjb2xvcjogaW5oZXJpdDtcblx0fVxuXHQjbWVnYS1tZW51IC5tZWdhLWNvbDpub3QoLm1jb2wtaW5mbykgPiBoNDo6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6IFwiXCI7XG5cdFx0d2lkdGg6IDhweDtcblx0XHRoZWlnaHQ6IDhweDtcblx0XHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcblx0XHR0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG5cdFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xuXHR9XG5cdCNtZWdhLW1lbnUgLm1lZ2EtY29sOm5vdCgubWNvbC1pbmZvKS5vcGVuID4gaDQ6OmFmdGVyIHtcblx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcblx0fVxuXHQjbWVnYS1tZW51IC5tZWdhLWNvbDpub3QoLm1jb2wtaW5mbykgPiB1bCB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0XHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtMyk7XG5cdH1cblx0I21lZ2EtbWVudSAubWVnYS1jb2w6bm90KC5tY29sLWluZm8pLm9wZW4gPiB1bCB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuXHQudXRpbC1uYXYge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblx0Lm5hdi1jb21wYWN0IHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHR9XG5cdCNtZWdhLW1lbnUgLm1jb2wtaW5mbyB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblx0LyogcmVjbGFpbSByb29tOiB0aWdodGVyIHNpZGUgcGFkZGluZyArIGdhcHMgb24gdGhlIGNvbXBhY3QgYmFyICovXG5cdC5tYWluLWlubmVyIHtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRcdHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjZS00KTtcblx0fVxuXHQubmF2LXNlYXJjaC1idG4ge1xuXHRcdHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQubmF2LWxvZ28gaW1nIHtcblx0XHRoZWlnaHQ6IDM0cHg7XG5cdH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuXHQvKiB0aHJlZSBDVEFzIHdvbid0IGZpdCB3aXRoIHRoZSBsb2dvICsgc2VhcmNoICsgTWVudSDigJQgc2hlZCBmcm9tIHRoZSBsZWZ0ICovXG5cdC5uYXYtY29tcGFjdCAubmMtZ2l2ZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDQwMHB4KSB7XG5cdC8qIG9ubHkgQXBwbHkgcmVtYWlucyBvbiB0aGUgYmFyOyBHaXZlL1Zpc2l0IHN0YXkgaW4gdGhlIE1lbnUgcGFuZWwgKi9cblx0Lm5hdi1jb21wYWN0IC5uYy12aXNpdCB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXHQubWFpbi1pbm5lciB7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0fVxufVxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBhdS1idXR0b25zLmNzcyAgwrcgIEJ1dHRvbiAmIENUQSBzdHlsZXNcbiAgIERlcGVuZHMgb246IGF1LXRva2Vucy5jc3NcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLmJ0biB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGxldHRlci1zcGFjaW5nOiAxLjVweDtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7IC8qIGEgbGFiZWwgdGhhdCB3cmFwcyBzdGF5cyBjZW50cmVkIGluIHRoZSBidXR0b24gKi9cblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHRyYW5zaXRpb246IGFsbCB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5idG46aG92ZXIge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG59XG5cbi5idG46YWN0aXZlIHtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuXG4vKiBQcmltYXJ5IOKAlCBHb2xkICovXG4uYnRuLXByaW1hcnkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIGxpZ2h0ZW4gdGhlIGdvbGQgb24gaG92ZXIgd2hpbGUgS0VFUElORyB0aGUgbmF2eSBsYWJlbCDigJQgbmF2eSBvbiB0aGUgbGlnaHRlclxuICAgZ29sZCByZWFkcyB3aXRoIG1vcmUgY29udHJhc3QsIG5vdCBsZXNzICh0aGUgb2xkIHdhc2gtb3V0IHdhcyB0aGUgZ29sZCB0ZXh0LFxuICAgbm93IGZpeGVkIHZpYSBhOm5vdCguYnRuKTpob3ZlciBpbiBiYXNlLmNzcykuICovXG4uYnRuLXByaW1hcnk6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSgxOTgsIDE0OSwgNDMsIDAuMzUpO1xufVxuXG4vKiBTZWNvbmRhcnkg4oCUIE5hdnkgKi9cbi5idG4tc2Vjb25kYXJ5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5idG4tc2Vjb25kYXJ5OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Ym94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsIDUxLCAxMDIsIDAuMyk7XG59XG5cbi8qIE91dGxpbmUgKi9cbi5idG4tb3V0bGluZSB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5idG4tb3V0bGluZTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4vKiBvbiB0aGUgZGFyayBiYW5kcyBhbiBvdXRsaW5lIGJ1dHRvbiB0dXJucyB3aGl0ZSAobmF2eS1vbi1uYXZ5IG90aGVyd2lzZSkgKi9cbjppcyguc2VjdGlvbi0tbmF2eSwgLnNlY3Rpb24tLW5hdnktbWlkLCAuc2VjdGlvbi0tbmF2eS1icmlnaHQsIC5zZWN0aW9uLS1uaWxlLWJsdWUsXG4uc2VjdGlvbi0tY2hhdGhhbXMtYmx1ZSwgLnNlY3Rpb24tLWZpb3JkLWJsdWUsIC5zZWN0aW9uLS1maW9yZC1ibHVlLXRleHR1cmVkKSAuYnRuLW91dGxpbmUge1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbn1cblxuOmlzKC5zZWN0aW9uLS1uYXZ5LCAuc2VjdGlvbi0tbmF2eS1taWQsIC5zZWN0aW9uLS1uYXZ5LWJyaWdodCwgLnNlY3Rpb24tLW5pbGUtYmx1ZSxcbi5zZWN0aW9uLS1jaGF0aGFtcy1ibHVlLCAuc2VjdGlvbi0tZmlvcmQtYmx1ZSwgLnNlY3Rpb24tLWZpb3JkLWJsdWUtdGV4dHVyZWQpIC5idG4tb3V0bGluZTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLyogYnV0dG9ucyBvbiBhIHBob3RvIGJhbmQncyBwYW5lbDogLmNvdmVyLXBhbmVsIGEgY29sb3JzIGV2ZXJ5IGxpbmsgbGlnaHQgZ29sZFxuICAgYW5kIHVuZGVybGluZXMgaXQgb24gaG92ZXIsIHdoaWNoIHdvdWxkIHdhc2ggb3V0IGEgYnV0dG9uJ3MgbGFiZWwgKi9cbi5jb3Zlci1wYW5lbCAuYnRuLFxuLmNvdmVyLXBhbmVsIC5idG46aG92ZXIge1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5jb3Zlci1wYW5lbCAuYnRuLXByaW1hcnksXG4uY292ZXItcGFuZWwgLmJ0bi1wcmltYXJ5OmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi5jb3Zlci1wYW5lbCAuYnRuLW91dGxpbmUge1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbn1cblxuLmNvdmVyLXBhbmVsIC5idG4tb3V0bGluZTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLyogR2hvc3QgKi9cbi5idG4tZ2hvc3Qge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uYnRuLWdob3N0OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcbn1cblxuLyogU2l6ZXMgKi9cbi5idG4tc20ge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS00KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcbn1cblxuLmJ0bi1sZyB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTgpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG59XG5cbi8qIEJ1dHRvbiByb3cg4oCUIGEgZ3JvdXAgb2YgQ1RBcyBpbiBhdXRob3JlZCBjb250ZW50OiA8cCBjbGFzcz1cImJ0bi1yb3dcIj4uXG4gICBFdmVuIGdhcHM7IGVhY2ggYnV0dG9uIGdyb3dzIHRvIHNoYXJlIGl0cyBsaW5lLCBzbyBhIG5hcnJvdyBjb2x1bW4gc3RhY2tzXG4gICB0aGVtIGZ1bGwtd2lkdGggYW5kIGEgd2lkZSBvbmUgbGluZXMgdGhlbSB1cC4gKi9cbi5idG4tcm93IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uYnRuLXJvdyA+IC5idG4ge1xuXHRmbGV4OiAxIDEgYXV0bztcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBhdS1mb3Jtcy5jc3MgIMK3ICBGb3JtIGNvbnRyb2xzXG4gICBEZXBlbmRzIG9uOiBhdS10b2tlbnMuY3NzXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIExhYmVscyAqL1xuLmxhYmVsIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7XG59XG5cbi5sYWJlbC1yZXF1aXJlZDo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIiAqXCI7XG5cdGNvbG9yOiB2YXIoLS1hdS1lcnJvcik7XG59XG5cbi5oZWxwZXIge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0xKTtcbn1cblxuLmVycm9yLW1zZyB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGNvbG9yOiB2YXIoLS1hdS1lcnJvcik7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHRmb250LXdlaWdodDogNTAwO1xufVxuXG4vKiBUZXh0IElucHV0ICovXG4uaW5wdXQge1xuXHR3aWR0aDogMTAwJTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdG91dGxpbmU6IG5vbmU7XG5cdHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLmlucHV0OjpwbGFjZWhvbGRlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1ncmF5LTQwMCk7XG59XG5cbi5pbnB1dDpmb2N1cyB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5pbnB1dC1lcnJvciB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZXJyb3IpICFpbXBvcnRhbnQ7XG59XG5cbi8qIERhcmsgdmFyaWFudCAqL1xuLmlucHV0LWRhcmsge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpO1xuXHRib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5pbnB1dC1kYXJrOmZvY3VzIHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyogU2VsZWN0ICovXG4uc2VsZWN0IHtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTgpIHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRvdXRsaW5lOiBub25lO1xuXHRhcHBlYXJhbmNlOiBub25lO1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsLi4uY2hldnJvbi4uLlwiKTtcblx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgMTZweCBjZW50ZXI7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnNlbGVjdDpmb2N1cyB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIFRleHRhcmVhICovXG4udGV4dGFyZWEge1xuXHR3aWR0aDogMTAwJTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0cmVzaXplOiB2ZXJ0aWNhbDtcblx0bWluLWhlaWdodDogMTAwcHg7XG59XG5cbi50ZXh0YXJlYTpmb2N1cyB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIENoZWNrYm94ICYgUmFkaW8gKi9cbi5jaGVjay1ncm91cCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5jaGVjay1sYWJlbCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xufVxuXG4uY2hlY2tib3gsIC5yYWRpbyB7XG5cdHdpZHRoOiAyMHB4O1xuXHRoZWlnaHQ6IDIwcHg7XG5cdGFjY2VudC1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5yYWRpbyB7XG5cdGFjY2VudC1jb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi8qIFRvZ2dsZSBTd2l0Y2ggKi9cbi50b2dnbGUge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHdpZHRoOiA0OHB4O1xuXHRoZWlnaHQ6IDI2cHg7XG59XG5cbi50b2dnbGUgaW5wdXQge1xuXHRvcGFjaXR5OiAwO1xuXHR3aWR0aDogMDtcblx0aGVpZ2h0OiAwO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG59XG5cbi50b2dnbGUtdHJhY2sge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTMwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLnRvZ2dsZS10cmFjazo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHdpZHRoOiAyMHB4O1xuXHRoZWlnaHQ6IDIwcHg7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHR0b3A6IDNweDtcblx0bGVmdDogM3B4O1xuXHRib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLnRvZ2dsZSBpbnB1dDpjaGVja2VkICsgLnRvZ2dsZS10cmFjayB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4udG9nZ2xlIGlucHV0OmNoZWNrZWQgKyAudG9nZ2xlLXRyYWNrOjphZnRlciB7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyMnB4KTtcbn1cblxuLyogUmFuZ2UgU2xpZGVyICovXG4ucmFuZ2Uge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiA2cHg7XG5cdGFwcGVhcmFuY2U6IG5vbmU7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xufVxuXG4ucmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0d2lkdGg6IDIycHg7XG5cdGhlaWdodDogMjJweDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0Ym9yZGVyOiAzcHggc29saWQgdmFyKC0tYXUtd2hpdGUpO1xuXHRib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4vKiBGaWxlIFVwbG9hZCAqL1xuLmZpbGUtdXBsb2FkIHtcblx0Ym9yZGVyOiAycHggZGFzaGVkIHZhcigtLWF1LWdyYXktMzAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtNSk7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5maWxlLXVwbG9hZDpob3ZlciB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG59XG5cbi8qIExheW91dCBoZWxwZXJzICovXG4uZm9ybS1ncm91cCB7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uZm9ybS1yb3cge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuXHQuZm9ybS1yb3cge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHR9XG59XG4vKiBtdWx0aS1jb2x1bW4gY2hlY2tib3gvcmFkaW8gbGlzdCBmb3IgbG9uZyBvcHRpb24gc2V0cyAoZS5nLiAxNiBwcm9qZWN0IHR5cGVzKS5cbiAgIEJveGVzIGFsaWduIHRvIHRoZSBmaXJzdCBsaW5lIHNvIHdyYXBwaW5nIGxhYmVscyBzdGF5IHRpZHkuICovXG4uY2hlY2stZ3JvdXAtLWNvbHMge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7XG5cdGdhcDogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNik7XG59XG5cbi5jaGVjay1ncm91cC0tY29scyAuY2hlY2stbGFiZWwge1xuXHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cblxuLmNoZWNrLWdyb3VwLS1jb2xzIC5jaGVja2JveCwgLmNoZWNrLWdyb3VwLS1jb2xzIC5yYWRpbyB7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHRtYXJnaW4tdG9wOiAycHg7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkge1xuXHQuY2hlY2stZ3JvdXAtLWNvbHMge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHR9XG59XG4vKiBmb3JtIHNjYWZmb2xkIOKAlCBjb25zdHJhaW4gd2lkdGgsIHJlc2V0IHRoZSBmaWVsZHNldCBjaHJvbWUsIHN0eWxlIHRoZSBsZWdlbmQgKi9cbi5mb3JtIHtcblx0bWF4LXdpZHRoOiA2ODBweDtcbn1cblxuLmZvcm0gZmllbGRzZXQge1xuXHRib3JkZXI6IDA7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcbn1cblxuLmZvcm0gbGVnZW5kIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNik7XG59XG5cbi8qIOKUgOKUgOKUgCBMZWdhY3kgQ01TIGZvcm1zICguYXVmb3JtKSDilIDilIDilIBcbiAgIFRoZSBzaXRld2lkZSBmb3JtIG1hY3JvcyAodGVtcGxhdGVzL2Zvcm1zLyopIGVtaXQgYmFyZSBlbGVtZW50cyB3aXRoXG4gICBjbGFzcz1cImF1Zm9ybVwiIG9uIHRoZSA8Zm9ybT4gYW5kIGNsYXNzPVwiZ2VuZXJpY19lbGVtZW50XCIgd3JhcHBlcnMuXG4gICBUaGUgZm9ybSB0ZW1wbGF0ZSBhbHNvIGluamVjdHMgdGhlIGxlZ2FjeSAvY3NzL2Zvcm1zLmNzcyBBRlRFUiBpbmRleC5jc3MsXG4gICBzbyB3ZSBzY29wZSB1bmRlciAucGFnZS1tYWluIHRvIHdpbiBieSBzcGVjaWZpY2l0eS4gKi9cbi5wYWdlLW1haW4gLmF1Zm9ybSB7XG5cdG1heC13aWR0aDogNjgwcHg7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSAuZ2VuZXJpY19lbGVtZW50IHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG5cdGNsZWFyOiBub25lO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gLmhlbHBfbWVzc2FnZSB7XG5cdG1pbi1oZWlnaHQ6IDA7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSBsYWJlbCB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmbG9hdDogbm9uZTtcblx0d2lkdGg6IGF1dG87XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7XG5cdG1hcmdpbi1yaWdodDogMDtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9dGV4dF0sXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT1lbWFpbF0sXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT10ZWxdLFxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9dXJsXSxcbi5wYWdlLW1haW4gLmF1Zm9ybSBpbnB1dFt0eXBlPXNlYXJjaF0sXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT1udW1iZXJdIHtcblx0d2lkdGg6IDEwMCU7XG5cdGZsb2F0OiBub25lO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0b3V0bGluZTogbm9uZTtcblx0dHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT10ZXh0XTpmb2N1cyxcbi5wYWdlLW1haW4gLmF1Zm9ybSBpbnB1dFt0eXBlPWVtYWlsXTpmb2N1cyxcbi5wYWdlLW1haW4gLmF1Zm9ybSBpbnB1dFt0eXBlPXRlbF06Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSB0ZXh0YXJlYSB7XG5cdHdpZHRoOiAxMDAlO1xuXHRmbG9hdDogbm9uZTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdHJlc2l6ZTogdmVydGljYWw7XG5cdG1pbi1oZWlnaHQ6IDEwMHB4O1xuXHRvdXRsaW5lOiBub25lO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gdGV4dGFyZWE6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSBzZWxlY3Qge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0b3V0bGluZTogbm9uZTtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIHNlbGVjdDpmb2N1cyB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSBpbnB1dFt0eXBlPXN1Ym1pdF0ge1xuXHQtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG5cdGFwcGVhcmFuY2U6IG5vbmU7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsZXR0ZXItc3BhY2luZzogMC41cHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNik7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNSkgMCAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSksIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9c3VibWl0XTpob3ZlciB7XG5cdGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG59XG5cbi8qIHBob25lIG1hY3JvOiB0aHJlZSBzbWFsbCBpbnB1dHMgaW4gYSByb3cgKi9cbi5wYWdlLW1haW4gLmF1Zm9ybSAucGhvbmUge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSAucGhvbmUgbGFiZWwge1xuXHR3aWR0aDogMTAwJTtcblx0ZmxvYXQ6IG5vbmU7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSAucGhvbmUgc2VsZWN0IHtcblx0ZmxleDogMCAwIGF1dG87XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSAucGhvbmUgaW5wdXQuZmx1aWQge1xuXHR3aWR0aDogYXV0bztcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiA2MHB4O1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gLnBob25lIHNwYW4ge1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGF1LXRhYmxlcy5jc3MgIMK3ICBEYXRhIHRhYmxlc1xuICAgRGVwZW5kcyBvbjogYXUtdG9rZW5zLmNzc1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiBCYW5kLWF3YXJlOiBjZWxsIHRleHQsIGJvcmRlcnMgYW5kIHN0cmlwZXMgcmVhZCB0aGUgc2VjdGlvbidzIC0tYmFuZC0qIGNvbnRleHRcbiAgIHRva2VucyAoc2V0IG9uIGRhcmsgYmFuZHMgaW4gbGF5b3V0LmNzcyksIHNvIGEgdGFibGUgZHJvcHBlZCBvbiBhIGRhcmsgYmFuZCDigJRcbiAgIGUuZy4gaW5zaWRlIGEgZGFyayBhY2NvcmRpb24g4oCUIGFkYXB0cyBpbnN0ZWFkIG9mIHJlbmRlcmluZyBkYXJrLW9uLWRhcmsuIEZhbGxzXG4gICBiYWNrIHRvIHRoZSBsaWdodC10YWJsZSBsb29rIG9mZiBhIGJhbmQuICovXG4udGFibGUtd3JhcCB7XG5cdG92ZXJmbG93LXg6IGF1dG87XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJhbmQtY2FyZC1ib3JkZXIsIHZhcigtLWF1LWdyYXktMjAwKSk7XG59XG5cbi50YWJsZSB7XG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4vKiBpbnNpZGUgYSB3cmFwLCB0aGUgd3JhcCBvd25zIHRoZSBvdXRlciBzcGFjaW5nIGFuZCB0aGUgdGFibGUgc2l0cyBmbHVzaCB0byB0aGVcbiAgIHJvdW5kZWQgYm9yZGVyLiBXaXRob3V0IHRoaXMsIHRoZSBwYWdlLWNvbnRlbnQgcmh5dGhtJ3MgdG9wIG1hcmdpbiBvbiA8dGFibGU+XG4gICBvcGVucyBhIGJsYW5rIHN0cmlwIGJldHdlZW4gdGhlIGJvcmRlciBhbmQgdGhlIGhlYWRlciByb3cgKHRoZSB3cmFwIGlzIGl0cyBvd25cbiAgIGJsb2NrLWZvcm1hdHRpbmcgY29udGV4dCwgc28gdGhlIG1hcmdpbiBjYW4ndCBjb2xsYXBzZSBhd2F5KS4gKi9cbi50YWJsZS13cmFwID4gLnRhYmxlIHtcblx0bWFyZ2luOiAwO1xufVxuXG4udGFibGUgdGhlYWQge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnRhYmxlIHRoIHtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDFweDtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG59XG5cbi8qIFR3by1yb3cgKGdyb3VwZWQpIGhlYWRlcnM6IGEgaGVhZGluZyBzcGFubmluZyBzZXZlcmFsIGNvbHVtbnMgY2VudHJlcyBvdmVyXG4gICB0aGVtIHdpdGggYSBmYWludCBydWxlIGJlbmVhdGgsIGFuZCBhIGhlYWRpbmcgc3Bhbm5pbmcgYm90aCByb3dzIHNpdHMgb24gdGhlXG4gICBib3R0b20gbGluZSwgbGV2ZWwgd2l0aCB0aGUgY29sdW1uIG5hbWVzIChleGFtIHNjaGVkdWxlOiBcIklmIHlvdXIgY2xhc3NcbiAgIG1lZXRzIGF0XCIgYmVzaWRlIE1vbmRheS4uVGh1cnNkYXkgdW5kZXIgXCJZb3VyIGV4YW1pbmF0aW9uIGlzIHNjaGVkdWxlZCBmb3JcIikuICovXG4udGFibGUgdGhlYWQgdGhbY29sc3Bhbl0ge1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO1xufVxuXG4udGFibGUgdGhlYWQgdGhbcm93c3Bhbl0ge1xuXHR2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xufVxuXG4udGFibGUgdGQsXG4udGFibGUgdGJvZHkgdGgge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJhbmQtY2FyZC1ib3JkZXIsIHZhcigtLWF1LWdyYXktMjAwKSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXRleHQpKTtcbn1cblxuLnRhYmxlIHRib2R5IHRoIHtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1jYXJkLWJnLCB2YXIoLS1hdS1jcmVhbSkpO1xuXHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4vKiBTdHJpcGVkIHJvd3MgKi9cbi50YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1jaGlsZChldmVuKSB0ZCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWJhbmQtY2FyZC1iZywgcmdiYSgwLCA1MSwgMTAyLCAwLjAyKSk7XG59XG5cbi8qIEdyb3VwZWQgcm93cyDigJQgYmFuZCBhbHRlcm5hdGUgcm93IEdST1VQUywgbm90IGFsdGVybmF0ZSByb3dzLlxuICAgVXNlIG9uZSA8dGJvZHk+IHBlciBncm91cCAodGhhdCBpcyB3aGF0IHRib2R5IGlzIGZvcikgYW5kIGdpdmUgdGhlIHRhYmxlXG4gICAudGFibGUtLWdyb3VwZWQ6IGFsdGVybmF0ZSBncm91cHMgZ2V0IGEgdGludGVkIGJhbmQgYW5kIGEgaGVhdmllciBydWxlXG4gICBhYm92ZSBpdC4gVGhpcyBpcyB0aGUgdmFyaWFudCBmb3IgdGFibGVzIHdob3NlIGZpcnN0IGNvbHVtbiBpcyBhIHJvd3NwYW5cbiAgIGNhdGVnb3J5IGxhYmVsIOKAlCByb3ctbGV2ZWwgLnRhYmxlLXN0cmlwZWQgd291bGQgc3RyaXBlIHN0cmFpZ2h0IGFjcm9zcyB0aG9zZVxuICAgZ3JvdXBzIGFuZCBmaWdodCB0aGVtLiBSZXBsYWNlcyB0aGUgbGVnYWN5IGZsYXQtZ3JleSBgYmFja2dyb3VuZC1jb2xvcmAgZmlsbHNcbiAgIHRoYXQgQ0tFZGl0b3IvV29yZCBwYXN0ZXMgdXNlZCBmb3IgdGhlIHNhbWUgcHVycG9zZS4gKi9cbi50YWJsZS0tZ3JvdXBlZCB0Ym9keTpudGgtb2YtdHlwZShvZGQpIHRkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1jYXJkLWJnLCB2YXIoLS1hdS1jcmVhbSkpO1xufVxuXG4udGFibGUtLWdyb3VwZWQgdGJvZHkgKyB0Ym9keSB0ZCB7XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xufVxuXG4vKiBSb3cgaG92ZXIg4oCUIGxhc3Qgc28gaXQgd2lucyBvdmVyIGJvdGggYmFuZGluZyB2YXJpYW50cyAoZXF1YWwgc3BlY2lmaWNpdHkpLlxuICAgT3B0IG91dCB3aXRoIC50YWJsZS0tbm9ob3Zlci4gUm93IGhpZ2hsaWdodGluZyBtaXNyZWFkcyBvbiB0YWJsZXMgdGhhdCB1c2VcbiAgIHJvd3NwYW46IGhvdmVyaW5nIGEgcm93IGNhbm5vdCBsaWdodCB1cCB0aGUgc3Bhbm5pbmcgY2F0ZWdvcnkvY29udGFjdCBjZWxsc1xuICAgKHRob3NlIGJlbG9uZyB0byB0aGUgZ3JvdXAncyBGSVJTVCA8dHI+KSwgc28gdGhlIGhpZ2hsaWdodCBjb21lcyBvdXQgcmFnZ2VkXG4gICBhbmQgaGFsZi1hcHBsaWVkLiBUaGUgOm5vdCgpIGtlZXBzIHRoZSBiYW5kaW5nIGludGFjdCDigJQgaXQgc2ltcGx5IG5ldmVyIGFybXNcbiAgIHRoZSBob3ZlciDigJQgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIHJlcGFpbnQgdGhlIGNlbGwgYmFjayB0byBpdHMgYmFuZCBjb2xvdXIuICovXG4udGFibGU6bm90KC50YWJsZS0tbm9ob3ZlcikgdGJvZHkgdHI6aG92ZXIgdGQge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1iYW5kLXJhaXNlZCwgdmFyKC0tYXUtZ29sZC1wYWxlKSk7XG59XG5cbi8qIE5vLXdyYXAgY2VsbHMg4oCUIGZvciBncmlkcyBvZiBzaG9ydCB2YWx1ZXMgKHRpbWVzLCBjb2RlcywgYW1vdW50cykgdGhhdFxuICAgb3RoZXJ3aXNlIGJyZWFrIGF0IHRoZSBoeXBoZW4gaW4gYSBuYXJyb3cgY29sdW1uIChcIjEwOjMwLVwiIC8gXCIxMjozMFwiKS4gVGhlXG4gICB0YWJsZSBncm93cyBpbnN0ZWFkIGFuZCBzY3JvbGxzIGluc2lkZSBpdHMgLnRhYmxlLXdyYXA7IGF1dGhvcmVkIDxicj5zIHN0aWxsXG4gICBicmVhay4gRmlyc3QgdXNlZCBvbiAvYWNhZGVtaWNzL2V4YW1fc2NoZWR1bGUuaHRtbC4gKi9cbi50YWJsZS0tbm93cmFwIHRkIHtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLyogQ29tcGFjdCB2YXJpYW50ICovXG4udGFibGUtY29tcGFjdCB0aCxcbi50YWJsZS1jb21wYWN0IHRkIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG59XG5cbi8qIOKUgOKUgOKUgCBSZXNwb25zaXZlOiB0YWJsZSDihpIgY2FyZHMgb24gbW9iaWxlIOKUgOKUgOKUgCAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG5cdC50YWJsZS1yZXNwb25zaXZlIHRoZWFkIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cdC50YWJsZS1yZXNwb25zaXZlIHRib2R5IHRyIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcblx0XHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xuXHRcdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdH1cblx0LnRhYmxlLXJlc3BvbnNpdmUgdGJvZHkgdGQge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdC8qIExhYmVsIGZyb20gZGF0YS1sYWJlbCBhdHRyaWJ1dGUgKi9cblx0LnRhYmxlLXJlc3BvbnNpdmUgdGJvZHkgdGQ6OmJlZm9yZSB7XG5cdFx0Y29udGVudDogYXR0cihkYXRhLWxhYmVsKTtcblx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdFx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0XHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG5cdH1cbn1cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYXUtZmVlZGJhY2suY3NzICDCtyAgQ2FsbG91dHMgJiBwcm9ncmVzc1xuICAgRGVwZW5kcyBvbjogYXUtdG9rZW5zLmNzc1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiDilIDilIDilIAgQ2FsbG91dHMgLyBhbGVydHMg4pSA4pSA4pSAICovXG4uY2FsbG91dCB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0bGluZS1oZWlnaHQ6IDEuNjtcbn1cblxuLyogW2hpZGRlbl0gYWxvbmUgY2FuJ3QgaGlkZSBhIGRpc3BsYXk6ZmxleCBib3gg4oCUIG1ha2UgdGhlIGF0dHJpYnV0ZSB3aW4gKi9cbi5jYWxsb3V0W2hpZGRlbl0ge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4uY2FsbG91dC1pbmZvIHtcblx0YmFja2dyb3VuZDogI0VCRjNGQTtcblx0Y29sb3I6IHZhcigtLWF1LWluZm8pO1xuXHRib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWF1LWluZm8pO1xufVxuXG4uY2FsbG91dC13YXJuaW5nIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcblx0Y29sb3I6ICM4QTZBMUU7XG5cdGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5jYWxsb3V0LXN1Y2Nlc3Mge1xuXHRiYWNrZ3JvdW5kOiAjRUJGNUVFO1xuXHRjb2xvcjogdmFyKC0tYXUtc3VjY2Vzcyk7XG5cdGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tYXUtc3VjY2Vzcyk7XG59XG5cbi5jYWxsb3V0LWVycm9yIHtcblx0YmFja2dyb3VuZDogI0ZCRUNFQztcblx0Y29sb3I6IHZhcigtLWF1LWVycm9yKTtcblx0Ym9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS1hdS1lcnJvcik7XG59XG5cbi8qIOKUgOKUgOKUgCBDVEEgY2FsbG91dCDigJQgYSBzZXQtYXBhcnQgcGFuZWw6IGEgbWVzc2FnZSBiZXNpZGUgYW4gYWN0aW9uIGJ1dHRvbi5cbiAgIFRoZSBjbGVhbiByZXBsYWNlbWVudCBmb3IgdGhlIG9sZCA8dGFibGU+IFwiZXhjZXJwdCArIGJ1dHRvblwiIHBhdHRlcm47IHdyYXBzXG4gICB0byBzdGFja2VkICh0ZXh0IG92ZXIgYnV0dG9uKSBvbiBuYXJyb3cgd2lkdGhzLiBUZXh0IGlzIGEgPGRpdj4sIG5vdCA8cD4sIHNvXG4gICBpdCBkb2Vzbid0IGluaGVyaXQgdGhlIC5wYWdlLW1haW4gcGFyYWdyYXBoIHJoeXRobS4g4pSA4pSA4pSAICovXG4uY3RhLWNhbGxvdXQge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS02KTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS04KSAwO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS04KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcblx0Ym9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbn1cblxuLmN0YS1jYWxsb3V0LXRleHQge1xuXHRmbGV4OiAxIDEgMzIwcHg7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bGluZS1oZWlnaHQ6IDEuNjtcbn1cblxuLmN0YS1jYWxsb3V0IC5idG4ge1xuXHRmbGV4LXNocmluazogMDtcbn1cblxuLyog4pSA4pSA4pSAIHNpZGVub3RlIOKAlCBhIGJveGVkIGFzaWRlIHRoYXQgZmxvYXRzIGJlc2lkZSB0aGUgYm9keSBvbiB3aWRlIHNjcmVlbnNcbiAgIChlLmcuIFwiaG93IHRvIHN1Ym1pdCBhIHJlcXVlc3RcIik7IHRoZSBzdXJyb3VuZGluZyB0ZXh0IHdyYXBzIGFyb3VuZCBpdC5cbiAgIFVuZmxvYXRzIHRvIGEgZnVsbC13aWR0aCBibG9jayBvbiBuYXJyb3cgc2NyZWVucy4g4pSA4pSA4pSAICovXG4uc2lkZW5vdGUge1xuXHRmbG9hdDogcmlnaHQ7XG5cdHdpZHRoOiAzMDBweDtcblx0bWF4LXdpZHRoOiA0MiU7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtMSkgMCB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS04KTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtNik7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItdG9wOiAzcHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG59XG5cbi5zaWRlbm90ZS10aXRsZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjI1O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHtcblx0LnNpZGVub3RlIHtcblx0XHRmbG9hdDogbm9uZTtcblx0XHR3aWR0aDogYXV0bztcblx0XHRtYXgtd2lkdGg6IG5vbmU7XG5cdFx0bWFyZ2luLWxlZnQ6IDA7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBQcm9ncmVzcyBiYXIg4pSA4pSA4pSAICovXG4ucHJvZ3Jlc3Mtd3JhcCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0aGVpZ2h0OiAzNnB4O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRib3gtc2hhZG93OiBpbnNldCAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcbn1cblxuLnByb2dyZXNzLWZpbGwge1xuXHRoZWlnaHQ6IDEwMCU7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdmFyKC0tYXUtbmF2eSkgMCUsIHZhcigtLWF1LW5hdnktbGlnaHQpIDEwMCUpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuXHRwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zcGFjZS00KTtcblx0dHJhbnNpdGlvbjogd2lkdGggMnMgdmFyKC0tZWFzZS1vdXQpO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi8qIEdvbGQgYWNjZW50IGVkZ2UgKi9cbi5wcm9ncmVzcy1maWxsOjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0cmlnaHQ6IDA7XG5cdHRvcDogMDtcblx0Ym90dG9tOiAwO1xuXHR3aWR0aDogNTBweDtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuNSkpO1xuXHRib3JkZXItcmFkaXVzOiAwIHZhcigtLXJhZGl1cy1sZykgdmFyKC0tcmFkaXVzLWxnKSAwO1xufVxuXG4ucHJvZ3Jlc3MtbGFiZWwge1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRmb250LXdlaWdodDogNzAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHotaW5kZXg6IDI7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgc3RlcHMuY3NzICDCtyAgbnVtYmVyZWQgc3RlcC1ieS1zdGVwIChob3ctdG8gZ3VpZGVzKVxuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzc1xuICAgQW4gb3JkZXJlZCBsaXN0IG9mIHByb2NlZHVyZSBzdGVwcyDigJQgYSBnb2xkIG51bWJlciBiYWRnZSBwZXIgc3RlcCxcbiAgIGpvaW5lZCBieSBhIHZlcnRpY2FsIGNvbm5lY3RvciBsaW5lLCB3aXRoIHRoZSBpbnN0cnVjdGlvbiBhbmQgYW5cbiAgIChvcHRpb25hbGx5IGZyYW1lZCkgc2NyZWVuc2hvdCBpbmRlbnRlZCBpbiB0aGUgc3RlcCBjb2x1bW4uXG5cbiAgIEF1dGhvcmluZyAoQ0tFZGl0b3Itc2FmZSDigJQgbm8gaWNvbnMsIG5vIG1hbnVhbCBcIlN0ZXAgTlwiLCBubyBudW1iZXJzKTpcbiAgICAgPG9sIGNsYXNzPVwic3RlcHNcIj5cbiAgICAgICA8bGk+XG4gICAgICAgICA8cD5EbyB0aGUgdGhpbmcuPC9wPiAgICAgICAgICAgICAgICAgICAgIChsZWFkIGluc3RydWN0aW9uKVxuICAgICAgICAgPGZpZ3VyZT48aW1nIHNyYz1cIuKAplwiIGFsdD1cIuKAplwiPjwvZmlndXJlPiAgKG9wdGlvbmFsIHNjcmVlbnNob3QpXG4gICAgICAgPC9saT5cbiAgICAgICDigKZcbiAgICAgPC9vbD5cbiAgIFRoZSBudW1iZXJzIGFuZCBjb25uZWN0b3IgbGluZSBhcmUgZ2VuZXJhdGVkIHdpdGggQ1NTIGNvdW50ZXJzICtcbiAgIDo6YmVmb3JlLzo6YWZ0ZXIsIHNvIHRoZSBtYXJrdXAgc3RheXMgYSBjbGVhbiBvcmRlcmVkIGxpc3QuIFRoZSBudW1iZXJcbiAgIGJhZGdlIElTIHRoZSBzdGVwIGxhYmVsLCBzbyBubyBcIlN0ZXAgMVwiIHRleHQgaXMgbmVlZGVkLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4uc3RlcHMge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRjb3VudGVyLXJlc2V0OiBzdGVwO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTgpIDA7XG5cdHBhZGRpbmc6IDA7XG59XG5cbi5zdGVwcyA+IGxpIHtcblx0Y291bnRlci1pbmNyZW1lbnQ6IHN0ZXA7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0bWFyZ2luOiAwOyAvKiBjYW5jZWwgdGhlIGdsb2JhbCBgbGkgKyBsaWAgZ2FwICovXG5cdHBhZGRpbmctbGVmdDogNHJlbTsgLyogdGhlIGJhZGdlIGNvbHVtbiAqL1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtMTApOyAvKiByb29tIGZvciB0aGUgY29ubmVjdG9yIHRvIHRoZSBuZXh0IHN0ZXAgKi9cbn1cblxuLnN0ZXBzID4gbGk6bGFzdC1jaGlsZCB7XG5cdHBhZGRpbmctYm90dG9tOiAwO1xufVxuXG4vKiB0aGUgbnVtYmVyIGJhZGdlICovXG4uc3RlcHMgPiBsaTo6YmVmb3JlIHtcblx0Y29udGVudDogY291bnRlcihzdGVwKTtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRsZWZ0OiAwO1xuXHR0b3A6IDA7XG5cdHdpZHRoOiAyLjVyZW07XG5cdGhlaWdodDogMi41cmVtO1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHR6LWluZGV4OiAxOyAvKiBzaXQgYWJvdmUgdGhlIGNvbm5lY3RvciBsaW5lICovXG59XG5cbi8qIHRoZSBjb25uZWN0b3IgbGluZSBsaW5raW5nIGEgc3RlcCB0byB0aGUgbmV4dCAobm90IGFmdGVyIHRoZSBsYXN0IHN0ZXApICovXG4uc3RlcHMgPiBsaTpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0bGVmdDogMS4yNXJlbTsgLyogY2VudHJlZCB1bmRlciB0aGUgMi41cmVtIGJhZGdlICovXG5cdHRvcDogM3JlbTsgLyoganVzdCBiZWxvdyB0aGUgYmFkZ2UgKi9cblx0Ym90dG9tOiAwO1xuXHR3aWR0aDogMnB4O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMXB4KTtcbn1cblxuLnN0ZXBzID4gbGkgPiA6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4vKiB0aGUgbGVhZCBpbnN0cnVjdGlvbiDigJQgc2xpZ2h0bHkgbGFyZ2VyLCBhbmQgbnVkZ2VkIGRvd24gfjAuNHJlbSBzbyBpdHMgZmlyc3RcbiAgIGxpbmUgc2l0cyB2ZXJ0aWNhbGx5IGNlbnRlcmVkIGFnYWluc3QgdGhlIG51bWJlciBiYWRnZSAodGhlIG51bWJlciBkb2VzIHRoZVxuICAgXCJTdGVwIE5cIiBsYWJlbGxpbmcsIHNvIG5vIGV5ZWJyb3cgaXMgbmVlZGVkKS4gKi9cbi5zdGVwcyA+IGxpID4gcDpmaXJzdC1jaGlsZCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG5cdG1hcmdpbjogMC40cmVtIDAgMDtcbn1cblxuLyogYW55IGZvbGxvd2luZyB0ZXh0IGluIGEgc3RlcCAqL1xuLnN0ZXBzIHAge1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTIpIDAgMDtcblx0bGluZS1oZWlnaHQ6IDEuNjtcbn1cblxuLyogZnJhbWVkIHNjcmVlbnNob3Q6IGhhaXJsaW5lIGJvcmRlciwgcm91bmRlZCBjb3JuZXJzLCBzb2Z0IGxpZnQ7IGNhcHBlZCBzbyBhXG4gICBsYXJnZSBjYXB0dXJlIGRvZXNuJ3QgZmlsbCB0aGUgd2hvbGUgY29sdW1uLiBMZWZ0IGVkZ2UgbGluZXMgdXAgd2l0aCB0aGUgdGV4dC4gKi9cbi5zdGVwcyBmaWd1cmUge1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTQpIDAgMDtcbn1cblxuLnN0ZXBzIGZpZ3VyZSBpbWcge1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSk7XG5cdG1heC13aWR0aDogNDQwcHg7XG5cdHdpZHRoOiAxMDAlO1xufVxuXG4vKiBwaG9uZSBzY3JlZW5zaG90cyAodGFsbCwgfjMwMHB4IHdpZGUpOiBrZWVwIHRoZW0gcGhvbmUtc2l6ZWQgaW5zdGVhZCBvZlxuICAgc3RyZXRjaGluZyB0byA0NDBweC4gPG9sIGNsYXNzPVwic3RlcHMgc3RlcHMtLXBob25lXCI+ICovXG4uc3RlcHMtLXBob25lIGZpZ3VyZSBpbWcge1xuXHRtYXgtd2lkdGg6IDI2MHB4O1xufVxuXG4uc3RlcHMgZmlnY2FwdGlvbiB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcbn1cblxuLyogdGlnaHRlbiB0aGUgYmFkZ2UgY29sdW1uIG9uIHNtYWxsIHNjcmVlbnMgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkge1xuXHQuc3RlcHMgPiBsaSB7XG5cdFx0cGFkZGluZy1sZWZ0OiAzLjI1cmVtO1xuXHR9XG5cdC5zdGVwcyA+IGxpOjpiZWZvcmUge1xuXHRcdHdpZHRoOiAyLjFyZW07XG5cdFx0aGVpZ2h0OiAyLjFyZW07XG5cdFx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0fVxuXHQuc3RlcHMgPiBsaTpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7XG5cdFx0bGVmdDogMS4wNXJlbTtcblx0XHR0b3A6IDIuNXJlbTtcblx0fVxufVxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBhdS1kaXNjbG9zdXJlLmNzcyAgwrcgIEFjY29yZGlvbiAmIHRhYmJlZCBwYW5lbHNcbiAgIERlcGVuZHMgb246IGF1LXRva2Vucy5jc3NcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyog4pSA4pSA4pSAIEFjY29yZGlvbiDilIDilIDilIAgKi9cbi8qIEJhbmQtYXdhcmU6IHJlYWRzIHRoZSBzZWN0aW9uJ3MgLS1iYW5kLSogY29udGV4dCB0b2tlbnMgKHNldCBvbiBkYXJrIGJhbmRzIGluXG4gICBsYXlvdXQuY3NzKSBzbyB0aGUgYWNjb3JkaW9uIGFkYXB0cyBhdXRvbWF0aWNhbGx5IOKAlCBsaWdodCB0cmlnZ2VycyArIGRhcmsgdGV4dFxuICAgb24gbGlnaHQgYmFuZHMsIHRyYW5zbHVjZW50IHRyaWdnZXJzICsgbGlnaHQgdGV4dCBvbiBkYXJrIGJhbmRzIOKAlCB3aXRoIG5vXG4gICB2YXJpYW50IGNsYXNzIHRvIHJlbWVtYmVyLiBGYWxscyBiYWNrIHRvIHRoZSBsaWdodCBsb29rIG9mZiBhIGJhbmQuICovXG4uYWNjb3JkaW9uIHtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0yMDApKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmFjY29yZGlvbi1pdGVtIHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJhbmQtY2FyZC1ib3JkZXIsIHZhcigtLWF1LWdyYXktMjAwKSk7XG5cdC8qIHdoZW4gZGVlcC1saW5rZWQgKGpzL2FjY29yZGlvbi5qcyBvcGVucyB0aGUgcGFuZWwgYW5kIHNjcm9sbHMgaGVyZSksIGNsZWFyXG5cdCAgIHRoZSBzdGlja3kgaGVhZGVyIHNvIHRoZSBxdWVzdGlvbiBpc24ndCBoaWRkZW4gdW5kZXJuZWF0aCBpdC4gKi9cblx0c2Nyb2xsLW1hcmdpbi10b3A6IGNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1zcGFjZS0zKSk7XG59XG5cbi5hY2NvcmRpb24taXRlbTpsYXN0LWNoaWxkIHtcblx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuLmFjY29yZGlvbi1pdGVtID4gOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpIHtcblx0bWFyZ2luOiAwO1xuXHRmb250LXNpemU6IGluaGVyaXQ7XG59XG5cbi5hY2NvcmRpb24tdHJpZ2dlciB7XG5cdHdpZHRoOiAxMDAlO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1iYW5kLWNhcmQtYmcsIHZhcigtLWF1LXdoaXRlKSk7XG5cdGJvcmRlcjogbm9uZTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tZmFzdCk7XG59XG5cbi5hY2NvcmRpb24tdHJpZ2dlcjpob3Zlcixcbi5hY2NvcmRpb24tdHJpZ2dlclthcmlhLWV4cGFuZGVkPXRydWVdIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1yYWlzZWQsIHZhcigtLWF1LWdvbGQtcGFsZSkpO1xufVxuXG4vKiBhIENNUy1hdXRob3JlZCB0aXRsZSBpcyBzb21ldGltZXMgd3JhcHBlZCBpbiBhIGhlYWRpbmcgKGUuZy4gPGgzPikuIFRoZSBnbG9iYWxcbiAgIGJhc2UuY3NzIGBoMS4uaDYgeyBjb2xvcjogbmF2eSB9YCB3b3VsZCB0aGVuIHBhaW50IGl0IGRhcmsg4oCUIGludmlzaWJsZSBvbiBhXG4gICBkYXJrIGJhbmQuIFRpZSBhbnkgaGVhZGluZyBpbnNpZGUgdGhlIHRyaWdnZXIgdG8gdGhlIHRyaWdnZXIncyBvd24gYmFuZC1hd2FyZVxuICAgY29sb3VyLCBhbmQgc3RyaXAgdGhlIGhlYWRpbmcncyBwYWdlIG1hcmdpbnMgc28gaXQgc2l0cyBpbiB0aGUgYnV0dG9uLiAqL1xuLmFjY29yZGlvbi10cmlnZ2VyIDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSB7XG5cdGNvbG9yOiBpbmhlcml0O1xuXHRtYXJnaW46IDA7XG59XG5cbi5hY2NvcmRpb24tdHJpZ2dlciBhIHtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0cG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi8qIFNlY29uZGFyeSB0ZXh0IG9uIGEgdHJpZ2dlciDigJQgYSBxdWFsaWZpZXIgdGhhdCBiZWxvbmdzIHdpdGggdGhlIHRpdGxlIHJhdGhlclxuICAgdGhhbiBpbnNpZGUgdGhlIHBhbmVsIChlLmcuIFwiMjAyNS0yMDI2IFZlcmlmaWNhdGlvbiBGb3JtcyDCtyBmb3IgY2xhc3Nlc1xuICAgYmV0d2VlbiBBdWd1c3QgMjAyNSAmIEp1bHkgMjAyNlwiKS4gTGVnYWN5IEJvb3RzdHJhcCBwYW5lbHMgcHV0IHRoaXMgaW4gYVxuICAgPHNwYW4+IGJlc2lkZSB0aGUgdG9nZ2xlIGluc2lkZSAucGFuZWwtaGVhZGluZzsgaXQgaGFzIG5vd2hlcmUgZWxzZSB0byBnb1xuICAgb25jZSB0aGUgaGVhZGluZyBiZWNvbWVzIGEgYnV0dG9uLiBMaWdodGVyIGFuZCBsb3dlci1jb250cmFzdCB0aGFuIHRoZVxuICAgdGl0bGUsIGFuZCBpdCB3cmFwcyByYXRoZXIgdGhhbiBzcXVlZXppbmcgdGhlIGljb24uICovXG4uYWNjb3JkaW9uLW5vdGUge1xuXHRkaXNwbGF5OiBibG9jaztcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMSk7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LWdyYXktNjAwKSk7XG59XG5cbi8qIHRoZSB0aXRsZSArIG5vdGUgc3RhY2sgb24gdGhlIGxlZnQ7IHRoZSBpY29uIHN0YXlzIHBpbm5lZCByaWdodCAqL1xuLmFjY29yZGlvbi10cmlnZ2VyID4gOm5vdCguYWNjb3JkaW9uLWljb24pIHtcblx0ZmxleDogMSAxIGF1dG87XG59XG5cbi5hY2NvcmRpb24tdHJpZ2dlciAuYWNjb3JkaW9uLWljb24ge1xuXHRmbGV4OiAwIDAgYXV0bztcbn1cblxuLyogUGx1cy9taW51cyBpY29uIHZpYSBwc2V1ZG8tZWxlbWVudHMgKi9cbi5hY2NvcmRpb24taWNvbiB7XG5cdHdpZHRoOiAyMHB4O1xuXHRoZWlnaHQ6IDIwcHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmFjY29yZGlvbi1pY29uOjpiZWZvcmUsXG4uYWNjb3JkaW9uLWljb246OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpO1xuXHRib3JkZXItcmFkaXVzOiAycHg7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5hY2NvcmRpb24taWNvbjo6YmVmb3JlIHtcblx0d2lkdGg6IDE0cHg7XG5cdGhlaWdodDogMnB4O1xuXHR0b3A6IDUwJTtcblx0bGVmdDogNTAlO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cblxuLmFjY29yZGlvbi1pY29uOjphZnRlciB7XG5cdHdpZHRoOiAycHg7XG5cdGhlaWdodDogMTRweDtcblx0dG9wOiA1MCU7XG5cdGxlZnQ6IDUwJTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8qIFJvdGF0ZSB2ZXJ0aWNhbCBiYXIgdG8gZm9ybSBtaW51cyAqL1xuLmFjY29yZGlvbi10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLmFjY29yZGlvbi1pY29uOjphZnRlciB7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSg5MGRlZyk7XG5cdG9wYWNpdHk6IDA7XG59XG5cbi8qIEF1dG8taWNvbjogdHJpZ2dlcnMgd2l0aG91dCBhbiBleHBsaWNpdCAuYWNjb3JkaW9uLWljb24gc3BhbiBnZXQgKy/iiJIgdmlhXG4gICA6OmFmdGVyIChjb21tb24gaW4gY29udGVudCBjb252ZXJ0ZWQgZnJvbSBCb290c3RyYXAgcGFuZWxzKS4gKi9cbi5hY2NvcmRpb24tdHJpZ2dlcjpub3QoOmhhcyguYWNjb3JkaW9uLWljb24pKTo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRmbGV4OiAwIDAgMjBweDtcblx0d2lkdGg6IDIwcHg7XG5cdGhlaWdodDogMjBweDtcblx0bWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNlLTMpO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LW5hdnkpKSwgdmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LW5hdnkpKSkgNTAlLzE0cHggMnB4IG5vLXJlcGVhdCwgbGluZWFyLWdyYWRpZW50KHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSksIHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSkpIDUwJS8ycHggMTRweCBuby1yZXBlYXQ7XG5cdHRyYW5zaXRpb246IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLmFjY29yZGlvbi10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9dHJ1ZV06bm90KDpoYXMoLmFjY29yZGlvbi1pY29uKSk6OmFmdGVyIHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSksIHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSkpIDUwJS8xNHB4IDJweCBuby1yZXBlYXQ7XG59XG5cbi8qIEFuY2hvciByZW1uYW50cyBmcm9tIEJvb3RzdHJhcCBjb2xsYXBzZSB0b2dnbGVzOiBzdHJpcCBsaW5rIHN0eWxpbmcgc28gdGhlXG4gICB0cmlnZ2VyIHRleHQgbG9va3MgbGlrZSBub3JtYWwgdGV4dCwgbm90IGEgaHlwZXJsaW5rLiAqL1xuLmFjY29yZGlvbi10cmlnZ2VyIGEge1xuXHRjb2xvcjogaW5oZXJpdDtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4vKiBGbGFnL2ljb24gaW1hZ2VzIGluc2lkZSB0cmlnZ2Vyczogb3ZlcnJpZGUgYmFzZS5jc3MgYmxvY2sgZGlzcGxheSxcbiAgIHNpemUgdG8gdGV4dCwgYW5kIHZlcnRpY2FsbHkgY2VudGVyIHdpdGggdGhlIGxhYmVsLiAqL1xuLmFjY29yZGlvbi10cmlnZ2VyIGltZyB7XG5cdGRpc3BsYXk6IGlubGluZTtcblx0aGVpZ2h0OiAxLjJlbTtcblx0d2lkdGg6IGF1dG87XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5hY2NvcmRpb24tcGFuZWwge1xuXHRtYXgtaGVpZ2h0OiAwO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHR0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IHZhcigtLWR1cmF0aW9uLXNsb3cpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLyogdGhlIG9wZW4gaGVpZ2h0IGlzIHNldCBpbmxpbmUgYnkganMvYWNjb3JkaW9uLmpzIGZyb20gdGhlIHBhbmVsJ3MgcmVhbCBjb250ZW50XG4gICAobm8gZml4ZWQgY2FwIGhlcmUg4oCUIGEgaGFyZGNvZGVkIG1heC1oZWlnaHQgY2xpcHBlZCBsb25nIHBhbmVscyBhbmQgaGlkIHRoZVxuICAgYm9keSdzIGJvdHRvbSBwYWRkaW5nKS4gKi9cbi5hY2NvcmRpb24tYm9keSB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTYpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0bGluZS1oZWlnaHQ6IDEuNztcbn1cblxuLyogbGlua3MgaW5zaWRlIHRoZSBwYW5lbCBmb2xsb3cgdGhlIGJhbmQ6IG5vcm1hbCBsaW5rIGJsdWUgb24gbGlnaHQsIGdvbGQgb24gYVxuICAgZGFyayBiYW5kICh3aGVyZSBuYXZ5LWJsdWUgd291bGQgdmFuaXNoKS4gSG92ZXIgc3RheXMgZ29sZCBvbiBib3RoLiAqL1xuLmFjY29yZGlvbi1ib2R5IGEge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LW5hdnktbGlnaHQpKTtcbn1cblxuLyogaGVhZGluZ3MgYXV0aG9yZWQgaW4gdGhlIHJpY2gtdGV4dCBwYW5lbCBmb2xsb3cgdGhlIGJhbmQgaGVhZGluZyBjb2xvdXIgdG9vLFxuICAgc28gYW4gPGgzPi88c3Ryb25nPiBibG9jayBzdGF5cyBsZWdpYmxlIG9uIGEgZGFyayBiYW5kLiAqL1xuLmFjY29yZGlvbi1ib2R5IDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLyogRmFsbGJhY2s6IHBhbmVscyB3aG9zZSBjb250ZW50IHNpdHMgaW4gYSBwbGFpbiA8ZGl2PiAobm8gLmFjY29yZGlvbi1ib2R5IGNsYXNzKVxuICAgc3RpbGwgZ2V0IGJvZHkgcGFkZGluZyBhbmQgdHlwb2dyYXBoeS4gQ29tbW9uIGluIEJvb3RzdHJhcC1jb252ZXJ0ZWQgcGFuZWxzLiAqL1xuLmFjY29yZGlvbi1wYW5lbCA+IGRpdjpub3QoW2NsYXNzXSkge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS02KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG59XG5cbi5hY2NvcmRpb24tcGFuZWwgPiBkaXY6bm90KFtjbGFzc10pIGEge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LW5hdnktbGlnaHQpKTtcbn1cblxuLmFjY29yZGlvbi1wYW5lbCA+IGRpdjpub3QoW2NsYXNzXSkgOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4vKiDilIDilIDilIAgVGFiYmVkIHBhbmVscyDilIDilIDilIAgKi9cbi8qIEJveGVkIFRhYnMgKi9cbi50YWJzIHtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udGFiLWxpc3Qge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdG92ZXJmbG93LXg6IGF1dG87XG59XG5cbi50YWItYnRuIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Ym9yZGVyOiBub25lO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi50YWItYnRuOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4udGFiLWJ0bi5hY3RpdmUge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyogR29sZCB1bmRlcmxpbmUgb24gYWN0aXZlIHRhYiAqL1xuLnRhYi1idG4uYWN0aXZlOjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0Ym90dG9tOiAwO1xuXHRsZWZ0OiAwO1xuXHRyaWdodDogMDtcblx0aGVpZ2h0OiAzcHg7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4udGFiLXBhbmVsIHtcblx0ZGlzcGxheTogbm9uZTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi50YWItcGFuZWwuYWN0aXZlIHtcblx0ZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIOKUgOKUgOKUgCBQaWxsLVN0eWxlIEZpbHRlciBUYWJzIOKUgOKUgOKUgCAqL1xuLnRhYi1saXN0LXBpbGxzIHtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLnRhYi1waWxsIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTQpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi50YWItcGlsbDpob3ZlciB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnRhYi1waWxsLmFjdGl2ZSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4vKiBkaWFsb2cuY3NzIMK3IG5hdGl2ZSA8ZGlhbG9nPiBtb2RhbFxuICAgVHJpZ2dlcjogW2RhdGEtZGlhbG9nLW9wZW49XCI8aWQ+XCJdIG9wZW5zIDxkaWFsb2cgaWQ9XCI8aWQ+XCI+XG4gICBKUzoganMvZGlhbG9nLmpzIChzZWxmLWluaXRzIHZpYSBpbml0LmpzKSAqL1xuLmRpYWxvZyB7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogMDtcblx0bWFyZ2luOiBhdXRvO1xuXHRtYXgtd2lkdGg6IG1pbig2NDBweCwgMTAwdncgLSB2YXIoLS1zcGFjZS04KSk7XG5cdG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1zcGFjZS0xMCkpO1xuXHRtYXgtaGVpZ2h0OiBjYWxjKDEwMGR2aCAtIHZhcigtLXNwYWNlLTEwKSk7XG5cdHdpZHRoOiAxMDAlO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbGcpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZGlhbG9nW29wZW5dIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLmRpYWxvZzpmb2N1cyB7XG5cdG91dGxpbmU6IG5vbmU7XG59XG5cbi8qIHRoZSBwYWdlIGJlaGluZCBhIG1vZGFsIGRvZXNuJ3Qgc2Nyb2xsICovXG5odG1sOmhhcyguZGlhbG9nW29wZW5dKSB7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaWFsb2c6OmJhY2tkcm9wIHtcblx0YmFja2dyb3VuZDogcmdiYSgwLCAzMSwgNjMsIDAuNTUpO1xuXHRiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcblx0LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcbn1cblxuLmRpYWxvZy1oZWFkZXIge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogYmFzZWxpbmU7XG5cdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtNCk7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi5kaWFsb2cgLmRpYWxvZy10aXRsZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdG1hcmdpbjogMDtcblx0bGluZS1oZWlnaHQ6IDEuMztcbn1cblxuLmRpYWxvZy1jbG9zZSB7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Zm9udC1zaXplOiAxLjI1cmVtO1xuXHRsaW5lLWhlaWdodDogMTtcblx0Y29sb3I6IHZhcigtLWF1LWdyYXktNDAwKTtcblx0LyogNDRweCB0YXAgdGFyZ2V0IHdpdGhvdXQgZ3Jvd2luZyB0aGUgaGVhZGVyICovXG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHRtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1zcGFjZS0yKSkgY2FsYygtMSAqIHZhcigtLXNwYWNlLTMpKTtcblx0dHJhbnNpdGlvbjogY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5kaWFsb2ctY2xvc2U6Zm9jdXMge1xuXHRvdXRsaW5lOiBub25lO1xufVxuXG4uZGlhbG9nLWNsb3NlOmZvY3VzLXZpc2libGUge1xuXHRvdXRsaW5lOiAycHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdG91dGxpbmUtb2Zmc2V0OiAycHg7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG59XG5cbi5kaWFsb2ctY2xvc2U6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5kaWFsb2ctYm9keSB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpO1xuXHRvdmVyZmxvdy15OiBhdXRvO1xuXHRvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcbn1cblxuLmRpYWxvZy1ib2R5ID4gOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLmRpYWxvZy1ib2R5IHAgKyBwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5kaWFsb2ctYm9keSBpbWcge1xuXHRtYXgtd2lkdGg6IDEwMCU7XG5cdGhlaWdodDogYXV0bztcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5kaWFsb2ctYm9keSAuZGlhbG9nLWltZyB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogMTAwJTtcblx0bWF4LWhlaWdodDogNDV2aDtcblx0b2JqZWN0LWZpdDogY29udGFpbjtcblx0bWFyZ2luOiAwIDAgdmFyKC0tc3BhY2UtNCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcbn1cblxuLmRpYWxvZy1sZWFkIHtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uZGlhbG9nLWJvZHkgOmlzKGgyLCBoMywgaDQpIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLmRpYWxvZy1ib2R5IDppcyh1bCwgb2wpIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7XG5cdHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5kaWFsb2ctYm9keSBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcblx0LmRpYWxvZ1tvcGVuXSB7XG5cdFx0bWF4LXdpZHRoOiAxMDB2dztcblx0XHRtYXgtaGVpZ2h0OiAxMDB2aDtcblx0XHRtYXgtaGVpZ2h0OiAxMDBkdmg7XG5cdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdGJvcmRlci1yYWRpdXM6IDA7XG5cdFx0bWFyZ2luOiAwO1xuXHR9XG5cdC5kaWFsb2ctaGVhZGVyIHtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQuZGlhbG9nLWJvZHkge1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpO1xuXHR9XG59XG4vKiBjbGlja2FibGUgdHJpZ2dlcnMgKi9cbltkYXRhLWRpYWxvZy1vcGVuXSB7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuW2RhdGEtZGlhbG9nLW9wZW5dOmZvY3VzLXZpc2libGUge1xuXHRvdXRsaW5lOiAycHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdG91dGxpbmUtb2Zmc2V0OiAzcHg7XG59XG5cbi5jYXJkW2RhdGEtZGlhbG9nLW9wZW5dOmhvdmVyIHtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcblx0dHJhbnNpdGlvbjogYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBhdS1tZWRpYS5jc3MgIMK3ICBDYXJvdXNlbCwgZ2FsbGVyeSAmIHZpZGVvXG4gICBEZXBlbmRzIG9uOiBhdS10b2tlbnMuY3NzXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIOKUgOKUgOKUgCBDYXJvdXNlbCDilIDilIDilIAgKi9cbi5jYXJvdXNlbCB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0Lyogc2V0IC0tY2Fyb3VzZWwtcmF0aW8gb24gdGhlIGVsZW1lbnQgZm9yIHBob3RvcyBvZiBhbm90aGVyIHNoYXBlIChlLmcuXG5cdCAgIHN0eWxlPVwiLS1jYXJvdXNlbC1yYXRpbzogNzIwIC8gMzI1XCIpOyB0aGUgcGhvbmUgY2FwdGlvbiBsYXlvdXQgYmVsb3cgcmVhZHMgaXQgKi9cblx0YXNwZWN0LXJhdGlvOiB2YXIoLS1jYXJvdXNlbC1yYXRpbywgMy8yKTtcbn1cblxuLmNhcm91c2VsLXRyYWNrIHtcblx0ZGlzcGxheTogZmxleDtcblx0aGVpZ2h0OiAxMDAlO1xuXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5jYXJvdXNlbC1zbGlkZSB7XG5cdGZsZXg6IDAgMCAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmNhcm91c2VsLXNsaWRlIGltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcbn1cblxuLyogU2l6ZSB2YXJpYW50cyBvdmVycmlkZSB0aGUgZGVmYXVsdCBhc3BlY3QgcmF0aW8gKi9cbi5jYXJvdXNlbC1jb21wYWN0IHtcblx0YXNwZWN0LXJhdGlvOiB1bnNldDtcbn1cblxuLmNhcm91c2VsLWNvbXBhY3QgLmNhcm91c2VsLXNsaWRlIGltZyB7XG5cdGhlaWdodDogMzIwcHg7XG59XG5cbi5jYXJvdXNlbC1oZXJvIHtcblx0YXNwZWN0LXJhdGlvOiB1bnNldDtcblx0Ym9yZGVyLXJhZGl1czogMDtcbn1cblxuLmNhcm91c2VsLWhlcm8gLmNhcm91c2VsLXNsaWRlIGltZyB7XG5cdGhlaWdodDogNDgwcHg7XG59XG5cbi8qIOKUgOKUgCBQZWVrIHZhcmlhbnQg4pSA4pSAXG4gICBGaWxtLXN0cmlwIGNhcm91c2VsOiBhbGwgaW1hZ2VzIHNjYWxlZCB0byB0aGUgc2FtZSBoZWlnaHQsIGVhY2ggc2xpZGVcbiAgIGlzIGFzIHdpZGUgYXMgaXRzIGltYWdlJ3MgbmF0dXJhbCBwcm9wb3J0aW9ucy4gQ2xpY2tpbmcgY2VudGVycyB0aGUgbmV4dFxuICAgaW1hZ2U7IG5hcnJvd2VyIGltYWdlcyBzaG93IG1vcmUgb2YgdGhlIG5laWdoYm9yaW5nIHNsaWRlcyBvbiBlYWNoIHNpZGUuXG4gICBUaGUgLmNhcm91c2VsLS1wZWVrIGhhcyBvdmVyZmxvdzp2aXNpYmxlOyAuY2Fyb3VzZWwtcGVlay13cmFwIGNsaXBzIGl0LiAqL1xuLmNhcm91c2VsLXBlZWstd3JhcCB7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5jYXJvdXNlbC0tcGVlayB7XG5cdG92ZXJmbG93OiB2aXNpYmxlO1xuXHRtYXgtd2lkdGg6IDg1MHB4O1xuXHRtYXJnaW46IDAgYXV0bztcblx0YXNwZWN0LXJhdGlvOiAyLzE7IC8qIHBhbm9yYW1pYzsgb3ZlcnJpZGVzIDMvMiBmcm9tIC5jYXJvdXNlbCAqL1xufVxuXG4uY2Fyb3VzZWwtLXBlZWsgLmNhcm91c2VsLXNsaWRlIHtcblx0ZmxleDogMCAwIGF1dG87IC8qIG5hdHVyYWwgd2lkdGggcGVyIGltYWdlLCBub3QgMTAwJSAqL1xuXHRoZWlnaHQ6IDEwMCU7XG59XG5cbi5jYXJvdXNlbC0tcGVlayAuY2Fyb3VzZWwtc2xpZGUgaW1nIHtcblx0aGVpZ2h0OiAxMDAlO1xuXHR3aWR0aDogYXV0bztcblx0ZGlzcGxheTogYmxvY2s7XG5cdG9iamVjdC1maXQ6IGluaXRpYWw7XG59XG5cbi8qIENhcHRpb24gb3ZlcmxheSAqL1xuLmNhcm91c2VsLWNhcHRpb24ge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGJvdHRvbTogMDtcblx0bGVmdDogMDtcblx0cmlnaHQ6IDA7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpIHZhcigtLXNwYWNlLTYpIHZhcigtLXNwYWNlLTUpO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC43KSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi8qIFByZXYvTmV4dCBidXR0b25zICovXG4uY2Fyb3VzZWwtYnRuIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDUwJTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuXHR3aWR0aDogNDBweDtcblx0aGVpZ2h0OiA0MHB4O1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcblx0Ym9yZGVyOiBub25lO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuXHR6LWluZGV4OiAyO1xuXHRmb250LXNpemU6IDE4cHg7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLmNhcm91c2VsLXByZXYge1xuXHRsZWZ0OiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmNhcm91c2VsLW5leHQge1xuXHRyaWdodDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi8qIERvdCBpbmRpY2F0b3JzICovXG4uY2Fyb3VzZWwtZG90cyB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0Ym90dG9tOiB2YXIoLS1zcGFjZS0zKTtcblx0bGVmdDogNTAlO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogOHB4O1xuXHR6LWluZGV4OiAyO1xufVxuXG4uY2Fyb3VzZWwtZG90IHtcblx0d2lkdGg6IDEwcHg7XG5cdGhlaWdodDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG5cdGJvcmRlcjogbm9uZTtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY2Fyb3VzZWwtZG90LmFjdGl2ZSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0dHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xufVxuXG4vKiDilIDilIAgQ2FwdGlvbnMgb24gcGhvbmVzIOKUgOKUgFxuICAgVGhlIGNhcHRpb24gaXMgYW4gb3ZlcmxheSwgd2hpY2ggc3VpdHMgYSBsaW5lIG9uIGEgdGFsbCBwaG90bzsgb24gYSBwaG9uZSBhXG4gICBzZW50ZW5jZSBvciB0d28gY292ZXJzIG1vc3Qgb2YgdGhlIHBpY3R1cmUsIGZhY2VzIGluY2x1ZGVkXG4gICAoL3NlcnZpY2VzL3Jlc2VhcmNoL2NvbW11bml0eWVuZ2FnZW1lbnQvKS4gVXAgdG8gNjQwcHggYSBjYXJvdXNlbCB3aXRoXG4gICBjYXB0aW9ucyBwdXRzIGVhY2ggY2FwdGlvbiBCRUxPVyBpdHMgcGhvdG8gb24gYSBuYXZ5IHBhbmVsOiB0aGUgcGhvdG8ga2VlcHNcbiAgIHRoZSBjYXJvdXNlbCdzIHJhdGlvLCB0aGUgc2xpZGVzIHN0cmV0Y2ggdG8gdGhlIGxvbmdlc3QgY2FwdGlvbiwgYW5kIHRoZVxuICAgYXJyb3dzIGFuZCBkb3RzIHN0YXkgb24gdGhlIHBob3RvIChjb250YWluZXIgdW5pdHM6IDEwMGNxaSBpcyB0aGUgY2Fyb3VzZWwnc1xuICAgd2lkdGgsIHNvIHdpZHRoIC8gcmF0aW8gaXMgdGhlIHBob3RvJ3MgaGVpZ2h0KS4gUGVlayBjYXJvdXNlbHMgYXJlIGxlZnQgYWxvbmUuICovXG5AbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHtcblx0LmNhcm91c2VsOm5vdCguY2Fyb3VzZWwtLXBlZWspOmhhcyguY2Fyb3VzZWwtY2FwdGlvbikge1xuXHRcdGFzcGVjdC1yYXRpbzogYXV0bztcblx0XHRjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7XG5cdFx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0fVxuXHQuY2Fyb3VzZWw6bm90KC5jYXJvdXNlbC0tcGVlayk6aGFzKC5jYXJvdXNlbC1jYXB0aW9uKSAuY2Fyb3VzZWwtdHJhY2ssXG5cdC5jYXJvdXNlbDpub3QoLmNhcm91c2VsLS1wZWVrKTpoYXMoLmNhcm91c2VsLWNhcHRpb24pIC5jYXJvdXNlbC1zbGlkZSB7XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHR9XG5cdC5jYXJvdXNlbDpub3QoLmNhcm91c2VsLS1wZWVrKTpoYXMoLmNhcm91c2VsLWNhcHRpb24pIC5jYXJvdXNlbC1zbGlkZSB7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHR9XG5cdC5jYXJvdXNlbDpub3QoLmNhcm91c2VsLS1wZWVrKTpoYXMoLmNhcm91c2VsLWNhcHRpb24pIC5jYXJvdXNlbC1zbGlkZSBpbWcge1xuXHRcdGhlaWdodDogYXV0bztcblx0XHRhc3BlY3QtcmF0aW86IHZhcigtLWNhcm91c2VsLXJhdGlvLCAzLzIpO1xuXHR9XG5cdC5jYXJvdXNlbDpub3QoLmNhcm91c2VsLS1wZWVrKTpoYXMoLmNhcm91c2VsLWNhcHRpb24pIC5jYXJvdXNlbC1jYXB0aW9uIHtcblx0XHRwb3NpdGlvbjogc3RhdGljO1xuXHRcdGZsZXg6IDE7XG5cdFx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0fVxuXHQuY2Fyb3VzZWw6bm90KC5jYXJvdXNlbC0tcGVlayk6aGFzKC5jYXJvdXNlbC1jYXB0aW9uKSAuY2Fyb3VzZWwtYnRuIHtcblx0XHR0b3A6IGNhbGMoMTAwY3FpIC8gKHZhcigtLWNhcm91c2VsLXJhdGlvLCAzLzIpKSAvIDIpO1xuXHR9XG5cdC5jYXJvdXNlbDpub3QoLmNhcm91c2VsLS1wZWVrKTpoYXMoLmNhcm91c2VsLWNhcHRpb24pIC5jYXJvdXNlbC1kb3RzIHtcblx0XHRib3R0b206IGF1dG87XG5cdFx0dG9wOiBjYWxjKDEwMGNxaSAvICh2YXIoLS1jYXJvdXNlbC1yYXRpbywgMy8yKSkgLSB2YXIoLS1zcGFjZS0zKSAtIDEycHgpO1xuXHR9XG59XG4vKiDilIDilIDilIAgUGhvdG8gZ2FsbGVyeSArIGxpZ2h0Ym94IOKUgOKUgOKUgCAqL1xuLmdhbGxlcnkge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyMDBweCwgMWZyKSk7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5nYWxsZXJ5LWl0ZW0ge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0YXNwZWN0LXJhdGlvOiA0LzM7XG59XG5cbi5nYWxsZXJ5LWl0ZW0gaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLmdhbGxlcnktaXRlbTpob3ZlciBpbWcge1xuXHR0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xufVxuXG4vKiBHYWxsZXJ5IG9yaWVudGF0aW9uIHZhcmlhbnRzIOKAlCBhZGQgdGhlIG1vZGlmaWVyIHRvIHRoZSAuZ2FsbGVyeSBlbGVtZW50IGluIENLRWRpdG9yIHNvdXJjZTpcbiAgIC5nYWxsZXJ5LS1wb3J0cmFpdCAg4oaSIHRhbGwvcGhvbmUgc2hvdHMgKGhlYWRzaG90cywgcG9ydHJhaXRzKVxuICAgLmdhbGxlcnktLXNxdWFyZSAgICDihpIgc3F1YXJlIHRodW1ibmFpbHNcbiAgIC5nYWxsZXJ5LS1uYXR1cmFsICAg4oaSIGVhY2ggaW1hZ2Ugc2hvd3MgYXQgaXRzIG93biBuYXR1cmFsIHByb3BvcnRpb25zIChtYXNvbnJ5IGNvbHVtbnMpICovXG4uZ2FsbGVyeS0tcG9ydHJhaXQgLmdhbGxlcnktaXRlbSB7XG5cdGFzcGVjdC1yYXRpbzogMy80O1xufVxuXG4uZ2FsbGVyeS0tc3F1YXJlIC5nYWxsZXJ5LWl0ZW0ge1xuXHRhc3BlY3QtcmF0aW86IDE7XG59XG5cbi5nYWxsZXJ5LS1uYXR1cmFsIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGNvbHVtbnM6IDM7XG5cdGNvbHVtbi1nYXA6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uZ2FsbGVyeS0tbmF0dXJhbCAuZ2FsbGVyeS1pdGVtIHtcblx0YXNwZWN0LXJhdGlvOiB1bnNldDtcblx0YnJlYWstaW5zaWRlOiBhdm9pZDtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5nYWxsZXJ5LS1uYXR1cmFsIC5nYWxsZXJ5LWl0ZW0gaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogYXV0bztcblx0b2JqZWN0LWZpdDogdW5zZXQ7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuXHQuZ2FsbGVyeS0tbmF0dXJhbCB7XG5cdFx0Y29sdW1uczogMjtcblx0fVxufVxuLyogTGlnaHRib3ggb3ZlcmxheSAqL1xuLmxpZ2h0Ym94IHtcblx0cG9zaXRpb246IGZpeGVkO1xuXHRpbnNldDogMDtcblx0YmFja2dyb3VuZDogcmdiYSgwLCAxMCwgMjAsIDAuOTIpO1xuXHR6LWluZGV4OiAxMTAwO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0b3BhY2l0eTogMDtcblx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHR0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5saWdodGJveC5vcGVuIHtcblx0b3BhY2l0eTogMTtcblx0dmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuLmxpZ2h0Ym94LWltZyB7XG5cdG1heC13aWR0aDogOTB2dztcblx0bWF4LWhlaWdodDogODV2aDtcblx0b2JqZWN0LWZpdDogY29udGFpbjtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Ym94LXNoYWRvdzogMCAyMHB4IDYwcHggcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuXG4ubGlnaHRib3gtY2xvc2UsXG4ubGlnaHRib3gtbmF2IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcblx0Ym9yZGVyOiBub25lO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHdpZHRoOiA0NHB4O1xuXHRoZWlnaHQ6IDQ0cHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ubGlnaHRib3gtY2xvc2Uge1xuXHR0b3A6IHZhcigtLXNwYWNlLTUpO1xuXHRyaWdodDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5saWdodGJveC1wcmV2IHtcblx0dG9wOiA1MCU7XG5cdGxlZnQ6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4ubGlnaHRib3gtbmV4dCB7XG5cdHRvcDogNTAlO1xuXHRyaWdodDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi8qIOKUgOKUgOKUgCBWaWRlbyBlbWJlZHMg4pSA4pSA4pSAICovXG4udmlkZW8ge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGJhY2tncm91bmQ6ICMwMDA7XG5cdGFsaWduLXNlbGY6IHN0YXJ0O1xuXHRhc3BlY3QtcmF0aW86IDE2Lzk7XG59XG5cbi52aWRlbyBpZnJhbWUsXG4udmlkZW8gdmlkZW8ge1xuXHRkaXNwbGF5OiBibG9jaztcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0Ym9yZGVyOiBub25lO1xufVxuXG4vKiB0ZXh0IGJlc2lkZSBhIHZpZGVvICh2aWRlby50dCBjb250ZW50X3Bvc2l0aW9uIGxlZnQvcmlnaHQpIOKAlCBjZW50cmVkIG9uIGl0ICovXG4udmlkZW8tc2lkZSB7XG5cdGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuLnZpZGVvLXNpZGUgOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4vKiAxNjo5IHJlc3BvbnNpdmUgd3JhcHBlciAqL1xuLnZpZGVvLXJlc3BvbnNpdmUge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGFzcGVjdC1yYXRpbzogMTYvOTtcbn1cblxuLnZpZGVvLXJlc3BvbnNpdmUgaWZyYW1lLFxuLnZpZGVvLXJlc3BvbnNpdmUgdmlkZW8ge1xuXHRkaXNwbGF5OiBibG9jaztcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0Ym9yZGVyOiBub25lO1xufVxuXG4vKiBQb3N0ZXIgdGh1bWJuYWlsICsgcGxheSBidXR0b24gKi9cbi52aWRlby1wb3N0ZXIge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnZpZGVvLXBvc3RlciBpbWcge1xuXHR3aWR0aDogMTAwJTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGFzcGVjdC1yYXRpbzogMTYvOTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi52aWRlby1wbGF5IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDUwJTtcblx0bGVmdDogNTAlO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcblx0d2lkdGg6IDcycHg7XG5cdGhlaWdodDogNzJweDtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDUxLCAxMDIsIDAuODUpO1xuXHRib3JkZXI6IDNweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4vKiBDU1MgdHJpYW5nbGUgcGxheSBpY29uICovXG4udmlkZW8tcGxheTo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRib3JkZXItd2lkdGg6IDEycHggMCAxMnB4IDIycHg7XG5cdGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdmFyKC0tYXUtd2hpdGUpO1xuXHRtYXJnaW4tbGVmdDogNHB4O1xufVxuXG4udmlkZW8tcG9zdGVyOmhvdmVyIC52aWRlby1wbGF5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEuMSk7XG59XG5cbi52aWRlby1jYXB0aW9uIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgdGVhbS5jc3MgIMK3ICBzdGFmZiAvIFwibWVldCB0aGUgdGVhbVwiIGdyaWQgIChkZXB0c3RhZmZpbmRleC5kdClcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3NcbiAgIEEgcmVzcG9uc2l2ZSBncmlkIG9mIHBlb3BsZSDigJQgcG9ydHJhaXQgcGhvdG8sIG5hbWUsIHJvbGUsIGNvbnRhY3QuXG4gICBQaG90b3MgbGVhZCAodGhleSBnZXQgdGhlIHNwYWNlKTsgdGhlIG9sZCBQaG90by9OYW1lL0NvbnRhY3QgdGFibGUgaXMgZ29uZS5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLnRlYW0ge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyMDBweCwgMWZyKSk7XG5cdGdhcDogdmFyKC0tc3BhY2UtMTApIHZhcigtLXNwYWNlLTYpO1xufVxuXG4vKiBpbnRybyBjb250ZW50IGFib3ZlIHRoZSBncmlkICh0aGUgaW5kZXggcGFnZSdzIGFib3ZlX2NvbnRlbnQpIOKAlCBzcGFjZSBpdCBvZmZcbiAgIHRoZSBwaG90b3MgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGF1dGhvcmVkIGJsYW5rIHBhcmFncmFwaHMuICovXG4ucGFnZS1tYWluID4gOm5vdChoMSkgKyAudGVhbSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4udGVhbS1waG90byB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGFzcGVjdC1yYXRpbzogMy80O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1hdS1uYXZ5KSwgdmFyKC0tYXUtbmF2eS1saWdodCkpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi8qIG5vIHBob3RvIChvciBhIGJyb2tlbiBvbmUpOiBpbml0aWFscyBvbiBvbmUgb2YgZWlnaHQgYnJhbmQgZ3JhZGllbnRzIChmcm9tIHRoZSBkZXNpZ24gZ3VpZGUncyBpbWFnZVxuICAgcGxhY2Vob2xkZXJzKSwgcGlja2VkIGZyb20gdGhlIHBlcnNvbidzIGluaXRpYWxzIGFuZCBuYW1lIGxlbmd0aHMuXG4gICBUaGUgcGhvdG8gc2l0cyBvbiB0b3Agb2YgdGhlIGluaXRpYWxzLCBzbyB0aGV5IG9ubHkgc2hvdyB3aGVuIHRoZXJlIGlzIG5vIHBob3RvLiAqL1xuLnRlYW0tcGhvdG8tLWcxIHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE1MGRlZywgdmFyKC0tYXUtbmF2eS1saWdodCksIHZhcigtLWF1LWdvbGQpKTtcbn1cblxuLnRlYW0tcGhvdG8tLWcyIHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEyMGRlZywgdmFyKC0tYXUtbmF2eS1kZWVwKSwgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4udGVhbS1waG90by0tZzMge1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTY1ZGVnLCB2YXIoLS1hdS1uYXZ5KSwgdmFyKC0tYXUtZ29sZC1saWdodCkpO1xufVxuXG4udGVhbS1waG90by0tZzQge1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMjEwZGVnLCB2YXIoLS1hdS1nb2xkKSwgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4udGVhbS1waG90by0tZzUge1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHZhcigtLWF1LW5hdnktZGVlcCksIHZhcigtLWF1LW5hdnktbGlnaHQpKTtcbn1cblxuLnRlYW0tcGhvdG8tLWc2IHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDIwZGVnLCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSwgdmFyKC0tYXUtZ29sZC1saWdodCkpO1xufVxuXG4udGVhbS1waG90by0tZzcge1xuXHRiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAxNSUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjU1KSwgdHJhbnNwYXJlbnQgNTUlKSwgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgdmFyKC0tYXUtbmF2eSksIHZhcigtLWF1LW5hdnktZGVlcCkpO1xufVxuXG4vKiBmbG93aW5nIG1lc2ggZ3JhZGllbnQgKGpzL3RlYW0uanMpOiBvbmUgcGF0dGVybiBmbG93cyBhY3Jvc3MgZXZlcnkgcGhvdG8gdGlsZSBvZiBhIGdyaWQ7IHRoZSBzY3JpcHRcbiAgIHNoaWZ0cyBlYWNoIHRpbGUncyBiYWNrZ3JvdW5kIGJ5IGl0cyBvZmZzZXQgaW4gdGhlIGdyaWQsIHNvIHRoZSB0aWxlcyByZWFkIGFzIHdpbmRvd3Mgb250byBvbmUgc3VyZmFjZS5cbiAgIFRoZSBwYXR0ZXJuIGlzIGEgQ29sb3JmZnktc3R5bGUgXCJtZXNoIGdyYWRpZW50XCI6IDggYnJvYWQgYnJhbmQtY29sb3VyIHBvaW50cyAobmF2eSwgbGlnaHQvZGVlcCBuYXZ5LFxuICAgZ29sZCwgbGlnaHQgZ29sZCkgd2l0aCB2ZXJ5IHdpZGUgZmFsbG9mZiwgaW4gYSAxMzAwcHggMTUwMHB4IHVuaXQgdGhhdCByZXBlYXRzLiBFdmVyeSBwb2ludCB0aGF0XG4gICBjcm9zc2VzIHRoZSB1bml0J3MgZWRnZSBpcyBjb3BpZWQgdG8gdGhlIG9wcG9zaXRlIHNpZGUsIHNvIHRoZSByZXBlYXQgaGFzIG5vIHNlYW1zLiAqL1xuLnRlYW0tLWZsb3cgLnRlYW0tcGhvdG8ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoNDQycHggNTEwcHggYXQgLTEwNHB4IC00NXB4LCByZ2JhKDIzMiwgMTg0LCA3NSwgMC45NSkgMCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjU1KSAzNSUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjE1KSA3MCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDQ0MnB4IDUxMHB4IGF0IC0xMDRweCAxNDU1cHgsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjk1KSAwJSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuNTUpIDM1JSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuMTUpIDcwJSwgcmdiYSgyMzIsIDE4NCwgNzUsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNDQycHggNTEwcHggYXQgMTE5NnB4IC00NXB4LCByZ2JhKDIzMiwgMTg0LCA3NSwgMC45NSkgMCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjU1KSAzNSUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjE1KSA3MCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDQ0MnB4IDUxMHB4IGF0IDExOTZweCAxNDU1cHgsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjk1KSAwJSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuNTUpIDM1JSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuMTUpIDcwJSwgcmdiYSgyMzIsIDE4NCwgNzUsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNTQ2cHggNjMwcHggYXQgMjYwcHggLTQyMHB4LCByZ2JhKDE5OCwgMTQ5LCA0MywgMC45NSkgMCUsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjU1KSAzNSUsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjE1KSA3MCUsIHJnYmEoMTk4LCAxNDksIDQzLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDU0NnB4IDYzMHB4IGF0IDI2MHB4IDEwODBweCwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuOTUpIDAlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMC41NSkgMzUlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMC4xNSkgNzAlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg1NDZweCA2MzBweCBhdCAxNTYwcHggLTQyMHB4LCByZ2JhKDE5OCwgMTQ5LCA0MywgMC45NSkgMCUsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjU1KSAzNSUsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjE1KSA3MCUsIHJnYmEoMTk4LCAxNDksIDQzLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDU0NnB4IDYzMHB4IGF0IDE1NjBweCAxMDgwcHgsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjk1KSAwJSwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuNTUpIDM1JSwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuMTUpIDcwJSwgcmdiYSgxOTgsIDE0OSwgNDMsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNTIwcHggNjAwcHggYXQgLTE4MnB4IDg2OXB4LCByZ2JhKDE5OCwgMTQ5LCA0MywgMC45NSkgMCUsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjU1KSAzNSUsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjE1KSA3MCUsIHJnYmEoMTk4LCAxNDksIDQzLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDUyMHB4IDYwMHB4IGF0IDExMThweCA4NjlweCwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuOTUpIDAlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMC41NSkgMzUlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMC4xNSkgNzAlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg1NDZweCA2MzBweCBhdCAyODZweCAyNDBweCwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuOTUpIDAlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMC41NSkgMzUlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMC4xNSkgNzAlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg1NDZweCA2MzBweCBhdCAyODZweCAxNzQwcHgsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjk1KSAwJSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuNTUpIDM1JSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuMTUpIDcwJSwgcmdiYSgyMzIsIDE4NCwgNzUsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNTQ2cHggNjMwcHggYXQgMTU4NnB4IDI0MHB4LCByZ2JhKDIzMiwgMTg0LCA3NSwgMC45NSkgMCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjU1KSAzNSUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjE1KSA3MCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDU0NnB4IDYzMHB4IGF0IDE1ODZweCAxNzQwcHgsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjk1KSAwJSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuNTUpIDM1JSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuMTUpIDcwJSwgcmdiYSgyMzIsIDE4NCwgNzUsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNTg1cHggNjc1cHggYXQgMTMwcHggNjMwcHgsIHJnYmEoMCwgNjQsIDEyOCwgMC45NSkgMCUsIHJnYmEoMCwgNjQsIDEyOCwgMC41NSkgMzUlLCByZ2JhKDAsIDY0LCAxMjgsIDAuMTUpIDcwJSwgcmdiYSgwLCA2NCwgMTI4LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDU4NXB4IDY3NXB4IGF0IDEzMHB4IDIxMzBweCwgcmdiYSgwLCA2NCwgMTI4LCAwLjk1KSAwJSwgcmdiYSgwLCA2NCwgMTI4LCAwLjU1KSAzNSUsIHJnYmEoMCwgNjQsIDEyOCwgMC4xNSkgNzAlLCByZ2JhKDAsIDY0LCAxMjgsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNTg1cHggNjc1cHggYXQgMTQzMHB4IDYzMHB4LCByZ2JhKDAsIDY0LCAxMjgsIDAuOTUpIDAlLCByZ2JhKDAsIDY0LCAxMjgsIDAuNTUpIDM1JSwgcmdiYSgwLCA2NCwgMTI4LCAwLjE1KSA3MCUsIHJnYmEoMCwgNjQsIDEyOCwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg1ODVweCA2NzVweCBhdCAxNDMwcHggMjEzMHB4LCByZ2JhKDAsIDY0LCAxMjgsIDAuOTUpIDAlLCByZ2JhKDAsIDY0LCAxMjgsIDAuNTUpIDM1JSwgcmdiYSgwLCA2NCwgMTI4LCAwLjE1KSA3MCUsIHJnYmEoMCwgNjQsIDEyOCwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3ODBweCA5MDBweCBhdCAtNTg0cHggLTIxMHB4LCByZ2JhKDAsIDUxLCAxMDIsIDAuOTUpIDAlLCByZ2JhKDAsIDUxLCAxMDIsIDAuNTUpIDM1JSwgcmdiYSgwLCA1MSwgMTAyLCAwLjE1KSA3MCUsIHJnYmEoMCwgNTEsIDEwMiwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3ODBweCA5MDBweCBhdCAtNTg0cHggMTI5MHB4LCByZ2JhKDAsIDUxLCAxMDIsIDAuOTUpIDAlLCByZ2JhKDAsIDUxLCAxMDIsIDAuNTUpIDM1JSwgcmdiYSgwLCA1MSwgMTAyLCAwLjE1KSA3MCUsIHJnYmEoMCwgNTEsIDEwMiwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3ODBweCA5MDBweCBhdCA3MTVweCAtMjEwcHgsIHJnYmEoMCwgNTEsIDEwMiwgMC45NSkgMCUsIHJnYmEoMCwgNTEsIDEwMiwgMC41NSkgMzUlLCByZ2JhKDAsIDUxLCAxMDIsIDAuMTUpIDcwJSwgcmdiYSgwLCA1MSwgMTAyLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDc4MHB4IDkwMHB4IGF0IDcxNXB4IDEyOTBweCwgcmdiYSgwLCA1MSwgMTAyLCAwLjk1KSAwJSwgcmdiYSgwLCA1MSwgMTAyLCAwLjU1KSAzNSUsIHJnYmEoMCwgNTEsIDEwMiwgMC4xNSkgNzAlLCByZ2JhKDAsIDUxLCAxMDIsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzgwcHggOTAwcHggYXQgMjAxNXB4IC0yMTBweCwgcmdiYSgwLCA1MSwgMTAyLCAwLjk1KSAwJSwgcmdiYSgwLCA1MSwgMTAyLCAwLjU1KSAzNSUsIHJnYmEoMCwgNTEsIDEwMiwgMC4xNSkgNzAlLCByZ2JhKDAsIDUxLCAxMDIsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzgwcHggOTAwcHggYXQgMjAxNXB4IDEyOTBweCwgcmdiYSgwLCA1MSwgMTAyLCAwLjk1KSAwJSwgcmdiYSgwLCA1MSwgMTAyLCAwLjU1KSAzNSUsIHJnYmEoMCwgNTEsIDEwMiwgMC4xNSkgNzAlLCByZ2JhKDAsIDUxLCAxMDIsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzE1cHggODI1cHggYXQgLTYyNHB4IC03NTBweCwgcmdiYSgwLCA2NCwgMTI4LCAwLjk1KSAwJSwgcmdiYSgwLCA2NCwgMTI4LCAwLjU1KSAzNSUsIHJnYmEoMCwgNjQsIDEyOCwgMC4xNSkgNzAlLCByZ2JhKDAsIDY0LCAxMjgsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzE1cHggODI1cHggYXQgLTYyNHB4IDc1MHB4LCByZ2JhKDAsIDY0LCAxMjgsIDAuOTUpIDAlLCByZ2JhKDAsIDY0LCAxMjgsIDAuNTUpIDM1JSwgcmdiYSgwLCA2NCwgMTI4LCAwLjE1KSA3MCUsIHJnYmEoMCwgNjQsIDEyOCwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3MTVweCA4MjVweCBhdCAtNjI0cHggMjI1MHB4LCByZ2JhKDAsIDY0LCAxMjgsIDAuOTUpIDAlLCByZ2JhKDAsIDY0LCAxMjgsIDAuNTUpIDM1JSwgcmdiYSgwLCA2NCwgMTI4LCAwLjE1KSA3MCUsIHJnYmEoMCwgNjQsIDEyOCwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3MTVweCA4MjVweCBhdCA2NzZweCAtNzUwcHgsIHJnYmEoMCwgNjQsIDEyOCwgMC45NSkgMCUsIHJnYmEoMCwgNjQsIDEyOCwgMC41NSkgMzUlLCByZ2JhKDAsIDY0LCAxMjgsIDAuMTUpIDcwJSwgcmdiYSgwLCA2NCwgMTI4LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDcxNXB4IDgyNXB4IGF0IDY3NnB4IDc1MHB4LCByZ2JhKDAsIDY0LCAxMjgsIDAuOTUpIDAlLCByZ2JhKDAsIDY0LCAxMjgsIDAuNTUpIDM1JSwgcmdiYSgwLCA2NCwgMTI4LCAwLjE1KSA3MCUsIHJnYmEoMCwgNjQsIDEyOCwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3MTVweCA4MjVweCBhdCA2NzZweCAyMjUwcHgsIHJnYmEoMCwgNjQsIDEyOCwgMC45NSkgMCUsIHJnYmEoMCwgNjQsIDEyOCwgMC41NSkgMzUlLCByZ2JhKDAsIDY0LCAxMjgsIDAuMTUpIDcwJSwgcmdiYSgwLCA2NCwgMTI4LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDcxNXB4IDgyNXB4IGF0IDE5NzZweCAtNzUwcHgsIHJnYmEoMCwgNjQsIDEyOCwgMC45NSkgMCUsIHJnYmEoMCwgNjQsIDEyOCwgMC41NSkgMzUlLCByZ2JhKDAsIDY0LCAxMjgsIDAuMTUpIDcwJSwgcmdiYSgwLCA2NCwgMTI4LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDcxNXB4IDgyNXB4IGF0IDE5NzZweCA3NTBweCwgcmdiYSgwLCA2NCwgMTI4LCAwLjk1KSAwJSwgcmdiYSgwLCA2NCwgMTI4LCAwLjU1KSAzNSUsIHJnYmEoMCwgNjQsIDEyOCwgMC4xNSkgNzAlLCByZ2JhKDAsIDY0LCAxMjgsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzE1cHggODI1cHggYXQgMTk3NnB4IDIyNTBweCwgcmdiYSgwLCA2NCwgMTI4LCAwLjk1KSAwJSwgcmdiYSgwLCA2NCwgMTI4LCAwLjU1KSAzNSUsIHJnYmEoMCwgNjQsIDEyOCwgMC4xNSkgNzAlLCByZ2JhKDAsIDY0LCAxMjgsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzgwcHggOTAwcHggYXQgLTM2NHB4IDMzMHB4LCByZ2JhKDAsIDI2LCA1MSwgMC45NSkgMCUsIHJnYmEoMCwgMjYsIDUxLCAwLjU1KSAzNSUsIHJnYmEoMCwgMjYsIDUxLCAwLjE1KSA3MCUsIHJnYmEoMCwgMjYsIDUxLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDc4MHB4IDkwMHB4IGF0IC0zNjRweCAxODMwcHgsIHJnYmEoMCwgMjYsIDUxLCAwLjk1KSAwJSwgcmdiYSgwLCAyNiwgNTEsIDAuNTUpIDM1JSwgcmdiYSgwLCAyNiwgNTEsIDAuMTUpIDcwJSwgcmdiYSgwLCAyNiwgNTEsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzgwcHggOTAwcHggYXQgOTM2cHggMzMwcHgsIHJnYmEoMCwgMjYsIDUxLCAwLjk1KSAwJSwgcmdiYSgwLCAyNiwgNTEsIDAuNTUpIDM1JSwgcmdiYSgwLCAyNiwgNTEsIDAuMTUpIDcwJSwgcmdiYSgwLCAyNiwgNTEsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzgwcHggOTAwcHggYXQgOTM2cHggMTgzMHB4LCByZ2JhKDAsIDI2LCA1MSwgMC45NSkgMCUsIHJnYmEoMCwgMjYsIDUxLCAwLjU1KSAzNSUsIHJnYmEoMCwgMjYsIDUxLCAwLjE1KSA3MCUsIHJnYmEoMCwgMjYsIDUxLCAwKSAxMDAlKSwgbGluZWFyLWdyYWRpZW50KHZhcigtLWF1LW5hdnkpLCB2YXIoLS1hdS1uYXZ5KSk7XG5cdGJhY2tncm91bmQtc2l6ZTogMTMwMHB4IDE1MDBweDtcblx0YmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbn1cblxuLnRlYW0taW5pdGlhbHMge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogY2xhbXAoMi41cmVtLCA2dncsIDMuNXJlbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpO1xuXHR0ZXh0LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMjYsIDUxLCAwLjM1KTsgLyoga2VlcHMgd2hpdGUgaW5pdGlhbHMgbGVnaWJsZSBvbiB0aGUgZ29sZCBlbmQgKi9cblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLnRlYW0tcGhvdG8gaW1nIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHQtby1vYmplY3QtZml0OiBjb3Zlcjtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi50ZWFtLXBob3RvOmhvdmVyIGltZyB7XG5cdHRyYW5zZm9ybTogc2NhbGUoMS4wNCk7XG59XG5cbi50ZWFtLW5hbWUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi50ZWFtLW5hbWUgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4udGVhbS1uYW1lIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi50ZWFtLXJvbGUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0bGluZS1oZWlnaHQ6IDEuNDtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMSk7XG5cdC8qIGxvbmcgdGl0bGVzIHN0b3AgYXQgdGhyZWUgbGluZXM7IHRoZSBmdWxsIG9uZSBpcyBpbiB0aGUgdGl0bGUgYXR0cmlidXRlIGFuZCBvbiB0aGUgcHJvZmlsZSAqL1xuXHRkaXNwbGF5OiAtd2Via2l0LWJveDtcblx0LXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcblx0LXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuXHRsaW5lLWNsYW1wOiAzO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBhIGhlYWRpbmcgYmV0d2VlbiBzZXZlcmFsIHRlYW0gZ3JpZHMgb24gb25lIHBhZ2UgKGUuZy4gL2NoaHMvZmFjdWx0eS86IG9uZSBncmlkIHBlciBzY2hvb2wpICovXG4ucGFnZS1tYWluIC50ZWFtLWdyb3VwIHtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0xMikgMCB2YXIoLS1zcGFjZS02KTtcblx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTYpO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4ucGFnZS1tYWluIGgxICsgLnRlYW0tZ3JvdXAge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcblx0cGFkZGluZy10b3A6IDA7XG5cdGJvcmRlci10b3A6IDA7XG59XG5cbi50ZWFtLWNvbnRhY3Qge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTMpIDAgMDtcblx0cGFkZGluZzogMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEpO1xufVxuXG4udGVhbS1jb250YWN0IGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnRlYW0tY29udGFjdCBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4udGVhbS1jb250YWN0IC50ZWFtLWFwcHQge1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGluZGl2aWR1YWwgc3RhZmYgcHJvZmlsZSAgKGRlcHRzdGFmZml0ZW0uZHQpIOKAlCByZW5kZXJzIGluc2lkZSAucGFnZS1tYWluLlxuICAgRk9VUiBzZWxlY3RhYmxlIGxheW91dHMsIGNob3NlbiBwZXIgc2VjdGlvbiAoaW5kZXggQ1QpIG9yIHBlciBwZXJzb25cbiAgIChpdGVtIENUKTogLnN0YWZmLS1mZWF0dXJlIMK3IC5zdGFmZi0tY2FyZCDCtyAuc3RhZmYtLWNlbnRlcmVkIMK3IC5zdGFmZi0tc3BsaXQuXG4gICBTaGFyZWQgcGllY2VzIGZpcnN0LCB0aGVuIHBlci1sYXlvdXQgYmxvY2tzLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiDilIDilIDilIAgc2hhcmVkOiBwb3J0cmFpdCwgbmFtZSwgcm9sZSwgZmFjdHMsIGxpbmtzLCBjb250YWN0IGNoaXBzLCBib2R5IOKUgOKUgOKUgCAqL1xuLnN0YWZmLXBvcnRyYWl0IGltZyB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogMTAwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLnBhZ2UtbWFpbiBoMS5zdGFmZi1uYW1lIHtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nLWJvdHRvbTogMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTN4bCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjA1O1xuXHRsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4ucGFnZS1tYWluIGgxLnN0YWZmLW5hbWU6OmFmdGVyIHtcblx0ZGlzcGxheTogbm9uZTtcbn0gLyogbm8gcGFnZS1oZWFkZXIgZ29sZCBydWxlIGhlcmUgKi9cbi5wYWdlLW1haW4gLnN0YWZmLXJvbGUge1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTIpIDAgMDtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0bGluZS1oZWlnaHQ6IDEuMzU7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLnBhZ2UtbWFpbiAuc3RhZmYtZmFjdHMge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcbn1cblxuLnN0YWZmLWZhY3RzIGxpIHtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLnN0YWZmLWZhY3RzIGxpID4gc3BhbjpsYXN0LWNoaWxkIHtcblx0bWluLXdpZHRoOiAwO1xuXHRvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xufVxuXG4uc3RhZmYtZmFjdHMgLmZhY3QtbGFiZWwge1xuXHRmbGV4OiAwIDAgNC41cmVtO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdHBhZGRpbmctdG9wOiAwLjI1ZW07XG59XG5cbi5zdGFmZi1mYWN0cyBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5zdGFmZi1mYWN0cyBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4ucGFnZS1tYWluIC5zdGFmZi1saW5rcyB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNCkgMCAwO1xuXHRwYWRkaW5nOiAwO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4uc3RhZmYtbGlua3MgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLnN0YWZmLWxpbmtzIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5zdGFmZi1saW5rcyBpIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRmb250LXNpemU6IDAuODVlbTtcblx0d2lkdGg6IDFlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiBjb250YWN0IGNoaXBzL3BpbGxzIChmZWF0dXJlICsgY2VudGVyZWQpICovXG4uc3RhZmYtY29udGFjdCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLnN0YWZmLWNvbnRhY3QgYSB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTQpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uc3RhZmYtY29udGFjdCBzdmcge1xuXHR3aWR0aDogMTVweDtcblx0aGVpZ2h0OiAxNXB4O1xuXHRmaWxsOiBub25lO1xuXHRzdHJva2Utd2lkdGg6IDEuODtcblx0ZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIGFwcG9pbnRtZW50IGJ1dHRvbiAoY2FyZCArIHNwbGl0IHJldXNlIC5idG4pICovXG4uc3RhZmYtYXBwdCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4vKiBzaGFyZWQgcHJvc2UgYm9keSDigJQgZ29sZCBQbGV4LU1vbm8gZXllYnJvd3Mgb24gdGhlIHNlY3Rpb24gaGVhZGluZ3MgKi9cbi5zdGFmZi1ib2R5IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMTApO1xuXHRvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xufVxuXG4ucGFnZS1tYWluIC5zdGFmZi1ib2R5IGgyIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjE2ZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtOCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xufVxuXG4ucGFnZS1tYWluIC5zdGFmZi1ib2R5ID4gaDI6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4uc3RhZmYtYm9keSBwIHtcblx0bGluZS1oZWlnaHQ6IDEuNzI7XG59XG5cbi8qIOKUgOKUgOKUgCBBIMK3IEVkaXRvcmlhbCBGZWF0dXJlIOKAlCBuYXZ5IGhlcm8gYmFuZCwgZ29sZC1mcmFtZWQgcG9ydHJhaXQg4pSA4pSA4pSAICovXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWhlcm8ge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1hdS1uYXZ5KSwgdmFyKC0tYXUtbmF2eS1kZWVwKSk7XG5cdGNvbG9yOiAjZmZmO1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWhlcm86OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0cmlnaHQ6IC04MHB4O1xuXHR0b3A6IC04MHB4O1xuXHR3aWR0aDogMjYwcHg7XG5cdGhlaWdodDogMjYwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0YmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuMTQpLCB0cmFuc3BhcmVudCA2OCUpO1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWhlcm8taW5uZXIge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTgwcHggMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTgpO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLXBvcnRyYWl0IHtcblx0d2lkdGg6IDE4MHB4O1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLXBvcnRyYWl0IGltZyB7XG5cdGFzcGVjdC1yYXRpbzogNC81O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRib3JkZXI6IDNweCBzb2xpZCByZ2JhKDIzMiwgMTg0LCA3NSwgMC44NSk7XG5cdGJveC1zaGFkb3c6IDAgMTRweCAzNHB4IHJnYmEoMCwgMCwgMCwgMC40KTtcbn1cblxuLnBhZ2UtbWFpbiAuc3RhZmYtLWZlYXR1cmUgaDEuc3RhZmYtbmFtZSB7XG5cdGNvbG9yOiAjZmZmO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtNHhsKTtcblx0bGluZS1oZWlnaHQ6IDEuMDI7XG59XG5cbi5zdGFmZi0tZmVhdHVyZSAuc3RhZmYtcm9sZSB7XG5cdGNvbG9yOiAjZTdkZGM5O1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWNvbnRhY3Qge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1jb250YWN0IGEge1xuXHRjb2xvcjogI2ZmZjtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA5KTtcblx0Ym9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1jb250YWN0IGE6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpO1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWNvbnRhY3Qgc3ZnIHtcblx0c3Ryb2tlOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1jb250YWN0IGEuaXMtcHJpbWFyeSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1jb250YWN0IGEuaXMtcHJpbWFyeSBzdmcge1xuXHRzdHJva2U6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi5zdGFmZi0tZmVhdHVyZSAuc3RhZmYtbGlua3Mge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1ib2R5IHtcblx0bWF4LXdpZHRoOiA3MGNoO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHtcblx0LnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1oZXJvLWlubmVyIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0XHRqdXN0aWZ5LWl0ZW1zOiBzdGFydDtcblx0fVxufVxuLyog4pSA4pSA4pSAIEIgwrcgQ29udGFjdCBDYXJkIFJhaWwg4oCUIHN0aWNreSBjcmVhbSBjYXJkICsgc2Nyb2xsaW5nIGJpbyDilIDilIDilIAgKi9cbi5zdGFmZi0tY2FyZCAuc3RhZmYtY29scyB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMjgwcHggMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTgpO1xuXHRhbGlnbi1pdGVtczogc3RhcnQ7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLnN0YWZmLS1jYXJkIC5zdGFmZi1jYXJkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG5cdHBvc2l0aW9uOiBzdGlja3k7XG5cdHRvcDogY2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLXNwYWNlLTMpKTtcbn1cblxuLnN0YWZmLS1jYXJkIC5zdGFmZi1wb3J0cmFpdCBpbWcge1xuXHRhc3BlY3QtcmF0aW86IDQvNTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5wYWdlLW1haW4gLnN0YWZmLS1jYXJkIGgxLnN0YWZmLW5hbWUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtMnhsKTtcbn1cblxuLnN0YWZmLS1jYXJkIC5zdGFmZi1yb2xlIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcbn1cblxuLnN0YWZmLS1jYXJkIC5zdGFmZi1mYWN0cyB7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG59XG5cbi5zdGFmZi0tY2FyZCAuZmFjdC1sYWJlbCB7XG5cdGZsZXg6IDAgMCAzLjVyZW07XG59XG5cbi5zdGFmZi0tY2FyZCAuc3RhZmYtYXBwdCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdHdpZHRoOiAxMDAlO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLnN0YWZmLS1jYXJkIC5zdGFmZi1ib2R5IHtcblx0bWFyZ2luLXRvcDogMDtcblx0bWluLXdpZHRoOiAwO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzIwcHgpIHtcblx0LnN0YWZmLS1jYXJkIC5zdGFmZi1jb2xzIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0fVxuXHQuc3RhZmYtLWNhcmQgLnN0YWZmLWNhcmQge1xuXHRcdHBvc2l0aW9uOiBzdGF0aWM7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBDIMK3IENlbnRlcmVkIFBvcnRyYWl0IOKAlCBzeW1tZXRyaWNhbCwgZ29sZCBjb3JuZXIgKyBmbG91cmlzaCDilIDilIDilIAgKi9cbi5zdGFmZi0tY2VudGVyZWQge1xuXHRtYXgtd2lkdGg6IDc2MHB4O1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLXBvcnRyYWl0IHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR3aWR0aDogMjEwcHg7XG5cdG1hcmdpbjogMCBhdXRvIHZhcigtLXNwYWNlLTUpO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1wb3J0cmFpdCBpbWcge1xuXHRhc3BlY3QtcmF0aW86IDQvNTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbn1cblxuLnN0YWZmLS1jZW50ZXJlZCAuc3RhZmYtcG9ydHJhaXQ6OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRyaWdodDogLTEycHg7XG5cdGJvdHRvbTogLTEycHg7XG5cdHdpZHRoOiA2NHB4O1xuXHRoZWlnaHQ6IDY0cHg7XG5cdGJvcmRlci1yaWdodDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItYm90dG9tOiAzcHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS1yYWRpdXMtbGcpIDA7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLXJ1bGUge1xuXHR3aWR0aDogNDRweDtcblx0aGVpZ2h0OiAzcHg7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNCkgYXV0bztcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IDJweDtcbn1cblxuLnN0YWZmLS1jZW50ZXJlZCAuc3RhZmYtcm9sZSB7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1jb250YWN0IHtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1jb250YWN0IGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkICNmMGUyYzQ7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLWNvbnRhY3QgYTpob3ZlciB7XG5cdGJhY2tncm91bmQ6ICNmYmVlY2Y7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLWNvbnRhY3Qgc3ZnIHtcblx0c3Ryb2tlOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnN0YWZmLS1jZW50ZXJlZCAuc3RhZmYtY29udGFjdCBhLmlzLXByaW1hcnkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6ICNmZmY7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLWNvbnRhY3QgYS5pcy1wcmltYXJ5IHN2ZyB7XG5cdHN0cm9rZTogdmFyKC0tYXUtZ29sZC1saWdodCk7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLWJvZHkge1xuXHRtYXgtd2lkdGg6IDYyY2g7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtOCkgYXV0byAwO1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtOCk7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi8qIOKUgOKUgOKUgCBEIMK3IFNwbGl0IEZlYXR1cmUg4oCUIGZ1bGwtaGVpZ2h0IHBvcnRyYWl0ICsgY3JlYW0gcGFuZWwg4pSA4pSA4pSAICovXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi10b3Age1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQyJSAxZnI7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5zdGFmZi0tc3BsaXQgLnN0YWZmLXBvcnRyYWl0IHtcblx0aGVpZ2h0OiAxMDAlO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1wb3J0cmFpdCBpbWcge1xuXHRoZWlnaHQ6IDEwMCU7XG5cdG1pbi1oZWlnaHQ6IDM2MHB4O1xuXHRib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1wYW5lbCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtOCk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ucGFnZS1tYWluIC5zdGFmZi0tc3BsaXQgaDEuc3RhZmYtbmFtZSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0zeGwpO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1yb2xlIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1mYWN0cyB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1hcHB0IHtcblx0YWxpZ24tc2VsZjogc3RhcnQ7XG59XG5cbi5zdGFmZi0tc3BsaXQgLnN0YWZmLWJvZHkge1xuXHRtYXgtd2lkdGg6IDc0Y2g7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2NDBweCkge1xuXHQuc3RhZmYtLXNwbGl0IC5zdGFmZi10b3Age1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHR9XG5cdC5zdGFmZi0tc3BsaXQgLnN0YWZmLXBvcnRyYWl0IGltZyB7XG5cdFx0bWluLWhlaWdodDogMzAwcHg7XG5cdH1cbn1cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYmlvIGRpcmVjdG9yeSDigJQgcG9ydHJhaXQgZ3JpZCAgKGNvbXBvbmVudHMvYmlvLnR0KVxuICAgUGhvdG8tZm9yd2FyZCBwZW9wbGUgY2FyZHM6IGEgcG9ydHJhaXQgaGVhZHNob3Qgb24gdG9wLCB0aGVuIG5hbWUgK1xuICAgYmx1cmIuIEF1dG8tZmlsbHMgYWNyb3NzIHRoZSBzZWN0aW9uIGFuZCByZWZsb3dzIGRvd24gKOKApuKGkjPihpIy4oaSMSkgYXMgdGhlXG4gICB2aWV3cG9ydCBuYXJyb3dzIOKAlCBubyBicmVha3BvaW50cyBuZWVkZWQuIFJlYWRzIGFzIGEgZmFjdWx0eSBkaXJlY3RvcnksXG4gICBkaXN0aW5jdCBmcm9tIHRoZSBjb2x1bW5zIGNhcmQgZ3JpZCBhbmQgdGhlIE1lZXQtdGhlLVRlYW0gcG9ydHJhaXQgZ3JpZC5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyogc3RhbmRhbG9uZSByaWNoLXRleHQgaW50cm8gYWJvdmUgdGhlIGRpcmVjdG9yeSAodGhlIHNlY3Rpb24ncyBcInRleHRcIiBhcmVhKS5cbiAgIEJhbmQtYXdhcmUgc28gaXQgcmVhZHMgb24gZGFyayBiYW5kczsgYSByZWFkYWJsZSBtZWFzdXJlIGZvciBwbGFpbiBjb3B5LiAqL1xuLmJpby1pbnRybyB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoLXRleHQpO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0bGluZS1oZWlnaHQ6IDEuNztcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMTApO1xufVxuXG4uYmlvLWludHJvID4gOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLmJpby1pbnRybyA6aXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNikge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi5iaW8taW50cm8gYSB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eS1saWdodCkpO1xufVxuXG4uYmlvLWludHJvIHAgKyBwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5iaW8tZGlyZWN0b3J5IHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTkwcHgsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTgpIHZhcigtLXNwYWNlLTYpO1xufVxuXG4uYmlvLWVudHJ5IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLmJpby1waG90byBpbWcge1xuXHRkaXNwbGF5OiBibG9jaztcblx0d2lkdGg6IDEwMCU7XG5cdGFzcGVjdC1yYXRpbzogNC81O1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4uYmlvLW5hbWUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLmJpby1ibHVyYiB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0bGluZS1oZWlnaHQ6IDEuNjtcblx0b3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbn1cblxuLmJpby1ibHVyYiBwICsgcCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4vKiBzaW5nbGUtcGVyc29uIGJpbyDigJQgaG9yaXpvbnRhbCBjYXJkIGluc3RlYWQgb2YgdGhlIHBvcnRyYWl0LWdyaWQgY29sdW1uICovXG4uYmlvLWVudHJ5Om9ubHktY2hpbGQge1xuXHRncmlkLWNvbHVtbjogMS8tMTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTtcblx0bWF4LXdpZHRoOiA2NDBweDtcbn1cblxuLmJpby1lbnRyeTpvbmx5LWNoaWxkIC5iaW8tcGhvdG8gaW1nIHtcblx0YXNwZWN0LXJhdGlvOiAzLzQ7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2MDFweCkge1xuXHQuYmlvLWVudHJ5Om9ubHktY2hpbGQge1xuXHRcdGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0fVxuXHQuYmlvLWVudHJ5Om9ubHktY2hpbGQgLmJpby1waG90byB7XG5cdFx0ZmxleDogMCAwIDIwMHB4O1xuXHR9XG5cdC5iaW8tZW50cnk6b25seS1jaGlsZCAuYmlvLWRldGFpbCB7XG5cdFx0bWluLXdpZHRoOiAwO1xuXHR9XG5cdC5iaW8tZW50cnk6b25seS1jaGlsZCAuYmlvLW5hbWUge1xuXHRcdG1hcmdpbi10b3A6IDA7XG5cdH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuXHQuYmlvLWVudHJ5Om9ubHktY2hpbGQgLmJpby1waG90byB7XG5cdFx0bWF4LXdpZHRoOiAyMDBweDtcblx0fVxufVxuLyogYmlvICsgc3BsaXQgdG9rZW4gKEN1c3RvbSBDbGFzcyBcInNwbGl0LTMtMlwiIC8gXCJzcGxpdC0yLTNcIiwgdGhlIHNhbWUgdG9rZW5zIHRoZVxuICAgY29sdW1ucyBncmlkIHVzZXMpOiB0aGUgcGVvcGxlIG9uIG9uZSBzaWRlIGFzIGhvcml6b250YWwgY2FyZHMsIHRoZSBzZWN0aW9uJ3NcbiAgIGludHJvIHRleHQgYmVzaWRlIHRoZW0sIGFzIHRoZSBsZWdhY3kgaG9tZXBhZ2UgYmlvIGZlYXR1cmUgbGFpZCB0aGVtIG91dC4gKi9cbkBtZWRpYSAobWluLXdpZHRoOiA3NjFweCkge1xuXHQ6aXMoLnNwbGl0LTMtMiwgLnNwbGl0LTItMykgPiAuc2VjdGlvbi1pbm5lcjpoYXMoPiAuYmlvLWRpcmVjdG9yeSkge1xuXHRcdGRpc3BsYXk6IGdyaWQ7XG5cdFx0Y29sdW1uLWdhcDogdmFyKC0tc3BhY2UtMTApO1xuXHRcdGFsaWduLWl0ZW1zOiBzdGFydDtcblx0fVxuXHQuc3BsaXQtMy0yID4gLnNlY3Rpb24taW5uZXI6aGFzKD4gLmJpby1kaXJlY3RvcnkpIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDNmciAyZnI7XG5cdH1cblx0LnNwbGl0LTItMyA+IC5zZWN0aW9uLWlubmVyOmhhcyg+IC5iaW8tZGlyZWN0b3J5KSB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyZnIgM2ZyO1xuXHR9XG5cdDppcyguc3BsaXQtMy0yLCAuc3BsaXQtMi0zKSA+IC5zZWN0aW9uLWlubmVyID4gLnNlY3Rpb24taGVhZCB7XG5cdFx0Z3JpZC1jb2x1bW46IDEvLTE7XG5cdH1cblx0OmlzKC5zcGxpdC0zLTIsIC5zcGxpdC0yLTMpID4gLnNlY3Rpb24taW5uZXIgPiAuYmlvLWRpcmVjdG9yeSB7XG5cdFx0Z3JpZC1jb2x1bW46IDE7XG5cdFx0Z3JpZC1yb3c6IDI7XG5cdH1cblx0OmlzKC5zcGxpdC0zLTIsIC5zcGxpdC0yLTMpID4gLnNlY3Rpb24taW5uZXIgPiAuYmlvLWludHJvIHtcblx0XHRncmlkLWNvbHVtbjogMjtcblx0XHRncmlkLXJvdzogMjtcblx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHR9XG59XG46aXMoLnNwbGl0LTMtMiwgLnNwbGl0LTItMykgLmJpby1kaXJlY3Rvcnkge1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuOmlzKC5zcGxpdC0zLTIsIC5zcGxpdC0yLTMpIC5iaW8tZW50cnkge1xuXHRmbGV4LWRpcmVjdGlvbjogcm93O1xuXHRnYXA6IHZhcigtLXNwYWNlLTUpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpO1xuXHRtYXgtd2lkdGg6IG5vbmU7XG59XG5cbjppcyguc3BsaXQtMy0yLCAuc3BsaXQtMi0zKSAuYmlvLXBob3RvIHtcblx0ZmxleDogMCAwIDE2MHB4O1xufVxuXG46aXMoLnNwbGl0LTMtMiwgLnNwbGl0LTItMykgLmJpby1kZXRhaWwge1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbjppcyguc3BsaXQtMy0yLCAuc3BsaXQtMi0zKSAuYmlvLW5hbWUge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcblx0OmlzKC5zcGxpdC0zLTIsIC5zcGxpdC0yLTMpIC5iaW8tcGhvdG8ge1xuXHRcdGZsZXgtYmFzaXM6IDExMHB4O1xuXHR9XG59XG4vKiBkZWNvcmF0aXZlIGltYWdlLW9ubHkgcm93cyBzcGFuIHRoZSB3aG9sZSBncmlkIHdpZHRoICovXG4uYmlvLWZpZ3VyZSB7XG5cdGdyaWQtY29sdW1uOiAxLy0xO1xufVxuXG4uYmlvLWZpZ3VyZSBpbWcge1xuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBkZXB0LmNzcyAgwrcgIGRlcGFydG1lbnQgc2VjdGlvbi1wYWdlIHRlbXBsYXRlIChkZXB0X21haW4ud3JhcClcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3MsIGxheW91dC5jc3MgKC5zZWN0aW9uIGJhbmRzKVxuXG4gICBBIGRlcGFydG1lbnQgdmFyaWFudCBvZiB0aGUgaG9tZXBhZ2UtYWR2YW5jZWQgZGlzcGxheTogYSBzdGlja3kgZGFya1xuICAgbmF2eSByYWlsIChkZXBhcnRtZW50IGlkZW50aXR5ICsgc2VjdGlvbiBqdW1wLW5hdiArIENUQXMpIGJlc2lkZSB0aGVcbiAgIG5vcm1hbCBwYWdlLmR0IHNlY3Rpb24gc3RhY2suIFNhbWUgc2VjdGlvbnMsIHNhbWUgY29udGVudCB0eXBlcyDigJRcbiAgIG9ubHkgdGhlIHN1cnJvdW5kIGRpZmZlcnMuXG5cbiAgIE9ORSByYWlsLCB0d28gc3RhdGVzICh0aGUgZGVtbydzIHNlcGFyYXRlIHNpZGViYXIgKyBpY29uLXN0cmlwIGFyZVxuICAgbWVyZ2VkIHNvIHRoZXJlJ3MgYSBzaW5nbGUgc2V0IG9mIG1hcmt1cCB0byBtYWludGFpbik6XG4gICAgIOKJpTEwODAgICBmdWxsIHJhaWwsIGxhYmVscyB2aXNpYmxlXG4gICAgIDwxMDgwICAgY29sbGFwc2VzIHRvIGEgc2xpbSBkb3Qgc3RyaXA7IHRoZSB0b2dnbGUgb3BlbnMgaXQgYXMgYW5cbiAgICAgICAgICAgICBvdmVybGF5IHBhbmVsIG92ZXIgYSBiYWNrZHJvcFxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG46cm9vdCB7XG5cdC0tZGVwdC1yYWlsLXc6IDI1MHB4OyAvKiBleHBhbmRlZCByYWlsICovXG5cdC0tZGVwdC1zdHJpcC13OiA2MHB4OyAvKiBjb2xsYXBzZWQgZG90IHN0cmlwICovXG59XG5cbi8qIOKUgOKUgOKUgCBMQVlPVVQg4pSA4pSA4pSAICovXG4uZGVwdC1sYXlvdXQge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cblxuLmRlcHQtbWFpbiB7XG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLyogU2VjdGlvbnMgaW5zaWRlIHRoZSBkZXB0IGNvbHVtbiBrZWVwIHRoZSBiYW5kIHN5c3RlbSBidXQgc2l0IGluIGFcbiAgIG5hcnJvd2VyIG1lYXN1cmUsIHNvIHRoZSBpbm5lciBtYXgtd2lkdGggcmFyZWx5IGJpbmRzIOKAlCBwdWxsIHRoZVxuICAgaG9yaXpvbnRhbCBwYWRkaW5nIGluIGEgbGl0dGxlIHNvIGNvbnRlbnQgaXNuJ3QgY3Jvd2RlZCB0byB0aGUgcmFpbC4gKi9cbi5kZXB0LW1haW4gLnNlY3Rpb24ge1xuXHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi5kZXB0LW1haW4gLnNlY3Rpb24taW5uZXIge1xuXHRtYXgtd2lkdGg6IDEwMDBweDtcblx0bWFyZ2luLWlubGluZTogMDtcbn1cblxuLyog4pSA4pSA4pSAIFJBSUwg4pSA4pSA4pSAICovXG4uZGVwdC1yYWlsIHtcblx0d2lkdGg6IHZhcigtLWRlcHQtcmFpbC13KTtcblx0ZmxleC1zaHJpbms6IDA7XG5cdHBvc2l0aW9uOiBzdGlja3k7XG5cdHRvcDogdmFyKC0taGVhZGVyLWhlaWdodCk7XG5cdGhlaWdodDogY2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1oZWlnaHQpKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHotaW5kZXg6IDYwO1xuXHR0cmFuc2l0aW9uOiB3aWR0aCB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5kZXB0LXJhaWwtc2Nyb2xsIHtcblx0ZmxleDogMTtcblx0b3ZlcmZsb3cteTogYXV0bztcblx0b3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNikgMCB2YXIoLS1zcGFjZS00KTtcblx0c2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xuXHRzY3JvbGxiYXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSB0cmFuc3BhcmVudDtcbn1cblxuLmRlcHQtcmFpbC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcblx0d2lkdGg6IDZweDtcbn1cblxuLmRlcHQtcmFpbC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuXHRib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi8qIGRlcGFydG1lbnQgaWRlbnRpdHkgKi9cbi5kZXB0LWlkIHtcblx0cGFkZGluZzogMCB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmRlcHQtaWQtZXllIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4xNmVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEpO1xufVxuXG4uZGVwdC1pZC1uYW1lIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsaW5lLWhlaWdodDogMS4yNTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyoganVtcC1uYXYgKi9cbi5kZXB0LW5hdi10aXRsZSB7XG5cdHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtMyk7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTtcbn1cblxuLmRlcHQtbGluayB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTUpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRsaW5lLWhlaWdodDogMS4zNTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Mik7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCksIGNvbG9yIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLmRlcHQtbGluazpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5kZXB0LWxpbmsuaXMtY3VycmVudCB7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTtcbn1cblxuLyogd2F5ZmluZGluZyBkb3Qg4oCUIHRoZSBkZW1vIHVzZWQgc2l4IGh1ZXM7IGtlcHQgb24tcGFsZXR0ZSBoZXJlLCB3aXRoIHRoZVxuICAgYWN0aXZlIHN0YXRlIChnb2xkLCBmaWxsZWQpIGNhcnJ5aW5nIHRoZSBzaWduYWwgaW5zdGVhZCBvZiBjb2xvdXIgY291bnQgKi9cbi5kZXB0LWRvdCB7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHR3aWR0aDogOXB4O1xuXHRoZWlnaHQ6IDlweDtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjgpO1xuXHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLmRlcHQtbGluay5pcy1jdXJyZW50IC5kZXB0LWRvdCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHR0cmFuc2Zvcm06IHNjYWxlKDEuMjUpO1xufVxuXG4uZGVwdC1saW5rLWxhYmVsIHtcblx0bWluLXdpZHRoOiAwO1xufVxuXG4vKiByYWlsIGZvb3RlciDigJQgQ1RBcyArIGRlcHQgbWFyayAqL1xuLmRlcHQtcmFpbC1ib3R0b20ge1xuXHRmbGV4LXNocmluazogMDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtNSk7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uZGVwdC1jdGEge1xuXHRkaXNwbGF5OiBibG9jaztcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0dHJhbnNpdGlvbjogYWxsIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLmRlcHQtY3RhLXByaW1hcnkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5kZXB0LWN0YS1wcmltYXJ5OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG4uZGVwdC1jdGEtZ2hvc3Qge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO1xufVxuXG4uZGVwdC1jdGEtZ2hvc3Q6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4vKiBpbnN0aXR1dGlvbmFsIGxvY2t1cCBhdCB0aGUgZm9vdCBvZiB0aGUgcmFpbCAqL1xuLmRlcHQtbWFyayB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRvcGFjaXR5OiAwLjc1O1xufVxuXG4uZGVwdC1tYXJrIGltZyB7XG5cdGhlaWdodDogMjZweDtcblx0d2lkdGg6IGF1dG87XG59XG5cbi5kZXB0LW1hcmsgYTpob3ZlciB7XG5cdG9wYWNpdHk6IDE7XG59XG5cbi8qIHRvZ2dsZSDigJQgaGlkZGVuIG9uIGRlc2t0b3AsIGJlY29tZXMgdGhlIHN0cmlwIGNvbnRyb2wgYmVsb3cgMTA4MCAqL1xuLmRlcHQtcmFpbC10b2dnbGUge1xuXHRkaXNwbGF5OiBub25lO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHR3aWR0aDogMTAwJTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSk7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0dGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmRlcHQtaGFtIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGdhcDogNHB4O1xuXHR3aWR0aDogMThweDtcblx0ZmxleC1zaHJpbms6IDA7XG59XG5cbi5kZXB0LWhhbSBzcGFuIHtcblx0aGVpZ2h0OiAycHg7XG5cdGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcblx0Ym9yZGVyLXJhZGl1czogMnB4O1xuXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4uZGVwdC1yYWlsLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdIC5kZXB0LWhhbSBzcGFuOm50aC1jaGlsZCgxKSB7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSg2cHgpIHJvdGF0ZSg0NWRlZyk7XG59XG5cbi5kZXB0LXJhaWwtdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLmRlcHQtaGFtIHNwYW46bnRoLWNoaWxkKDIpIHtcblx0b3BhY2l0eTogMDtcbn1cblxuLmRlcHQtcmFpbC10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXSAuZGVwdC1oYW0gc3BhbjpudGgtY2hpbGQoMykge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCkgcm90YXRlKC00NWRlZyk7XG59XG5cbi5kZXB0LXRvZ2dsZS1sYWJlbCB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4uZGVwdC1iYWNrZHJvcCB7XG5cdGRpc3BsYXk6IG5vbmU7XG5cdHBvc2l0aW9uOiBmaXhlZDtcblx0aW5zZXQ6IDA7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMjYsIDUxLCAwLjQ1KTtcblx0b3BhY2l0eTogMDtcblx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHR0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpLCB2aXNpYmlsaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpO1xuXHR6LWluZGV4OiA1NTtcbn1cblxuYm9keS5kZXB0LXJhaWwtb3BlbiAuZGVwdC1iYWNrZHJvcCB7XG5cdG9wYWNpdHk6IDE7XG5cdHZpc2liaWxpdHk6IHZpc2libGU7XG59XG5cbi8qIOKUgOKUgOKUgCBDT0xMQVBTRUQgU1RSSVAgKDwxMDgwKSDilIDilIDilIAgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDgwcHgpIHtcblx0LmRlcHQtcmFpbCB7XG5cdFx0d2lkdGg6IHZhcigtLWRlcHQtc3RyaXAtdyk7XG5cdH1cblx0LmRlcHQtcmFpbC10b2dnbGUge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdH1cblx0LmRlcHQtYmFja2Ryb3Age1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG5cdC8qIHN0cmlwIHN0YXRlOiBkb3RzIG9ubHkgKi9cblx0LmRlcHQtcmFpbCAuZGVwdC1pZCxcblx0LmRlcHQtcmFpbCAuZGVwdC1uYXYtdGl0bGUsXG5cdC5kZXB0LXJhaWwgLmRlcHQtcmFpbC1ib3R0b20sXG5cdC5kZXB0LXJhaWwgLmRlcHQtbGluay1sYWJlbCxcblx0LmRlcHQtcmFpbCAuZGVwdC10b2dnbGUtbGFiZWwge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblx0LmRlcHQtbGluayB7XG5cdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdFx0cGFkZGluZy1pbmxpbmU6IDA7XG5cdH1cblx0LyogZXhwYW5kZWQgb3ZlcmxheSAqL1xuXHQuZGVwdC1yYWlsLmlzLW9wZW4ge1xuXHRcdHdpZHRoOiB2YXIoLS1kZXB0LXJhaWwtdyk7XG5cdFx0Ym94LXNoYWRvdzogMCAxMnB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjM1KTtcblx0fVxuXHQuZGVwdC1yYWlsLmlzLW9wZW4gLmRlcHQtaWQsXG5cdC5kZXB0LXJhaWwuaXMtb3BlbiAuZGVwdC1uYXYtdGl0bGUsXG5cdC5kZXB0LXJhaWwuaXMtb3BlbiAuZGVwdC1yYWlsLWJvdHRvbSxcblx0LmRlcHQtcmFpbC5pcy1vcGVuIC5kZXB0LWxpbmstbGFiZWwsXG5cdC5kZXB0LXJhaWwuaXMtb3BlbiAuZGVwdC10b2dnbGUtbGFiZWwge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG5cdC5kZXB0LXJhaWwuaXMtb3BlbiAuZGVwdC1yYWlsLWJvdHRvbSB7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0fVxuXHQuZGVwdC1yYWlsLmlzLW9wZW4gLmRlcHQtbGluayB7XG5cdFx0anVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXHRcdHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjZS01KTtcblx0fVxuXHQuZGVwdC1tYWluIC5zZWN0aW9uIHtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtNik7XG5cdH1cbn1cbi8qIGJlbG93IHRoZSBzdHJpcCdzIHVzZWZ1bG5lc3M6IHJhaWwgZ29lcyBob3Jpem9udGFsLWZyZWUsIGNvbnRlbnQgbGVhZHMgKi9cbi8qIFZlcnkgbmFycm93OiB0aGUgcmFpbCBTVEFZUyBhIHZlcnRpY2FsIHNpZGUgc3RyaXAg4oCUIGl0IG5ldmVyIGJlY29tZXMgYVxuICAgZnVsbC13aWR0aCBiYXIgYWNyb3NzIHRoZSB0b3AgKHRoYXQncyBob3cgdGhlIGRlbW8ncyBpY29uIHN0cmlwIGJlaGF2ZXMsXG4gICBhbmQgaXQga2VlcHMgdGhlIHBhZ2UgbmF2IHJlYWNoYWJsZSB3aXRob3V0IHNjcm9sbGluZyBiYWNrIHVwKS4gT25seSB0aGVcbiAgIHN0cmlwIHdpZHRoIGFuZCB0aGUgY29udGVudCBndXR0ZXJzIHRpZ2h0ZW4uICovXG5AbWVkaWEgKG1heC13aWR0aDogNzAwcHgpIHtcblx0OnJvb3Qge1xuXHRcdC0tZGVwdC1zdHJpcC13OiA0OHB4O1xuXHR9XG5cdC5kZXB0LW1haW4gLnNlY3Rpb24ge1xuXHRcdHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjZS01KTtcblx0fVxuXHQuZGVwdC1zdGF0cywgLmRlcHQtZW5yb2xsIHtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtNSk7XG5cdH1cblx0LyogdGhlIGV4cGFuZGVkIG92ZXJsYXkgbGVhdmVzIGEgc2xpdmVyIG9mIGNvbnRlbnQgKyBiYWNrZHJvcCB2aXNpYmxlICovXG5cdC5kZXB0LXJhaWwuaXMtb3BlbiB7XG5cdFx0d2lkdGg6IG1pbih2YXIoLS1kZXB0LXJhaWwtdyksIDc4dncpO1xuXHR9XG5cdC5kZXB0LWxpbmsge1xuXHRcdHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTMpO1xuXHR9IC8qIGZpbmdlci1mcmllbmRseSBkb3RzICovXG59XG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIHN0YXRzIGJhbmQgIChjb21wb25lbnRzL3N0YXRzLnR0IMK3IGNvbnRlbnQgdHlwZSBgc3RhdHNgKVxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4uc3RhdHMtZ3JpZCB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMTgwcHgsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4uc3RhdCB7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnN0YXQtaWNvbiB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0d2lkdGg6IDNyZW07XG5cdGhlaWdodDogM3JlbTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1pY29uLWJnLCB2YXIoLS1hdS1nb2xkLXBhbGUpKTtcblx0Y29sb3I6IHZhcigtLWJhbmQtaWNvbi1mZywgdmFyKC0tYXUtZ29sZCkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xufVxuXG4uc3RhdC1udW0ge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTN4bCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxpbmUtaGVpZ2h0OiAxO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi5zdGF0LWxhYmVsIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xuXHRsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKiBvbiBhIGRhcmsgYmFuZCAqL1xuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBDVEEgYmFyICAoY29tcG9uZW50cy9jdGEtYmFyLnR0IMK3IGNvbnRlbnQgdHlwZSBgY3RhX2JhcmApXG4gICBBIHNsaW0gZnVsbC13aWR0aCBiYW5kOiBhIG1lc3NhZ2UgYmVzaWRlIGFuIGFjdGlvbiBidXR0b24uXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi5jdGEtYmFyIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGdhcDogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtOCk7XG59XG5cbi5jdGEtYmFyLXRleHQge1xuXHRmbGV4OiAxIDEgMzIwcHg7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRsaW5lLWhlaWdodDogMS4zO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi5jdGEtYmFyIC5idG4ge1xuXHRmbGV4LXNocmluazogMDtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBUT1AgQ0hST01FIEJBTkRTIChkZXB0X21haW4ud3JhcCkg4oCUIGNvbXBhY3Qgc3RyaXBzIGJldHdlZW4gdGhlXG4gICBoZXJvIGFuZCB0aGUgcmFpbCwgbWF0Y2hpbmcgdGhlIGRlcGFydG1lbnQgZGVtby4gVGhlc2UgYXJlIE5PVFxuICAgLnNlY3Rpb24gYmFuZHM6IHRoZSBkZW1vJ3MgYXJlIHNsaW0gKGEgbmF2eSBzdGF0cyBzdHJpcCBhbmQgYSBnb2xkXG4gICBlbnJvbG1lbnQgYmFyKSwgd2hlcmUgYSBmdWxsIC5zZWN0aW9uJ3MgODBweCByaHl0aG0gcmVhZHMgZmFyIHRvb1xuICAgaGVhdnkgZGlyZWN0bHkgdW5kZXIgdGhlIGhlcm8uXG5cbiAgIFRoZXkgcmUtc2tpbiB0aGUgc2hhcmVkIC5zdGF0KiAvIGN0YSBwaWVjZXMgcmF0aGVyIHRoYW4gZHVwbGljYXRpbmdcbiAgIG1hcmt1cCwgc28gY29tcG9uZW50cy9zdGF0cy50dCBrZWVwcyBpdHMgcm9vbWllciBpbi1mbG93IHRyZWF0bWVudC5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyogc3RhdHMgc3RyaXAg4oCUIG5hdnksIGxpZ2h0LW9uLWRhcmssIGhhaXJsaW5lIGRpdmlkZXJzIGJldHdlZW4gY2VsbHMgKi9cbi5kZXB0LXN0YXRzIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpIHZhcigtLWd1dHRlcik7XG59XG5cbi5kZXB0LXN0YXRzLWlubmVyIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xufVxuXG4uZGVwdC1zdGF0cyAuc3RhdHMtZ3JpZCB7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCgwLCAxZnIpKTtcblx0Z2FwOiAwO1xufVxuXG4uZGVwdC1zdGF0cyAuc3RhdCB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTUpO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5kZXB0LXN0YXRzIC5zdGF0ICsgLnN0YXQ6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0bGVmdDogMDtcblx0dG9wOiAxOCU7XG5cdGJvdHRvbTogMTglO1xuXHR3aWR0aDogMXB4O1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpO1xufVxuXG4vKiBiYXJlIGdvbGQgZ2x5cGgg4oCUIG5vIHBhbGUgY2lyY2xlIGNoaXAgYXQgdGhpcyBzaXplICovXG4uZGVwdC1zdGF0cyAuc3RhdC1pY29uIHtcblx0d2lkdGg6IGF1dG87XG5cdGhlaWdodDogYXV0bztcblx0bWFyZ2luOiAwIGF1dG8gdmFyKC0tc3BhY2UtMik7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGJvcmRlci1yYWRpdXM6IDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcbn1cblxuLmRlcHQtc3RhdHMgLnN0YXQtbnVtIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7XG59XG5cbi5kZXB0LXN0YXRzIC5zdGF0LWxhYmVsIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcblx0bGluZS1oZWlnaHQ6IDEuNTtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2MHB4KSB7XG5cdC5kZXB0LXN0YXRzIC5zdGF0cy1ncmlkIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0fVxuXHQuZGVwdC1zdGF0cyAuc3RhdCArIC5zdGF0OjpiZWZvcmUge1xuXHRcdGxlZnQ6IDE4JTtcblx0XHRyaWdodDogMTglO1xuXHRcdHRvcDogMDtcblx0XHRib3R0b206IGF1dG87XG5cdFx0d2lkdGg6IGF1dG87XG5cdFx0aGVpZ2h0OiAxcHg7XG5cdH1cbn1cbi8qIGVucm9sbWVudCBiYXIg4oCUIHNsaW0gZ29sZCBzdHJpcCwgc2VyaWYgbWVzc2FnZSArIGRhcmsgYnV0dG9uICovXG4uZGVwdC1lbnJvbGwge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tZ3V0dGVyKTtcbn1cblxuLmRlcHQtZW5yb2xsLWlubmVyIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmRlcHQtZW5yb2xsLXRleHQge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0bGluZS1oZWlnaHQ6IDEuMzU7XG59XG5cbi5kZXB0LWVucm9sbC10ZXh0IHNtYWxsIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRjb2xvcjogcmdiYSgwLCAyNiwgNTEsIDAuNzIpO1xuXHRtYXJnaW4tdG9wOiAycHg7XG59XG5cbi5kZXB0LWVucm9sbCAuYnRuIHtcblx0ZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgdmFyaWFudHMuY3NzICDCtyAgc2VjdGlvbiBzdHlsZSB2YXJpYW50c1xuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzcywgbGF5b3V0LmNzcyAoLnNlY3Rpb24gYmFuZHMgKyAtLWJhbmQtKiB0b2tlbnMpXG5cbiAgIEFsdGVybmF0ZSBsb29rcyBmb3IgZXhpc3RpbmcgY29udGVudCB0eXBlcywgc2VsZWN0ZWQgYnkgYSBgY29sLTxuYW1lPmBcbiAgIHRva2VuIGluIGEgc2VjdGlvbidzIGN1c3RvbV9jbGFzcyBhbmQgZGlzcGF0Y2hlZCBieSB0aGUgY29udGVudCB0eXBlJ3NcbiAgIHJlbmRlcmVyIChzZWUgY29tcG9uZW50cy9jb2x1bW5zLnR0IOKGkiBjb21wb25lbnRzL2NvbHVtbnMvKi50dCkuIE9uZVxuICAgY29udGVudCB0eXBlICsgb25lIENNUyBmb3JtIGRyaXZlcyBtYW55IGRpc3BsYXlzOyB0aGlzIGZpbGUgaG9sZHMgdGhlaXJcbiAgIG1hcmt1cCBzdHlsaW5nLiBBZGQgYSB2YXJpYW50OiBhIGNvbXBvbmVudHMvY29sdW1ucy88bmFtZT4udHQgcmVuZGVyZXIsXG4gICBhbiBlbnRyeSBpbiBjb2x1bW5zLnR0J3MgdmFyaWFudF9tYXAsIGFuZCBhIGJsb2NrIGhlcmUuXG5cbiAgIEJhbmQgYWRhcHRhdGlvbiBpcyB2aWEgdGhlIC0tYmFuZC0qIENPTlRFWFQgVE9LRU5TIGxheW91dC5jc3Mgc2V0cyBvbiBkYXJrXG4gICBiYW5kcyDigJQgdGhlcmUgYXJlIE5PIHBlci1iYW5kIHNlbGVjdG9yIGxpc3RzIGhlcmUuIFRoZSBydWxlIG9mIHRodW1iOlxuICAgICDCtyBjb250ZW50IHNpdHRpbmcgb24gYSBXSElURSBjYXJkIChwcm9ncmFtcykga2VlcHMgbGlnaHQtbW9kZSBjb2xvdXJzO1xuICAgICAgIG9ubHkgdGhlIGNhcmQgY2hyb21lIChib3JkZXIgd2lkdGgsIHNoYWRvdykgcmVhZHMgdGhlIGJhbmQgdG9rZW5zLlxuICAgICDCtyBjb250ZW50IGRpcmVjdGx5IG9uIHRoZSBiYW5kLCBvciBvbiBhIHRyYW5zbHVjZW50IGNhcmQgKGNhcmVlcnMsXG4gICAgICAgaW50cm8sIHF1b3RlLCBwcm9maWxlKSByZWFkcyB0aGUgYmFuZCB0b2tlbnMgZm9yIGl0cyB0ZXh0IHRvby5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyog4pSA4pSA4pSAIGNvbC1wcm9ncmFtcyDCtyBwcm9ncmFtIGNhcmRzICh3aGl0ZSBjYXJkOyBvbmx5IGNocm9tZSB0cmFja3MgdGhlIGJhbmQpIOKUgOKUgOKUgFxuICAgVHdvIG1vZGVzIGZyb20gb25lIHJlbmRlcmVyOiBhIFBIT1RPIGNhcmQgKGJhZGdlIG92ZXIgaW1hZ2UgKyB3aG9sZS1jYXJkXG4gICBsaW5rKSB3aGVuIGEgcGhvdG8gaXMgdXBsb2FkZWQsIGFuZCBhIGZsYXQgVEVYVCBjYXJkIChnb2xkIHRvcCBydWxlKSB3aGVuXG4gICBpdCBpc24ndC4gYXV0by1maXQgc28gTiBpdGVtcyBmaWxsIHRoZSByb3cgcmF0aGVyIHRoYW4gbGVhdmluZyBlbXB0eSB0cmFja3MuICovXG4ucHJvZ3JhbXMtZ3JpZCB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjYwcHgsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4ucHJvZ3JhbS1jYXJkIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IHZhcigtLWJhbmQtY2FyZC1ib3JkZXItdywgMXB4KSBzb2xpZCB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRib3gtc2hhZG93OiB2YXIoLS1iYW5kLWNhcmQtc2hhZG93LCBub25lKTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR0cmFuc2l0aW9uOiBib3gtc2hhZG93IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLnByb2dyYW0tY2FyZDpob3ZlciB7XG5cdGJveC1zaGFkb3c6IHZhcigtLWJhbmQtY2FyZC1zaGFkb3ctaG92ZXIsIHZhcigtLXNoYWRvdy1tZCkpO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi8qIHRleHQgY2FyZDogZ29sZCB0b3AgcnVsZSArIHBhZGRlZCBib2R5IChtZWRpYSBjYXJkIHBhZHMgLnByb2dyYW0tYm9keSBpbnN0ZWFkKSAqL1xuLnByb2dyYW0tY2FyZDpub3QoLnByb2dyYW0tY2FyZC0tbWVkaWEpIHtcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLyogcGhvdG8gaGVhZGVyICovXG4ucHJvZ3JhbS1pbWcge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGFzcGVjdC1yYXRpbzogNC8zO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi5wcm9ncmFtLWltZyBpbWcge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0ZGlzcGxheTogYmxvY2s7XG59XG5cbi5wcm9ncmFtLW92ZXJsYXkge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCByZ2JhKDAsIDI2LCA1MSwgMC40KSwgdHJhbnNwYXJlbnQgNDUlKTtcbn1cblxuLnByb2dyYW0tYmFkZ2Uge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IHZhcigtLXNwYWNlLTQpO1xuXHRib3R0b206IHZhcigtLXNwYWNlLTQpO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMjYsIDUxLCAwLjgyKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMSkgdmFyKC0tc3BhY2UtMyk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbn1cblxuLnByb2dyYW0tYm9keSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGZsZXg6IDE7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4ucHJvZ3JhbS1raWNrZXIge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ucHJvZ3JhbS1uYW1lIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bGluZS1oZWlnaHQ6IDEuMjtcbn1cblxuLnByb2dyYW0tbmFtZSBhIHtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnByb2dyYW0tbmFtZSBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG4ucHJvZ3JhbS1jYXJkLS1tZWRpYTpob3ZlciAucHJvZ3JhbS1uYW1lIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG4ucHJvZ3JhbS1kZXNjIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRsaW5lLWhlaWdodDogMS42O1xuXHRmbGV4OiAxO1xufVxuXG4ucHJvZ3JhbS1saW5rIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4ucHJvZ3JhbS1saW5rOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBvcHRpb25hbCBzZWN0aW9uLWhlYWRlciBDVEEgYnV0dG9uIChsZWFkaW5nIGhlYWRlciBjYXJkJ3MgbGluaykgKi9cbi5zZWN0aW9uLWhlYWQtY3RhIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi8qIG1lZGlhLWNhcmQgQ1RBIOKAlCBnb2xkIG1vbm8gY3VlIHdpdGggYSBudWRnaW5nIGNoZXZyb24gKi9cbi5wcm9ncmFtLWN0YSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnByb2dyYW0tY3RhIHN2ZyB7XG5cdHdpZHRoOiAxM3B4O1xuXHRoZWlnaHQ6IDEzcHg7XG5cdGZpbGw6IG5vbmU7XG5cdHN0cm9rZTogY3VycmVudENvbG9yO1xuXHRzdHJva2Utd2lkdGg6IDIuNTtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLnByb2dyYW0tY2FyZC0tbWVkaWE6aG92ZXIgLnByb2dyYW0tY3RhIHN2ZyB7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgzcHgpO1xufVxuXG4vKiDilIDilIDilIAgY29sLXF1b3RlIMK3IGltcGFjdCBwdWxsLXF1b3RlIChvbiB0aGUgYmFuZCkg4pSA4pSA4pSAICovXG4uaW1wYWN0LXF1b3RlIHtcblx0bWF4LXdpZHRoOiA3NjBweDtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uaW1wYWN0LXF1b3RlIGJsb2NrcXVvdGUge1xuXHRib3JkZXI6IDA7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0Zm9udC1zaXplOiBjbGFtcCh2YXIoLS10ZXh0LXhsKSwgMy41dncsIHZhcigtLXRleHQtM3hsKSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjM1O1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi5pbXBhY3QtcXVvdGUgYmxvY2txdW90ZSBwIHtcblx0bWFyZ2luOiAwO1xufVxuXG4uaW1wYWN0LXF1b3RlIGJsb2NrcXVvdGUgcCArIHAge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmltcGFjdC1xdW90ZSBibG9ja3F1b3RlOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIuKAnFwiO1xuXHRkaXNwbGF5OiBibG9jaztcblx0Zm9udC1zaXplOiAzcmVtO1xuXHRsaW5lLWhlaWdodDogMC42O1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uaW1wYWN0LXF1b3RlIGZpZ2NhcHRpb24ge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG59XG5cbi5pbXBhY3QtY2l0ZS1uYW1lIHtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4uaW1wYWN0LWNpdGUtcm9sZSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0bWFyZ2luLXRvcDogMnB4O1xufVxuXG4vKiDilIDilIDilIAgY29sLWludHJvIMK3IHNwbGl0IGNvcHkgKyBpbWFnZSBjb2xsYWdlIChvbiB0aGUgYmFuZCkg4pSA4pSA4pSAICovXG4uaW50cm8tc3BsaXQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMTApO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uaW50cm8tc3BsaXQgPiAuaW50cm8tY29weTpvbmx5LWNoaWxkIHtcblx0Z3JpZC1jb2x1bW46IDEvLTE7XG59IC8qIG5vIGltYWdlcyDihpIgY29weSBzcGFucyBmdWxsIHdpZHRoICovXG4uaW50cm8tdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiBjbGFtcCh2YXIoLS10ZXh0LTJ4bCksIDMuMnZ3LCB2YXIoLS10ZXh0LTN4bCkpO1xuXHRsaW5lLWhlaWdodDogMS4xNTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSk7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG59XG5cbi8qIG11dGVkIHdoaXRlIGV5ZWJyb3cgc28gdGhlIGdvbGQgaGVhZGxpbmUgbGVhZHMgKG92ZXJyaWRlcyB0aGUgYmFuZCdzIGdvbGQpICovXG4uaW50cm8tY29weSAuc2VjdGlvbi1sYWJlbCB7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xufVxuXG4uaW50cm8tYm9keSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0bGluZS1oZWlnaHQ6IDEuODtcbn1cblxuLmludHJvLWJvZHkgcCArIHAge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLmludHJvLWN0YXMge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0ZmxleC13cmFwOiB3cmFwO1xufVxuXG4vKiBnaG9zdCBidXR0b24gb24gdGhlIChkYXJrKSBpbnRybyBiYW5kOiB0cmFuc2x1Y2VudCBvdXRsaW5lLCBnb2xkIG9uIGhvdmVyICovXG4uaW50cm8tY3RhcyAuYnRuLWdob3N0IHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODIpO1xuXHRib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zMik7XG59XG5cbi5pbnRyby1jdGFzIC5idG4tZ2hvc3Q6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4uaW50cm8tbWVkaWEge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5pbnRyby1pbWcge1xuXHRtYXJnaW46IDA7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGFzcGVjdC1yYXRpbzogNC8zO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi5pbnRyby1pbWcgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi5pbnRyby1pbWctd2lkZSB7XG5cdGdyaWQtY29sdW1uOiBzcGFuIDI7XG5cdGFzcGVjdC1yYXRpbzogMTYvNztcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDgyMHB4KSB7XG5cdC5pbnRyby1zcGxpdCB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0fVxufVxuLyog4pSA4pSA4pSAIGNvbC1jYXJlZXJzIMK3IHNhbGFyeSBjYXJkcyAodHJhbnNsdWNlbnQgb24gZGFyayDihpIgdGV4dCB0cmFja3MgdGhlIGJhbmQpIOKUgOKUgOKUgCAqL1xuLmNhcmVlci1ncmlkIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyNjBweCwgMWZyKSk7XG5cdGdhcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi8qIGVhY2ggY2FyZCBpcyBhIDItcm93IHN1YmdyaWQgKGhlYWQgLyBib2R5KSBzaGFyaW5nIHRoZSBncmlkJ3Mgcm93IHRyYWNrcywgc29cbiAgIHRoZSB0aXRsZSByb3cgc2l6ZXMgdG8gdGhlIHRhbGxlc3QgdGl0bGUgaW4gdGhlIHJvdyDigJQgdGl0bGVzIGNvbGxhcHNlIHRvIG9uZVxuICAgbGluZSB0b2dldGhlciB3aGVuIG5vbmUgd3JhcCwgYW5kIGFsaWduIHdoZW4gb25lIGRvZXMuIFRoZSByb3cgR0FQIGJldHdlZW5cbiAgIGhlYWQgYW5kIGJvZHkgaXMgdGhlIGdyaWQncyBvd24gZ2FwIChzcGFjZS01KS4gKi9cbi5jYXJlZXItY2FyZCB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtcm93czogc3ViZ3JpZDtcblx0Z3JpZC1yb3c6IHNwYW4gMjtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1jYXJkLWJnLCB2YXIoLS1hdS13aGl0ZSkpO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLmNhcmVlci1kZWcge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMTJlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWJhbmQtZXllYnJvdywgdmFyKC0tYXUtZ29sZCkpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLmNhcmVlci10aXRsZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG59XG5cbi8qIE9uZSB0ZXh0IGFyZWEgaG9sZHMgc2FsYXJ5ICsgc291cmNlICsgYmx1cmI7IHRoZSBlZGl0b3IgbWFya3MgdGhlbSB1cCBhbmQgdGhlXG4gICBjYXJkIHN0eWxlcyB0aGVtIHRvIHRoZSBtb2NrdXA6XG4gICAgIDxzdHJvbmc+IChpdHMgb3duIGxpbmUpICDihpIgdGhlIHNhbGFyeSBmaWd1cmU6IGJpZyBnb2xkIGRpc3BsYXkgbnVtYmVyXG4gICAgIDxlbT4gICAgICAoaXRzIG93biBsaW5lKSDihpIgdGhlIHNvdXJjZSBsaW5lOiB1cHBlcmNhc2UgY2FwcyArIGEgaGFpcmxpbmUgdW5kZXIgaXRcbiAgICAgcGxhaW4gcGFyYWdyYXBoKHMpICAgICAgIOKGkiB0aGUgZGVzY3JpcHRpb25cbiAgIFRoZSBiaWctc2FsYXJ5IHRyZWF0bWVudCBpcyBzY29wZWQgdG8gdGhlIEZJUlNUIGxpbmUsIHNvIGFuIGlubGluZSBib2xkIGluc2lkZVxuICAgdGhlIGRlc2NyaXB0aW9uIHN0YXlzIG5vcm1hbC4gKi9cbi5jYXJlZXItZGVzYyB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG4uY2FyZWVyLWRlc2MgcCB7XG5cdG1hcmdpbjogMDtcbn1cblxuLmNhcmVlci1kZXNjIHAgKyBwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5jYXJlZXItZGVzYyBwOmZpcnN0LWNoaWxkIHN0cm9uZywgLmNhcmVlci1kZXNjIHA6Zmlyc3QtY2hpbGQgYiB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTJ4bCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtZ29sZCkpO1xufVxuXG4uY2FyZWVyLWRlc2MgZW0sIC5jYXJlZXItZGVzYyBpIHtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wNmVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcbn1cblxuLmNhcmVlci1kZXNjIHA6aGFzKGVtKSwgLmNhcmVlci1kZXNjIHA6aGFzKGkpIHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJhbmQtaGFpcmxpbmUsIHZhcigtLWF1LWdyYXktMjAwKSk7XG5cdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi8qIOKUgOKUgOKUgCBjb2wtbWVkaWEgwrcgb3ZlcmxheSBjYXJkcywgaG92ZXItcmV2ZWFsIChzZWxmLWNvbnRhaW5lZDsgYmFuZC1hZ25vc3RpYykg4pSA4pSA4pSAICovXG4uY29sLW1lZGlhIC5zZWN0aW9uLWhlYWQge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTtcbn0gLyogdGlnaHRlciBoZWFk4oaSY2FyZHMgZ2FwIHRoYW4gdGhlIDY0cHggZGVmYXVsdCAqL1xuLm1lZGlhLWdyaWQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIyMHB4LCAxZnIpKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLm1lZGlhLWNhcmQge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRhc3BlY3QtcmF0aW86IDQvMztcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tYXUtbmF2eSksIHZhcigtLWF1LW5hdnktbGlnaHQpKTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4ubWVkaWEtY2FyZCBpbWcge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcbn1cblxuLm1lZGlhLW92ZXJsYXkge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCByZ2JhKDAsIDI2LCA1MSwgMC45KSAwJSwgcmdiYSgwLCAyNiwgNTEsIDAuMSkgNjAlKTtcbn1cblxuLm1lZGlhLWNvbnRlbnQge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IDA7XG5cdHJpZ2h0OiAwO1xuXHRib3R0b206IDA7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4ubWVkaWEtZXllIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjFlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRtYXJnaW4tYm90dG9tOiAycHg7XG59XG5cbi5tZWRpYS1uYW1lIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5tZWRpYS1kZXNjIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzIpO1xuXHRsaW5lLWhlaWdodDogMS41NTtcblx0bWF4LWhlaWdodDogMDtcblx0b3BhY2l0eTogMDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0dHJhbnNpdGlvbjogbWF4LWhlaWdodCB2YXIoLS1kdXJhdGlvbi1zbG93KSB2YXIoLS1lYXNlLW91dCksIG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4ubWVkaWEtY2FyZDpob3ZlciAubWVkaWEtZGVzYywgLm1lZGlhLWNhcmQ6Zm9jdXMtdmlzaWJsZSAubWVkaWEtZGVzYyB7XG5cdG1heC1oZWlnaHQ6IDhyZW07XG5cdG9wYWNpdHk6IDE7XG59XG5cbkBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcblx0Lm1lZGlhLWRlc2Mge1xuXHRcdG1heC1oZWlnaHQ6IDhyZW07XG5cdFx0b3BhY2l0eTogMTtcblx0fVxufVxuLyog4pSA4pSA4pSAIGNvbC1wcm9maWxlIMK3IGZlYXR1cmVkIHBlcnNvbiBzcGxpdCAob24gdGhlIGJhbmQpIOKUgOKUgOKUgCAqL1xuLnByb2ZpbGUtc3BsaXQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMTApO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uY29sLXByb2ZpbGUuZmxpcCAucHJvZmlsZS1tZWRpYSB7XG5cdG9yZGVyOiAyO1xufSAvKiBpbWFnZSB0byB0aGUgcmlnaHQgKi9cbi5wcm9maWxlLW1lZGlhIHtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0YXNwZWN0LXJhdGlvOiA0LzU7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLnByb2ZpbGUtbWVkaWEgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi5wcm9maWxlLWNvcHkgLnNlY3Rpb24tbGFiZWwge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLnByb2ZpbGUtbmFtZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IGNsYW1wKHZhcigtLXRleHQtMnhsKSwgNHZ3LCB2YXIoLS10ZXh0LTN4bCkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsaW5lLWhlaWdodDogMS4xNTtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4ucHJvZmlsZS1jcmVkIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xufVxuXG4ucHJvZmlsZS1iaW8ge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjg7XG59XG5cbi5wcm9maWxlLWJpbyBwICsgcCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4vKiBjcmVkZW50aWFsIHN1Yi1saW5lIOKAlCBhbiBpdGFsaWMgZmlyc3QgbGluZSBpbiB0aGUgYmlvIGNvbnRlbnQgKGNhcmVlcnMtc3R5bGVcbiAgIG1hcmt1cCk6IHJlbmRlcnMgc21hbGwsIGxpZ2h0IGFuZCB1cHJpZ2h0LCBodWdnaW5nIHRoZSBuYW1lLiAqL1xuLnByb2ZpbGUtYmlvOmhhcyg+IHA6Zmlyc3QtY2hpbGQgZW0pIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5wcm9maWxlLWJpbyA+IHA6Zmlyc3QtY2hpbGQgZW0ge1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xufVxuXG4ucHJvZmlsZS1iaW8gYmxvY2txdW90ZSB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLXF1b3RlLCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA4MjBweCkge1xuXHQucHJvZmlsZS1zcGxpdCB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0fVxuXHQuY29sLXByb2ZpbGUuZmxpcCAucHJvZmlsZS1tZWRpYSB7XG5cdFx0b3JkZXI6IDA7XG5cdH1cbn1cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgcHJvZ3JhbXMuY3NzICDCtyAgcHJvZ3JhbSBleHBsb3JlciAoc2VhcmNoICsgZmlsdGVycyArIHNob3ctYWxsKVxuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzcywgbGF5b3V0LmNzcyAoLS1iYW5kLSogdG9rZW5zKSwgdmFyaWFudHMuY3NzXG4gICAoLnByb2dyYW1zLWdyaWQgLyAucHJvZ3JhbS1jYXJkIOKAlCB0aGUgY2FyZHMgYXJlIHRoZSBjb2wtcHJvZ3JhbXMgY2FyZHMpXG4gICBNYXJrdXA6IGNvbXBvbmVudHMvcHJvZ3JhbXNfZXhwbG9yZXIudHQgwrcgYmVoYXZpb3VyOiBqcy9wcm9ncmFtcy5qc1xuICAgUmVhZHMgdGhlIGJhbmQgdG9rZW5zLCBzbyBpdCB3b3JrcyBvbiB3aGl0ZSwgY3JlYW0gb3IgbmF2eSBiYW5kcy5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLnByb2dyYW1zLXRvb2xzIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi8qIHNlYXJjaCDigJQgaWNvbiBpbnNpZGUgdGhlIGZpZWxkICovXG4ucHJvZ3JhbXMtc2VhcmNoIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRtYXgtd2lkdGg6IDU2MHB4O1xufVxuXG4ucHJvZ3JhbXMtc2VhcmNoIHN2ZyB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0bGVmdDogdmFyKC0tc3BhY2UtNCk7XG5cdHRvcDogNTAlO1xuXHR3aWR0aDogMThweDtcblx0aGVpZ2h0OiAxOHB4O1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG5cdGZpbGw6IG5vbmU7XG5cdHN0cm9rZTogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0c3Ryb2tlLXdpZHRoOiAyLjU7XG5cdHN0cm9rZS1saW5lY2FwOiByb3VuZDtcblx0cG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5wcm9ncmFtcy1zZWFyY2ggLmlucHV0IHtcblx0cGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLXNwYWNlLTQpICsgMjhweCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYmFuZC1oYWlybGluZSwgdmFyKC0tYXUtZ3JheS0yMDApKTtcbn1cblxuLnByb2dyYW1zLXNlYXJjaCAuaW5wdXQ6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBmaWx0ZXIgY2hpcHMgKyBhcmVhLW9mLXN0dWR5IHNlbGVjdCBzaGFyZSBvbmUgbG9vayAqL1xuLnByb2dyYW1zLWZpbHRlcnMge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5wcm9ncmFtcy1jaGlwLFxuLnByb2dyYW1zLWZpZWxkIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxldHRlci1zcGFjaW5nOiAwLjVweDtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYmFuZC1oYWlybGluZSwgdmFyKC0tYXUtZ3JheS0zMDApKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS00KTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tZmFzdCksIGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tZmFzdCksIGNvbG9yIHZhcigtLWR1cmF0aW9uLWZhc3QpO1xufVxuXG4ucHJvZ3JhbXMtY2hpcDpob3Zlcixcbi5wcm9ncmFtcy1maWVsZDpob3ZlciB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLnByb2dyYW1zLWNoaXBbYXJpYS1wcmVzc2VkPXRydWVdLFxuLnByb2dyYW1zLWZpZWxkLmlzLWFjdGl2ZSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuLnByb2dyYW1zLWNoaXA6Zm9jdXMtdmlzaWJsZSxcbi5wcm9ncmFtcy1maWVsZDpmb2N1cy12aXNpYmxlIHtcblx0b3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRvdXRsaW5lLW9mZnNldDogMnB4O1xufVxuXG4ucHJvZ3JhbXMtZmllbGQge1xuXHRhcHBlYXJhbmNlOiBub25lO1xuXHRwYWRkaW5nLXJpZ2h0OiBjYWxjKHZhcigtLXNwYWNlLTQpICsgMTZweCk7XG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzQzY5NTJCJyBzdHJva2Utd2lkdGg9JzMnJTNFJTNDcG9seWxpbmUgcG9pbnRzPSc2IDkgMTIgMTUgMTggOScvJTNFJTNDL3N2ZyUzRVwiKTtcblx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgdmFyKC0tc3BhY2UtMykgY2VudGVyO1xuXHRiYWNrZ3JvdW5kLXNpemU6IDEycHg7XG59XG5cbi5wcm9ncmFtcy1maWVsZCBvcHRpb24ge1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0dGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbi5wcm9ncmFtcy1zdGF0dXMge1xuXHRtaW4taGVpZ2h0OiAxLjVlbTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcbn1cblxuLyogdGhlIHNoZWV0J3MgaW1hZ2VzIGFyZSB3aWRlIGJhbm5lcnMg4oCUIGEgd2lkZXIgY3JvcCB0aGFuIGNvbC1wcm9ncmFtcycgNDozICovXG4ucHJvZ3JhbXMtZXhwbG9yZXIgLnByb2dyYW0taW1nIHtcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBvdXQgb2YgZmxvdyBzbyBhIHBvcnRyYWl0IHBob3RvICh0aGUgZ3JhZCBwYWdlcycgdGFsbF9pbWFnZSkgY2FuJ3Qgc3RyZXRjaCB0aGUgZnJhbWUgKi9cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbS1pbWcgaW1nIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcbn1cblxuLyogcG9ydHJhaXQgc291cmNlczogYSBjZW50cmVkIDE2Ojkgc2xpY2UgbGFuZHMgb24gY2hlc3RzIOKAlCBmYXZvdXIgdGhlIHVwcGVyXG4gICBwYXJ0IG9mIHRoZSBmcmFtZSwgd2hlcmUgdGhlIGZhY2VzIGFyZSAqL1xuLnByb2dyYW1zLWV4cGxvcmVyIC5wcm9ncmFtLWltZy0tdGFsbCBpbWcge1xuXHRvYmplY3QtcG9zaXRpb246IDUwJSAyMiU7XG59XG5cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbS1iYWRnZSB7XG5cdG1heC13aWR0aDogY2FsYygxMDAlIC0gMiAqIHZhcigtLXNwYWNlLTQpKTtcbn1cblxuLnByb2dyYW1zLWV4cGxvcmVyIC5wcm9ncmFtLWNhcmRbaGlkZGVuXSB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5wcm9ncmFtLXRhZ3Mge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTMpIDAgMDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ucHJvZ3JhbS10YWcge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdHBhZGRpbmc6IDJweCB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLnByb2dyYW0tdGFnLS1hY2NlbCB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xuXHRib3JkZXItY29sb3I6IHJnYmEoMTk4LCAxNDksIDQzLCAwLjM1KTtcbn1cblxuLnByb2dyYW1zLWV4cGxvcmVyIC5wcm9ncmFtLWJvZHkge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLnByb2dyYW1zLWV4cGxvcmVyIC5wcm9ncmFtLWN0YSB7XG5cdG1hcmdpbi10b3A6IGF1dG87XG5cdHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLnByb2dyYW1zLWVtcHR5IHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNikgMDtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcbn1cblxuLnByb2dyYW1zLWVtcHR5IGEge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1saW5rLCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG59XG5cbi5wcm9ncmFtcy1hY3Rpb25zIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi8qIG91dGxpbmUgYnV0dG9uIHRoYXQgcmVhZHMgb24gYSBkYXJrIGJhbmQgdG9vICovXG4ucHJvZ3JhbXMtZXhwbG9yZXIgLnByb2dyYW1zLWFsbC1saW5rIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHRib3JkZXItY29sb3I6IGN1cnJlbnRDb2xvcjtcbn1cblxuLnByb2dyYW1zLWV4cGxvcmVyIC5wcm9ncmFtcy1hbGwtbGluazpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4ucHJvZ3JhbXMtZXhwbG9yZXJbY2xhc3MqPXNlY3Rpb24tLW5hdnldIC5wcm9ncmFtcy1hbGwtbGluazpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcblx0LyogY2hpcHMgc2Nyb2xsIHNpZGV3YXlzIGluc3RlYWQgb2Ygc3RhY2tpbmcgZm91ciByb3dzIGRlZXAgKi9cblx0LnByb2dyYW1zLWZpbHRlcnMge1xuXHRcdGZsZXgtd3JhcDogbm93cmFwO1xuXHRcdG92ZXJmbG93LXg6IGF1dG87XG5cdFx0cGFkZGluZzogMnB4IDA7XG5cdFx0c2Nyb2xsYmFyLXdpZHRoOiBub25lO1xuXHR9XG5cdC5wcm9ncmFtcy1maWx0ZXJzOjotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXHQucHJvZ3JhbXMtY2hpcCwgLnByb2dyYW1zLWZpZWxkIHtcblx0XHRmbGV4OiAwIDAgYXV0bztcblx0fVxufVxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBwcm9ncmFtIHBhZ2VzICDCtyAgdGVtcGxhdGVzL3VuZGVyZ3JhZF9wcm9ncmFtLmR0XG4gICAoL3VuZGVyZ3JhZC9hY2FkZW1pY3MvcHJvZ3JhbXMvPG5hbWU+LylcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLnByb2dyYW0tbGVhZCB7XG5cdG1heC13aWR0aDogNTJyZW07XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IGNsYW1wKHZhcigtLXRleHQtbGcpLCAxcmVtICsgMS42dncsIHZhcigtLXRleHQtMnhsKSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjQ7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnByb2dyYW0tdmlkZW8ge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcblx0bWF4LXdpZHRoOiA2MHJlbTtcbn1cblxuLnByb2dyYW0td2h5IC5idG4tcm93IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi8qIG9uZSBtYWluIENUQSBtaWQtcGFnZTogY2VudGVyZWQsIGl0cyBuYXR1cmFsIHdpZHRoICovXG4ucHJvZ3JhbS1hcHBseSB7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ucHJvZ3JhbS1hcHBseSA+IC5idG4ge1xuXHRmbGV4OiAwIDAgYXV0bztcbn1cblxuLyogc3ViaGVhZGluZ3Mgc2l0IGEgY2xlYXIgc3RlcCBiZWxvdyB0aGUgc2VjdGlvbiB0aXRsZXMgKi9cbi5wcm9ncmFtLXBhZ2UgLnNlY3Rpb24taW5uZXIgaDMge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5wcm9ncmFtLXBhZ2UgLnByb2dyYW0tYWx1bW5pIGgzIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLyogbGVhcm4tbW9yZSBsaW5rczogdGhlaXIgbmF0dXJhbCB3aWR0aCwgc2lkZSBieSBzaWRlICovXG4ucHJvZ3JhbS1sZWFybi1saW5rcyA+IC5idG4ge1xuXHRmbGV4OiAwIDAgYXV0bztcbn1cblxuLnByb2dyYW0tbGVhcm4tbGlua3Mge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLnByb2dyYW0tbGVhcm4gLnNlY3Rpb24tdGl0bGUge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyogYWx1bW5pOiBhIGdvbGQgcnVsZSBvdmVyIGVhY2ggbmFtZSAqL1xuLnByb2dyYW0tYWx1bW5pIC5jYXJkIHtcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItcmFkaXVzOiAwO1xufVxuXG4ucHJvZ3JhbS1hbHVtbmkgLmNhcmQgPiAuY2FyZC1ib2R5IHtcblx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4vKiBzYWxhcnkgYmFyczogLS13IGlzIHNldCBpbmxpbmUgZnJvbSB0aGUgc2FsYXJ5J3Mgc2hhcmUgb2YgdGhlIGxhcmdlc3QgKi9cbi5zYWxhcnktYmFycyB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtMykgMCAwO1xuXHRwYWRkaW5nOiAwO1xuXHRkaXNwbGF5OiBncmlkO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uc2FsYXJ5LWJhcnMgbGkge1xuXHR3aWR0aDogdmFyKC0tdywgMTAwJSk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMyk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4uc2FsYXJ5LWFtb3VudCB7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnNhbGFyeS1ub3RlIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xufVxuXG4uc2FsYXJ5LW5vdGUgcCB7XG5cdG1hcmdpbjogMDtcbn1cblxuLyogY2FyZWVyIHdvcmQgY2xvdWQ6IGpxdWVyeS5hd2Vzb21lY2xvdWQgZHJhd3MgaW50byB0aGlzIGJveCAqL1xuLnByb2dyYW0td29yZGNsb3VkIHtcblx0aGVpZ2h0OiAzMjBweDtcbn1cblxuLyogZmFjdHM6IGEgdGV4dCBjYXJvdXNlbCwgb25lIGZhY3QgYXQgYSB0aW1lICovXG4uY2Fyb3VzZWwtLXRleHQge1xuXHRhc3BlY3QtcmF0aW86IGF1dG87XG5cdGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5jYXJvdXNlbC0tdGV4dCAuY2Fyb3VzZWwtc2xpZGUge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0cGFkZGluZzogMCB2YXIoLS1zcGFjZS0xMikgdmFyKC0tc3BhY2UtOCk7XG59XG5cbi5wcm9ncmFtLWZhY3Qge1xuXHRtYXgtd2lkdGg6IDQ2cmVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRsaW5lLWhlaWdodDogMS41O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5wcm9ncmFtLWZhY3QgcCB7XG5cdG1hcmdpbjogMDtcbn1cblxuLmNhcm91c2VsLS10ZXh0IC5jYXJvdXNlbC1idG4ge1xuXHRib3gtc2hhZG93OiBub25lO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1uYXZ5KTtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5jYXJvdXNlbC0tdGV4dCAuY2Fyb3VzZWwtYnRuOmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5jYXJvdXNlbC0tdGV4dCAuY2Fyb3VzZWwtZG90cyB7XG5cdGJvdHRvbTogMDtcbn1cblxuLmNhcm91c2VsLS10ZXh0IC5jYXJvdXNlbC1kb3Qge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDUxLCAxMDIsIDAuMjUpO1xufVxuXG4uY2Fyb3VzZWwtLXRleHQgLmNhcm91c2VsLWRvdC5hY3RpdmUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7XG5cdC5jYXJvdXNlbC0tdGV4dCAuY2Fyb3VzZWwtc2xpZGUge1xuXHRcdHBhZGRpbmctaW5saW5lOiAwO1xuXHR9XG5cdC5jYXJvdXNlbC0tdGV4dCAuY2Fyb3VzZWwtYnRuIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG59XG4ucHJvZ3JhbS1jcmVhdGl2ZS1pbWcsXG4ucHJvZ3JhbS1sZWFybi1pbWcge1xuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbn1cblxuLnByb2dyYW0tY3JlYXRpdmUgLnZpZGVvLFxuLnByb2dyYW0tY3JlYXRpdmUgLmNhcm91c2VsLFxuLnByb2dyYW0tY3JlYXRpdmUtaW1nIHtcblx0bWF4LXdpZHRoOiA2MHJlbTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcbn1cblxuLnByb2dyYW0tY3JlYXRpdmUtY2FwdGlvbiB7XG5cdG1heC13aWR0aDogNDZyZW07XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNCkgYXV0byAwO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5wcm9ncmFtLWNyZWF0aXZlLWNhcHRpb24gaDMge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLyogYSBsaXN0IGluIGEgY2VudGVyZWQgY2FwdGlvbiAocHJlbWVkJ3MgbWVkaWNhbCBzY2hvb2xzKSDigJQgYmFsYW5jZWQgY29sdW1uc1xuICAgd2l0aG91dCBidWxsZXRzLCB3aGljaCB3b3VsZCBzaXQgc3RyYW5kZWQgYXQgdGhlIGxlZnQgb2YgY2VudGVyZWQgdGV4dCAqL1xuLnByb2dyYW0tY3JlYXRpdmUtY2FwdGlvbiB1bCB7XG5cdGNvbHVtbnM6IDMgMTJyZW07XG5cdGNvbHVtbi1nYXA6IHZhcigtLXNwYWNlLTYpO1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRwYWRkaW5nOiAwO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLnByb2dyYW0tY3JlYXRpdmUtY2FwdGlvbiBsaSB7XG5cdGJyZWFrLWluc2lkZTogYXZvaWQ7XG59XG5cbi8qIHBob25lcyBhbmQgc21hbGwgdGFibGV0czogdGhlIHByb2dyYW0gYmFubmVycyBhcmUgNToyIHBob3RvcyBjb21wb3NlZCBmb3IgYVxuICAgd2lkZSBiYW5kIChzdWJqZWN0cyBvZmYgdG8gdGhlIHNpZGVzLCBhIGZldyB3aXRoIGEgXCJNb3JlIEZvciBMZXNzXCIgYmFkZ2UgaW4gdGhlXG4gICBjb3JuZXIpLiBDb3Zlci1jcm9wcGluZyB0aGVtIHRvIGEgbmVhci1zcXVhcmUgaGVybyBrZXB0IG9ubHkgdGhlIG1pZGRsZSA0MCUsXG4gICBzbyBzaG93IHRoZSB3aG9sZSBwaG90byBhY3Jvc3MgdGhlIHRvcCBhbmQgcHV0IHRoZSB0aXRsZSBvbiBuYXZ5IGJlbG93IGl0LlxuICAgV2lkZXIgc2NyZWVucyBnZXQgLmhlcm8tLXJhdGlvIChzZXQgaW4gdW5kZXJncmFkX3Byb2dyYW0uZHQpOiBhIDU6MiBiYW5kLCB0aGVcbiAgIHdob2xlIHBob3RvLCB0aXRsZSBvdmVyIGl0LiAoYm9keS5wcm9ncmFtLXBhZ2UgPSBib2R5Y2xhc3MgaW4gdGhlIGR0KSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDc2MHB4KSB7XG5cdGJvZHkucHJvZ3JhbS1wYWdlIC5oZXJvIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRtaW4taGVpZ2h0OiAwO1xuXHRcdGFzcGVjdC1yYXRpbzogYXV0bzsgLyogdW5kbyAuaGVyby0tcmF0aW8ncyA1OjIgYm94LCB3aGljaCB3b3VsZCBjbGlwIHRoZSB0aXRsZSAqL1xuXHRcdHBhZGRpbmctdG9wOiA0MCU7XG5cdFx0YmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87XG5cdFx0YmFja2dyb3VuZC1wb3NpdGlvbjogdG9wIGNlbnRlcjtcblx0fVxuXHRib2R5LnByb2dyYW0tcGFnZSAuaGVybzo6YWZ0ZXIge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblx0Ym9keS5wcm9ncmFtLXBhZ2UgLmhlcm8taW5uZXIge1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpIHZhcigtLWd1dHRlcikgdmFyKC0tc3BhY2UtNik7XG5cdH1cblx0Ym9keS5wcm9ncmFtLXBhZ2UgLmhlcm8tdGl0bGUge1xuXHRcdHRleHQtc2hhZG93OiBub25lO1xuXHR9XG59XG4vKiBhdWRpby5jc3MgwrcgY3VzdG9tIGF1ZGlvIHBsYXllciBzdHlsZWQgdG8gdGhlIEFVIGRlc2lnbiBzeXN0ZW1cbiAgIE1hcmt1cDogW2RhdGEtYXVkaW9dIHdyYXBwaW5nIGFuIDxhdWRpbz4gZWxlbWVudFxuICAgSlM6IGpzL2F1ZGlvLmpzIGJ1aWxkcyB0aGUgVUkgYW5kIHNlbGYtaW5pdHMgdmlhIGluaXQuanMgKi9cbi5hdWRpby1wbGF5ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0bWF4LXdpZHRoOiA1NDBweDtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS01KSBhdXRvO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcbn1cblxuLmF1ZGlvLXBsYXllci1jb250cm9scyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5hdWRpby1wbGF5ZXItYnRuIHtcblx0ZmxleDogMCAwIGF1dG87XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHR3aWR0aDogNDRweDtcblx0aGVpZ2h0OiA0NHB4O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCk7XG5cdHBhZGRpbmc6IDA7XG59XG5cbi5hdWRpby1wbGF5ZXItYnRuOmhvdmVyLFxuLmF1ZGlvLXBsYXllci1idG46Zm9jdXMtdmlzaWJsZSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdG91dGxpbmU6IG5vbmU7XG59XG5cbi5hdWRpby1wbGF5ZXItYnRuIHN2ZyB7XG5cdHdpZHRoOiAxOHB4O1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGZpbGw6IGN1cnJlbnRDb2xvcjtcbn1cblxuLmF1ZGlvLXBsYXllci10cmFjayB7XG5cdGZsZXg6IDEgMSBhdXRvO1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi5hdWRpby1wbGF5ZXItdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiAxMHB4O1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wNmVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nLWJvdHRvbTogNHB4O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLmF1ZGlvLXBsYXllci1iYXIge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGhlaWdodDogNnB4O1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uYXVkaW8tcGxheWVyLWJhcjpob3ZlciB7XG5cdGhlaWdodDogOHB4O1xufVxuXG4uYXVkaW8tcGxheWVyLWZpbGwge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogMDtcblx0bGVmdDogMDtcblx0aGVpZ2h0OiAxMDAlO1xuXHR3aWR0aDogMCU7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdHRyYW5zaXRpb246IHdpZHRoIDgwbXMgbGluZWFyO1xuXHRwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmF1ZGlvLXBsYXllci10aW1lIHtcblx0ZGlzcGxheTogZmxleDtcblx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiAxMXB4O1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuXHR1c2VyLXNlbGVjdDogbm9uZTtcblx0cGFkZGluZy10b3A6IDNweDtcblx0bGluZS1oZWlnaHQ6IDE7XG59XG5cbi5hdWRpby1wbGF5ZXItdm9sIHtcblx0ZmxleDogMCAwIGF1dG87XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5hdWRpby1wbGF5ZXItdm9sIGJ1dHRvbiB7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGJvcmRlcjogbm9uZTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRwYWRkaW5nOiAwO1xuXHRkaXNwbGF5OiBmbGV4O1xufVxuXG4uYXVkaW8tcGxheWVyLXZvbCBidXR0b246aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG59XG5cbi5hdWRpby1wbGF5ZXItdm9sIHN2ZyB7XG5cdHdpZHRoOiAxOHB4O1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGZpbGw6IGN1cnJlbnRDb2xvcjtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDM4MHB4KSB7XG5cdC5hdWRpby1wbGF5ZXIge1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdC5hdWRpby1wbGF5ZXItY29udHJvbHMge1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdH1cblx0LmF1ZGlvLXBsYXllci1idG4ge1xuXHRcdHdpZHRoOiAzNnB4O1xuXHRcdGhlaWdodDogMzZweDtcblx0fVxuXHQuYXVkaW8tcGxheWVyLXZvbCB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxufVxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBjb21wYXQuY3NzICDCtyAgbGVnYWN5IGNvbnRlbnQgcGF0dGVybnMgaW4gYXV0aG9yZWQgc2VjdGlvbiBib2RpZXNcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3NcbiAgIENvdmVycyB0aGUgQ1RBIGJhciwgQm9vdHN0cmFwIGdyaWQgY29sdW1ucyBpbiBjYXJkIGJvZGllcywgYW5kXG4gICBsZWdhY3kgZm9udCByZWZlcmVuY2VzLiBUaGVzZSBwYXR0ZXJucyBhcHBlYXIgaW4gaG9tZXBhZ2UtYWR2YW5jZWRcbiAgIGJvZGllcyB0aGF0IGNhbid0IGJlIHNhZmVseSByb3VuZC10cmlwcGVkIHRocm91Z2ggY21zX2VkaXQuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIOKUgOKUgCBCb290c3RyYXAgZ3JpZCDihpIgZmxleCDilIDilIBcbiAgIEF1dGhvcmVkIGNhcmQgYm9kaWVzIHVzaW5nIC5yb3cgKyAuY29sLSogZ2V0IGEgc2ltcGxlIGZsZXggbGF5b3V0LlxuICAgQ292ZXJzIHRoZSBXZWxjb21lIGludHJvICg4LzQgdGV4dCtpbWFnZSBzcGxpdCkgYW5kIGFueSBzaW1pbGFyXG4gICBsZWdhY3kgdHdvLSBvciB0aHJlZS1jb2x1bW4gYm9keS4gKi9cbi5jYXJkLXRleHQgPiAucm93LFxuLmNhcmQtdGV4dCA+IGRpdiA+IC5yb3cge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtNik7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qIHRleHQgYmVzaWRlIGFuIGltYWdlIHNpdHMgY2VudHJlZCBvbiBpdCwgbGlrZSB0aGUgc3BsaXQgdG9rZW5zICovXG59XG5cbi5jYXJkLXRleHQgW2NsYXNzKj1jb2wtbWQtOF0sXG4uY2FyZC10ZXh0IFtjbGFzcyo9Y29sLW1kLTddIHtcblx0ZmxleDogMiAxIDQwMHB4O1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi5jYXJkLXRleHQgW2NsYXNzKj1jb2wtbWQtNF0sXG4uY2FyZC10ZXh0IFtjbGFzcyo9Y29sLW1kLTVdIHtcblx0ZmxleDogMSAxIDI0MHB4O1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi5jYXJkLXRleHQgW2NsYXNzKj1jb2wtbWQtNl0ge1xuXHRmbGV4OiAxIDEgMzAwcHg7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLmNhcmQtdGV4dCBbY2xhc3MqPWNvbC1tZC0xMl0ge1xuXHRmbGV4OiAxIDEgMTAwJTtcbn1cblxuLyogNC1hY3Jvc3MgZ3JpZCAoQ1RBIGJhcik6IGNhcmQtdGV4dCB3aXRoIGNvbC1sZy0zIGNoaWxkcmVuICovXG4uY2FyZC10ZXh0Omhhcyg+IFtjbGFzcyo9Y29sLWxnLTNdKSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG5cbi5jYXJkLXRleHQgPiBbY2xhc3MqPWNvbC1sZy0zXSB7XG5cdGZsZXg6IDEgMSAyMDBweDtcblx0bWluLXdpZHRoOiAwO1xuXHRkaXNwbGF5OiBmbGV4O1xufVxuXG4vKiDilIDilIAgQ1RBIHdpZGdldCDilIDilIBcbiAgIDQtYWNyb3NzIGljb24rbGFiZWwgYWN0aW9uIGJsb2NrcyBvbiBob21lcGFnZXMuIExlZ2FjeSBtYXJrdXAgdXNlc1xuICAgLmN0YSArIC5jdGEtKiB3aXRoIEljb25Td2VldHMtRGVsdXhlIGljb25zOyByZXN0eWxlZCBmb3IgMjAyNyB3aXRoXG4gICBGQTcgaWNvbiBzdWJzdGl0dXRpb24uIFVzZXMgIWltcG9ydGFudCB0byB3aW4gb3ZlciAvY3NzL2N0YS5jc3MsXG4gICB3aGljaCBjdGEtcm93LnR0IGxvYWRzIGFzIGEgPGxpbms+IGFmdGVyIGluZGV4LmNzcy4gKi9cbi5jdGEge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcblx0YWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSkgIWltcG9ydGFudDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpICFpbXBvcnRhbnQ7XG5cdGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tYXUtZ29sZCkgIWltcG9ydGFudDtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpICFpbXBvcnRhbnQ7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCksIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCksIGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uY3RhOmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pICFpbXBvcnRhbnQ7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtKTtcbn1cblxuLyogY3RhLXJvdy50dCB3cmFwcyBldmVyeXRoaW5nIGluIE9ORSA8YT47IGFkbWlzc2lvbnMgbWFya3VwIHVzZXMgc2VwYXJhdGUgPGE+cy5cbiAgIEhhbmRsZSBib3RoOiBhIGRpcmVjdC1jaGlsZCA8YT4gdGhhdCB3cmFwcyAuaWNvbiArIC5jdGEtdGl0bGUgaXMgdGhlIGNvbnRlbnRcbiAgIHdyYXBwZXIsIG5vdCBhIHN0cmV0Y2hlZC1saW5rIGFuY2hvciDigJQgbWFrZSBpdCBmbGV4IGFuZCBzdHJpcCB1bmRlcmxpbmUuXG4gICBjdGEtcm93LWJ1dHRvbnMudHQgYWRkcyBjbGFzcz1cImJ0biBidG4tZ3JheVwiIHRvIHRoZSBzYW1lIDxhPjsgbmV1dHJhbGl6ZVxuICAgdGhhdCBidXR0b24gc3R5bGluZyBzbyB0aGUgY2FyZCBsb29rIHdpbnMuICovXG4uY3RhID4gYSB7XG5cdGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7XG5cdGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG5cdHdpZHRoOiAxMDAlO1xufVxuXG4vKiBhZG1pc3Npb25zIG1hcmt1cDogc2VwYXJhdGUgPGE+IGluc2lkZSAuY3RhLXRpdGxlIOKGkiBrZWVwIHBvaW50ZXItZXZlbnRzIG5vcm1hbCAqL1xuLmN0YSA+IGE6b25seS1jaGlsZCB7XG5cdGZsZXg6IDE7XG59XG5cbi8qIGN0YS1yb3ctYnV0dG9ucy50dCBhZGRzIC5idG4uYnRuLWdyYXkgdG8gdGhlIGFuY2hvciDigJQgc3RyaXAgaXQgYmFjayB0byBwbGFpbiAqL1xuLmN0YSA+IGEuYnRuIHtcblx0Ym9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG5cdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcblx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG5cdGZvbnQtc2l6ZTogaW5oZXJpdCAhaW1wb3J0YW50O1xuXHRmb250LXdlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50O1xuXHRsZXR0ZXItc3BhY2luZzogaW5oZXJpdCAhaW1wb3J0YW50O1xuXHR0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcbn1cblxuLmN0YSA+IGEuYnRuOmhvdmVyIHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuXHR0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcblx0Y29sb3I6IGluaGVyaXQgIWltcG9ydGFudDtcbn1cblxuLyogaWNvbiByZXBsYWNlbWVudDogSWNvblN3ZWV0cy1EZWx1eGUg4oaSIEZBNyBQcm8gKi9cbi5jdGEgLmljb24ge1xuXHRkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRmbGV4LXNocmluazogMDtcblx0ZmxvYXQ6IG5vbmUgIWltcG9ydGFudDtcblx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XG59XG5cbi5jdGEgLmljb24gc3BhbiB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHR3aWR0aDogMS41ZW07XG5cdGhlaWdodDogMS41ZW07XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRjb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmN0YSAuaWNvbiBzcGFuOjpiZWZvcmUge1xuXHRmb250LWZhbWlseTogXCJGb250IEF3ZXNvbWUgNyBQcm9cIjtcblx0Zm9udC13ZWlnaHQ6IDkwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0bGluZS1oZWlnaHQ6IDE7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKSAhaW1wb3J0YW50O1xuXHQtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuXHQtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbn1cblxuLmN0YSAuaWNvbiAuaWNvbi1zYWZhcmk6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXFxmMTRlXCI7XG59XG5cbi5jdGEgLmljb24gLmljb24tZ2xvYmUyOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlxcZjBhY1wiO1xufVxuXG4uY3RhIC5pY29uIC5pY29uLWFpcnBsYW5lOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlxcZjA3MlwiO1xufVxuXG4uY3RhIC5pY29uIC5pY29uLXdyaXRlOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlxcZjA0NFwiO1xufVxuXG4uY3RhIC5pY29uIC5pY29uLWluZm86OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXFxmMDVhXCI7XG59XG5cbi5jdGEgLmljb24gLmljb24tY2FsZW5kYXItZGF5OjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlxcZjc4M1wiO1xufVxuXG4uY3RhIC5pY29uIGEge1xuXHRkaXNwbGF5OiBjb250ZW50cztcbn1cblxuLyogbGFiZWwg4oCUIHN0cmlwIGN0YS5jc3MgY29sb3JlZCBiYWNrZ3JvdW5kcyAqL1xuLmN0YSAuY3RhLXRpdGxlIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjM7XG5cdGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XG5cdG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XG5cdHRleHQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KSAhaW1wb3J0YW50O1xufVxuXG4vKiBhZG1pc3Npb25zIG1hcmt1cCBoYXMgPGE+IGluc2lkZSAuY3RhLXRpdGxlOyBjdGEtcm93LnR0IGhhcyBpdCBvdXRzaWRlICovXG4uY3RhIC5jdGEtdGl0bGUgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uY3RhIC5jdGEtdGl0bGUgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLmN0YSAudGl0bGUge1xuXHRkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcblx0Y29sb3I6IGluaGVyaXQgIWltcG9ydGFudDtcblx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xuXHRtYXJnaW46IDAgIWltcG9ydGFudDtcblx0bGluZS1oZWlnaHQ6IDEuMyAhaW1wb3J0YW50O1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4vKiDilIDilIAgLmJ0biBpbnNpZGUgLmdyaWQ6IGtlZXAgbmF0dXJhbCBzaXplLCBkb24ndCBzdHJldGNoIGFzIGEgZ3JpZCBjZWxsIOKUgOKUgFxuICAgQXV0aG9yZWQgY29udGVudCBzb21ldGltZXMgd3JhcHMgc2libGluZyBidXR0b25zIGluIGEgPGRpdiBjbGFzcz1cImdyaWRcIj4uXG4gICAuZ3JpZCA+ICogbm9ybWFsbHkgZ2V0cyBmbGV4OjEgMSAyODBweCAoY2FyZCB3aWR0aCksIHdoaWNoIHN0cmV0Y2hlcyBlYWNoXG4gICBidXR0b24gdG8gYSBmdWxsIHJvdy4gT3ZlcnJpZGUgc28gdGhleSBzaXplIHRvIHRoZWlyIG93biBjb250ZW50IGFuZCBjYW5cbiAgIHNpdCBzaWRlLWJ5LXNpZGUuICovXG4uY2FyZC10ZXh0IC5ncmlkID4gLmJ0bixcbi5jYXJkLWJvZHkgLmdyaWQgPiAuYnRuIHtcblx0ZmxleDogMSAxIDAgIWltcG9ydGFudDtcblx0d2lkdGg6IDAgIWltcG9ydGFudDtcblx0bWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7XG5cdGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG59XG5cbi8qIOKUgOKUgCBwdWxsLWxlZnQ6IG5ldXRyYWxpemUgaW4gZmxleCBjb250ZXh0cyDilIDilIAgKi9cbi5jdGEgLnB1bGwtbGVmdCxcbi5jYXJkLXRleHQgLnB1bGwtbGVmdCB7XG5cdGZsb2F0OiBub25lO1xufVxuXG4vKiDilIDilIAgTGVnYWN5IGN0YS1yb3cudHQ6IHNlY3Rpb24uY29sdW1ucyArIEJvb3RzdHJhcCBjb250YWluZXIvcm93IOKUgOKUgFxuICAgVGhlIHNoYXJlZCBjdGEtcm93LnR0IGVtaXRzIDxzZWN0aW9uIGNsYXNzPVwiY29sdW1ucyBiYWNrZ3JvdW5kX2NvbG9yXypcIj5cbiAgIHdpdGggYSBCb290c3RyYXAgLmNvbnRhaW5lciA+IC5yb3cgPiAuY29sLXNtLU4gZ3JpZC4gR2l2ZSB0aGUgYmFuZFxuICAgdGhlIHJpZ2h0IHBhZGRpbmcvYmFja2dyb3VuZCBhbmQgbWFrZSB0aGUgcm93IGZsZXguICovXG5zZWN0aW9uLmNvbHVtbnMge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xMikgdmFyKC0tZ3V0dGVyKTtcbn1cblxuc2VjdGlvbi5jb2x1bW5zW2NsYXNzKj1iYWNrZ3JvdW5kX2NvbG9yX2NhcmFycmEtZ3JheV0sXG5zZWN0aW9uLmNvbHVtbnNbY2xhc3MqPWJhY2tncm91bmRfY29sb3Jfc2Vhc2hlbGwtZ3JheV0sXG5zZWN0aW9uLmNvbHVtbnNbY2xhc3MqPWJhY2tncm91bmRfY29sb3Jfc3RvbmVdIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtc3RvbmUpO1xufVxuXG5zZWN0aW9uLmNvbHVtbnNbY2xhc3MqPWJhY2tncm91bmRfY29sb3JfZWNydS13aGl0ZV0sXG5zZWN0aW9uLmNvbHVtbnNbY2xhc3MqPWJhY2tncm91bmRfY29sb3JfY3JlYW1dIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xufVxuXG5zZWN0aW9uLmNvbHVtbnNbY2xhc3MqPWJhY2tncm91bmRfY29sb3JfbmlsZS1ibHVlXSxcbnNlY3Rpb24uY29sdW1uc1tjbGFzcyo9YmFja2dyb3VuZF9jb2xvcl9maW9yZC1ibHVlXSxcbnNlY3Rpb24uY29sdW1uc1tjbGFzcyo9YmFja2dyb3VuZF9jb2xvcl9jaGF0aGFtcy1ibHVlXSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbnNlY3Rpb24uY29sdW1ucyAuY29udGFpbmVyIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xufVxuXG5zZWN0aW9uLmNvbHVtbnMgLmNvbnRhaW5lciA+IC5yb3cge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtNik7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG5zZWN0aW9uLmNvbHVtbnMgLmNvbnRhaW5lciA+IC5yb3cgPiBbY2xhc3MqPWNvbC1dIHtcblx0ZmxleDogMSAxIDIwMHB4O1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi8qIOKUgOKUgCBMZWdhY3kgdGhyZWFkLnR0OiB0aGUgcHJvZ3JhbXMgY2Fyb3VzZWxzICgvdW5kZXJncmFkL2FjYWRlbWljcy8pIOKUgOKUgFxuICAgY29kZS90ZW1wbGF0ZXMvdGhyZWFkLnR0IGlzIHNoYXJlZCB3aXRoIHRoZSBsaXZlIHNpdGUgYW5kIGJyaW5ncyBpdHMgb3duXG4gICBjYXJvdXNlbCBDU1MvSlMgKHRocmVhZC1zdHlsZS5jc3MsIHByb2dyYW1zLXRocmVhZC5qcyk7IGl0IGVtaXRzXG4gICA8c2VjdGlvbiBjbGFzcz1cInByb2dyYW1zLXRocmVhZC1zZWN0aW9uIGJhY2tncm91bmRfY29sb3JfKlwiPiArIGEgQm9vdHN0cmFwXG4gICAuY29udGFpbmVyLy5yb3cuIFJlc3RvcmUgdGhlIGxlZ2FjeSBiYW5kIGFyb3VuZCBpdDogdGhlIGRhcmtlc3QgbmF2eSwgZ29sZFxuICAgc2FucyBoZWFkaW5ncywgdGhlIGNsb3NlLXRvcC9jbG9zZS1ib3R0b20gc2VhbXMgYmV0d2VlbiBzdGFja2VkIHRocmVhZHMuICovXG5zZWN0aW9uLnByb2dyYW1zLXRocmVhZC1zZWN0aW9uIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEwKSB2YXIoLS1ndXR0ZXIpO1xuXHQtLWJhbmQtaGVhZGluZzogdmFyKC0tYXUtd2hpdGUpO1xuXHQtLWJhbmQtYm9keTogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY2KTtcbn1cblxuc2VjdGlvbi5wcm9ncmFtcy10aHJlYWQtc2VjdGlvbi5jbG9zZS10b3Age1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbnNlY3Rpb24ucHJvZ3JhbXMtdGhyZWFkLXNlY3Rpb24uY2xvc2UtYm90dG9tIHtcblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xufVxuXG5zZWN0aW9uLnByb2dyYW1zLXRocmVhZC1zZWN0aW9uIC5jb250YWluZXIge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG59XG5cbnNlY3Rpb24ucHJvZ3JhbXMtdGhyZWFkLXNlY3Rpb24gaDIge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNhbnMpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtMnhsKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyoga2VlcCB0aGUgbGVnYWN5IGNhcm91c2VsJ3Mgb3duIHNtYWxsIG91dGxpbmUgYnV0dG9ucyBhbmQgdGlsZSB0eXBlICh0aGUgMjAyN1xuICAgLmJ0biBpcyBsYXJnZXIsIHVwcGVyY2FzZSBhbmQgZmlsbGVkKSAqL1xuc2VjdGlvbi5wcm9ncmFtcy10aHJlYWQtc2VjdGlvbiAuYnRuIHtcblx0cGFkZGluZzogNnB4IDEycHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0dGV4dC10cmFuc2Zvcm06IG5vbmU7XG5cdGxldHRlci1zcGFjaW5nOiAwO1xuXHRib3JkZXItd2lkdGg6IDFweDtcblx0bWluLWhlaWdodDogMDtcbn1cblxuc2VjdGlvbi5wcm9ncmFtcy10aHJlYWQtc2VjdGlvbiAudGhyZWFkLWV4cGFuZC1idXR0b24ge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG5zZWN0aW9uLnByb2dyYW1zLXRocmVhZC1zZWN0aW9uIC50aHJlYWQtZXhwYW5kLWJ1dHRvbjpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuc2VjdGlvbi5wcm9ncmFtcy10aHJlYWQtc2VjdGlvbiAucHJvZ3JhbXMtdGlsZS1ib2R5IGg0IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc2Fucyk7XG5cdGZvbnQtc2l6ZTogMThweDtcblx0Y29sb3I6ICNmZmY7XG59XG5cbi8qIOKUgOKUgCBJbmxpbmUgZGlzY2xvc3VyZSBlbWJlZCAocmVwbGFjZXMgQm9vdHN0cmFwIG1vZGFscyBmb3IgaWZyYW1lcykg4pSA4pSAICovXG4udHJhbnNmZXItZW1iZWQge1xuXHRtYXgtaGVpZ2h0OiAwO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHR0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuNHMgZWFzZTtcbn1cblxuLnRyYW5zZmVyLWVtYmVkLmlzLW9wZW4ge1xuXHRtYXgtaGVpZ2h0OiA1MDBweDtcbn1cblxuLyog4pSA4pSAIEJvb3RzdHJhcCAubW9kYWwg4oaSIDIwMjcgb3ZlcmxheSDilIDilIBcbiAgIExlZ2FjeSBwYWdlcyB1c2UgLm1vZGFsIGRpdnMgd2l0aCBkYXRhLXRvZ2dsZS9kYXRhLWRpc21pc3MuXG4gICBtb2RhbC5qcyBhZGRzL3JlbW92ZXMgLmlzLW9wZW47IENTUyBjb250cm9scyB2aXNpYmlsaXR5LiAqL1xuLm1vZGFsIHtcblx0ZGlzcGxheTogbm9uZTtcblx0cG9zaXRpb246IGZpeGVkO1xuXHRpbnNldDogMDtcblx0ei1pbmRleDogMjAwMDtcblx0b3ZlcmZsb3cteTogYXV0bztcblx0b3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcblx0YmFja2dyb3VuZDogcmdiYSgwLCAzMSwgNjMsIDAuNik7XG5cdGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpO1xuXHQtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS04KSB2YXIoLS1ndXR0ZXIpO1xufVxuXG4ubW9kYWwuaXMtb3BlbiB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLm1vZGFsLWRpYWxvZyB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0bWF4LXdpZHRoOiA3MjBweDtcblx0d2lkdGg6IDEwMCU7XG5cdG1hcmdpbjogYXV0bztcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LXhsKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1vZGFsLWNvbnRlbnQge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSAhaW1wb3J0YW50O1xufVxuXG4vKiBoZWFkZXI6IG1hbnVhbGx5LWF1dGhvcmVkIHBob3RvICsgbmFtZSBkaXYgKGxlZ2FjeSBwcm9maWxlcyBwYWdlIG1hcmt1cCkg4oCUXG4gICBvbmx5IGFwcGxpZXMgd2hlbiB0aGUgZmlyc3QgY2hpbGQgaXMgTk9UIHRoZSBhdXRvLWluamVjdGVkIGhlYWRlciAqL1xuLm1vZGFsLWNvbnRlbnQgPiBkaXY6Zmlyc3QtY2hpbGQ6bm90KC5tb2RhbC1hdXRvLWhlYWRlcikge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRnYXA6IHZhcigtLXNwYWNlLTUpO1xuXHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5tb2RhbC1jb250ZW50ID4gZGl2OmZpcnN0LWNoaWxkOm5vdCgubW9kYWwtYXV0by1oZWFkZXIpID4gZGl2OmZpcnN0LWNoaWxkIGltZyB7XG5cdHdpZHRoOiAxMDBweDtcblx0aGVpZ2h0OiAxMDBweDtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0ZGlzcGxheTogYmxvY2s7XG59XG5cbi5tb2RhbC1jb250ZW50ID4gZGl2OmZpcnN0LWNoaWxkOm5vdCgubW9kYWwtYXV0by1oZWFkZXIpID4gZGl2Omxhc3QtY2hpbGQge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLm1vZGFsLWNvbnRlbnQgPiBkaXY6Zmlyc3QtY2hpbGQ6bm90KC5tb2RhbC1hdXRvLWhlYWRlcikgPiBkaXY6bGFzdC1jaGlsZCBoMiB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdG1hcmdpbjogMCAwIHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4ubW9kYWwtY29udGVudCA+IGRpdjpmaXJzdC1jaGlsZDpub3QoLm1vZGFsLWF1dG8taGVhZGVyKSA+IGRpdjpsYXN0LWNoaWxkIHAge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0bWFyZ2luOiAwO1xuXHRsaW5lLWhlaWdodDogMS41O1xufVxuXG4vKiAuY2FyZC1zdWJ0aXRsZSDigJQgYSBwbGFpbiBtdXRlZCBsaW5lIHVuZGVyIHRoZSBjYXJkIHRpdGxlIChwcm9ncmFtLCB5ZWFyLCByb2xlKS5cbiAgIE5vIGdvbGQvdXBwZXJjYXNlIHRyZWF0bWVudDsgcHVsbGVkIGludG8gdGhlIG1vZGFsIGhlYWRlciBhcyB0aGUgc3VidGl0bGUuICovXG4uY2FyZC1zdWJ0aXRsZSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRtYXJnaW46IDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qIGF1dG8taGVhZGVyIGluamVjdGVkIGJ5IG1vZGFsLmpzIOKAlCBwaG90byBjaXJjbGUgKyBuYW1lICsgc3VidGl0bGUgcm93ICovXG4ubW9kYWwtYXV0by1oZWFkZXIge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRnYXA6IHZhcigtLXNwYWNlLTUpO1xuXHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLm1vZGFsLWF1dG8tcGhvdG8ge1xuXHR3aWR0aDogMTAwcHg7XG5cdGhlaWdodDogMTAwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdG9iamVjdC1wb3NpdGlvbjogdG9wO1xuXHRmbGV4LXNocmluazogMDtcblx0ZGlzcGxheTogYmxvY2s7XG59XG5cbi5tb2RhbC1hdXRvLXRleHQge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0xKTtcbn1cblxuLm1vZGFsLWF1dG8tbmFtZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdG1hcmdpbjogMDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcbn1cblxuLm1vZGFsLWF1dG8tc3VidGl0bGUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0bWFyZ2luOiAwO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qIHN0cmlwICZuYnNwOyBzcGFjZXIgZGl2cyB1c2VkIGFzIGhvcml6b250YWwgcnVsZXMgKi9cbi5tb2RhbC1jb250ZW50IFtzdHlsZSo9Ym9yZGVyLXRvcF0ge1xuXHRib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKSAhaW1wb3J0YW50O1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTUpIDAgIWltcG9ydGFudDtcblx0aGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG59XG5cbi8qIHN0b3J5IGJvZHkgKi9cbi5tb2RhbC1ib2R5IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0bGluZS1oZWlnaHQ6IDEuNzU7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcbn1cblxuLm1vZGFsLWJvZHkgcCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4ubW9kYWwtYm9keSBwOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLyogaDMgc2VjdGlvbiBoZWFkaW5ncyBnZXQgYSBkaXZpZGVyIGxpbmUgYWJvdmUgdGhlbSBhdXRvbWF0aWNhbGx5IOKAlFxuICAgbm8gbmVlZCBmb3IgbWFudWFsIDxocj4gb3IgYm9yZGVyLXRvcCBkaXZzIGluIHRoZSBtb2RhbCBtYXJrdXAgKi9cbi5tb2RhbC1ib2R5IGgzIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTYpIDAgdmFyKC0tc3BhY2UtMik7XG5cdHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS02KTtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLyogZmlyc3QgaDMgaW4gdGhlIGJvZHkg4oCUIG5vIGRpdmlkZXIgYWJvdmUgaXQgd2hldGhlciB0aGUgaDMgaXMgYSBkaXJlY3QgY2hpbGRcbiAgIG9yIHdyYXBwZWQgaW4gYSBwbGFpbiBkaXYgKHRoZSBvcmlnaW5hbCBtYXJrdXAgd3JhcHBlZCBlYWNoIHNlY3Rpb24gaW4gPGRpdj4pICovXG4ubW9kYWwtYm9keSBoMzpmaXJzdC1jaGlsZCxcbi5tb2RhbC1ib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaDM6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRwYWRkaW5nLXRvcDogMDtcblx0Ym9yZGVyLXRvcDogbm9uZTtcbn1cblxuLyogc3RhbmRhcmQgY2xvc2Ugcm93IOKAlCAubW9kYWwtZm9vdGVyIChwcmVmZXJyZWQpIG9yIGxlZ2FjeSBbYWxpZ249XCJyaWdodFwiXSAqL1xuLm1vZGFsLWZvb3RlciB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG5cdHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS01KTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi5tb2RhbC1jb250ZW50IFthbGlnbj1yaWdodF0ge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcblx0dGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbltkYXRhLWRpc21pc3M9bW9kYWxdIHtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiBYIGNsb3NlIGJ1dHRvbiDigJQgaW5qZWN0ZWQgYnkgbW9kYWwuanMgaW50byAubW9kYWwtY29udGVudCB0b3AtcmlnaHQgKi9cbi5tb2RhbC1jb250ZW50IHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ubW9kYWwtY2xvc2UteCB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiB2YXIoLS1zcGFjZS00KTtcblx0cmlnaHQ6IHZhcigtLXNwYWNlLTQpO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IG5vbmU7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpO1xuXHRsaW5lLWhlaWdodDogMTtcblx0ei1pbmRleDogMTtcbn1cblxuLm1vZGFsLWNsb3NlLXg6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi8qIOKUgOKUgCBQcm9maWxlIHBvcnRyYWl0ICsgYnV0dG9uIGdyaWQg4pSA4pSAXG4gICAuZmVhdHVyZS1pbm5lciB3cmFwcyBhbHRlcm5hdGluZyBwb3J0cmFpdCByb3dzIGFuZCBidXR0b24gcm93cyBpbiBhdXRob3JlZFxuICAgcHJvZmlsZSBwYWdlcy4gbGF5b3V0LmNzcyB1c2VzIGxpdGVyYWwgMjgwcHgsIHNvIG92ZXJyaWRlIGZsZXggZGlyZWN0bHkuXG4gICAxNTBweCBmaXRzIDMgcGVyIHJvdyBhdCA1MDBweCB3aWRlIHNpZGViYXIgY29udGVudCAoM8OXMTUwICsgMsOXMjRnYXAgPSA0OThweCkuXG4gICBTZWxlY3RvciBjb3ZlcnMgYm90aCBwb3J0cmFpdCBncmlkcyBhbmQgYWRqYWNlbnQgYnV0dG9uLXJvdyBncmlkcy4gKi9cbi5wYWdlLW1haW4gLmZlYXR1cmUtaW5uZXIgLmdyaWQgPiBkaXYge1xuXHRmbGV4OiAxIDEgMTUwcHggIWltcG9ydGFudDtcblx0bWluLXdpZHRoOiAwO1xufVxuXG4ucGFnZS1tYWluIC5ncmlkOmhhcyg+IGRpdiA+IGltZykgPiBkaXYge1xuXHRmbGV4OiAxIDEgMTUwcHggIWltcG9ydGFudDtcbn1cblxuLnBhZ2UtbWFpbiAuZ3JpZCA+IGRpdjpoYXMoPiBpbWcpIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5cbi5wYWdlLW1haW4gLmdyaWQgPiBkaXY6aGFzKD4gaW1nKSA+IGltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRhc3BlY3QtcmF0aW86IDEvMTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdG9iamVjdC1wb3NpdGlvbjogdG9wO1xufVxuXG4ucGFnZS1tYWluIC5ncmlkID4gZGl2Omhhcyg+IGltZykgPiBoMiB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtMSk7XG59XG5cbi5wYWdlLW1haW4gLmdyaWQgPiBkaXY6aGFzKD4gaW1nKSA+IHAuZGVzY3JpcHRpb24ge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0bGluZS1oZWlnaHQ6IDEuNTtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTQpO1xufVxuXG4vKiBwcm9maWxlIFwicmVhZCBzdG9yeVwiIGJ1dHRvbiByb3dzOiBmdWxsLXdpZHRoIGJ1dHRvbnMsIHRleHQgd3JhcHMgKi9cbi5wYWdlLW1haW4gLmdyaWQgPiBkaXYgPiBwID4gYnV0dG9uLmJ0bi1sZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRsaW5lLWhlaWdodDogMS4zO1xuXHRtaW4taGVpZ2h0OiAzLjVyZW07XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuXHQubW9kYWwge1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdC5tb2RhbC1jb250ZW50IHtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSAhaW1wb3J0YW50O1xuXHR9XG5cdC5tb2RhbC1jb250ZW50ID4gZGl2OmZpcnN0LWNoaWxkIHtcblx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHR9XG5cdC5tb2RhbC1jb250ZW50ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2OmZpcnN0LWNoaWxkIGltZyB7XG5cdFx0d2lkdGg6IDgwcHg7XG5cdFx0aGVpZ2h0OiA4MHB4O1xuXHR9XG59XG4vKiDilIDilIAgQm9vdHN0cmFwIGZvcm0gY2xhc3NlcyDihpIgMjAyNyBzdHlsZXMg4pSA4pSAXG4gICBGb3JtcyBhdXRob3JlZCB3aXRoIEJvb3RzdHJhcCAuZm9ybS1ncm91cCAvIC5mb3JtLWNvbnRyb2wgLyAuY2hlY2tib3guXG4gICBNYXBzIHRvIHRoZSBzYW1lIHZpc3VhbCByZXN1bHQgYXMgZm9ybXMuY3NzIC5pbnB1dC8uc2VsZWN0Ly5sYWJlbC4gKi9cbi5mb3JtLWdyb3VwIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5mb3JtLWdyb3VwID4gbGFiZWwge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLmZvcm0tY29udHJvbCB7XG5cdHdpZHRoOiAxMDAlO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0b3V0bGluZTogbm9uZTtcblx0dHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xuXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uZm9ybS1jb250cm9sOmZvY3VzIHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuc2VsZWN0LmZvcm0tY29udHJvbCB7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxudGV4dGFyZWEuZm9ybS1jb250cm9sIHtcblx0cmVzaXplOiB2ZXJ0aWNhbDtcblx0bWluLWhlaWdodDogMTIwcHg7XG59XG5cbi8qIEJvb3RzdHJhcCAuY2hlY2tib3g6IGRpdi5jaGVja2JveCA+IGxhYmVsID4gaW5wdXRbdHlwZT1jaGVja2JveF0gKyB0ZXh0LlxuICAgZm9ybXMuY3NzIHRyZWF0cyAuY2hlY2tib3ggYXMgYSAyMMOXMjBweCBjdXN0b20gaW5wdXQsIGJ1dCBCb290c3RyYXAgdXNlcyBpdFxuICAgYXMgYSB3cmFwcGVyIERJVi4gT3ZlcnJpZGUgc2l6ZSBvbiBkaXYuY2hlY2tib3ggc28gdGhlIGxhYmVsIGNhbiBiZSBmdWxsIGhlaWdodC4gKi9cbmRpdi5jaGVja2JveCB7XG5cdHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG5cdGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTIpIDA7XG59XG5cbmRpdi5jaGVja2JveCBsYWJlbCB7XG5cdGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0cGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XG59XG5cbi5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG5cdHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcblx0bWFyZ2luOiAycHggMCAwICFpbXBvcnRhbnQ7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHR3aWR0aDogMXJlbTtcblx0aGVpZ2h0OiAxcmVtO1xuXHRhY2NlbnQtY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi8qIHNjcm9sbGFibGUgY2hlY2tib3ggY29udGFpbmVyICovXG4ucHJvZ3JhbXMtd3JhcHBlciB7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCk7XG5cdG1heC1oZWlnaHQ6IDI4MHB4O1xuXHRvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4ucHJvZ3JhbXMtd3JhcHBlciBzdHJvbmcge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtMykgMCB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLnByb2dyYW1zLXdyYXBwZXIgc3Ryb25nOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLnByb2dyYW1zLXdyYXBwZXIgaHIge1xuXHRib3JkZXI6IG5vbmU7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtMykgMDtcbn1cblxuLyogaGVscGVyIHRleHQgKyByZXF1aXJlZCBhc3RlcmlzayAqL1xuLnRleHQtZGFuZ2VyIHtcblx0Y29sb3I6IHZhcigtLWF1LWVycm9yKTtcbn1cblxuLnRleHQtbXV0ZWQge1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcbn1cblxuLyog4pSA4pSAIENLRWRpdG9yIHRleHQtYWxpZ246Y2VudGVyIG9uIDxwPiBjb250YWluaW5nIGFuIGltZyDilIDilIBcbiAgIENLRWRpdG9yIGNlbnRlcnMgaW1hZ2VzIGJ5IHNldHRpbmcgdGV4dC1hbGlnbjpjZW50ZXIgb24gdGhlIHdyYXBwaW5nIDxwPi5cbiAgIGJhc2UuY3NzIG1ha2VzIGltZyBkaXNwbGF5OmJsb2NrLCB3aGljaCBpZ25vcmVzIHRleHQtYWxpZ24g4oCUIHRyYW5zbGF0ZSB0b1xuICAgbWFyZ2luOmF1dG8gc28gdGhlIGF1dGhvcidzIGludGVudCBpcyBob25vcmVkLiAqL1xucFtzdHlsZSo9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIl0gPiBpbWcsXG5wW3N0eWxlKj1cInRleHQtYWxpZ246Y2VudGVyXCJdID4gaW1nIHtcblx0bWFyZ2luLWlubGluZTogYXV0bztcbn1cblxuLyog4pSA4pSAIExlZ2FjeSBmb250IHJlZmVyZW5jZXMg4pSA4pSAXG4gICBBa2t1cmF0TGlnaHQgd2FzIHRoZSBvbGQgc2l0ZSdzIGJvZHkgZm9udCwgbm90IGxvYWRlZCBpbiAyMDI3LiBPdmVycmlkZVxuICAgdG8gdGhlIGRlc2lnbi1zeXN0ZW0gc3RhY2sgc28gdGhlIHRleHQgZG9lc24ndCBmYWxsIHRvIGEgcmFuZG9tIHNlcmlmLiAqL1xuW3N0eWxlKj1Ba2t1cmF0TGlnaHRdLFxuW3N0eWxlKj1Ba2t1cmF0XSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpICFpbXBvcnRhbnQ7XG59XG5cbi8qIOKUgOKUgCBCb290c3RyYXAgcmVzcG9uc2l2ZSBlbWJlZCAoLmVtYmVkLXJlc3BvbnNpdmUpIOKUgOKUgFxuICAgTGVnYWN5IGNvbnRlbnQgd3JhcHMgWW91VHViZS9WaW1lbyBpZnJhbWVzIGluIHRoaXM7IEJvb3RzdHJhcCdzIENTU1xuICAgaXNuJ3QgbG9hZGVkIG9uIHRoZSAyMDI3IGNoYWluIHNvIHRoZSBpZnJhbWUgY29sbGFwc2VzLiAqL1xuLmVtYmVkLXJlc3BvbnNpdmUge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogMTAwJTtcblx0cGFkZGluZzogMDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmVtYmVkLXJlc3BvbnNpdmU6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uZW1iZWQtcmVzcG9uc2l2ZSAuZW1iZWQtcmVzcG9uc2l2ZS1pdGVtLFxuLmVtYmVkLXJlc3BvbnNpdmUgaWZyYW1lLFxuLmVtYmVkLXJlc3BvbnNpdmUgZW1iZWQsXG4uZW1iZWQtcmVzcG9uc2l2ZSBvYmplY3QsXG4uZW1iZWQtcmVzcG9uc2l2ZSB2aWRlbyB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAwO1xuXHRsZWZ0OiAwO1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHRib3JkZXI6IDA7XG59XG5cbi5lbWJlZC1yZXNwb25zaXZlLTE2Ynk5OjpiZWZvcmUge1xuXHRwYWRkaW5nLXRvcDogNTYuMjUlO1xufVxuXG4uZW1iZWQtcmVzcG9uc2l2ZS00YnkzOjpiZWZvcmUge1xuXHRwYWRkaW5nLXRvcDogNzUlO1xufVxuXG4uZW1iZWQtcmVzcG9uc2l2ZS0xYnkxOjpiZWZvcmUge1xuXHRwYWRkaW5nLXRvcDogMTAwJTtcbn1cblxuLyog4pSA4pSAIGltZy1yZXNwb25zaXZlIChCb290c3RyYXApIOKUgOKUgCAqL1xuLmNhcmQtdGV4dCAuaW1nLXJlc3BvbnNpdmUge1xuXHRtYXgtd2lkdGg6IDEwMCU7XG5cdGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xufVxuXG4vKiDilIDilIAgcmVzcG9uc2l2ZSDilIDilIAgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjBweCkge1xuXHQuY2FyZC10ZXh0ID4gLnJvdyxcblx0LmNhcmQtdGV4dCA+IGRpdiA+IC5yb3cge1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdH1cblx0LmNhcmQtdGV4dDpoYXMoPiBbY2xhc3MqPWNvbC1sZy0zXSkge1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdH1cblx0LmNhcmQtdGV4dCA+IFtjbGFzcyo9Y29sLWxnLTNdIHtcblx0XHRmbGV4LWJhc2lzOiBjYWxjKDUwJSAtIHZhcigtLXNwYWNlLTMpKTtcblx0fVxuXHRzZWN0aW9uLmNvbHVtbnMgLmNvbnRhaW5lciA+IC5yb3cge1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdH1cblx0c2VjdGlvbi5jb2x1bW5zIC5jb250YWluZXIgPiAucm93ID4gW2NsYXNzKj1jb2wtXSB7XG5cdFx0ZmxleC1iYXNpczogY2FsYyg1MCUgLSB2YXIoLS1zcGFjZS0zKSk7XG5cdH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuXHQuY2FyZC10ZXh0ID4gW2NsYXNzKj1jb2wtbGctM10ge1xuXHRcdGZsZXgtYmFzaXM6IDEwMCU7XG5cdH1cblx0c2VjdGlvbi5jb2x1bW5zIC5jb250YWluZXIgPiAucm93ID4gW2NsYXNzKj1jb2wtXSB7XG5cdFx0ZmxleC1iYXNpczogMTAwJTtcblx0fVxufVxuLyog4pSA4pSAIEhhbmQtYnVpbHQgYnJlYWRjcnVtYnMg4pSA4pSAXG4gICBMZWdhY3kgc2VjdGlvbiBwYWdlcyBjYXJyeSBhIFwiQnJlYWRjcnVtYnNcIiBjb2x1bW5zIHNlY3Rpb24gKEN1c3RvbSBDbGFzc1xuICAgXCJicmVhZGNydW1ic1wiKSB3aG9zZSBjYXJkIGJvZHkgaXMgYSAuYnJlYWRjcnVtYi1jb250YWluZXIgb2YgLmNydW1iIGRpdnNcbiAgIHNlcGFyYXRlZCBieSAuZGVsaW1pdGVyIGRpdnMgKFwiJmd0O1wiKSBhbmQgQm9vdHN0cmFwIC5tb2JpbGUtZGVsaW1pdGVyIHNwYWNlcnMuXG4gICBVbnN0eWxlZCB0aGV5IHN0YWNrIGFzIGEgbGlzdCBvZiBsaW5rczsgbGF5IHRoZW0gb3V0IGFzIG9uZSBjb21wYWN0IHRyYWlsXG4gICBpbiB0aGUgMjAyNyBjcnVtYiBsb29rIGFuZCBzbGltIHRoZSBiYW5kIHRvIGZpdC4gKi9cbi5zZWN0aW9uLmJyZWFkY3J1bWJzIHtcblx0cGFkZGluZy1ibG9jazogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5zZWN0aW9uLmJyZWFkY3J1bWJzIC5jYXJkLFxuLnNlY3Rpb24uYnJlYWRjcnVtYnMgLmNhcmQtYm9keSB7XG5cdHBhZGRpbmc6IDA7XG59XG5cbi5icmVhZGNydW1iLWNvbnRhaW5lciB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0YWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEpIHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcbn1cblxuLmJyZWFkY3J1bWItY29udGFpbmVyIC5tb2JpbGUtZGVsaW1pdGVyIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLmJyZWFkY3J1bWItY29udGFpbmVyIC5kZWxpbWl0ZXIge1xuXHRmb250LXNpemU6IDA7XG59XG5cbi5icmVhZGNydW1iLWNvbnRhaW5lciAuZGVsaW1pdGVyOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIuKAulwiO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xufVxuXG4uYnJlYWRjcnVtYi1jb250YWluZXIgLmNydW1iIGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG59XG5cbi5icmVhZGNydW1iLWNvbnRhaW5lciAuY3J1bWItbGVhZiB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLyog4pSA4pSAIEJvb3RzdHJhcCAzIGJpdHMgYXV0aG9yZWQgaW5zaWRlIHNlY3Rpb24gYm9kaWVzIOKUgOKUgFxuICAgSGFuZC13cml0dGVuIHNlY3Rpb24gY29udGVudCAoZS5nLiAvbGlmZS9ob3VzaW5nL3RpbWJlcnJpZGdlLykgc3RpbGwgdXNlc1xuICAgQm9vdHN0cmFwJ3MgYnV0dG9ucywgYWxlcnRzLCBwYW5lbHMgYW5kIHJlc3BvbnNpdmUgZW1iZWRzLiBNYXAgdGhlbSBvbnRvIHRoZVxuICAgMjAyNyBsb29rIHNvIHRoZXkgZG9uJ3QgZmFsbCBiYWNrIHRvIGJhcmUgdGV4dCBvciB6ZXJvLWhlaWdodCBpZnJhbWVzLiAqL1xuLmNhcmQtdGV4dCAuYnRuLWJsdWUsXG4uY2FyZC10ZXh0IC5idG4tcHJpbWFyeSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLmNhcmQtdGV4dCAuYnRuLWJsdWU6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi5jYXJkLXRleHQgLmJ0bi1kZWZhdWx0IHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLmNhcmQtdGV4dCAuYnRuLWRlZmF1bHQ6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLmNhcmQtdGV4dCBwOm5vdCguYnRuLXJvdykgPiAuYnRuICsgLmJ0biB7XG5cdG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmNhcmQtdGV4dCAuYWxlcnQge1xuXHRtYXJnaW4tYmxvY2s6IHZhcigtLXNwYWNlLTQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xufVxuXG4uY2FyZC10ZXh0IC5hbGVydC13YXJuaW5nIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcblx0Y29sb3I6ICM2ZTU0MTg7XG59XG5cbi5jYXJkLXRleHQgLmFsZXJ0LWluZm8ge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG59XG5cbi5jYXJkLXRleHQgLmFsZXJ0IDppcyhoMiwgaDMsIGg0KSB7XG5cdGNvbG9yOiBpbmhlcml0O1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4uY2FyZC10ZXh0IC5wYW5lbCB7XG5cdG1hcmdpbi1ibG9jazogdmFyKC0tc3BhY2UtMyk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4uY2FyZC10ZXh0IC5wYW5lbC1ib2R5IHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5jYXJkLXRleHQgLmVtYmVkLXJlc3BvbnNpdmUge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHdpZHRoOiAxMDAlO1xuXHRhc3BlY3QtcmF0aW86IDE2Lzk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG59XG5cbi5jYXJkLXRleHQgLmVtYmVkLXJlc3BvbnNpdmUtNGJ5MyB7XG5cdGFzcGVjdC1yYXRpbzogNC8zO1xufVxuXG4uY2FyZC10ZXh0IC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0ge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHRib3JkZXI6IDA7XG59XG5cbi5jYXJkLXRleHQgLnNtYWxsIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcbn1cblxuLmNhcmQtdGV4dCAudGV4dC1tdXRlZCB7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xufVxuXG4vKiBsZWdhY3kgYGJ0bi1nb2xkYCAoQ0tFZGl0b3ItYXV0aG9yZWQsIGUuZy4gdGhlIC9mYWl0aC9taXNzaW9ucy8gXCJBcHBseSBIZXJlXCIpXG4gICAtLSB0aGUgMjAyNyBnb2xkIGJ1dHRvbi4gV2l0aG91dCBpdCB0aGUgbGluayByZW5kZXJzIGFzIGJhcmUgZ29sZCB0ZXh0LiAqL1xuLmJ0bi5idG4tZ29sZCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLmJ0bi5idG4tZ29sZDpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuLyogbGVnYWN5IGJsb2ctYmxvY2tzLXJ1bGUuZHQgKGFnZW5kYSBmZWVkIGFzIGEgcG9zdCBsaXN0LCBlLmcuIC9mYWl0aC9ldmVudHMuaHRtbCk6XG4gICB0aGUgdGh1bWJuYWlsIHNhdCBpbiBhIEJvb3RzdHJhcCBjb2wtbWQtMyBmbG9hdGVkIGJlc2lkZSB0aGUgcG9zdC4gUmVzdG9yZSB0aGVcbiAgIGZsb2F0IHNvIHRoZSBwaG90byBzdGF5cyBhIHRodW1ibmFpbCBpbnN0ZWFkIG9mIGEgZnVsbC13aWR0aCBjZW50cmVkIHBvc3Rlci4gKi9cbi5hZ2VuZGEtZmVlZC1ibG9nIC5wb3N0LWltYWdlIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5hZ2VuZGEtZmVlZC1ibG9nIC5wb3N0LWltYWdlIGltZyB7XG5cdG1heC1oZWlnaHQ6IG5vbmU7XG59XG5cbi5hZ2VuZGEtZmVlZC1ibG9nIGgzIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLmFnZW5kYS1mZWVkLWJsb2cgaDMgYSB7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmFnZW5kYS1mZWVkLWJsb2cgaDUge1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTEpIDAgdmFyKC0tc3BhY2UtMyk7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5hZ2VuZGEtZmVlZC1ibG9nIC5jbGVhcmZpeCB7XG5cdGNsZWFyOiBib3RoO1xufVxuXG4uYWdlbmRhLWZlZWQtYmxvZyAuY2xlYXJmaXggaHIge1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTUpIDA7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuXHQuYWdlbmRhLWZlZWQtYmxvZyAucG9zdC1pbWFnZSB7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0d2lkdGg6IDI1JTtcblx0XHRwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zcGFjZS01KTtcblx0fVxufVxuLyogbGVnYWN5IGAudG9wLWJ1dHRvbi1tZW51YCAoQ0tFZGl0b3ItYXV0aG9yZWQgcHJvZ3JhbSBtZW51IG9uIHRoZSBTY2hvb2wgb2ZcbiAgIExlYWRlcnNoaXAgcGFnZXMsIHN0eWxlZCBieSBhIGZvbGRlciBzcGVjaWZpYy5jc3MgdGhlIDIwMjcgY2hhaW4gZG9lc24ndCBsb2FkKTpcbiAgIGEgcm93IG9mIG5hdnkgdGlsZXMgdGhhdCB3cmFwcyBvbiBuYXJyb3cgc2NyZWVucy4gVGhlICZuYnNwO3MgYmV0d2VlbiB0aGVcbiAgIGxpbmtzIGNvbGxhcHNlIGludG8gdGhlIGZsZXggZ2FwLiAqL1xuLnRvcC1idXR0b24tbWVudSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0bWFyZ2luLWJsb2NrOiB2YXIoLS1zcGFjZS00KTtcblx0Zm9udC1zaXplOiAwO1xufVxuXG4udG9wLWJ1dHRvbi1tZW51IGEge1xuXHRmbGV4OiAxIDEgMTEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRtaW4taGVpZ2h0OiA2MHB4O1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4udG9wLWJ1dHRvbi1tZW51IGE6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGNsaWNrZGltZW5zaW9ucy5jc3MgIMK3ICBDbGlja0RpbWVuc2lvbnMgZm9ybXMgaW4gdGhlIDIwMjcgbG9va1xuICAgQSBDbGlja0RpbWVuc2lvbnMgZm9ybSAoYGRhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcj1cImZvcm1cImApIGlzIGRyYXduXG4gICBjbGllbnQtc2lkZSBieSBTdXJ2ZXlKUzogcm9vdCBgLnNkLXJvb3QtbW9kZXJuYCwgdGhlbWVkIGJ5IGAtLXNqcy0qYFxuICAgY3VzdG9tIHByb3BlcnRpZXMgdGhlIGVtYmVkIHdyaXRlcyBhcyBJTkxJTkUgc3R5bGVzIG9uIHRoYXQgcm9vdC4gSW5saW5lXG4gICBiZWF0cyBhbnkgc3R5bGVzaGVldCBydWxlLCBzbyB0aGUgdmFyaWFibGUgb3ZlcnJpZGVzIG5lZWQgIWltcG9ydGFudC5cbiAgIFRoZSBlbWJlZCBpdHNlbGYgc3RheXMgdW50b3VjaGVkIC0tIHRoaXMgb25seSByZXN0eWxlcyB3aGF0IGl0IGRyYXdzLlxuICAgRmlyc3QgdXNlZCBvbiAvYXBwbHkvcmVxdWVzdC8uXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiB7XG5cdC0tc2pzLWZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuXHQtLXNqcy1jb3JuZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWJhc2UtdW5pdDogOHB4ICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWdlbmVyYWwtYmFja2NvbG9yOiB2YXIoLS1hdS13aGl0ZSkgIWltcG9ydGFudDtcblx0LS1zanMtZ2VuZXJhbC1iYWNrY29sb3ItZGFyazogdmFyKC0tYXUtY3JlYW0pICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWdlbmVyYWwtYmFja2NvbG9yLWRpbTogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcblx0LS1zanMtZ2VuZXJhbC1iYWNrY29sb3ItZGltLWxpZ2h0OiB2YXIoLS1hdS13aGl0ZSkgIWltcG9ydGFudDtcblx0LS1zanMtZ2VuZXJhbC1iYWNrY29sb3ItZGltLWRhcms6IHZhcigtLWF1LWNyZWFtKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1nZW5lcmFsLWZvcmVjb2xvcjogdmFyKC0tYXUtdGV4dCkgIWltcG9ydGFudDtcblx0LS1zanMtZ2VuZXJhbC1mb3JlY29sb3ItbGlnaHQ6IHZhcigtLWF1LXdhcm0tZ3JheSkgIWltcG9ydGFudDtcblx0LS1zanMtZ2VuZXJhbC1kaW0tZm9yZWNvbG9yOiB2YXIoLS1hdS10ZXh0KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1nZW5lcmFsLWRpbS1mb3JlY29sb3ItbGlnaHQ6IHZhcigtLWF1LXdhcm0tZ3JheSkgIWltcG9ydGFudDtcblx0LS1zanMtcHJpbWFyeS1iYWNrY29sb3I6IHZhcigtLWF1LW5hdnkpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLXByaW1hcnktYmFja2NvbG9yLWRhcms6IHZhcigtLWF1LW5hdnktZGVlcCkgIWltcG9ydGFudDtcblx0LS1zanMtcHJpbWFyeS1iYWNrY29sb3ItbGlnaHQ6IHJnYmEoMTk4LDE0OSw0MywwLjE1KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1wcmltYXJ5LWZvcmVjb2xvcjogdmFyKC0tYXUtd2hpdGUpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLXNlY29uZGFyeS1iYWNrY29sb3I6IHZhcigtLWF1LWdvbGQpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLXNlY29uZGFyeS1iYWNrY29sb3ItbGlnaHQ6IHJnYmEoMTk4LDE0OSw0MywwLjI1KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1zZWNvbmRhcnktYmFja2NvbG9yLXNlbWktbGlnaHQ6IHJnYmEoMTk4LDE0OSw0MywwLjEpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLXNwZWNpYWwteWVsbG93OiB2YXIoLS1hdS1nb2xkKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1zcGVjaWFsLXllbGxvdy1saWdodDogdmFyKC0tYXUtZ29sZC1wYWxlKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1zcGVjaWFsLXJlZDogdmFyKC0tYXUtZXJyb3IpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLXNwZWNpYWwtcmVkLWxpZ2h0OiByZ2JhKDE4NCw1MCw1MCwwLjA4KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1ib3JkZXItZGVmYXVsdDogdmFyKC0tYXUtZ3JheS0zMDApICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWJvcmRlci1saWdodDogdmFyKC0tYXUtZ3JheS0yMDApICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWJvcmRlci1pbnNpZGU6IHZhcigtLWF1LWdyYXktMjAwKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1zaGFkb3ctc21hbGw6IG5vbmUgIWltcG9ydGFudDtcblx0LS1zanMtc2hhZG93LW1lZGl1bTogdmFyKC0tc2hhZG93LW1kKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1zaGFkb3ctaW5uZXI6IG5vbmUgIWltcG9ydGFudDtcblx0LS1zanMtc2hhZG93LWlubmVyLXJlc2V0OiBub25lICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWZvbnQtcXVlc3Rpb250aXRsZS1zaXplOiB2YXIoLS10ZXh0LXNtKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LXF1ZXN0aW9udGl0bGUtY29sb3I6IHZhcigtLWF1LXRleHQpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWZvbnQtcXVlc3Rpb25kZXNjcmlwdGlvbi1zaXplOiB2YXIoLS10ZXh0LXNtKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LXF1ZXN0aW9uZGVzY3JpcHRpb24tY29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSkgIWltcG9ydGFudDtcblx0LS1zanMtZm9udC1lZGl0b3Jmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSkgIWltcG9ydGFudDtcblx0LS1zanMtZm9udC1lZGl0b3Jmb250LWNvbG9yOiB2YXIoLS1hdS10ZXh0KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LWVkaXRvcmZvbnQtcGxhY2Vob2xkZXJjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LXN1cnZleXRpdGxlLWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LWhlYWRlcnRpdGxlLWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LWhlYWRlcnRpdGxlLWNvbG9yOiB2YXIoLS1hdS1uYXZ5KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LWhlYWRlcmRlc2NyaXB0aW9uLWNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWZvbnQtaGVhZGVyZGVzY3JpcHRpb24td2VpZ2h0OiA0MDAgIWltcG9ydGFudDtcblx0LS1zanMtZm9udC1wYWdlZGVzY3JpcHRpb24tY29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSkgIWltcG9ydGFudDtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKSAhaW1wb3J0YW50O1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8qIGhlYWRlcjogdGhlIGVtYmVkJ3MgZmFpbnQgY2FtcHVzLXNrZXRjaCB0aWxlIGFuZCBjZW50ZXJlZCBkaXNwbGF5IHR5cGVcbiAgIGJlY29tZSBhIHBsYWluIDIwMjcgY2FyZCBoZWFkZXIgKi9cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc3YtaGVhZGVyX19iYWNrZ3JvdW5kLWltYWdlIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zdi1oZWFkZXIge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xufVxuXG4vKiB0aGUgaGVhZGVyIGlzIGEgM3gzIGdyaWQgd2l0aCB0aGUgdGV4dCBpbiB0aGUgY2VudHJlIGNlbGw6IGRyb3AgdGhlIGVtcHR5XG4gICBjZWxscyBhbmQgbGV0IHRoZSB0ZXh0IHJ1biB0aGUgY2FyZCdzIGZ1bGwgd2lkdGgsIGxlZnQtYWxpZ25lZCAqL1xuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zdi1oZWFkZXJfX2NvbnRlbnQge1xuXHRkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS02KSAwICFpbXBvcnRhbnQ7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc3YtaGVhZGVyX19jZWxsLS1lbXB0eSB7XG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zdi1oZWFkZXJfX2NlbGwge1xuXHR3aWR0aDogYXV0byAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnN2LWhlYWRlcl9fY2VsbC1jb250ZW50IHtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcblx0dGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xuXHRtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcblx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpICFpbXBvcnRhbnQ7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc3YtaGVhZGVyX190aXRsZSxcbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc3YtaGVhZGVyX190aXRsZSAuc3Ytc3RyaW5nLXZpZXdlciB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpICFpbXBvcnRhbnQ7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0yeGwpICFpbXBvcnRhbnQ7XG5cdGZvbnQtd2VpZ2h0OiA0MDAgIWltcG9ydGFudDtcblx0bGluZS1oZWlnaHQ6IDEuMiAhaW1wb3J0YW50O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSkgIWltcG9ydGFudDtcblx0dGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnN2LWhlYWRlcl9fZGVzY3JpcHRpb24sXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnN2LWhlYWRlcl9fZGVzY3JpcHRpb24gLnN2LXN0cmluZy12aWV3ZXIge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KSAhaW1wb3J0YW50O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSkgIWltcG9ydGFudDtcblx0Zm9udC13ZWlnaHQ6IDQwMCAhaW1wb3J0YW50O1xuXHRsaW5lLWhlaWdodDogMS41ICFpbXBvcnRhbnQ7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpICFpbXBvcnRhbnQ7XG5cdHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDtcbn1cblxuLyogYm9keTogbm8gcGVyLXF1ZXN0aW9uIHdoaXRlIGZyYW1lcyAtLSBmaWVsZHMgc2l0IHN0cmFpZ2h0IG9uIHRoZSBjYXJkICovXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWJvZHksXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWJvZHkuc2QtYm9keS0tcmVzcG9uc2l2ZSB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTYpIHZhcigtLXNwYWNlLTYpICFpbXBvcnRhbnQ7XG5cdG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWVsZW1lbnQtLXdpdGgtZnJhbWUge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG5cdGJvcmRlcjogMCAhaW1wb3J0YW50O1xuXHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG5cdG1hcmdpbjogMCAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLXBhZ2Uge1xuXHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG59XG5cbi8qIGEgcm93J3MgY2VsbHMgYXJlIFN1cnZleUpTIHdyYXBwZXJzIHNpemVkIGZsZXg6IDEgMSA1MCUgd2l0aCB0aGVpciBvd25cbiAgIHBhZGRpbmctbGVmdCBndXR0ZXIsIHNvIG5vIGNvbHVtbi1nYXAgaGVyZSAoaXQgd291bGQgd3JhcCBldmVyeSBwYWlyKSAqL1xuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1yb3cge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KSAhaW1wb3J0YW50O1xuXHRyb3ctZ2FwOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1yb3c6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2Qtcm93ID4gLnNkLXJvd19fcXVlc3Rpb24ge1xuXHRtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLXF1ZXN0aW9uX190aXRsZSB7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi8qIGEgY29tcG9zaXRlIGZpZWxkIHdob3NlIHRpdGxlIHRoZSBmb3JtIGhpZGVzICh0aGUgcGhvbmUgcGFuZWwpIHdvdWxkXG4gICBvdGhlcndpc2UgYmUgdHdvIGJhcmUgYm94ZXM6IGxhYmVsIGl0IHdpdGggdGhlIHF1ZXN0aW9uJ3Mgb3duIG5hbWUgKi9cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtZWxlbWVudC0tY29tcGxleFtkYXRhLW5hbWVdOm5vdCg6aGFzKD4gLnNkLXF1ZXN0aW9uX19oZWFkZXIpKTo6YmVmb3JlIHtcblx0Y29udGVudDogYXR0cihkYXRhLW5hbWUpO1xuXHRkaXNwbGF5OiBibG9jaztcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0xKTtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1lbGVtZW50LS1jb21wbGV4LFxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1lbGVtZW50LS1jb21wbGV4IC5zZC1wYW5lbF9fY29udGVudCB7XG5cdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbn1cblxuLyogdGhlIGVtYmVkJ3Mgb3duIG5lc3RlZCAhaW1wb3J0YW50IHJ1bGUgcGFkcyB0aGUgY29tcG9zaXRlJ3MgdG9wIHdpdGggdGhpc1xuICAgdmFyOyB6ZXJvIHRoZSB2YXIsIHNpbmNlIGl0cyBzZWxlY3RvciBvdXRyYW5rcyBvdXJzICovXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWVsZW1lbnQtLWNvbXBsZXguc2QtZWxlbWVudC0td2l0aC1mcmFtZSB7XG5cdC0tc2QtYmFzZS12ZXJ0aWNhbC1wYWRkaW5nOiAwcHggIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1lbGVtZW50LS1jb21wbGV4IC5zZC1yb3cge1xuXHRmbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xuXHRtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG59XG5cbi8qIGNvdW50cnkgY29kZSBmaXhlZCBhbmQgbmFycm93LCBudW1iZXIgdGFrZXMgdGhlIHJlc3QgKHRoZSBjZWxscyBhcmUgdGhlXG4gICBTdXJ2ZXlKUyB3cmFwcGVyIGRpdnMgd2l0aCBpbmxpbmUgZmxleC9tYXgtd2lkdGgpICovXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWVsZW1lbnQtLWNvbXBsZXggLnNkLXJvdyA+IGRpdjpmaXJzdC1jaGlsZCB7XG5cdGZsZXg6IDAgMCBjYWxjKHZhcigtLWNkLWNvZGUtd2lkdGgsIDkuNXJlbSkgKyA0MHB4KSAhaW1wb3J0YW50O1xuXHRtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcblx0bWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtZWxlbWVudC0tY29tcGxleCAuc2Qtcm93ID4gZGl2ICsgZGl2IHtcblx0ZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcblx0bWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG5cdG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWVsZW1lbnQtLW5lc3RlZCB7XG5cdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcblx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XG59XG5cbi8qIHNpZGUtYnktc2lkZSBmaWVsZHMgbGluZSB1cCBvbiB0aGVpciBpbnB1dHMgd2hlbiBvbmx5IG9uZSBoYXMgYSBsYWJlbCAqL1xuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1wYWdlID4gLnNkLXJvdyB7XG5cdGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbn1cblxuLyogaW5wdXRzID0gLmlucHV0IGZyb20gZm9ybXMuY3NzICovXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWlucHV0IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSkgIWltcG9ydGFudDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpICFpbXBvcnRhbnQ7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpICFpbXBvcnRhbnQ7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKSAhaW1wb3J0YW50O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpICFpbXBvcnRhbnQ7XG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCkgIWltcG9ydGFudDtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50O1xuXHR3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuXHRoZWlnaHQ6IDMuMjVyZW0gIWltcG9ydGFudDtcblx0bWluLWhlaWdodDogMCAhaW1wb3J0YW50O1xuXHRsaW5lLWhlaWdodDogMS41ICFpbXBvcnRhbnQ7XG5cdHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIHRleHRhcmVhLnNkLWlucHV0LFxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1jb21tZW50IHtcblx0aGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG5cdG1pbi1oZWlnaHQ6IDdyZW0gIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1kcm9wZG93biB7XG5cdGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1pbnB1dDo6cGxhY2Vob2xkZXIsXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWRyb3Bkb3duX19maWx0ZXItc3RyaW5nLWlucHV0OjpwbGFjZWhvbGRlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRvcGFjaXR5OiAxO1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWlucHV0OmZvY3VzLFxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1pbnB1dDpmb2N1cy13aXRoaW4sXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWlucHV0LnNkLWlucHV0LS1mb2N1c2VkIHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKSAhaW1wb3J0YW50O1xuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG5cdG91dGxpbmU6IG5vbmU7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtaW5wdXQuc2QtaW5wdXQtLWVycm9yLFxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1xdWVzdGlvbi0tZXJyb3IgLnNkLWlucHV0IHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1lcnJvcikgIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1kcm9wZG93biB7XG5cdHBhZGRpbmctcmlnaHQ6IHZhcigtLXNwYWNlLTYpICFpbXBvcnRhbnQ7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtZHJvcGRvd24gPiAqIHtcblx0bWluLWhlaWdodDogMCAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWRyb3Bkb3duX192YWx1ZSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKSAhaW1wb3J0YW50O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1xdWVzdGlvbl9fZXJib3gge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtZXJyb3IpO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xKSAwIDAgIWltcG9ydGFudDtcblx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XG59XG5cbi8qIGZvb3RlcjogdGhlIHN1Ym1pdCBpcyB0aGUgZ29sZCAuYnRuLXByaW1hcnkgKi9cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtZm9vdGVyLFxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1ib2R5X19uYXZpZ2F0aW9uIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSkgMCAwICFpbXBvcnRhbnQ7XG5cdG1hcmdpbjogMCAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWJ0bixcbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtbmF2aWdhdGlvbl9fbmV4dC1idG4sXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLW5hdmlnYXRpb25fX2NvbXBsZXRlLWJ0biB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpICFpbXBvcnRhbnQ7XG5cdGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKSAhaW1wb3J0YW50O1xuXHRsZXR0ZXItc3BhY2luZzogMS41cHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGxpbmUtaGVpZ2h0OiAxLjIgIWltcG9ydGFudDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCkgIWltcG9ydGFudDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCkgIWltcG9ydGFudDtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ29sZCkgIWltcG9ydGFudDtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKSAhaW1wb3J0YW50O1xuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTYpICFpbXBvcnRhbnQ7XG5cdG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xuXHR3aWR0aDogYXV0bztcblx0bWF4LXdpZHRoOiAxMDAlO1xuXHRib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7XG5cdHdoaXRlLXNwYWNlOiBub3JtYWwgIWltcG9ydGFudDtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1mYXN0KSwgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1mYXN0KTtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1idG46aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KSAhaW1wb3J0YW50O1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpICFpbXBvcnRhbnQ7XG5cdGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSgxOTgsIDE0OSwgNDMsIDAuMzUpICFpbXBvcnRhbnQ7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtYnRuOmZvY3VzLXZpc2libGUge1xuXHRvdXRsaW5lOiAycHggc29saWQgdmFyKC0tYXUtbmF2eSk7XG5cdG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi8qIHRoZSBcInRoYW5rIHlvdVwiIHBhbmVsIGFmdGVyIHN1Ym1pdCAqL1xuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1jb21wbGV0ZWRwYWdlIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSkgIWltcG9ydGFudDtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpICFpbXBvcnRhbnQ7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpICFpbXBvcnRhbnQ7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuXHRbZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnN2LWhlYWRlcl9fY29udGVudCB7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtNCkgMCAhaW1wb3J0YW50O1xuXHR9XG5cdFtkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtYm9keSxcblx0W2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1ib2R5LnNkLWJvZHktLXJlc3BvbnNpdmUge1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpICFpbXBvcnRhbnQ7XG5cdH1cblx0W2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zdi1oZWFkZXJfX3RpdGxlLFxuXHRbZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnN2LWhlYWRlcl9fdGl0bGUgLnN2LXN0cmluZy12aWV3ZXIge1xuXHRcdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCkgIWltcG9ydGFudDtcblx0fVxuXHRbZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWJ0biB7XG5cdFx0d2lkdGg6IDEwMCUgIWltcG9ydGFudDtcblx0fVxuXHRbZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4ge1xuXHRcdC0tY2QtY29kZS13aWR0aDogNi41cmVtO1xuXHR9XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmNzc3gubWFwICovIl19 */