@charset "UTF-8";
/*----------------------------------------------------------------------------*        theme.scss
        Theme stylesheet, extends Blocss CSS Framework
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*        CONTENTS
\*----------------------------------------------------------------------------*/
/*
    README
    INCLUDES............Include various sass files
    BASE................High-level elements like 'html', 'body', etc.
    LAYOUT..............Structural styling
    MODULES.............Reusable, modular parts of the page
    */
/*----------------------------------------------------------------------------*    $INCLUDES
    Include various sass files
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $VARS
    Any variables you find set in blocss’ `_defaults.scss` that you do not wish
    to keep, simply redefine here. This means that if blocss, for example,
    sets your `$base-font-size` at 16px and you wish it to be 14px, simply
    redeclare that variable in this file. Blocss ignores its own variables
    in favour of using your own, so you can completely modify how blocss
    works without ever having to alter the framework itself.
\*----------------------------------------------------------------------------*/
/* layout */
/* arrange */
/* grid */
/* extends */
/* units / divisions */
/* units / breakpoints */
/* push */
/* pull*/
/* visuallyhidden */
/*----------------------------------------------------------------------------*    $OVERRIDES
    Place any variables that should override blocss’ defaults here.
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CUSTOM
    Place any of your own variables that sit on top of blocss here.
\*----------------------------------------------------------------------------*/
/*! blocss v6.0.0 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    Blocss
    Blocss is a small but powerfull css framework designed specially for
    serious developers
\*----------------------------------------------------------------------------*/
/*  Settings
\*----------------------------------------------------------------------------*/
/*! blocss-defaults v1.0.3 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    DEFAULTS
    Blocss default variables. Redefine and override them in your
    application-level `_vars.scss` file.
\*----------------------------------------------------------------------------*/
/*  Typography
\*----------------------------------------------------------------------------*/
/**
 * Base font size & line height
 * We predefine a nice big font size, wich reads very nice on a big screen.
 * As per: http://uxdesign.smashingmagazine.com/2011/11/29/the-perfect-paragraph/
 */
/*  Spacing
\*----------------------------------------------------------------------------*/
/**
 * Assign our `$blocss-base-line-height` to a new spacing variable for
 * more transparency
 */
/*  Responsive
    Define your breakpoints. The first value is the appendix that shall be used
    for your classes (e.g. `.u-6-12--palm`), the second value is the media
    query that the breakpoint fires at.
\*----------------------------------------------------------------------------*/
/*  Namespace
    Would you like blocss classes to be used with a different namespace?
\*----------------------------------------------------------------------------*/
/*  Flexbox
    Would you like blocss to enable flexbox in its subcomponents?
\*----------------------------------------------------------------------------*/
/*  Normalize
    Makes browsers render all elements more consistently and in line with modern standards
\*----------------------------------------------------------------------------*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
/**
 * 1. Set default font family to sans-serif.
 * 2. Prevent iOS and IE text size adjust after device orientation change,
 *    without disabling user zoom.
 */
html {
  font-family: sans-serif;
  /* 1 */
  -ms-text-size-adjust: 100%;
  /* 2 */
  -webkit-text-size-adjust: 100%;
  /* 2 */ }

/**
 * Remove default margin.
 */
body {
  margin: 0; }

/* HTML5 display definitions
   ========================================================================== */
/**
 * Correct `block` display not defined for any HTML5 element in IE 8/9.
 * Correct `block` display not defined for `details` or `summary` in IE 10/11
 * and Firefox.
 * Correct `block` display not defined for `main` in IE 11.
 */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block; }

/**
 * 1. Correct `inline-block` display not defined in IE 8/9.
 * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
 */
audio,
canvas,
progress,
video {
  display: inline-block;
  /* 1 */
  vertical-align: baseline;
  /* 2 */ }

/**
 * Prevent modern browsers from displaying `audio` without controls.
 * Remove excess height in iOS 5 devices.
 */
audio:not([controls]) {
  display: none;
  height: 0; }

/**
 * Address `[hidden]` styling not present in IE 8/9/10.
 * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
 */
[hidden],
template {
  display: none; }

/* Links
   ========================================================================== */
/**
 * Remove the gray background color from active links in IE 10.
 */
a {
  background-color: transparent; }

/**
 * Improve readability of focused elements when they are also in an
 * active/hover state.
 */
a:active,
a:hover {
  outline: 0; }

/* Text-level semantics
   ========================================================================== */
/**
 * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
 */
abbr[title] {
  border-bottom: 1px dotted; }

/**
 * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
 */
b,
strong {
  font-weight: bold; }

/**
 * Address styling not present in Safari and Chrome.
 */
dfn {
  font-style: italic; }

/**
 * Address variable `h1` font-size and margin within `section` and `article`
 * contexts in Firefox 4+, Safari, and Chrome.
 */
h1, .h1 {
  font-size: 2em;
  margin: 0.67em 0; }

/**
 * Address styling not present in IE 8/9.
 */
mark {
  background: #ff0;
  color: #000; }

/**
 * Address inconsistent and variable font size in all browsers.
 */
small {
  font-size: 80%; }

/**
 * Prevent `sub` and `sup` affecting `line-height` in all browsers.
 */
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline; }

sup {
  top: -0.5em; }

sub {
  bottom: -0.25em; }

/* Embedded content
   ========================================================================== */
/**
 * Remove border when inside `a` element in IE 8/9/10.
 */
img {
  border: 0; }

/**
 * Correct overflow not hidden in IE 9/10/11.
 */
svg:not(:root) {
  overflow: hidden; }

/* Grouping content
   ========================================================================== */
/**
 * Address margin not present in IE 8/9 and Safari.
 */
figure {
  margin: 1em 40px; }

/**
 * Address differences between Firefox and other browsers.
 */
hr {
  box-sizing: content-box;
  height: 0; }

/**
 * Contain overflow in all browsers.
 */
pre {
  overflow: auto; }

/**
 * Address odd `em`-unit font size rendering in all browsers.
 */
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em; }

/* Forms
   ========================================================================== */
/**
 * Known limitation: by default, Chrome and Safari on OS X allow very limited
 * styling of `select`, unless a `border` property is set.
 */
/**
 * 1. Correct color not being inherited.
 *    Known issue: affects color of disabled elements.
 * 2. Correct font properties not being inherited.
 * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
 */
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  /* 1 */
  font: inherit;
  /* 2 */
  margin: 0;
  /* 3 */ }

/**
 * Address `overflow` set to `hidden` in IE 8/9/10/11.
 */
button {
  overflow: visible; }

/**
 * Address inconsistent `text-transform` inheritance for `button` and `select`.
 * All other form control elements do not inherit `text-transform` values.
 * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
 * Correct `select` style inheritance in Firefox.
 */
button,
select {
  text-transform: none; }

/**
 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
 *    and `video` controls.
 * 2. Correct inability to style clickable `input` types in iOS.
 * 3. Improve usability and consistency of cursor style between image-type
 *    `input` and others.
 */
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  /* 2 */
  cursor: pointer;
  /* 3 */ }

/**
 * Re-set default cursor for disabled elements.
 */
button[disabled],
html input[disabled] {
  cursor: default; }

/**
 * Remove inner padding and border in Firefox 4+.
 */
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0; }

/**
 * Address Firefox 4+ setting `line-height` on `input` using `!important` in
 * the UA stylesheet.
 */
input {
  line-height: normal; }

/**
 * It's recommended that you don't attempt to style these elements.
 * Firefox's implementation doesn't respect box-sizing, padding, or width.
 *
 * 1. Address box sizing set to `content-box` in IE 8/9/10.
 * 2. Remove excess padding in IE 8/9/10.
 */
input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  /* 1 */
  padding: 0;
  /* 2 */ }

/**
 * Fix the cursor style for Chrome's increment/decrement buttons. For certain
 * `font-size` values of the `input`, it causes the cursor style of the
 * decrement button to change from `default` to `text`.
 */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto; }

/**
 * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
 * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
 */
input[type="search"] {
  -webkit-appearance: textfield;
  /* 1 */
  box-sizing: content-box;
  /* 2 */ }

/**
 * Remove inner padding and search cancel button in Safari and Chrome on OS X.
 * Safari (but not Chrome) clips the cancel button when the search input has
 * padding (and `textfield` appearance).
 */
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none; }

/**
 * Define consistent border, margin, and padding.
 */
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em; }

/**
 * 1. Correct `color` not being inherited in IE 8/9/10/11.
 * 2. Remove padding so people aren't caught out if they zero out fieldsets.
 */
legend {
  border: 0;
  /* 1 */
  padding: 0;
  /* 2 */ }

/**
 * Remove default vertical scrollbar in IE 8/9/10/11.
 */
textarea {
  overflow: auto; }

/**
 * Don't inherit the `font-weight` (applied by a rule above).
 * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
 */
optgroup {
  font-weight: bold; }

/* Tables
   ========================================================================== */
/**
 * Remove most spacing between table cells.
 */
table {
  border-collapse: collapse;
  border-spacing: 0; }

td,
th {
  padding: 0; }

/*  Tools
\*----------------------------------------------------------------------------*/
/*! blocss-mixins v1.0.2 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    TOOLS.MIXINS
    A set of usefull Sass mixins, wich can be used troughout your project
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Functions
\*----------------------------------------------------------------------------*/
/**
 * Value to rem
 */
/**
 * Value to em
 */
/**
 * A small, internally-used function to remove the units from a given value.
 */
/*  Mixins
\*----------------------------------------------------------------------------*/
/**
 * Rem converter
 *
 * 1. Provide pixel fallback for ie8
 * 2. Loop over values
 *
 * Sample: @include rem(margin, 0 auto 300px, !important);
 */
/**
 * Calculates font, rem font size & line height
 * $multiplier: multiplies line height by the given value
 * $line-height: include line height or not
 * The line height parameter can also be used as the multiplier
 *
 * Sample usage @include font-size(18px, 2);
 */
/**
 * Truncate overly long strings
 * sample value truncate(100%)
 */
/**
 * Enclose a block of code with a media query as named in `$blocss-breakpoints`.
 */
/*! blocss-extends v1.0.0 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    TOOLS.EXTENDS
    A couple of default extendable classes
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $MODULE
    Removes the `margin-bottom` of a modules last-childs.
    Please use the `.module` class as much as possible as extending is very
    expensive to your code.
    As per: http://css-tricks.com/spacing-the-bottom-of-modules/
\*----------------------------------------------------------------------------*/
.module > *:last-child,
.module > *:last-child > *:last-child,
.module > *:last-child > *:last-child > *:last-child,
.module > *:last-child > *:last-child > *:last-child > *:last-child {
  margin-bottom: 0; }

/*  Atoms
    These are the basic building blocks of matter. Applied to web interfaces,
    atoms are our HTML tags, such as a form label, an input or a button.
\*----------------------------------------------------------------------------*/
/*! blocss-reset v1.0.0 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    ATOMS.RESET
    A thin layer on top of normalize.css that provides a starting point more
    suitable for web applications. Removes the default spacing and border for
    appropriate elements.
\*----------------------------------------------------------------------------*/
/**
 * Set the global `box-sizing` state to `border-box`.
 *
 * css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice
 * paulirish.com/2012/box-sizing-border-box-ftw
 */
html {
  box-sizing: border-box; }

*, *:before, *:after {
  box-sizing: inherit; }

/**
 * The usual resetting of margins, paddings, borders etc.
 */
blockquote,
dl,
dd,
ol,
ul,
h1,
.h1,
h2,
.h2,
h3,
.h3,
h4,
.h4,
h5,
.h5,
h6,
.h6,
p,
pre,
fieldset,
hr {
  margin: 0; }

fieldset,
ol,
ul {
  padding: 0; }

iframe,
fieldset {
  border: 0; }

/**
 * Remove extra vertical spacing when nesting lists.
 */
li > ul,
li > ol {
  margin-bottom: 0; }

/**
 * 1. Fix an odd quirk whereby, without this, code blocks are rendered at a
 *    font-size smaller than 1em.
 */
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  /* 1 */ }

/**
 * Suppress the focus outline on links that cannot be accessed via keyboard.
 * This prevents an unwanted focus outline from appearing around elements that
 * might still respond to pointer events.
 */
[tabindex="-1"]:focus {
  outline: none !important; }

/**
 * Image
 *
 * 1. By default all images are fluid
 * 2. Render `alt` visually offset when images don't load
 */
img {
  max-width: 100%;
  /* 1 */
  font-style: italic;
  /* 2 */ }

/*! blocss-shared v1.0.1 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    ATOMS.RESET
    Contains several high-level rulesets which apply a consistent, shared
    declaration (typically margins) across a number of elements.
\*----------------------------------------------------------------------------*/
/**
 * Toplevel HTML element
 * Assign our `$blocss-base-font-size` & predefine some defaults
 *
 * 1. Apply the `$blocss-base-font-size`, `$blocss-line-height-ratio`
 * 2. Always add the horizontal scrollbar to prevent layout shifting
 * 3. Fonts on OSX will look more consistent with other systems that do not
 *    render text using sub-pixel anti-aliasing.
 */
html {
  font: 1em/1.5 sans-serif;
  /* 1 */
  overflow-y: scroll;
  /* 2 */
  min-height: 100%;
  -moz-osx-font-smoothing: grayscale;
  /* 3 */
  -webkit-font-smoothing: antialiased;
  /* 3 */ }

/**
 * Applies vertical rhythm to designated elements
 * As per: http://csswizardry.com/2012/06/single-direction-margin-declarations
 */
hgroup,
.hgroup,
ul,
ol,
dl,
blockquote,
p,
address,
table,
fieldset,
pre,
hr {
  /* 1 */
  /* 2 */
  margin-bottom: 1.5rem ; }

/**
 * Default indentation value for lists
 */
ul,
ol,
dd {
  /* 1 */
  /* 2 */
  margin-left: 1.5rem ; }

/*! blocss-arrange v1.1.2 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    ARRANGE
    This component lets you lay out a row of cells in various ways. You can
    specify whether a cell should be wide enough to fit its content, or take up
    the remaining space in the row. It's also possible to give all cells an
    equal width, and to control their vertical alignment.
\*----------------------------------------------------------------------------*/
/**
 * Example usage:
 *
<div class="arrange">
    <div class="arrange__size-fit">
        <img src="img.png" alt="">
    </div>
    <div class="arrange__size-fill">
        Bram Smulders @bramsmulders
    </div>
</div>
 */
/*  Variables
\*----------------------------------------------------------------------------*/
/**
 * Namespacing
 */
/**
 * Module can be disabled by switching `$blocss-use-arrange` to `false`
 */
/**
 * Gutter
 */
/**
 * Define which namespaced breakpoints you would like to collapse the arrange
 *
 * $breakpoint-has-x:       ('palm', 'desk');
 *
 * Note: the name of the breakpoint must exist in the list of `$breakpoints`
 *       in `settings.defaults` or your own vars file
 */
/*  Mixins
\*----------------------------------------------------------------------------*/
/**
 * Mixin: Reset arranged modules
 *
 * 1. Reset display property
 * 2. 100% width
 * 3. Reset padding in case of `.arrange--gutter`
 * 4. Re-initiate fluid images
 */
/*  Core arrange componet
\*----------------------------------------------------------------------------*/
/*! blocss-grid v1.1.2 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $GRID
    Fluid and nestable grid system
\*----------------------------------------------------------------------------*/
/**
 * Example usage:
 *
<div class="grid  [grid--center|grid--right|grid--rev|grid--middle|grid--bottom|grid--narrow|grid--wide|grid--flush]">
    <div class="grid__cell  u-3-12  u-1-1--palm"></div>
    <div class="grid__cell  u-3-12  u-1-1--palm"></div>
    <div class="grid__cell  u-3-12  u-1-1--palm"></div>
    <div class="grid__cell  grid__cell--center  u-3-12  u-1-1--palm"></div>
</div>
 */
/**
 * Namespacing
 */
/**
 * Module can be disabled by switching `$blocss-use-grid` to `false`
 */
/**
 * Dont't modify the following variables
 */
/**
 * Enable/disable modifiers
 */
/*  Grid Core
\*----------------------------------------------------------------------------*/
/*! blocss-layout v0.1.1 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $LAYOUT
    Fluid and nestable layout system based on flexbox
\*----------------------------------------------------------------------------*/
/**
 * Namespacing
 */
/**
 * Module can be disabled by switching `$blocss-use-layout` to `false`
 */
/**
 * The default gutter
 */
/**
 * Define which namespaced breakpoints you would like to generate for `fit` & `fill`.
 * This is handy if you only need `fit` on, say, desk, or you only need `fill`
 * at mobile sizes. It allows you to only compile as much CSS as you need.
 * All are empty by default, but you can add breakpoints at will.
 *
 * $blocss-dimensions-breakpoint-has-x:       ('palm', 'desk');
 *
 * Note: the name of the breakpoint must exist in the list of `$blocss-breakpoints`
 *       in the Blocss base repository
 */
/*  Mixins
\*----------------------------------------------------------------------------*/
/**
 * Modifier: Make a unit shrink wrap its content.
 */
/**
 * Modifier: Make a cell fill the remaining space.
 *
 * 1. Be explicit to work around IE10 bug with shorthand flex
 * 2. IE10 ignores previous `flex-basis` value. Setting again here fixes
 */
/*  Layout root
\*----------------------------------------------------------------------------*/
/**
 * All content must be contained within child `layout__cell` elements.
 *
 * 1. Account for browser defaults of elements that might be the root node of
 *    the component.
 */
.layout {
  display: flex;
  /* [1] */
  flex-flow: row wrap;
  padding: 0;
  /* [1] */
  margin-left: 0;
  /* [1] */
  list-style: none;
  /* [1] */ }

/**
 * Modifier: center align all layout cells
 */
.layout--align-center {
  justify-content: center; }

/**
 * Modifier: right align all layout cells
 */
.layout--align-right {
  justify-content: flex-end; }

/**
 * Modifier: middle-align layout cells
 */
.layout--align-middle {
  align-items: center; }

/**
 * Modifier: bottom-align layout cells
 */
.layout--align-bottom {
  align-items: flex-end; }

/**
 * Modifier: allow cells to equal distribute width
 *
 * 1. Provide all values to avoid IE10 bug with shorthand flex
 *    http://git.io/vllC7
 *
 *    Use `0%` to avoid bug in IE10/11 with unitless flex basis
 *    http://git.io/vllWx
 */
.layout--fit > .layout__cell {
  flex: 1 1 0%;
  /* [1] */ }

/**
 * Modifier: all cells match height of tallest cell in a row
 * 1. The direct child of the flexbox must be a single element when you want
 *    to use equalheight
 */
.layout--equalheight > .layout__cell {
  display: flex; }
  .layout--equalheight > .layout__cell > * {
    width: 100%;
    /* [1] */ }

/**
 * Modifier: Gutter
 */
.layout--gutter {
  /* 1 */
  /* 2 */
  margin-left: -1.5rem ; }
  .layout--gutter > .layout__cell {
    /* 1 */
    /* 2 */
    padding-left: 1.5rem ; }

/**
 * Modifier: Tiny gutter
 */
.layout--gutter-tiny {
  /* 1 */
  /* 2 */
  margin-left: -0.375rem ; }
  .layout--gutter-tiny > .layout__cell {
    /* 1 */
    /* 2 */
    padding-left: 0.375rem ; }

/**
 * Modifier: Small gutter
 */
.layout--gutter-small {
  /* 1 */
  /* 2 */
  margin-left: -0.75rem ; }
  .layout--gutter-small > .layout__cell {
    /* 1 */
    /* 2 */
    padding-left: 0.75rem ; }

/**
 * Modifier: Large gutter
 */
.layout--gutter-large {
  /* 1 */
  /* 2 */
  margin-left: -3rem ; }
  .layout--gutter-large > .layout__cell {
    /* 1 */
    /* 2 */
    padding-left: 3rem ; }

/**
 * Modifier: Huge gutter
 */
.layout--gutter-huge {
  /* 1 */
  /* 2 */
  margin-left: -6rem ; }
  .layout--gutter-huge > .layout__cell {
    /* 1 */
    /* 2 */
    padding-left: 6rem ; }

/*  Layout cell
\*----------------------------------------------------------------------------*/
/**
 * No explicit width by default. Rely on combining `layout__cell` with a dimension
 * utility or a component class that extends 'layout'.
 *
 * 1. Set flex items to full width by default
 * 2. Fix issue where elements with overflow extend past the
 *    `layout__cell` container
 */
.layout__cell {
  flex-basis: 100%;
  /* [1] */
  min-width: 0;
  /* [2] */ }

/**
 * Modifier: horizontally center one unit
 * Set a specific unit to be horizontally centered. Doesn't affect
 * any other units. Can still contain a child `layout` object.
 */
.layout__cell--center {
  margin-left: auto;
  margin-right: auto; }

/**
 * Modifier: Make a cell shrink wrap its content.
 */
.layout__cell--fit {
  flex-basis: auto; }

/**
 * Modifier: Make a cell fill the remaining space.
 */
.layout__cell--fill {
  flex: 1 1 0%;
  /* [1] */
  flex-basis: 0%;
  /* [2] */ }

/*  Responsive
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 481px) {
  .layout__cell--fit--gt-palm {
    flex-basis: auto; } }

@media only screen and (min-width: 481px) {
  .layout__cell--fill--gt-palm {
    flex: 1 1 0%;
    /* [1] */
    flex-basis: 0%;
    /* [2] */ } }

/*! blocss-dimensions v1.2.1 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $DIMENSIONS
    Sizes in human readable format. These are used in conjunction with other
    objects and abstractions found in blocss, most commonly the grid system
    and the arrange module.
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/**
 * Namespacing
 */
/**
 * Flags to enable or disable dimension traits
 */
/**
 * Divisions, makes it easy to create several proportional
 * dimensions (e.g., both a 2-part and a 12-part grid).
 *
 * For example, `2 4 6 12` will let you use the unit-1-2, unit-2-4,
 * unit-3-6, and unit-6-12 classes to specify that an element should
 * take up 50% of its container.
 */
/**
 * Define which namespaced breakpoints you would like to generate for each
 * of the dimensions. This is handy if you only need push on, say,
 * desk, or you only need a new unit breakpoint at mobile sizes. It allows
 * you to only compile as much CSS as you need. All are empty by
 * default, but you can add breakpoints at will.
 *
 * $blocss-breakpoint-has-x:       ('palm', 'desk');
 *
 * Note: the name of the breakpoint must exist in the list of `$breakpoints`
 *       in the Blocss base repository
 */
/**
 * You can rename the dimension prefixes to your liking
 */
/*  Mixins & functions
\*----------------------------------------------------------------------------*/
/**
 * Find the greatest common factor of two integers
 */
/**
 * Fluid units
 * USAGE: provide a space-separated list of integers, each of which
 * represents the number of parts that make up a unit component.
 * Optionally provide a modifier suffix that can be used to adjust
 * grids in different contexts (e.g. viewport dimensions).
 */
/*  Dimensions core
\*----------------------------------------------------------------------------*/
/**
 * Setup generic widths
 */
/**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
/* Avoid creating rules like '.unit-12-12 {}'' */
/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-1-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 8.33333% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-2-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 16.66667% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-3-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 25% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-4-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 33.33333% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-5-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 41.66667% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-6-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 50% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-7-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 58.33333% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-8-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 66.66667% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-9-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 75% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-10-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 83.33333% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.unit-11-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  width: 91.66667% !important; }

/**
     * Reset dimensions
     * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
     */
.unit-1-1 {
  width: 100% !important; }

.unit-auto {
  width: auto !important; }

/**
  * Setup generic push
  */
[class*="push-"] {
  position: relative; }

/**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
/* Avoid creating rules like '.unit-12-12 {}'' */
/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-1-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 8.33333% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-2-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 16.66667% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-3-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 25% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-4-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 33.33333% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-5-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 41.66667% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-6-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 50% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-7-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 58.33333% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-8-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 66.66667% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-9-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 75% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-10-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 83.33333% !important; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-11-12 {
  /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
  left: 91.66667% !important; }

/**
     * Reset dimensions
     * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
     */
.push-0-0 {
  left: 0 !important; }

/**
  * Setup generic pull
  */
/*  Responsive
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 481px) {
  /**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
  /* Avoid creating rules like '.unit-12-12 {}'' */
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-1-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 8.33333% !important; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-2-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 16.66667% !important; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-3-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 25% !important; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-4-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 33.33333% !important; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-5-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 41.66667% !important; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-6-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 50% !important; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-7-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 58.33333% !important; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-8-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 66.66667% !important; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-9-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 75% !important; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-10-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 83.33333% !important; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .unit-11-12--gt-palm {
    /**
                 * If this unit can be reduced then extend the previous rule
                 * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
                 */
    width: 91.66667% !important; }
  /**
     * Reset dimensions
     * 1. Use `flex-basis: auto` with a width to avoid box-sizing bug in IE10/11
     */
  .unit-1-1--gt-palm {
    width: 100% !important; }
  .unit-auto--gt-palm {
    width: auto !important; } }

/*! blocss-typography v1.0.1 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    TYPOGRAPHY
    Pragmatic & practical font sizing
    As per: http://csswizardry.com/2012/02/pragmatic-practical-font-sizing-in-css/
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/**
 * Module can be disabled by switching `$blocss-use-typography` to `false`
 */
/**
 * Namespacing
 */
/**
 * Sizes (in pixels)
 */
/*  Module
\*----------------------------------------------------------------------------*/
/*  Sizes
    Apply various font sizes by class
\*----------------------------------------------------------------------------*/
.giga {
  /* 1 */
  /* 2 */
  font-size: 5rem ;
  line-height: 1.2; }

.mega {
  /* 1 */
  /* 2 */
  font-size: 4.375rem ;
  line-height: 1.02857; }

.kilo {
  /* 1 */
  /* 2 */
  font-size: 3.75rem ;
  line-height: 1.2; }

.alpha, h1, .h1 {
  /* 1 */
  /* 2 */
  font-size: 3rem ;
  line-height: 1; }

.beta, h2, .h2 {
  /* 1 */
  /* 2 */
  font-size: 2.25rem ;
  line-height: 1.33333; }

.gamma, h3, .h3 {
  /* 1 */
  /* 2 */
  font-size: 1.5rem ;
  line-height: 1; }

.delta, h4, .h4 {
  /* 1 */
  /* 2 */
  font-size: 1.125rem ;
  line-height: 1.33333; }

.epsilon, h5, .h5 {
  /* 1 */
  /* 2 */
  font-size: 1.125rem ;
  line-height: 1.33333; }

.zeta, h6, .h6 {
  /* 1 */
  /* 2 */
  font-size: 1.125rem ;
  line-height: 1.33333; }

.normalis {
  /* 1 */
  /* 2 */
  font-size: 1rem ;
  line-height: 1.5; }

.milli {
  /* 1 */
  /* 2 */
  font-size: 0.875rem ;
  line-height: 1.71429; }

.micro {
  /* 1 */
  /* 2 */
  font-size: 0.625rem ;
  line-height: 2.4; }

/*  Headings
\*----------------------------------------------------------------------------*/
/**
 * Double stranded heading hierarchy
 */
/**
 * Heading groups and generic any-heading class.
 * To target any heading of any level simply apply a class of `.hN`
 * Sample markup:
<div class="hgroup">
    <h1 class="hN"></h1>
    <h2 class="hN"></h2>
</hgroup>
 */
hgroup .hN,
.hgroup .hN {
  margin-bottom: 0; }

/**
 * Theme includes
 */
/*----------------------------------------------------------------------------*    $COLOR
\*----------------------------------------------------------------------------*/
/* Color function
   Using colors in css example:
   background-color: color(brand);
\*------------------------------------------------------------------------*/
/**
 * Backgrounds & colors
 */
.bg--base {
  background-color: #4A4A4A !important; }

.color--base {
  color: #4A4A4A !important; }

.bg--base-med {
  background-color: #DFE3E9 !important; }

.color--base-med {
  color: #DFE3E9 !important; }

.bg--base-light {
  background-color: #F5F5F5 !important; }

.color--base-light {
  color: #F5F5F5 !important; }

.bg--blank {
  background-color: #FFFFFF !important; }

.color--blank {
  color: #FFFFFF !important; }

.bg--dark {
  background-color: black !important; }

.color--dark {
  color: black !important; }

.bg--brand {
  background-color: #36CCC0 !important; }

.color--brand {
  color: #36CCC0 !important; }

.bg--brand-sec {
  background-color: #00844A !important; }

.color--brand-sec {
  color: #00844A !important; }

.bg--brand-ter {
  background-color: #F28037 !important; }

.color--brand-ter {
  color: #F28037 !important; }

.bg--brand-qua {
  background-color: #00477D !important; }

.color--brand-qua {
  color: #00477D !important; }

.bg--brand-qui {
  background-color: #FFEF41 !important; }

.color--brand-qui {
  color: #FFEF41 !important; }

/*----------------------------------------------------------------------------*    $FONT
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
    CONTENTS................You're reading it, LOL
    MODULE..................Includes base module & submodules
    STATE...................States the module can be in
    THEME...................Theming of the module
    */
/*----------------------------------------------------------------------------*    $MODULE
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $STATE
\*----------------------------------------------------------------------------*/
/* Media Queries
       The default media queries shipped with Blocss:
       Uncomment the ones you need
    \*------------------------------------------------------------------------*/
/**
         * Desk-wide state
         */
/**
         * Desk state
         */
/**
         * Portable state
         */
/**
         * Lap state
         */
/**
         * Lapup state
         */
/**
         * Palm state
         */
/*----------------------------------------------------------------------------*    $THEME
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    FORM
    Inputs and labels
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
.form__label {
  display: block; }

.form__input {
  position: relative;
  display: block;
  top: -1px;
  background: #FFFFFF no-repeat right 12px center;
  outline: 0;
  border: 1px solid #DFE3E9;
  transition: border-color 0.175s cubic-bezier(0.55, 0, 0.1, 1);
  /* 1 */
  /* 2 */
  margin-bottom: 1.375rem ; }
  .form__input[type=email], .form__input[type=number], .form__input[type=text] {
    /* 1 */
    /* 2 */
    font-size: 1rem ;
    line-height: 1.5;
    /* 1 */
    /* 2 */
    padding: 0.75rem ;
    /* 1 */
    /* 2 */
    border-radius: 0.25rem ; }
  .form__input:focus {
    transition: none;
    border: 1px solid #36CCC0; }
  .form__input[disabled] {
    background-color: #F5F5F5; }

.form__input--disabled {
  pointer-events: none;
  background-color: #F5F5F5; }

.form__input--showonfill {
  transition: opacity 0.375s cubic-bezier(0.55, 0, 0.1, 1); }
  .form__input--showonfill:invalid {
    opacity: 0; }

select.form__input {
  appearance: none;
  -webkit-appearance: none;
  background-image: url(../gfx/icons/icon-expand.svg);
  /* 1 */
  /* 2 */
  padding: 0.75rem 2.25rem 0.75rem 0.75rem ; }

.form__fieldset--extra {
  margin: 0;
  overflow: hidden;
  transition: max-height 0.375s cubic-bezier(0.55, 0, 0.1, 1);
  max-height: 0; }
  .form__fieldset--extra[data-state=visible] {
    /* 1 */
    /* 2 */
    max-height: 12rem ; }

.form__label--extra {
  transition: height 0.375s cubic-bezier(0.55, 0, 0.1, 1);
  overflow: hidden;
  /* 1 */
  /* 2 */
  height: 1.5rem ; }
  .form__label--extra[data-state=invisible] {
    height: 0; }

/*  Media queries
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 961px) {
  select.form__input:hover:not(:focus):not([disabled]),
  .form__input[type=email]:hover:not(:focus):not([disabled]),
  .form__input[type=number]:hover:not(:focus):not([disabled]),
  .form__input[type=text]:hover:not(:focus):not([disabled]) {
    border: 1px solid #00844A; } }

/*----------------------------------------------------------------------------*    $TOPLEVEL
    html, body, .wrapper
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
    CONTENTS................You're reading it, LOL
    MODULE..................Includes base module & submodules
    STATE...................States the module can be in
    THEME...................Theming of the module
    */
/*----------------------------------------------------------------------------*    $MODULE
\*----------------------------------------------------------------------------*/
/* commented backslash hack \*/
html, body {
  height: 100%; }

/* end hack */
* html .wrapper {
  height: 100%; }

body {
  position: relative;
  min-height: 100%;
  -webkit-font-smoothing: antialiased;
  font-family: "Fira Sans", sans-serif;
  color: #4A4A4A; }

/**
     * Make wrapper 100% height
     */
.wrapper {
  position: relative;
  min-height: 100%;
  height: auto;
  width: 100%;
  margin: 0 auto; }

.site-width {
  margin: 0 auto;
  /* 1 */
  /* 2 */
  max-width: 60.875rem ;
  /* 1 */
  /* 2 */
  padding: 0 0.75rem ; }

/*----------------------------------------------------------------------------*    TYPOGRAPGHY
    Text styling
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
/*  fontsizes
    \*----------------------------------------------------------------------------*/
.gamma-wide {
  /* 1 */
  /* 2 */
  font-size: 1.5rem ;
  line-height: 1.5; }

/*  font weights
    \*----------------------------------------------------------------------------*/
.weight--med {
  font-weight: 500; }

/*  headings
    \*----------------------------------------------------------------------------*/
.heading--brand {
  font-style: italic;
  font-weight: 600;
  /* 1 */
  /* 2 */
  font-size: 2.25rem ;
  line-height: 1.33333; }

/*  text alignments
    \*----------------------------------------------------------------------------*/
.text--center {
  text-align: center; }

.text--right {
  text-align: right; }

/*  Media queries
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 481px) {
  .gamma-wide {
    /* 1 */
    /* 2 */
    padding-right: 4.5rem ; }
  .heading--brand {
    /* 1 */
    /* 2 */
    font-size: 3rem ;
    line-height: 1; } }

@media only screen and (min-width: 961px) {
  .heading--brand span {
    display: block;
    width: 55%; } }

/*----------------------------------------------------------------------------*    FOOTER
    Bottom of page
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
.footer {
  font-weight: 500; }
  .footer img {
    display: inline-block;
    vertical-align: top; }

.footer__intro {
  /* 1 */
  /* 2 */
  font-size: 1.125rem ;
  line-height: 1.33333;
  /* 1 */
  /* 2 */
  padding: 1.5rem ; }

.footer__link {
  color: #FFFFFF;
  font-style: italic;
  text-decoration: none;
  font-weight: 600;
  /* 1 */
  /* 2 */
  font-size: 1.5rem ;
  line-height: 1; }

.footer__heading {
  text-align: left;
  color: #FFFFFF;
  /* 1 */
  /* 2 */
  padding: 1.5rem ; }

/*  Media queries
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 481px) {
  .footer__intro {
    text-align: right;
    /* 1 */
    /* 2 */
    font-size: 1.5rem ;
    line-height: 1; }
  .footer__link {
    /* 1 */
    /* 2 */
    font-size: 2.25rem ;
    line-height: 1.33333; }
  .footer__heading {
    background-color: #FFFFFF;
    text-align: center; }
  .footer__heading--sec {
    color: #00844A; }
  .footer__heading--ter {
    color: #F28037; }
  .footer__heading--qua {
    color: #00477D; } }

/*----------------------------------------------------------------------------*    HEADER
    Top of page
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
.header {
  /* 1 */
  /* 2 */
  padding: 1.5rem 0 ; }

.header__brand {
  display: block;
  /* 1 */
  /* 2 */
  margin: 0 auto ; }

/*----------------------------------------------------------------------------*    $LAYER
    page part
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
    CONTENTS................You're reading it, LOL
    MODULE..................Includes base module & submodules
    STATE...................States the module can be in
    THEME...................Theming of the module
    */
/*----------------------------------------------------------------------------*    $MODULE
\*----------------------------------------------------------------------------*/
body {
  height: 100%;
  background-image: url("../gfx/hunter.jpg");
  background-repeat: no-repeat;
  background-position: bottom right;
  background-size: cover;
  background-attachment: fixed;
  color: white; }

h1, .h1 {
  font-family: 'Playfair Display';
  font-weight: 300;
  font-size: 82px;
  letter-spacing: 2px;
  margin-bottom: 40px; }
  @media only screen and (max-width: 480px) {
    h1, .h1 {
      font-size: 48px; } }
  @media only screen and (max-width: 320px) {
    h1, .h1 {
      font-size: 40px; } }

p {
  font-family: 'Roboto';
  font-size: 14px;
  margin-bottom: 0px; }

.btnTitle {
  font-family: 'Roboto';
  font-weight: bold;
  font-size: 16px;
  margin-bottom: 15px; }

.sign--large {
  margin-bottom: 30px; }

@media only screen and (max-width: 480px) {
  .sign--large {
    margin-bottom: 15px; } }

.max-width--s {
  max-width: 20px; }

.btnContact {
  font-family: 'Roboto';
  background-color: #36CCC0;
  padding: 10px 40px;
  border-radius: 17px;
  font-size: 16px;
  line-height: 14px;
  text-decoration: none;
  display: inline-block;
  color: black; }
  @media only screen and (max-width: 320px) {
    .btnContact {
      padding: 10px 33px; } }

.Wrapper {
  width: 90%;
  max-width: 1024px;
  margin: 0 auto;
  position: relative;
  top: 250px; }
  @media only screen and (max-width: 480px) {
    .Wrapper {
      top: 170px; } }
  @media only screen and (max-width: 320px) {
    .Wrapper {
      top: 135px; } }

.Content {
  text-align: center;
  max-width: 600px;
  position: relative; }

.LinkText {
  margin-left: 25px; }

.Logo {
  position: absolute;
  top: 40px;
  left: 70px;
  height: 191px;
  width: 147px; }
  @media only screen and (max-width: 480px) {
    .Logo {
      height: 141px;
      width: 97px;
      top: 10px;
      left: 20px; } }
  @media only screen and (min-width: 481px) and (max-width: 960px) {
    .Logo {
      height: 141px;
      width: 97px; } }
  @media only screen and (max-width: 320px) {
    .Logo {
      width: 77px;
      height: 121px; } }

/*----------------------------------------------------------------------------*    $STATE
\*----------------------------------------------------------------------------*/
/* Media Queries
       The default media queries shipped with Blocss:
       Uncomment the ones you need
    \*------------------------------------------------------------------------*/
/**
         * Desk-wide state
         */
/**
         * Desk state
         */
/**
         * Portable state
         */
/**
         * Lap state
         */
/**
         * Lapup state
         */
/**
         * Palm state
         */
/*----------------------------------------------------------------------------*    $THEME
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    BUTTON
    big interaction indicators
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
.button {
  background-color: #36CCC0;
  color: #FFFFFF;
  border: 1px solid #36CCC0;
  transition: background-color 0.175s cubic-bezier(0.55, 0, 0.1, 1), border-color 0.175s cubic-bezier(0.55, 0, 0.1, 1), color 0.175s cubic-bezier(0.55, 0, 0.1, 1);
  outline: 0;
  /* 1 */
  /* 2 */
  font-size: 1rem ;
  line-height: 1.5;
  /* 1 */
  /* 2 */
  padding: 0.75rem ;
  /* 1 */
  /* 2 */
  border-radius: 0.25rem ; }
  .button:active {
    color: #36CCC0;
    background-color: #FFFFFF;
    transition: none; }

/*  Media queries
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 961px) {
  .button:hover:not(:active) {
    border-color: #00844A;
    background-color: #00844A; } }

/*----------------------------------------------------------------------------*    $Helpers
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
    CONTENTS................You're reading it, LOL
    MODULE..................Includes base module & submodules
    STATE...................States the module can be in
    THEME...................Theming of the module
    */
/*----------------------------------------------------------------------------*    $FUNCTIONS
\*----------------------------------------------------------------------------*/
.visuallyhidden, .toggle__input {
  border: 0;
  clip: rect(0 0 0 0);
  height: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
  width: 1px; }

/*----------------------------------------------------------------------------*    HIDDEN
    hide elements
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
.hidden--palm {
  display: none; }

/*  Media queries
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 481px) {
  .hidden--palm {
    display: initial; }
  .hidden--gt-palm {
    display: none; } }

/*----------------------------------------------------------------------------*    ISLAND
    Padded block
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
.island {
  display: block;
  /* 1 */
  /* 2 */
  padding: 1.5rem ; }

.island--small {
  /* 1 */
  /* 2 */
  padding: 0.75rem ; }

/*  Isthmus
        like island but only on 2 opposing sides
    \*----------------------------------------------------------------------------*/
.isthmus {
  /* 1 */
  /* 2 */
  padding: 0 1.5rem ; }

.isthmus--small {
  /* 1 */
  /* 2 */
  padding: 0 0.75rem ; }

.isthmus--large {
  /* 1 */
  /* 2 */
  padding: 0 3rem ; }

/*  Media queries
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 481px) {
  .island--gt-palm {
    /* 1 */
    /* 2 */
    padding: 1.5rem ; }
  .island--large--gt-palm {
    /* 1 */
    /* 2 */
    padding: 3rem ; }
  .isthmus--large--gt-palm {
    /* 1 */
    /* 2 */
    padding: 0 3rem ; } }

/*----------------------------------------------------------------------------*    OVERFLOW
    Displayed outside container
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
.overflow {
  position: relative;
  display: block; }

.overflow--upper {
  z-index: 1; }

.overflow--lower {
  z-index: 0; }

.overflow--top {
  /* 1 */
  /* 2 */
  top: -1.5rem ; }

.overflow--content-topleft {
  /* 1 */
  /* 2 */
  top: 4.5rem ;
  /* 1 */
  /* 2 */
  margin-bottom: 4.5rem ; }
  .overflow--content-topleft .overflow__overflowing {
    position: relative;
    /* 1 */
    /* 2 */
    top: -4.5rem ;
    /* 1 */
    /* 2 */
    left: -1.5rem ;
    /* 1 */
    /* 2 */
    margin-bottom: -4.5rem ; }

/*  Media queries
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 481px) {
  .overflow--left {
    width: calc(100% + 48px);
    /* 1 */
    /* 2 */
    margin-left: -3rem ;
    /* 1 */
    /* 2 */
    padding-left: 3rem ; }
  .overflow--top--gt-palm {
    /* 1 */
    /* 2 */
    top: -1.5rem ; }
  .overflow--content-topleft .overflow__overflowing {
    /* 1 */
    /* 2 */
    left: -4.5rem ; } }

/*----------------------------------------------------------------------------*    SIGN
    margin bottom modifiers
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
.sign {
  /* 1 */
  /* 2 */
  margin-bottom: 1.5rem ; }

.sign--inv--half {
  /* 1 */
  /* 2 */
  margin-bottom: -0.75rem ; }

.sign--inv--extralarge {
  /* 1 */
  /* 2 */
  margin-bottom: -6rem ; }

/*  Media queries
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 481px) {
  .sign--inv--half--gt-palm {
    /* 1 */
    /* 2 */
    margin-bottom: -0.75rem ; }
  .sign--inv--extralarge--gt-palm {
    /* 1 */
    /* 2 */
    margin-bottom: -6rem ; } }

/*----------------------------------------------------------------------------*    TOGGLE
    disguised checkbox/radio inputs
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
.toggle {
  border: 1px solid #36CCC0;
  display: flex;
  flex-flow: row wrap;
  transition: border-color 0.175s cubic-bezier(0.55, 0, 0.1, 1);
  /* 1 */
  /* 2 */
  border-radius: 0.75rem ; }

.toggle__item {
  flex-grow: 1;
  flex-basis: 0; }

.toggle__label {
  display: block;
  text-align: center;
  cursor: pointer;
  transition: color 0.175s cubic-bezier(0.55, 0, 0.1, 1), background-color 0.175s cubic-bezier(0.55, 0, 0.1, 1);
  /* 1 */
  /* 2 */
  border-radius: 0.75rem ; }
  .toggle__label:active {
    background-color: #00844A;
    color: #FFFFFF;
    transition: none; }
  .toggle__input:checked + .toggle__label {
    background-color: #36CCC0;
    color: #FFFFFF; }

.toggle--sec {
  border: 0;
  background-color: transparent;
  /* 1 */
  /* 2 */
  margin-left: -0.75rem ; }
  .toggle--sec .toggle__item {
    /* 1 */
    /* 2 */
    padding-left: 0.75rem ; }
  .toggle--sec .toggle__label {
    border: 1px solid #36CCC0;
    /* 1 */
    /* 2 */
    padding: 1.5rem 0 ;
    /* 1 */
    /* 2 */
    border-radius: 0.25rem ; }

.toggle__icon {
  display: block;
  margin: 0 auto;
  transition: filter 0.175s cubic-bezier(0.55, 0, 0.1, 1);
  /* 1 */
  /* 2 */
  width: 3rem ;
  /* 1 */
  /* 2 */
  height: 3rem ; }
  .toggle__label:active .toggle__icon {
    filter: brightness(0%) invert(100%);
    transition: none; }

/*  Media queries
\*----------------------------------------------------------------------------*/
@media only screen and (min-width: 481px) {
  .toggle--sec {
    /* 1 */
    /* 2 */
    margin-left: -1.5rem ; }
    .toggle--sec .toggle__item {
      /* 1 */
      /* 2 */
      padding-left: 1.5rem ; } }

@media only screen and (min-width: 961px) {
  .toggle:hover {
    border: 1px solid #00844A; }
  .toggle--sec:hover {
    border: 0; } }

/*----------------------------------------------------------------------------*    VISUAL
    big photo
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Component
\*----------------------------------------------------------------------------*/
.visual {
  margin: 0;
  position: relative; }

.visual__caption {
  position: absolute;
  top: 30%;
  background-color: #FFEF41;
  color: #00844A;
  border-radius: 50%;
  text-align: center;
  font-style: italic;
  font-weight: 600;
  transform: rotate(-10deg);
  /* 1 */
  /* 2 */
  padding: 1.5rem 0 ;
  /* 1 */
  /* 2 */
  right: -2.25rem ;
  /* 1 */
  /* 2 */
  width: 6rem ;
  /* 1 */
  /* 2 */
  font-size: 1.125rem ;
  line-height: 1.33333; }

.visual--wide img {
  display: block;
  background-size: cover;
  background-position: center;
  /* 1 */
  /* 2 */
  height: 18.75rem ;
  /* 1 */
  /* 2 */
  padding: 9.375rem 50% ; }

/*----------------------------------------------------------------------------*    Main
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
CONTENTS................You're reading it, LOL
MODULE..................Includes base module & submodules
STATE...................States the module can be in
THEME...................Theming of the module
*/
/*----------------------------------------------------------------------------*    $MODULE
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $STATE
\*----------------------------------------------------------------------------*/
/* Media Queries
   The default media queries shipped with Blocss:
   Uncomment the ones you need
\*------------------------------------------------------------------------*/
/**
 * Desk-wide state
 */
/**
 * Desk state
 */
/**
 * Portable state
 */
/**
 * Lap state
 */
/**
 * Lapup state
 */
/**
 * Palm state
 */
/*----------------------------------------------------------------------------*    $THEME
\*----------------------------------------------------------------------------*/

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuY3NzIiwic291cmNlcyI6WyJ0aGVtZS5zY3NzIiwiX3ZhcnMuc2NzcyIsIi4uL2xpYi9ibG9jc3MvbGliL19zdGFydGVya2l0LnNjc3MiLCIuLi9saWIvYmxvY3NzLWRlZmF1bHRzL2xpYi9fc2V0dGluZ3MuZGVmYXVsdHMuc2NzcyIsIi4uL2xpYi9ibG9jc3Mtbm9ybWFsaXplL2xpYi9fYXRvbXMubm9ybWFsaXplLnNjc3MiLCIuLi9saWIvYmxvY3NzLW1peGlucy9saWIvX3Rvb2xzLm1peGlucy5zY3NzIiwiLi4vbGliL2Jsb2Nzcy1leHRlbmRzL2xpYi9fdG9vbHMuZXh0ZW5kcy5zY3NzIiwiLi4vbGliL2Jsb2Nzcy1yZXNldC9saWIvX2F0b21zLnJlc2V0LnNjc3MiLCIuLi9saWIvYmxvY3NzLXNoYXJlZC9saWIvX2F0b21zLnNoYXJlZC5zY3NzIiwiLi4vbGliL2Jsb2Nzcy1hcnJhbmdlL2xpYi9fbW9sZWN1bGVzLmFycmFuZ2Uuc2NzcyIsIi4uL2xpYi9ibG9jc3MtZ3JpZC9saWIvX21vbGVjdWxlcy5ncmlkLnNjc3MiLCIuLi9saWIvYmxvY3NzLWxheW91dC9saWIvX21vbGVjdWxlcy5sYXlvdXQuc2NzcyIsIi4uL2xpYi9ibG9jc3MtZGltZW5zaW9ucy9saWIvX2F0b21zLmRpbWVuc2lvbnMuc2NzcyIsIi4uL2xpYi9ibG9jc3MtdHlwb2dyYXBoeS9saWIvX2F0b21zLnR5cG9ncmFwaHkuc2NzcyIsInRoZW1lL2Jhc2UvX2NvbG9yLnNjc3MiLCJ0aGVtZS9iYXNlL19mb250LnNjc3MiLCJ0aGVtZS9iYXNlL19mb3JtLnNjc3MiLCJ0aGVtZS9iYXNlL190b3BsZXZlbC5zY3NzIiwidGhlbWUvYmFzZS9fdHlwb2dyYXBoeS5zY3NzIiwidGhlbWUvbGF5b3V0L19mb290ZXIuc2NzcyIsInRoZW1lL2xheW91dC9faGVhZGVyLnNjc3MiLCJ0aGVtZS9sYXlvdXQvX2xheWVyLnNjc3MiLCJ0aGVtZS9tb2R1bGVzL19idXR0b24uc2NzcyIsInRoZW1lL21vZHVsZXMvX2hlbHBlcnMuc2NzcyIsInRoZW1lL21vZHVsZXMvX2hpZGRlbi5zY3NzIiwidGhlbWUvbW9kdWxlcy9faXNsYW5kLnNjc3MiLCJ0aGVtZS9tb2R1bGVzL19vdmVyZmxvdy5zY3NzIiwidGhlbWUvbW9kdWxlcy9fc2lnbi5zY3NzIiwidGhlbWUvbW9kdWxlcy9fdG9nZ2xlLnNjc3MiLCJ0aGVtZS9tb2R1bGVzL192aXN1YWwuc2NzcyIsInRoZW1lL25hdi9fbWFpbi5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICAgICB0aGVtZS5zY3NzXG4gICAgICAgIFRoZW1lIHN0eWxlc2hlZXQsIGV4dGVuZHMgQmxvY3NzIENTUyBGcmFtZXdvcmtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAgICAgQ09OVEVOVFNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLypcbiAgICBSRUFETUVcbiAgICBJTkNMVURFUy4uLi4uLi4uLi4uLkluY2x1ZGUgdmFyaW91cyBzYXNzIGZpbGVzXG4gICAgQkFTRS4uLi4uLi4uLi4uLi4uLi5IaWdoLWxldmVsIGVsZW1lbnRzIGxpa2UgJ2h0bWwnLCAnYm9keScsIGV0Yy5cbiAgICBMQVlPVVQuLi4uLi4uLi4uLi4uLlN0cnVjdHVyYWwgc3R5bGluZ1xuICAgIE1PRFVMRVMuLi4uLi4uLi4uLi4uUmV1c2FibGUsIG1vZHVsYXIgcGFydHMgb2YgdGhlIHBhZ2VcbiAgICAqL1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkSU5DTFVERVNcbiAgICBJbmNsdWRlIHZhcmlvdXMgc2FzcyBmaWxlc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBpbXBvcnQgXCJ2YXJzXCI7XG5AaW1wb3J0IFwiLi4vbGliL2Jsb2Nzcy9saWIvc3RhcnRlcmtpdFwiO1xuXG5AaW1wb3J0IFwiLi4vbGliL2Jsb2Nzcy1hcnJhbmdlL2xpYi9tb2xlY3VsZXMuYXJyYW5nZVwiO1xuQGltcG9ydCBcIi4uL2xpYi9ibG9jc3MtZ3JpZC9saWIvbW9sZWN1bGVzLmdyaWRcIjtcbkBpbXBvcnQgXCIuLi9saWIvYmxvY3NzLWxheW91dC9saWIvbW9sZWN1bGVzLmxheW91dFwiO1xuQGltcG9ydCBcIi4uL2xpYi9ibG9jc3MtZGltZW5zaW9ucy9saWIvYXRvbXMuZGltZW5zaW9uc1wiO1xuQGltcG9ydCBcIi4uL2xpYi9ibG9jc3MtdHlwb2dyYXBoeS9saWIvYXRvbXMudHlwb2dyYXBoeVwiO1xuXG4vKipcbiAqIFRoZW1lIGluY2x1ZGVzXG4gKi9cblxuQGltcG9ydCBcInRoZW1lL2Jhc2UvX2NvbG9yLnNjc3NcIjtcbkBpbXBvcnQgXCJ0aGVtZS9iYXNlL19mb250LnNjc3NcIjtcbkBpbXBvcnQgXCJ0aGVtZS9iYXNlL19mb3JtLnNjc3NcIjtcbkBpbXBvcnQgXCJ0aGVtZS9iYXNlL190b3BsZXZlbC5zY3NzXCI7XG5AaW1wb3J0IFwidGhlbWUvYmFzZS9fdHlwb2dyYXBoeS5zY3NzXCI7XG5AaW1wb3J0IFwidGhlbWUvbGF5b3V0L19mb290ZXIuc2Nzc1wiO1xuQGltcG9ydCBcInRoZW1lL2xheW91dC9faGVhZGVyLnNjc3NcIjtcbkBpbXBvcnQgXCJ0aGVtZS9sYXlvdXQvX2xheWVyLnNjc3NcIjtcbkBpbXBvcnQgXCJ0aGVtZS9tb2R1bGVzL19idXR0b24uc2Nzc1wiO1xuQGltcG9ydCBcInRoZW1lL21vZHVsZXMvX2hlbHBlcnMuc2Nzc1wiO1xuQGltcG9ydCBcInRoZW1lL21vZHVsZXMvX2hpZGRlbi5zY3NzXCI7XG5AaW1wb3J0IFwidGhlbWUvbW9kdWxlcy9faXNsYW5kLnNjc3NcIjtcbkBpbXBvcnQgXCJ0aGVtZS9tb2R1bGVzL19vdmVyZmxvdy5zY3NzXCI7XG5AaW1wb3J0IFwidGhlbWUvbW9kdWxlcy9fc2lnbi5zY3NzXCI7XG5AaW1wb3J0IFwidGhlbWUvbW9kdWxlcy9fdG9nZ2xlLnNjc3NcIjtcbkBpbXBvcnQgXCJ0aGVtZS9tb2R1bGVzL192aXN1YWwuc2Nzc1wiO1xuQGltcG9ydCBcInRoZW1lL25hdi9fbWFpbi5zY3NzXCI7XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkVkFSU1xuICAgIEFueSB2YXJpYWJsZXMgeW91IGZpbmQgc2V0IGluIGJsb2Nzc+KAmSBgX2RlZmF1bHRzLnNjc3NgIHRoYXQgeW91IGRvIG5vdCB3aXNoXG4gICAgdG8ga2VlcCwgc2ltcGx5IHJlZGVmaW5lIGhlcmUuIFRoaXMgbWVhbnMgdGhhdCBpZiBibG9jc3MsIGZvciBleGFtcGxlLFxuICAgIHNldHMgeW91ciBgJGJhc2UtZm9udC1zaXplYCBhdCAxNnB4IGFuZCB5b3Ugd2lzaCBpdCB0byBiZSAxNHB4LCBzaW1wbHlcbiAgICByZWRlY2xhcmUgdGhhdCB2YXJpYWJsZSBpbiB0aGlzIGZpbGUuIEJsb2NzcyBpZ25vcmVzIGl0cyBvd24gdmFyaWFibGVzXG4gICAgaW4gZmF2b3VyIG9mIHVzaW5nIHlvdXIgb3duLCBzbyB5b3UgY2FuIGNvbXBsZXRlbHkgbW9kaWZ5IGhvdyBibG9jc3NcbiAgICB3b3JrcyB3aXRob3V0IGV2ZXIgaGF2aW5nIHRvIGFsdGVyIHRoZSBmcmFtZXdvcmsgaXRzZWxmLlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAkYmxvY3NzLW5hbWVzcGFjZTogICAgICAgICAgICAgICAgICAgICAgICAnJztcbiAgICAkYmxvY3NzLXNwYWNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNHB4O1xuICAgICRibG9jc3Mtc3BhY2UtaGFsZjogICAgICAgICAgICAgICAgICAgICAgICRibG9jc3Mtc3BhY2UvMjtcblxuICAgIC8qIGxheW91dCAqL1xuICAgICRibG9jc3MtdXNlLWxheW91dDogICAgICAgICAgICAgICAgICAgICAgIHRydWU7XG5cbiAgICAvKiBhcnJhbmdlICovXG4gICAgJGJsb2Nzcy11c2UtYXJyYW5nZTogICAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgICRibG9jc3MtYXJyYW5nZS1ndXR0ZXI6ICAgICAgICAgICAgICAgICAgICRibG9jc3Mtc3BhY2U7XG4gICAgICAgICRibG9jc3MtYnJlYWtwb2ludC1oYXMtY29sbGFwc2VkLWFycmFuZ2U6ICgpO1xuXG4gICAgLyogZ3JpZCAqL1xuICAgICRibG9jc3MtdXNlLWdyaWQ6ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICAkYmxvY3NzLWVuYWJsZS1ncmlkLXJldjogICAgICAgICAgICAgICAgICBmYWxzZTtcbiAgICAgICAgJGJsb2Nzcy1lbmFibGUtZ3JpZC1yaWdodDogICAgICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgICRibG9jc3MtZW5hYmxlLWdyaWQtY2VudGVyOiAgICAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICAkYmxvY3NzLWVuYWJsZS1ncmlkLW1pZGRsZTogICAgICAgICAgICAgICBmYWxzZTtcbiAgICAgICAgJGJsb2Nzcy1lbmFibGUtZ3JpZC1uYXJyb3c6ICAgICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgICRibG9jc3MtZW5hYmxlLWdyaWQtd2lkZTogICAgICAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICAkYmxvY3NzLWVuYWJsZS1ncmlkLWZsdXNoOiAgICAgICAgICAgICAgICBmYWxzZTtcblxuICAgIC8qIGV4dGVuZHMgKi9cbiAgICAkYmxvY3NzLXVzZS1jbGVhcmZpeDogICAgICAgICAgICAgICAgICAgICBmYWxzZTtcbiAgICAkYmxvY3NzLXVzZS1tb2R1bGU6ICAgICAgICAgICAgICAgICAgICAgICB0cnVlO1xuXG4gICAgLyogdW5pdHMgLyBkaXZpc2lvbnMgKi9cbiAgICAkYmxvY3NzLXVzZS11bml0czogICAgICAgICAgICAgICAgICAgICAgICB0cnVlO1xuICAgICAgICAkYmxvY3NzLWRpbWVuc2lvbnMtZGl2aXNpb25zOiAgICAgICAgICAgICAxMjtcblxuICAgICAgICAvKiB1bml0cyAvIGJyZWFrcG9pbnRzICovXG4gICAgICAgICRibG9jc3MtYnJlYWtwb2ludHM6IChcbiAgICAgICAgICAgICAgICAncGFsbScgICAgICAnKG1heC13aWR0aDogNDgwcHgpJyxcbiAgICAgICAgICAgICAgICAnZ3QtcGFsbScgICAnKG1pbi13aWR0aDogNDgxcHgpJyxcbiAgICAgICAgICAgICAgICAnbGFwJyAgICAgICAnKG1pbi13aWR0aDogNDgxcHgpIGFuZCAobWF4LXdpZHRoOiA5NjBweCknLFxuICAgICAgICAgICAgICAgICdkZXNrJyAgICAgICcobWluLXdpZHRoOiA5NjFweCknXG4gICAgICAgICk7XG4gICAgICAgICRibG9jc3MtZGltZW5zaW9ucy1icmVha3BvaW50LWhhcy11bml0czogICgnZ3QtcGFsbScpO1xuXG4gICAgICAgIC8qIHB1c2ggKi9cbiAgICAgICAgJGJsb2Nzcy1kaW1lbnNpb25zLXVzZS1wdXNoOiAgICAgICAgICAgICAgdHJ1ZTtcbiAgICAgICAgJGJsb2Nzcy1kaW1lbnNpb25zLWJyZWFrcG9pbnQtaGFzLXB1c2g6ICAgKCk7XG5cbiAgICAgICAgLyogcHVsbCovXG4gICAgICAgICRibG9jc3MtZGltZW5zaW9ucy11c2UtcHVsbDogICAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICAkYmxvY3NzLWRpbWVuc2lvbnMtYnJlYWtwb2ludC1oYXMtcHVsbDogICAoKTtcblxuICAgICAgICAvKiB2aXN1YWxseWhpZGRlbiAqL1xuICAgICAgICAvLyAkYnJlYWtwb2ludC1oYXMtdmlzdWFsbHloaWRkZW46ICAgICAgICAgICAoJ3BhbG0nLCAnZ3QtcGFsbScsICdsdC1kZXNrJyk7XG5cbiAgICAgICAgJGJsb2Nzcy1kaW1lbnNpb25zLWJyZWFrcG9pbnQtaGFzLWZpdDogICAgKCdndC1wYWxtJyk7XG4gICAgICAgICRibG9jc3MtZGltZW5zaW9ucy1icmVha3BvaW50LWhhcy1maWxsOiAgICgnZ3QtcGFsbScpO1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRPVkVSUklERVNcbiAgICBQbGFjZSBhbnkgdmFyaWFibGVzIHRoYXQgc2hvdWxkIG92ZXJyaWRlIGJsb2Nzc+KAmSBkZWZhdWx0cyBoZXJlLlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAkYmxvY3NzLWJhc2UtZm9udC1zaXplOiAgICAxNnB4O1xuICAgICRibG9jc3MtYmFzZS1saW5lLWhlaWdodDogICRibG9jc3Mtc3BhY2U7XG4gICAgJGJsb2Nzcy1saW5lLWhlaWdodC1yYXRpbzogJGJsb2Nzcy1iYXNlLWxpbmUtaGVpZ2h0LyRibG9jc3MtYmFzZS1mb250LXNpemU7XG5cbiAgICAkYmxvY3NzLXVzZS10eXBvZ3JhcGh5OiAgICB0cnVlO1xuXG4gICAgJGJsb2Nzcy1naWdhOiAgICAgICAgICAgICAgODBweDtcbiAgICAkYmxvY3NzLW1lZ2E6ICAgICAgICAgICAgICA3MHB4O1xuICAgICRibG9jc3Mta2lsbzogICAgICAgICAgICAgIDYwcHg7XG5cbiAgICAkYmxvY3NzLWFscGhhOiAgICAgICAgICAgICA0OHB4O1xuICAgICRibG9jc3MtYmV0YTogICAgICAgICAgICAgIDM2cHg7XG4gICAgJGJsb2Nzcy1nYW1tYTogICAgICAgICAgICAgMjRweDtcbiAgICAkYmxvY3NzLWRlbHRhOiAgICAgICAgICAgICAxOHB4O1xuICAgICRibG9jc3MtZXBzaWxvbjogICAgICAgICAgIDE4cHg7XG4gICAgJGJsb2Nzcy16ZXRhOiAgICAgICAgICAgICAgMThweDtcblxuICAgICRibG9jc3MtbWlsbGk6ICAgICAgICAgICAgIDE0cHg7XG4gICAgJGJsb2Nzcy1taWNybzogICAgICAgICAgICAgMTBweDtcblxuICAgICRmYWNlLWJhc2U6ICAgICAgICAgICAgICAgICdGaXJhIFNhbnMnLCBzYW5zLXNlcmlmO1xuICAgICRmYWNlLWJyYW5kOiAgICAgICAgICAgICAgICRmYWNlLWJhc2U7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRDVVNUT01cbiAgICBQbGFjZSBhbnkgb2YgeW91ciBvd24gdmFyaWFibGVzIHRoYXQgc2l0IG9uIHRvcCBvZiBibG9jc3MgaGVyZS5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgJGNvbG9yczogKFxuICAgICAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAjNEE0QTRBLFxuICAgICAgICBiYXNlLW1lZDogICAgICAgICAgICAgICAgICAgICAjREZFM0U5LFxuICAgICAgICBiYXNlLWxpZ2h0OiAgICAgICAgICAgICAgICAgICAjRjVGNUY1LFxuICAgICAgICBibGFuazogICAgICAgICAgICAgICAgICAgICAgICAjRkZGRkZGLFxuICAgICAgICBkYXJrOiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrLFxuICAgICAgICBicmFuZDogICAgICAgICAgICAgICAgICAgICAgICAjMzZDQ0MwLFxuICAgICAgICBicmFuZC1zZWM6ICAgICAgICAgICAgICAgICAgICAjMDA4NDRBLFxuICAgICAgICBicmFuZC10ZXI6ICAgICAgICAgICAgICAgICAgICAjRjI4MDM3LFxuICAgICAgICBicmFuZC1xdWE6ICAgICAgICAgICAgICAgICAgICAjMDA0NzdELFxuICAgICAgICBicmFuZC1xdWk6ICAgICAgICAgICAgICAgICAgICAjRkZFRjQxXG4gICAgKTtcblxuICAgICR6LWluZGV4ZXM6IChcbiAgICAgICAgbWFpbjogKFxuICAgICAgICAgICAgICAgIGFib3ZlLWluaGVyaXQ6ICgpLFxuICAgICAgICAgICAgICAgIG5lc3RlZDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgbG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdG9vbHRpcDogKClcbiAgICAgICAgKSxcbiAgICAgICAgaGVhZGVyOiAoKSxcbiAgICAgICAgdG9hc3RlcjogKClcbiAgICApO1xuXG4gICAgJHNpdGUtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgICAgOTUwcHg7XG5cbiAgICAkdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICAgICAgICBjdWJpYy1iZXppZXIoLjU1LDAsLjEsMSk7XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKiEgYmxvY3NzIHY2LjAuMCB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgQmxvY3NzXG4gICAgQmxvY3NzIGlzIGEgc21hbGwgYnV0IHBvd2VyZnVsbCBjc3MgZnJhbWV3b3JrIGRlc2lnbmVkIHNwZWNpYWxseSBmb3JcbiAgICBzZXJpb3VzIGRldmVsb3BlcnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiAgU2V0dGluZ3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AaW1wb3J0IFwiLi4vLi4vYmxvY3NzLWRlZmF1bHRzL2xpYi9zZXR0aW5ncy5kZWZhdWx0c1wiO1xuXG5cblxuLyogIE5vcm1hbGl6ZVxuICAgIE1ha2VzIGJyb3dzZXJzIHJlbmRlciBhbGwgZWxlbWVudHMgbW9yZSBjb25zaXN0ZW50bHkgYW5kIGluIGxpbmUgd2l0aCBtb2Rlcm4gc3RhbmRhcmRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jsb2Nzcy1ub3JtYWxpemUvbGliL2F0b21zLm5vcm1hbGl6ZVwiO1xuXG5cblxuLyogIFRvb2xzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jsb2Nzcy1taXhpbnMvbGliL3Rvb2xzLm1peGluc1wiO1xuQGltcG9ydCBcIi4uLy4uL2Jsb2Nzcy1leHRlbmRzL2xpYi90b29scy5leHRlbmRzXCI7XG5cblxuXG4vKiAgQXRvbXNcbiAgICBUaGVzZSBhcmUgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBvZiBtYXR0ZXIuIEFwcGxpZWQgdG8gd2ViIGludGVyZmFjZXMsXG4gICAgYXRvbXMgYXJlIG91ciBIVE1MIHRhZ3MsIHN1Y2ggYXMgYSBmb3JtIGxhYmVsLCBhbiBpbnB1dCBvciBhIGJ1dHRvbi5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AaW1wb3J0IFwiLi4vLi4vYmxvY3NzLXJlc2V0L2xpYi9hdG9tcy5yZXNldFwiO1xuQGltcG9ydCBcIi4uLy4uL2Jsb2Nzcy1zaGFyZWQvbGliL2F0b21zLnNoYXJlZFwiO1xuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyohIGJsb2Nzcy1kZWZhdWx0cyB2MS4wLjMgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vQmxvY3NzICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgIERFRkFVTFRTXG4gICAgQmxvY3NzIGRlZmF1bHQgdmFyaWFibGVzLiBSZWRlZmluZSBhbmQgb3ZlcnJpZGUgdGhlbSBpbiB5b3VyXG4gICAgYXBwbGljYXRpb24tbGV2ZWwgYF92YXJzLnNjc3NgIGZpbGUuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogIFR5cG9ncmFwaHlcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEJhc2UgZm9udCBzaXplICYgbGluZSBoZWlnaHRcbiAqIFdlIHByZWRlZmluZSBhIG5pY2UgYmlnIGZvbnQgc2l6ZSwgd2ljaCByZWFkcyB2ZXJ5IG5pY2Ugb24gYSBiaWcgc2NyZWVuLlxuICogQXMgcGVyOiBodHRwOi8vdXhkZXNpZ24uc21hc2hpbmdtYWdhemluZS5jb20vMjAxMS8xMS8yOS90aGUtcGVyZmVjdC1wYXJhZ3JhcGgvXG4gKi9cbiRibG9jc3MtYmFzZS1mb250LXNpemU6IDE2cHggIWRlZmF1bHQ7XG4kYmxvY3NzLWJhc2UtbGluZS1oZWlnaHQ6IDI0cHggIWRlZmF1bHQ7XG4kYmxvY3NzLWxpbmUtaGVpZ2h0LXJhdGlvOiAkYmxvY3NzLWJhc2UtbGluZS1oZWlnaHQvJGJsb2Nzcy1iYXNlLWZvbnQtc2l6ZSAhZGVmYXVsdDtcblxuXG5cbi8qICBTcGFjaW5nXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBBc3NpZ24gb3VyIGAkYmxvY3NzLWJhc2UtbGluZS1oZWlnaHRgIHRvIGEgbmV3IHNwYWNpbmcgdmFyaWFibGUgZm9yXG4gKiBtb3JlIHRyYW5zcGFyZW5jeVxuICovXG4kYmxvY3NzLXNwYWNlOiAkYmxvY3NzLWJhc2UtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XG4kYmxvY3NzLXNwYWNlLXRpbnk6ICRibG9jc3Mtc3BhY2UvNCAhZGVmYXVsdDtcbiRibG9jc3Mtc3BhY2Utc21hbGw6ICRibG9jc3Mtc3BhY2UvMiAhZGVmYXVsdDtcbiRibG9jc3Mtc3BhY2UtbGFyZ2U6ICRibG9jc3Mtc3BhY2UqMiAhZGVmYXVsdDtcbiRibG9jc3Mtc3BhY2UtaHVnZTogJGJsb2Nzcy1zcGFjZSo0ICFkZWZhdWx0O1xuXG5cblxuLyogIFJlc3BvbnNpdmVcbiAgICBEZWZpbmUgeW91ciBicmVha3BvaW50cy4gVGhlIGZpcnN0IHZhbHVlIGlzIHRoZSBhcHBlbmRpeCB0aGF0IHNoYWxsIGJlIHVzZWRcbiAgICBmb3IgeW91ciBjbGFzc2VzIChlLmcuIGAudS02LTEyLS1wYWxtYCksIHRoZSBzZWNvbmQgdmFsdWUgaXMgdGhlIG1lZGlhXG4gICAgcXVlcnkgdGhhdCB0aGUgYnJlYWtwb2ludCBmaXJlcyBhdC5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kYmxvY3NzLWJyZWFrcG9pbnRzOiAoXG4gICAgJ2xhcCc6ICcobWluLXdpZHRoOiA0ODBweCknLFxuICAgICdkZXNrJzogJyhtaW4td2lkdGg6IDk2MHB4KSdcbikgIWRlZmF1bHQ7XG5cblxuXG4vKiAgTmFtZXNwYWNlXG4gICAgV291bGQgeW91IGxpa2UgYmxvY3NzIGNsYXNzZXMgdG8gYmUgdXNlZCB3aXRoIGEgZGlmZmVyZW50IG5hbWVzcGFjZT9cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kYmxvY3NzLW5hbWVzcGFjZTogbnVsbCAhZGVmYXVsdDtcbiRibG9jc3MtcmVzcG9uc2l2ZS1tb2RpZmllcjogdW5xdW90ZShcIi0tXCIpICFkZWZhdWx0O1xuXG5cblxuLyogIEZsZXhib3hcbiAgICBXb3VsZCB5b3UgbGlrZSBibG9jc3MgdG8gZW5hYmxlIGZsZXhib3ggaW4gaXRzIHN1YmNvbXBvbmVudHM/XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGJsb2Nzcy11c2UtZmxleGJveDogZmFsc2UgIWRlZmF1bHQ7XG4iLCIvKiEgbm9ybWFsaXplLmNzcyB2My4wLjMgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG5cbi8qKlxuICogMS4gU2V0IGRlZmF1bHQgZm9udCBmYW1pbHkgdG8gc2Fucy1zZXJpZi5cbiAqIDIuIFByZXZlbnQgaU9TIGFuZCBJRSB0ZXh0IHNpemUgYWRqdXN0IGFmdGVyIGRldmljZSBvcmllbnRhdGlvbiBjaGFuZ2UsXG4gKiAgICB3aXRob3V0IGRpc2FibGluZyB1c2VyIHpvb20uXG4gKi9cblxuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyAvKiAxICovXG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAyICovXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMiAqL1xufVxuXG4vKipcbiAqIFJlbW92ZSBkZWZhdWx0IG1hcmdpbi5cbiAqL1xuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vKiBIVE1MNSBkaXNwbGF5IGRlZmluaXRpb25zXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBhbnkgSFRNTDUgZWxlbWVudCBpbiBJRSA4LzkuXG4gKiBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBmb3IgYGRldGFpbHNgIG9yIGBzdW1tYXJ5YCBpbiBJRSAxMC8xMVxuICogYW5kIEZpcmVmb3guXG4gKiBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBmb3IgYG1haW5gIGluIElFIDExLlxuICovXG5cbmFydGljbGUsXG5hc2lkZSxcbmRldGFpbHMsXG5maWdjYXB0aW9uLFxuZmlndXJlLFxuZm9vdGVyLFxuaGVhZGVyLFxuaGdyb3VwLFxubWFpbixcbm1lbnUsXG5uYXYsXG5zZWN0aW9uLFxuc3VtbWFyeSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgYGlubGluZS1ibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRSA4LzkuXG4gKiAyLiBOb3JtYWxpemUgdmVydGljYWwgYWxpZ25tZW50IG9mIGBwcm9ncmVzc2AgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4gKi9cblxuYXVkaW8sXG5jYW52YXMsXG5wcm9ncmVzcyxcbnZpZGVvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvKiAxICovXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgLyogMiAqL1xufVxuXG4vKipcbiAqIFByZXZlbnQgbW9kZXJuIGJyb3dzZXJzIGZyb20gZGlzcGxheWluZyBgYXVkaW9gIHdpdGhvdXQgY29udHJvbHMuXG4gKiBSZW1vdmUgZXhjZXNzIGhlaWdodCBpbiBpT1MgNSBkZXZpY2VzLlxuICovXG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIGBbaGlkZGVuXWAgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzkvMTAuXG4gKiBIaWRlIHRoZSBgdGVtcGxhdGVgIGVsZW1lbnQgaW4gSUUgOC85LzEwLzExLCBTYWZhcmksIGFuZCBGaXJlZm94IDwgMjIuXG4gKi9cblxuW2hpZGRlbl0sXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIExpbmtzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIGNvbG9yIGZyb20gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuICovXG5cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLyoqXG4gKiBJbXByb3ZlIHJlYWRhYmlsaXR5IG9mIGZvY3VzZWQgZWxlbWVudHMgd2hlbiB0aGV5IGFyZSBhbHNvIGluIGFuXG4gKiBhY3RpdmUvaG92ZXIgc3RhdGUuXG4gKi9cblxuYTphY3RpdmUsXG5hOmhvdmVyIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS8xMC8xMSwgU2FmYXJpLCBhbmQgQ2hyb21lLlxuICovXG5cbmFiYnJbdGl0bGVdIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIHN0eWxlIHNldCB0byBgYm9sZGVyYCBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4gKi9cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4vKipcbiAqIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbiAqL1xuXG5kZm4ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi8qKlxuICogQWRkcmVzcyB2YXJpYWJsZSBgaDFgIGZvbnQtc2l6ZSBhbmQgbWFyZ2luIHdpdGhpbiBgc2VjdGlvbmAgYW5kIGBhcnRpY2xlYFxuICogY29udGV4dHMgaW4gRmlyZWZveCA0KywgU2FmYXJpLCBhbmQgQ2hyb21lLlxuICovXG5cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7XG59XG5cbi8qKlxuICogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS5cbiAqL1xuXG5tYXJrIHtcbiAgYmFja2dyb3VuZDogI2ZmMDtcbiAgY29sb3I6ICMwMDA7XG59XG5cbi8qKlxuICogQWRkcmVzcyBpbmNvbnNpc3RlbnQgYW5kIHZhcmlhYmxlIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuLyoqXG4gKiBQcmV2ZW50IGBzdWJgIGFuZCBgc3VwYCBhZmZlY3RpbmcgYGxpbmUtaGVpZ2h0YCBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG5cbnN1YiB7XG4gIGJvdHRvbTogLTAuMjVlbTtcbn1cblxuLyogRW1iZWRkZWQgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgYm9yZGVyIHdoZW4gaW5zaWRlIGBhYCBlbGVtZW50IGluIElFIDgvOS8xMC5cbiAqL1xuXG5pbWcge1xuICBib3JkZXI6IDA7XG59XG5cbi8qKlxuICogQ29ycmVjdCBvdmVyZmxvdyBub3QgaGlkZGVuIGluIElFIDkvMTAvMTEuXG4gKi9cblxuc3ZnOm5vdCg6cm9vdCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBHcm91cGluZyBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIEFkZHJlc3MgbWFyZ2luIG5vdCBwcmVzZW50IGluIElFIDgvOSBhbmQgU2FmYXJpLlxuICovXG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7XG59XG5cbi8qKlxuICogQWRkcmVzcyBkaWZmZXJlbmNlcyBiZXR3ZWVuIEZpcmVmb3ggYW5kIG90aGVyIGJyb3dzZXJzLlxuICovXG5cbmhyIHtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGhlaWdodDogMDtcbn1cblxuLyoqXG4gKiBDb250YWluIG92ZXJmbG93IGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5wcmUge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLyoqXG4gKiBBZGRyZXNzIG9kZCBgZW1gLXVuaXQgZm9udCBzaXplIHJlbmRlcmluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuXG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBLbm93biBsaW1pdGF0aW9uOiBieSBkZWZhdWx0LCBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYIGFsbG93IHZlcnkgbGltaXRlZFxuICogc3R5bGluZyBvZiBgc2VsZWN0YCwgdW5sZXNzIGEgYGJvcmRlcmAgcHJvcGVydHkgaXMgc2V0LlxuICovXG5cbi8qKlxuICogMS4gQ29ycmVjdCBjb2xvciBub3QgYmVpbmcgaW5oZXJpdGVkLlxuICogICAgS25vd24gaXNzdWU6IGFmZmVjdHMgY29sb3Igb2YgZGlzYWJsZWQgZWxlbWVudHMuXG4gKiAyLiBDb3JyZWN0IGZvbnQgcHJvcGVydGllcyBub3QgYmVpbmcgaW5oZXJpdGVkLlxuICogMy4gQWRkcmVzcyBtYXJnaW5zIHNldCBkaWZmZXJlbnRseSBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4gKi9cblxuYnV0dG9uLFxuaW5wdXQsXG5vcHRncm91cCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgY29sb3I6IGluaGVyaXQ7IC8qIDEgKi9cbiAgZm9udDogaW5oZXJpdDsgLyogMiAqL1xuICBtYXJnaW46IDA7IC8qIDMgKi9cbn1cblxuLyoqXG4gKiBBZGRyZXNzIGBvdmVyZmxvd2Agc2V0IHRvIGBoaWRkZW5gIGluIElFIDgvOS8xMC8xMS5cbiAqL1xuXG5idXR0b24ge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIGluY29uc2lzdGVudCBgdGV4dC10cmFuc2Zvcm1gIGluaGVyaXRhbmNlIGZvciBgYnV0dG9uYCBhbmQgYHNlbGVjdGAuXG4gKiBBbGwgb3RoZXIgZm9ybSBjb250cm9sIGVsZW1lbnRzIGRvIG5vdCBpbmhlcml0IGB0ZXh0LXRyYW5zZm9ybWAgdmFsdWVzLlxuICogQ29ycmVjdCBgYnV0dG9uYCBzdHlsZSBpbmhlcml0YW5jZSBpbiBGaXJlZm94LCBJRSA4LzkvMTAvMTEsIGFuZCBPcGVyYS5cbiAqIENvcnJlY3QgYHNlbGVjdGAgc3R5bGUgaW5oZXJpdGFuY2UgaW4gRmlyZWZveC5cbiAqL1xuXG5idXR0b24sXG5zZWxlY3Qge1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuLyoqXG4gKiAxLiBBdm9pZCB0aGUgV2ViS2l0IGJ1ZyBpbiBBbmRyb2lkIDQuMC4qIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYFxuICogICAgYW5kIGB2aWRlb2AgY29udHJvbHMuXG4gKiAyLiBDb3JyZWN0IGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgYGlucHV0YCB0eXBlcyBpbiBpT1MuXG4gKiAzLiBJbXByb3ZlIHVzYWJpbGl0eSBhbmQgY29uc2lzdGVuY3kgb2YgY3Vyc29yIHN0eWxlIGJldHdlZW4gaW1hZ2UtdHlwZVxuICogICAgYGlucHV0YCBhbmQgb3RoZXJzLlxuICovXG5cbmJ1dHRvbixcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgLyogMSAqL1xuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvKiAyICovXG4gIGN1cnNvcjogcG9pbnRlcjsgLyogMyAqL1xufVxuXG4vKipcbiAqIFJlLXNldCBkZWZhdWx0IGN1cnNvciBmb3IgZGlzYWJsZWQgZWxlbWVudHMuXG4gKi9cblxuYnV0dG9uW2Rpc2FibGVkXSxcbmh0bWwgaW5wdXRbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vKipcbiAqIFJlbW92ZSBpbm5lciBwYWRkaW5nIGFuZCBib3JkZXIgaW4gRmlyZWZveCA0Ky5cbiAqL1xuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIEZpcmVmb3ggNCsgc2V0dGluZyBgbGluZS1oZWlnaHRgIG9uIGBpbnB1dGAgdXNpbmcgYCFpbXBvcnRhbnRgIGluXG4gKiB0aGUgVUEgc3R5bGVzaGVldC5cbiAqL1xuXG5pbnB1dCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5cbi8qKlxuICogSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBhdHRlbXB0IHRvIHN0eWxlIHRoZXNlIGVsZW1lbnRzLlxuICogRmlyZWZveCdzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgcmVzcGVjdCBib3gtc2l6aW5nLCBwYWRkaW5nLCBvciB3aWR0aC5cbiAqXG4gKiAxLiBBZGRyZXNzIGJveCBzaXppbmcgc2V0IHRvIGBjb250ZW50LWJveGAgaW4gSUUgOC85LzEwLlxuICogMi4gUmVtb3ZlIGV4Y2VzcyBwYWRkaW5nIGluIElFIDgvOS8xMC5cbiAqL1xuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIHBhZGRpbmc6IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBGaXggdGhlIGN1cnNvciBzdHlsZSBmb3IgQ2hyb21lJ3MgaW5jcmVtZW50L2RlY3JlbWVudCBidXR0b25zLiBGb3IgY2VydGFpblxuICogYGZvbnQtc2l6ZWAgdmFsdWVzIG9mIHRoZSBgaW5wdXRgLCBpdCBjYXVzZXMgdGhlIGN1cnNvciBzdHlsZSBvZiB0aGVcbiAqIGRlY3JlbWVudCBidXR0b24gdG8gY2hhbmdlIGZyb20gYGRlZmF1bHRgIHRvIGB0ZXh0YC5cbiAqL1xuXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyoqXG4gKiAxLiBBZGRyZXNzIGBhcHBlYXJhbmNlYCBzZXQgdG8gYHNlYXJjaGZpZWxkYCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbiAqIDIuIEFkZHJlc3MgYGJveC1zaXppbmdgIHNldCB0byBgYm9yZGVyLWJveGAgaW4gU2FmYXJpIGFuZCBDaHJvbWUuXG4gKi9cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvKiAxICovXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIGlubmVyIHBhZGRpbmcgYW5kIHNlYXJjaCBjYW5jZWwgYnV0dG9uIGluIFNhZmFyaSBhbmQgQ2hyb21lIG9uIE9TIFguXG4gKiBTYWZhcmkgKGJ1dCBub3QgQ2hyb21lKSBjbGlwcyB0aGUgY2FuY2VsIGJ1dHRvbiB3aGVuIHRoZSBzZWFyY2ggaW5wdXQgaGFzXG4gKiBwYWRkaW5nIChhbmQgYHRleHRmaWVsZGAgYXBwZWFyYW5jZSkuXG4gKi9cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi8qKlxuICogRGVmaW5lIGNvbnNpc3RlbnQgYm9yZGVyLCBtYXJnaW4sIGFuZCBwYWRkaW5nLlxuICovXG5cbmZpZWxkc2V0IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgbWFyZ2luOiAwIDJweDtcbiAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgYGNvbG9yYCBub3QgYmVpbmcgaW5oZXJpdGVkIGluIElFIDgvOS8xMC8xMS5cbiAqIDIuIFJlbW92ZSBwYWRkaW5nIHNvIHBlb3BsZSBhcmVuJ3QgY2F1Z2h0IG91dCBpZiB0aGV5IHplcm8gb3V0IGZpZWxkc2V0cy5cbiAqL1xuXG5sZWdlbmQge1xuICBib3JkZXI6IDA7IC8qIDEgKi9cbiAgcGFkZGluZzogMDsgLyogMiAqL1xufVxuXG4vKipcbiAqIFJlbW92ZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRSA4LzkvMTAvMTEuXG4gKi9cblxudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLyoqXG4gKiBEb24ndCBpbmhlcml0IHRoZSBgZm9udC13ZWlnaHRgIChhcHBsaWVkIGJ5IGEgcnVsZSBhYm92ZSkuXG4gKiBOT1RFOiB0aGUgZGVmYXVsdCBjYW5ub3Qgc2FmZWx5IGJlIGNoYW5nZWQgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gT1MgWC5cbiAqL1xuXG5vcHRncm91cCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4vKiBUYWJsZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogUmVtb3ZlIG1vc3Qgc3BhY2luZyBiZXR3ZWVuIHRhYmxlIGNlbGxzLlxuICovXG5cbnRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XG59XG5cbnRkLFxudGgge1xuICBwYWRkaW5nOiAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qISBibG9jc3MtbWl4aW5zIHYxLjAuMiB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgVE9PTFMuTUlYSU5TXG4gICAgQSBzZXQgb2YgdXNlZnVsbCBTYXNzIG1peGlucywgd2ljaCBjYW4gYmUgdXNlZCB0cm91Z2hvdXQgeW91ciBwcm9qZWN0XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogIFZhcmlhYmxlc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRibG9jc3MtYnJvd3Nlci1jb250ZXh0OiAkYmxvY3NzLWJhc2UtZm9udC1zaXplICFkZWZhdWx0O1xuJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTg6IGZhbHNlICFkZWZhdWx0O1xuXG5cblxuLyogIEZ1bmN0aW9uc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogVmFsdWUgdG8gcmVtXG4gKi9cbkBmdW5jdGlvbiB2YWx1ZVRvUmVtKCR2YWx1ZSkge1xuICAgIEBpZiB0eXBlLW9mKCR2YWx1ZSkgPT0gc3RyaW5nIG9yIHVuaXRsZXNzKCR2YWx1ZSkgPT0gdHJ1ZSBvciB1bml0KCR2YWx1ZSkgPT0gXCJlbVwiIG9yIHVuaXQoJHZhbHVlKSA9PSBcIiVcIiB7XG4gICAgICAgIEByZXR1cm4gJHZhbHVlO1xuICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuICgkdmFsdWUvJGJsb2Nzcy1icm93c2VyLWNvbnRleHQqMXJlbSk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogVmFsdWUgdG8gZW1cbiAqL1xuQGZ1bmN0aW9uIHZhbHVlVG9FbSgkdmFsdWUsICRjb250ZXh0OiAkYmxvY3NzLWJyb3dzZXItY29udGV4dCkge1xuICAgIEByZXR1cm4gKCR2YWx1ZS8kY29udGV4dCoxZW0pO1xufVxuXG5cbi8qKlxuICogQSBzbWFsbCwgaW50ZXJuYWxseS11c2VkIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUgdW5pdHMgZnJvbSBhIGdpdmVuIHZhbHVlLlxuICovXG5AZnVuY3Rpb24gc3RyaXAtdW5pdHMoJG51bWJlcikge1xuICAgIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xufVxuXG5cblxuLyogIE1peGluc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogUmVtIGNvbnZlcnRlclxuICpcbiAqIDEuIFByb3ZpZGUgcGl4ZWwgZmFsbGJhY2sgZm9yIGllOFxuICogMi4gTG9vcCBvdmVyIHZhbHVlc1xuICpcbiAqIFNhbXBsZTogQGluY2x1ZGUgcmVtKG1hcmdpbiwgMCBhdXRvIDMwMHB4LCAhaW1wb3J0YW50KTtcbiAqL1xuQG1peGluIHJlbSAoJHByb3BlcnR5LCAkdmFsdWUsICRhcHBlbmQ6IFwiXCIpIHtcblxuICAgIC8qIDEgKi9cbiAgICBAaWYgJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTggPT0gdHJ1ZSB7XG4gICAgICAgICN7JHByb3BlcnR5fTogJHZhbHVlICN7JGFwcGVuZH07XG4gICAgfVxuXG4gICAgLyogMiAqL1xuICAgIEBpZiB0eXBlLW9mKCR2YWx1ZSkgPT0gbGlzdCB7XG4gICAgICAgICRhbGw6ICgpO1xuICAgICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkdmFsdWUpIHtcbiAgICAgICAgICAgICRhbGw6IGFwcGVuZCgkYWxsLCB2YWx1ZVRvUmVtKG50aCgkdmFsdWUsICRpKSkpO1xuICAgICAgICB9XG4gICAgICAgICN7JHByb3BlcnR5fTogJGFsbCAjeyRhcHBlbmR9O1xuICAgIH0gQGVsc2Uge1xuICAgICAgICAjeyRwcm9wZXJ0eX06IHZhbHVlVG9SZW0oJHZhbHVlKSAjeyRhcHBlbmR9O1xuICAgIH1cbn1cblxuXG4vKipcbiAqIENhbGN1bGF0ZXMgZm9udCwgcmVtIGZvbnQgc2l6ZSAmIGxpbmUgaGVpZ2h0XG4gKiAkbXVsdGlwbGllcjogbXVsdGlwbGllcyBsaW5lIGhlaWdodCBieSB0aGUgZ2l2ZW4gdmFsdWVcbiAqICRsaW5lLWhlaWdodDogaW5jbHVkZSBsaW5lIGhlaWdodCBvciBub3RcbiAqIFRoZSBsaW5lIGhlaWdodCBwYXJhbWV0ZXIgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgbXVsdGlwbGllclxuICpcbiAqIFNhbXBsZSB1c2FnZSBAaW5jbHVkZSBmb250LXNpemUoMThweCwgMik7XG4gKi9cbkBtaXhpbiBmb250LXNpemUoJGZzLCAkbGluZS1oZWlnaHQ6IHRydWUsICRtdWx0aXBsaWVyOiAxKSB7XG4gICAgQGluY2x1ZGUgcmVtKGZvbnQtc2l6ZSwgJGZzKTtcblxuICAgICR1c2UtbGluZS1oZWlnaHQ6IGZhbHNlO1xuXG4gICAgQGlmIHR5cGUtb2YoJGxpbmUtaGVpZ2h0KSA9PSBib29sIHtcbiAgICAgICAgQGlmICRsaW5lLWhlaWdodCA9PSB0cnVle1xuICAgICAgICAgICAgJHVzZS1saW5lLWhlaWdodDogdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkbGluZS1oZWlnaHQpID09IG51bWJlciB7XG4gICAgICAgICR1c2UtbGluZS1oZWlnaHQ6IHRydWU7XG4gICAgICAgICRtdWx0aXBsaWVyOiAkbGluZS1oZWlnaHQ7XG4gICAgfVxuXG4gICAgQGlmICR1c2UtbGluZS1oZWlnaHQgPT0gdHJ1ZSB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAoY2VpbCgkZnMgLyAkYmxvY3NzLWJhc2UtbGluZS1oZWlnaHQpICogKCRibG9jc3MtYmFzZS1saW5lLWhlaWdodCAvICRmcykpICogJG11bHRpcGxpZXI7XG4gICAgfVxufVxuXG5cbi8qKlxuICogVHJ1bmNhdGUgb3Zlcmx5IGxvbmcgc3RyaW5nc1xuICogc2FtcGxlIHZhbHVlIHRydW5jYXRlKDEwMCUpXG4gKi9cbkBtaXhpbiB0cnVuY2F0ZSgkdHJ1bmNhdGlvbi1ib3VuZGFyeSkge1xuICAgIEBpbmNsdWRlIHJlbShtYXgtd2lkdGgsICR0cnVuY2F0aW9uLWJvdW5kYXJ5KTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuLyoqXG4gKiBFbmNsb3NlIGEgYmxvY2sgb2YgY29kZSB3aXRoIGEgbWVkaWEgcXVlcnkgYXMgbmFtZWQgaW4gYCRibG9jc3MtYnJlYWtwb2ludHNgLlxuICovXG5AbWl4aW4gbWVkaWEtcXVlcnkoJG1lZGlhLXF1ZXJ5KSB7XG4gICAgJGJyZWFrcG9pbnQtZm91bmQ6IGZhbHNlO1xuXG4gICAgQGVhY2ggJGJyZWFrcG9pbnQgaW4gJGJsb2Nzcy1icmVha3BvaW50cyB7XG4gICAgICAgIEBpZiB0eXBlLW9mKCRicmVha3BvaW50KSA9PSAnbGlzdCcge1xuICAgICAgICAgICAgJG5hbWU6IG50aCgkYnJlYWtwb2ludCwgMSk7XG4gICAgICAgICAgICAkZGVjbGFyYXRpb246IG50aCgkYnJlYWtwb2ludCwgMik7XG5cbiAgICAgICAgICAgIEBpZiAkbWVkaWEtcXVlcnkgPT0gJG5hbWUgYW5kICRkZWNsYXJhdGlvbiB7XG4gICAgICAgICAgICAgICAgJGJyZWFrcG9pbnQtZm91bmQ6IHRydWU7XG5cbiAgICAgICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kICN7JGRlY2xhcmF0aW9ufSB7XG4gICAgICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAZXJyb3IgXCJCcmVha3BvaW50IGRvZXNu4oCZdCBtYXRjaCB0aGUgYCdrZXknOiAnKHZhbHVlKSdgIGZvcm1hdFwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQGlmICRicmVha3BvaW50LWZvdW5kID09IGZhbHNlIHtcbiAgICAgICAgQHdhcm4gXCJCcmVha3BvaW50IOKAmCN7JG1lZGlhLXF1ZXJ5feKAmSBkb2VzIG5vdCBleGlzdFwiXG4gICAgfVxufVxuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyohIGJsb2Nzcy1leHRlbmRzIHYxLjAuMCB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgVE9PTFMuRVhURU5EU1xuICAgIEEgY291cGxlIG9mIGRlZmF1bHQgZXh0ZW5kYWJsZSBjbGFzc2VzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogIFZhcmlhYmxlc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRibG9jc3MtdXNlLWNsZWFyZml4OiB0cnVlICFkZWZhdWx0O1xuJGJsb2Nzcy11c2UtbW9kdWxlOiB0cnVlICFkZWZhdWx0O1xuXG5cbkBpZiAkYmxvY3NzLXVzZS1jbGVhcmZpeCA9PSB0cnVlIHtcbi8qICBDbGVhcmZpeFxuICAgIE1pY3JvIGNsZWFyZml4LCBwbGVhc2UgdXNlIHRoZSBgLmNmYCBjbGFzcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFzIGV4dGVuZGluZ1xuICAgIGlzIHZlcnkgZXhwZW5zaXZlIHRvIHlvdXIgY29kZS5cbiAgICBBcyBwZXI6IG5pY29sYXNnYWxsYWdoZXIuY29tL21pY3JvLWNsZWFyZml4LWhhY2tcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4uY2YsXG4lY2Yge1xuICAgICY6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgfVxufVxuXG59IC8vIEBlbmRpZlxuXG5cblxuQGlmICRibG9jc3MtdXNlLW1vZHVsZSA9PSB0cnVlIHtcbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRNT0RVTEVcbiAgICBSZW1vdmVzIHRoZSBgbWFyZ2luLWJvdHRvbWAgb2YgYSBtb2R1bGVzIGxhc3QtY2hpbGRzLlxuICAgIFBsZWFzZSB1c2UgdGhlIGAubW9kdWxlYCBjbGFzcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFzIGV4dGVuZGluZyBpcyB2ZXJ5XG4gICAgZXhwZW5zaXZlIHRvIHlvdXIgY29kZS5cbiAgICBBcyBwZXI6IGh0dHA6Ly9jc3MtdHJpY2tzLmNvbS9zcGFjaW5nLXRoZS1ib3R0b20tb2YtbW9kdWxlcy9cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4ubW9kdWxlLFxuJW1vZHVsZSB7XG4gICAgPiAqOmxhc3QtY2hpbGQsXG4gICAgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQsXG4gICAgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQsXG4gICAgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbn1cblxufSAvLyBAZW5kaWYiLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKiEgYmxvY3NzLXJlc2V0IHYxLjAuMCB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgQVRPTVMuUkVTRVRcbiAgICBBIHRoaW4gbGF5ZXIgb24gdG9wIG9mIG5vcm1hbGl6ZS5jc3MgdGhhdCBwcm92aWRlcyBhIHN0YXJ0aW5nIHBvaW50IG1vcmVcbiAgICBzdWl0YWJsZSBmb3Igd2ViIGFwcGxpY2F0aW9ucy4gUmVtb3ZlcyB0aGUgZGVmYXVsdCBzcGFjaW5nIGFuZCBib3JkZXIgZm9yXG4gICAgYXBwcm9wcmlhdGUgZWxlbWVudHMuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBTZXQgdGhlIGdsb2JhbCBgYm94LXNpemluZ2Agc3RhdGUgdG8gYGJvcmRlci1ib3hgLlxuICpcbiAqIGNzcy10cmlja3MuY29tL2luaGVyaXRpbmctYm94LXNpemluZy1wcm9iYWJseS1zbGlnaHRseS1iZXR0ZXItYmVzdC1wcmFjdGljZVxuICogcGF1bGlyaXNoLmNvbS8yMDEyL2JveC1zaXppbmctYm9yZGVyLWJveC1mdHdcbiAqL1xuaHRtbCB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKiB7XG4gICAgJixcbiAgICAmOmJlZm9yZSxcbiAgICAmOmFmdGVyIHtcbiAgICAgICAgYm94LXNpemluZzogaW5oZXJpdDtcbiAgICB9XG59XG5cblxuLyoqXG4gKiBUaGUgdXN1YWwgcmVzZXR0aW5nIG9mIG1hcmdpbnMsIHBhZGRpbmdzLCBib3JkZXJzIGV0Yy5cbiAqL1xuYmxvY2txdW90ZSxcbmRsLFxuZGQsXG5vbCxcbnVsLFxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2LFxucCxcbnByZSxcbmZpZWxkc2V0LFxuaHIge1xuICAgIG1hcmdpbjogMDtcbn1cblxuZmllbGRzZXQsXG5vbCxcbnVsIHtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG5pZnJhbWUsXG5maWVsZHNldCB7XG4gICAgYm9yZGVyOiAwO1xufVxuXG5cbi8qKlxuICogUmVtb3ZlIGV4dHJhIHZlcnRpY2FsIHNwYWNpbmcgd2hlbiBuZXN0aW5nIGxpc3RzLlxuICovXG5saSB7XG4gICAgPiB1bCxcbiAgICA+IG9sIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG59XG5cblxuLyoqXG4gKiAxLiBGaXggYW4gb2RkIHF1aXJrIHdoZXJlYnksIHdpdGhvdXQgdGhpcywgY29kZSBibG9ja3MgYXJlIHJlbmRlcmVkIGF0IGFcbiAqICAgIGZvbnQtc2l6ZSBzbWFsbGVyIHRoYW4gMWVtLlxuICovXG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlOyAvKiAxICovXG59XG5cblxuXG4vKipcbiAqIFN1cHByZXNzIHRoZSBmb2N1cyBvdXRsaW5lIG9uIGxpbmtzIHRoYXQgY2Fubm90IGJlIGFjY2Vzc2VkIHZpYSBrZXlib2FyZC5cbiAqIFRoaXMgcHJldmVudHMgYW4gdW53YW50ZWQgZm9jdXMgb3V0bGluZSBmcm9tIGFwcGVhcmluZyBhcm91bmQgZWxlbWVudHMgdGhhdFxuICogbWlnaHQgc3RpbGwgcmVzcG9uZCB0byBwb2ludGVyIGV2ZW50cy5cbiAqL1xuW3RhYmluZGV4PVwiLTFcIl06Zm9jdXMge1xuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG59XG5cblxuLyoqXG4gKiBJbWFnZVxuICpcbiAqIDEuIEJ5IGRlZmF1bHQgYWxsIGltYWdlcyBhcmUgZmx1aWRcbiAqIDIuIFJlbmRlciBgYWx0YCB2aXN1YWxseSBvZmZzZXQgd2hlbiBpbWFnZXMgZG9uJ3QgbG9hZFxuICovXG5pbWcge1xuICAgIG1heC13aWR0aDogMTAwJTsgLyogMSAqL1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsgLyogMiAqL1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qISBibG9jc3Mtc2hhcmVkIHYxLjAuMSB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgQVRPTVMuUkVTRVRcbiAgICBDb250YWlucyBzZXZlcmFsIGhpZ2gtbGV2ZWwgcnVsZXNldHMgd2hpY2ggYXBwbHkgYSBjb25zaXN0ZW50LCBzaGFyZWRcbiAgICBkZWNsYXJhdGlvbiAodHlwaWNhbGx5IG1hcmdpbnMpIGFjcm9zcyBhIG51bWJlciBvZiBlbGVtZW50cy5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIFRvcGxldmVsIEhUTUwgZWxlbWVudFxuICogQXNzaWduIG91ciBgJGJsb2Nzcy1iYXNlLWZvbnQtc2l6ZWAgJiBwcmVkZWZpbmUgc29tZSBkZWZhdWx0c1xuICpcbiAqIDEuIEFwcGx5IHRoZSBgJGJsb2Nzcy1iYXNlLWZvbnQtc2l6ZWAsIGAkYmxvY3NzLWxpbmUtaGVpZ2h0LXJhdGlvYFxuICogMi4gQWx3YXlzIGFkZCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgdG8gcHJldmVudCBsYXlvdXQgc2hpZnRpbmdcbiAqIDMuIEZvbnRzIG9uIE9TWCB3aWxsIGxvb2sgbW9yZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgc3lzdGVtcyB0aGF0IGRvIG5vdFxuICogICAgcmVuZGVyIHRleHQgdXNpbmcgc3ViLXBpeGVsIGFudGktYWxpYXNpbmcuXG4gKi9cbmh0bWwge1xuICAgIGZvbnQ6ICN7KCRibG9jc3MtYmFzZS1mb250LXNpemUvMTZweCkqMWVtfS8jeyRibG9jc3MtbGluZS1oZWlnaHQtcmF0aW99IHNhbnMtc2VyaWY7IC8qIDEgKi9cbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7IC8qIDIgKi9cbiAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7IC8qIDMgKi9cbiAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7IC8qIDMgKi9cbn1cblxuXG4vKipcbiAqIEFwcGxpZXMgdmVydGljYWwgcmh5dGhtIHRvIGRlc2lnbmF0ZWQgZWxlbWVudHNcbiAqIEFzIHBlcjogaHR0cDovL2Nzc3dpemFyZHJ5LmNvbS8yMDEyLzA2L3NpbmdsZS1kaXJlY3Rpb24tbWFyZ2luLWRlY2xhcmF0aW9uc1xuICovXG5oZ3JvdXAsXG4uaGdyb3VwLFxudWwsXG5vbCxcbmRsLFxuYmxvY2txdW90ZSxcbnAsXG5hZGRyZXNzLFxudGFibGUsXG5maWVsZHNldCxcbnByZSxcbmhyIHtcbiAgICBAaW5jbHVkZSByZW0obWFyZ2luLWJvdHRvbSwgJGJsb2Nzcy1zcGFjZSk7XG59XG5cblxuLyoqXG4gKiBEZWZhdWx0IGluZGVudGF0aW9uIHZhbHVlIGZvciBsaXN0c1xuICovXG51bCxcbm9sLFxuZGQge1xuICAgIEBpbmNsdWRlIHJlbShtYXJnaW4tbGVmdCwgJGJsb2Nzcy1iYXNlLWxpbmUtaGVpZ2h0KTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKiEgYmxvY3NzLWFycmFuZ2UgdjEuMS4yIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL0Jsb2NzcyAqL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICBBUlJBTkdFXG4gICAgVGhpcyBjb21wb25lbnQgbGV0cyB5b3UgbGF5IG91dCBhIHJvdyBvZiBjZWxscyBpbiB2YXJpb3VzIHdheXMuIFlvdSBjYW5cbiAgICBzcGVjaWZ5IHdoZXRoZXIgYSBjZWxsIHNob3VsZCBiZSB3aWRlIGVub3VnaCB0byBmaXQgaXRzIGNvbnRlbnQsIG9yIHRha2UgdXBcbiAgICB0aGUgcmVtYWluaW5nIHNwYWNlIGluIHRoZSByb3cuIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBnaXZlIGFsbCBjZWxscyBhblxuICAgIGVxdWFsIHdpZHRoLCBhbmQgdG8gY29udHJvbCB0aGVpciB2ZXJ0aWNhbCBhbGlnbm1lbnQuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBFeGFtcGxlIHVzYWdlOlxuICpcbjxkaXYgY2xhc3M9XCJhcnJhbmdlXCI+XG4gICAgPGRpdiBjbGFzcz1cImFycmFuZ2VfX3NpemUtZml0XCI+XG4gICAgICAgIDxpbWcgc3JjPVwiaW1nLnBuZ1wiIGFsdD1cIlwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJhcnJhbmdlX19zaXplLWZpbGxcIj5cbiAgICAgICAgQnJhbSBTbXVsZGVycyBAYnJhbXNtdWxkZXJzXG4gICAgPC9kaXY+XG48L2Rpdj5cbiAqL1xuXG4vKiAgVmFyaWFibGVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBOYW1lc3BhY2luZ1xuICovXG4kYmxvY3NzLWFycmFuZ2UtbmFtZXNwYWNlOiAkYmxvY3NzLW5hbWVzcGFjZSAhZGVmYXVsdDtcblxuXG4vKipcbiAqIE1vZHVsZSBjYW4gYmUgZGlzYWJsZWQgYnkgc3dpdGNoaW5nIGAkYmxvY3NzLXVzZS1hcnJhbmdlYCB0byBgZmFsc2VgXG4gKi9cbiRibG9jc3MtdXNlLWFycmFuZ2U6IHRydWUgIWRlZmF1bHQ7XG5cblxuLyoqXG4gKiBHdXR0ZXJcbiAqL1xuJGJsb2Nzcy1hcnJhbmdlLWd1dHRlcjogJGJsb2Nzcy1zcGFjZSAhZGVmYXVsdDtcblxuXG4vKipcbiAqIERlZmluZSB3aGljaCBuYW1lc3BhY2VkIGJyZWFrcG9pbnRzIHlvdSB3b3VsZCBsaWtlIHRvIGNvbGxhcHNlIHRoZSBhcnJhbmdlXG4gKlxuICogJGJyZWFrcG9pbnQtaGFzLXg6ICAgICAgICgncGFsbScsICdkZXNrJyk7XG4gKlxuICogTm90ZTogdGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgbXVzdCBleGlzdCBpbiB0aGUgbGlzdCBvZiBgJGJyZWFrcG9pbnRzYFxuICogICAgICAgaW4gYHNldHRpbmdzLmRlZmF1bHRzYCBvciB5b3VyIG93biB2YXJzIGZpbGVcbiAqL1xuJGJsb2Nzcy1icmVha3BvaW50LWhhcy1jb2xsYXBzZWQtYXJyYW5nZTogICgpICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG5cblxuLyogIE1peGluc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogTWl4aW46IFJlc2V0IGFycmFuZ2VkIG1vZHVsZXNcbiAqXG4gKiAxLiBSZXNldCBkaXNwbGF5IHByb3BlcnR5XG4gKiAyLiAxMDAlIHdpZHRoXG4gKiAzLiBSZXNldCBwYWRkaW5nIGluIGNhc2Ugb2YgYC5hcnJhbmdlLS1ndXR0ZXJgXG4gKiA0LiBSZS1pbml0aWF0ZSBmbHVpZCBpbWFnZXNcbiAqL1xuQG1peGluIGFycmFuZ2UtY29sbGFwc2UgKCkge1xuICAgIGRpc3BsYXk6IGJsb2NrOyAvKiAxICovXG5cbiAgICA+IC4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZV9fc2l6ZS1maWxsLFxuICAgID4gLiN7JGJsb2Nzcy1hcnJhbmdlLW5hbWVzcGFjZX1hcnJhbmdlX19zaXplLWZpdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvKiAxICovXG4gICAgICAgIHdpZHRoOiAxMDAlOyAvKiAyICovXG4gICAgICAgIHBhZGRpbmctbGVmdDogMDsgLyogMyAqL1xuXG4gICAgICAgIGltZyB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7IC8qIDQgKi9cbiAgICAgICAgICAgIGhlaWdodDogYXV0bzsgLyogNCAqL1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbi8qICBDb3JlIGFycmFuZ2UgY29tcG9uZXRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AaWYgJGJsb2Nzcy11c2UtYXJyYW5nZSA9PSB0cnVle1xuXG4vKipcbiAqIGBhcnJhbmdlYCBtdXN0IG9ubHkgY29udGFpbiAnYXJyYW5nZV9fc2l6ZS1maXQnIGFuZCAnYXJyYW5nZV9fc2l6ZS1maWxsJyBjaGlsZFxuICogbm9kZXMuXG4gKlxuICogSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBvbmx5IHVzZSBvbmUgJ2FycmFuZ2VfX3NpemUtZmlsbCcgcGVyIGNvbXBvbmVudFxuICogaW5zdGFuY2UgKHVubGVzcyB1c2luZyB0aGUgYGFycmFuZ2UtLWVxdWFsbHlgIG1vZGlmaWVyOyBzZWUgYmVsb3cpLiBUaGVcbiAqIGZpcnN0ICdhcnJhbmdlX19zaXplLWZpbGwnIGluIHRoZSBjb21wb25lbnQncyBzb3VyY2Ugb3JkZXIgd2lsbCBub3Qgc2hhcmUgdGhlXG4gKiBleHRyYSBzcGFjZSB3aXRoIGFueSBzdWJzZXF1ZW50IG5vZGVzIG9mIHRoYXQgY2xhc3MuXG4gKi9cblxuLyoqXG4gKiAxLiBSZWx5IG9uIHRhYmxlIGxheW91dC5cbiAqIDIuIFplcm8gb3V0IHRoZSBkZWZhdWx0IHNwYWNpbmcgdGhhdCBtaWdodCBiZSBvbiBhbiBlbGVtZW50IChlLmcuLCBgdWxgKS5cbiAqIDMuIFJlc2V0IHRoZSB0YWJsZS1sYXlvdXQgYWxnb3JpdGhtIGluIGNhc2UgYSBjb21wb25lbnQgaXMgbmVzdGVkLlxuICogNC4gTWFrZSBzdXJlIHRoZSBjb21wb25lbnQgZmlsbHMgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIHBhcmVudC5cbiAqL1xuLiN7JGJsb2Nzcy1hcnJhbmdlLW5hbWVzcGFjZX1hcnJhbmdlIHtcbiAgICBkaXNwbGF5OiB0YWJsZTsgLyogMSAqL1xuICAgIG1hcmdpbjogMDsgLyogMiAqL1xuICAgIHBhZGRpbmc6IDA7IC8qIDIgKi9cbiAgICB0YWJsZS1sYXlvdXQ6IGF1dG87IC8qIDMgKi9cbiAgICB3aWR0aDogMTAwJTsgLyogNCAqL1xufVxuXG5cbiAgICAvKipcbiAgICAgKiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHR5cGVzIG9mIGNoaWxkLlxuICAgICAqIGBzaXplLWZpbGxgIHdpbGwgZXhwYW5kIHRvIGZpbGwgYWxsIG9mIHRoZSByZW1haW5pbmcgc3BhY2Ugbm90IGZpbGxlZCBieVxuICAgICAqIGBzaXplLWZpdGAgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiAxLiBaZXJvIG91dCBhbnkgZGVmYXVsdCBzcGFjaW5nIHRoYXQgbWlnaHQgYmUgb24gYW4gZWxlbWVudCAoZS5nLiwgYGxpYCk7XG4gICAgICogICAgTWFyZ2luIGhhcyBubyBlZmZlY3Qgd2hlbiBjb3VwbGVkIHdpdGggYGRpc3BsYXk6IHRhYmxlLWNlbGxgLlxuICAgICAqIDIuIEFsbCBjZWxscyBhcmUgdG9wLWFsaWduZWQgYnkgZGVmYXVsdFxuICAgICAqL1xuICAgIC4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZV9fc2l6ZS1maWxsLFxuICAgIC4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZV9fc2l6ZS1maXQge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgICBwYWRkaW5nOiAwOyAvKiAxICovXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IC8qIDIgKi9cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIE1ha2Ugc3VyZSB0aGUgbWFpbiBjb250ZW50IGJsb2NrIGV4cGFuZHMgdG8gZmlsbCB0aGUgcmVtYWluaW5nIHNwYWNlLlxuICAgICAqL1xuICAgIC4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZV9fc2l6ZS1maWxsIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmVuZCBhZ2FpbnN0IGEgc2lkZS1lZmZlY3Qgb2YgdGhpcyBsYXlvdXQgcGF0dGVybjogaW1hZ2VzIGluXG4gICAgICAgICAqICdhcnJhbmdlX19zaXplLWZpdCcgY2Fubm90IGJlIGZsdWlkLCBvdGhlcndpc2UgdGhleSBsb3NlIHRoZWlyIGFiaWxpdHkgdG9cbiAgICAgICAgICogcHJvdmlkZSBzaXplIHRvIGEgY2VsbC5cbiAgICAgICAgICovXG4gICAgICAgIC4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZV9fc2l6ZS1maXQgaW1nIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICB9XG5cblxuXG4vKiBWZXJ0aWNhbCBhbGlnbm1lbnQgbW9kaWZpZXJzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLiN7JGJsb2Nzcy1hcnJhbmdlLW5hbWVzcGFjZX1hcnJhbmdlLS10b3Age1xuXG4gICAgPiAuI3skYmxvY3NzLWFycmFuZ2UtbmFtZXNwYWNlfWFycmFuZ2VfX3NpemUtZmlsbCxcbiAgICA+IC4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZV9fc2l6ZS1maXQge1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIH1cbn1cblxuLiN7JGJsb2Nzcy1hcnJhbmdlLW5hbWVzcGFjZX1hcnJhbmdlLS1taWRkbGUge1xuXG4gICAgPiAuI3skYmxvY3NzLWFycmFuZ2UtbmFtZXNwYWNlfWFycmFuZ2VfX3NpemUtZmlsbCxcbiAgICA+IC4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZV9fc2l6ZS1maXQge1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbn1cblxuLiN7JGJsb2Nzcy1hcnJhbmdlLW5hbWVzcGFjZX1hcnJhbmdlLS1ib3R0b20ge1xuXG4gICAgPiAuI3skYmxvY3NzLWFycmFuZ2UtbmFtZXNwYWNlfWFycmFuZ2VfX3NpemUtZmlsbCxcbiAgICA+IC4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZV9fc2l6ZS1maXQge1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgIH1cbn1cblxuXG5cbi8qIEVxdWFsLXdpZHRoIG1vZGlmaWVyXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBUaGlzIGxheW91dCBhbGdvcml0aG0gd2lsbCBjcmVhdGUgZXF1YWwtd2lkdGggdGFibGUgY2VsbHMsIGlycmVzcGVjdGl2ZSBvZlxuICogdGhlIHdpZHRoIG9mIHRoZWlyIGNvbnRlbnQuXG4gKi9cbi4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZS0tZXF1YWwge1xuICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG5cbiAgICAvKipcbiAgICAgKiBHaXZlIHRoZSBjZWxscyBhbiBlcXVhbCB3aWR0aC5cbiAgICAgKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgb25seSAnQXJyYW5nZS1zaXplRmlsbCcgYmUgdXNlZCBmb3IgZXF1YWwgd2lkdGggY2VsbHMuXG4gICAgICogVGhlaXIgaW5uZXIgaW1hZ2VzIHdpbGwgYXV0b21hdGljYWxseSBiZSByZXNwb25zaXZlLlxuICAgICAqL1xuICAgID4gLiN7JGJsb2Nzcy1hcnJhbmdlLW5hbWVzcGFjZX1hcnJhbmdlX19zaXplLWZpbGwsXG4gICAgPiAuI3skYmxvY3NzLWFycmFuZ2UtbmFtZXNwYWNlfWFycmFuZ2VfX3NpemUtZml0IHtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxufVxuXG5cblxuLyogR3V0dGVyLXNlcGFyYXRpbmcgbW9kaWZpZXJcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4uI3skYmxvY3NzLWFycmFuZ2UtbmFtZXNwYWNlfWFycmFuZ2UtLWd1dHRlciB7XG5cbiAgICA+IC4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZV9fc2l6ZS1maWxsLFxuICAgID4gLiN7JGJsb2Nzcy1hcnJhbmdlLW5hbWVzcGFjZX1hcnJhbmdlX19zaXplLWZpdCB7XG4gICAgICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLWxlZnQsICRibG9jc3MtYXJyYW5nZS1ndXR0ZXIpO1xuXG4gICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cblxuLyogQXJyYW5nZSBjb2xsYXBzZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi4jeyRibG9jc3MtYXJyYW5nZS1uYW1lc3BhY2V9YXJyYW5nZS0tY29sbGFwc2Uge1xuICAgIEBpbmNsdWRlIGFycmFuZ2UtY29sbGFwc2U7XG59XG5cblxuXG4vKiAgUmVzcG9uc2l2ZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qIENvbGxhcHNlZCBhcnJhbmdlIGJhc2VkIG9uIGJyZWFrcG9pbnQgKi9cbkBlYWNoICRzdGF0ZSBpbiAkYmxvY3NzLWJyZWFrcG9pbnQtaGFzLWNvbGxhcHNlZC1hcnJhbmdlIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeSgjeyRzdGF0ZX0pIHtcbiAgICAgICAgLiN7JGJsb2Nzcy1hcnJhbmdlLW5hbWVzcGFjZX1hcnJhbmdlLS1jb2xsYXBzZS0tI3skc3RhdGV9IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFycmFuZ2UtY29sbGFwc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyohIGJsb2Nzcy1ncmlkIHYxLjEuMiB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJEdSSURcbiAgICBGbHVpZCBhbmQgbmVzdGFibGUgZ3JpZCBzeXN0ZW1cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEV4YW1wbGUgdXNhZ2U6XG4gKlxuPGRpdiBjbGFzcz1cImdyaWQgIFtncmlkLS1jZW50ZXJ8Z3JpZC0tcmlnaHR8Z3JpZC0tcmV2fGdyaWQtLW1pZGRsZXxncmlkLS1ib3R0b218Z3JpZC0tbmFycm93fGdyaWQtLXdpZGV8Z3JpZC0tZmx1c2hdXCI+XG4gICAgPGRpdiBjbGFzcz1cImdyaWRfX2NlbGwgIHUtMy0xMiAgdS0xLTEtLXBhbG1cIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZF9fY2VsbCAgdS0zLTEyICB1LTEtMS0tcGFsbVwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJncmlkX19jZWxsICB1LTMtMTIgIHUtMS0xLS1wYWxtXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdyaWRfX2NlbGwgIGdyaWRfX2NlbGwtLWNlbnRlciAgdS0zLTEyICB1LTEtMS0tcGFsbVwiPjwvZGl2PlxuPC9kaXY+XG4gKi9cblxuLyoqXG4gKiBOYW1lc3BhY2luZ1xuICovXG4kYmxvY3NzLWdyaWQtbmFtZXNwYWNlOiAkYmxvY3NzLW5hbWVzcGFjZSAhZGVmYXVsdDtcblxuLyoqXG4gKiBNb2R1bGUgY2FuIGJlIGRpc2FibGVkIGJ5IHN3aXRjaGluZyBgJGJsb2Nzcy11c2UtZ3JpZGAgdG8gYGZhbHNlYFxuICovXG4kYmxvY3NzLXVzZS1ncmlkOiB0cnVlICFkZWZhdWx0O1xuXG4vKipcbiAqIERvbnQndCBtb2RpZnkgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXNcbiAqL1xuJGJsb2Nzcy1ncmlkLWd1dHRlcjogJGJsb2Nzcy1zcGFjZTtcblxuXG4vKipcbiAqIEVuYWJsZS9kaXNhYmxlIG1vZGlmaWVyc1xuICovXG4kYmxvY3NzLWVuYWJsZS1ncmlkLXJldjogZmFsc2UgIWRlZmF1bHQ7XG4kYmxvY3NzLWVuYWJsZS1ncmlkLXJpZ2h0OiBmYWxzZSAhZGVmYXVsdDtcbiRibG9jc3MtZW5hYmxlLWdyaWQtY2VudGVyOiBmYWxzZSAhZGVmYXVsdDtcbiRibG9jc3MtZW5hYmxlLWdyaWQtbWlkZGxlOiBmYWxzZSAhZGVmYXVsdDtcbiRibG9jc3MtZW5hYmxlLWdyaWQtbmFycm93OiBmYWxzZSAhZGVmYXVsdDtcbiRibG9jc3MtZW5hYmxlLWdyaWQtd2lkZTogZmFsc2UgIWRlZmF1bHQ7XG4kYmxvY3NzLWVuYWJsZS1ncmlkLWZsdXNoOiBmYWxzZSAhZGVmYXVsdDtcblxuXG5cbi8qICBHcmlkIENvcmVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AaWYgJGJsb2Nzcy11c2UtZ3JpZCA9PSB0cnVlIHtcbi8qKlxuICogR3JpZCBjb250YWluZXJcbiAqIE11c3Qgb25seSBjb250YWluIGAuZ3JpZGAgb3IgYC5ncmlkX19jZWxsYCBjb21wb25lbnRzIGFzIGNoaWxkcmVuLlxuICpcbiAqIDEuIFJlbW92ZSBpbnRlci11bml0IHdoaXRlc3BhY2UgdGhhdCBhcHBlYXJzIGJldHdlZW4gYGlubGluZS1ibG9ja2AgY2hpbGRcbiAqICAgIGVsZW1lbnRzLlxuICogMi4gQWRqdXN0bWVudCBmb3IgY2hpbGQgZWxlbWVudCBtYXJnaW5zLlxuICogMy4gVXNlIGxpc3RzIGFzIGdyaWRcbiAqIDQuIEVuc3VyZSBjb25zaXN0ZW50IGRlZmF1bHQgYWxpZ25tZW50XG4gKi9cbi4jeyRibG9jc3MtZ3JpZC1uYW1lc3BhY2V9Z3JpZCB7XG4gICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplc3BlZWQ7IC8qIDEgKi9cbiAgICBmb250LXNpemU6IDA7IC8qIDEgKi9cbiAgICBAaW5jbHVkZSByZW0obWFyZ2luLWxlZnQsIC0oJGJsb2Nzcy1ncmlkLWd1dHRlcikpOyAvKiAyICovXG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lOyAvKiAzICovXG4gICAgdGV4dC1hbGlnbjogbGVmdDsgLyogNCAqL1xufVxuXG5cbiAgICAvKipcbiAgICAgKiBHcmlkIGNlbGxzXG4gICAgICogTm8gZXhwbGljaXQgd2lkdGggYnkgZGVmYXVsdC4gQXBwbHkgYC51bml0LXgteWAgY2xhc3Nlcy5cbiAgICAgKlxuICAgICAqIDEuIEZ1bmRhbWVudGFscyBvZiB0aGUgbm9uLWZsb2F0IGdyaWQgbGF5b3V0IG1lY2hhbmlzbS5cbiAgICAgKiAyLiBBcHBseSBncmlkIGd1dHRlci5cbiAgICAgKiAzLiBDb250cm9scyB2ZXJ0aWNhbCBwb3NpdGlvbmluZyBvZiB1bml0cy5cbiAgICAgKiA0LiBLZWVwcyBjb250ZW50IGNvcnJlY3RseSBhbGlnbmVkIHdpdGggdGhlIGdyaWQgZGlyZWN0aW9uLlxuICAgICAqIDUuIFJlc2V0IHRleHQgZGVmYXVsdHMuXG4gICAgICovXG4gICAgLiN7JGJsb2Nzcy1ncmlkLW5hbWVzcGFjZX1ncmlkX19jZWxsIHtcbiAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmctbGVmdCwgJGJsb2Nzcy1ncmlkLWd1dHRlcik7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogMSAqL1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOyAvKiAzICovXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IC8qIDQgKi9cbiAgICAgICAgQGluY2x1ZGUgZm9udC1zaXplKCRibG9jc3MtYmFzZS1mb250LXNpemUsIGZhbHNlKTsgLyogNSAqL1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXI6IGhvcml6b250YWxseSBjZW50ZXIgb25lIHVuaXRcbiAgICAgKiBTZXQgYSBzcGVjaWZpYyB1bml0IHRvIGJlIGhvcml6b250YWxseSBjZW50ZXJlZC4gRG9lc24ndCBhZmZlY3RcbiAgICAgKiBhbnkgb3RoZXIgdW5pdHMuIENhbiBzdGlsbCBjb250YWluIGEgY2hpbGQgYGdyaWRgIG9iamVjdC5cbiAgICAgKi9cbiAgICAuI3skYmxvY3NzLWdyaWQtbmFtZXNwYWNlfWdyaWRfX2NlbGwtLWNlbnRlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG5cblxuQGlmICRibG9jc3MtZW5hYmxlLWdyaWQtcmV2ID09IHRydWUge1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXI6IFJldmVyc2UgZ3JpZCBkaXJlY3Rpb25cbiAgICAgKi9cbiAgICAuI3skYmxvY3NzLWdyaWQtbmFtZXNwYWNlfWdyaWQtLXJldiB7XG4gICAgICAgIGRpcmVjdGlvbjogcnRsO1xuXG4gICAgICAgID4gLiN7JGJsb2Nzcy1ncmlkLW5hbWVzcGFjZX1ncmlkX19jZWxsIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogbHRyO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuQGlmICRibG9jc3MtZW5hYmxlLWdyaWQtcmlnaHQgPT0gdHJ1ZSB7XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZnllcjogR3JpZCBhbGlnbiByaWdodFxuICAgICAqL1xuICAgIC4jeyRibG9jc3MtZ3JpZC1uYW1lc3BhY2V9Z3JpZC0tcmlnaHQge1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB9XG5cbn1cblxuXG5AaWYgJGJsb2Nzcy1lbmFibGUtZ3JpZC1jZW50ZXIgPT0gdHJ1ZSB7XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllcjogaG9yaXpvbnRhbGx5IGNlbnRlciBhbGwgZ3JpZCB1bml0c1xuICAgICAqIEFsbG93cyBmb3IgYXV0b21hdGljIHVuaXQgY2VudGVyaW5nIGlycmVzcGVjdGl2ZSBvZiB0aGUgbnVtYmVyIG9mXG4gICAgICogdW5pdHMgaW4gdGhlIGdyaWQuXG4gICAgICovXG4gICAgLiN7JGJsb2Nzcy1ncmlkLW5hbWVzcGFjZX1ncmlkLS1jZW50ZXIge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAgICAgPiAuI3skYmxvY3NzLWdyaWQtbmFtZXNwYWNlfWdyaWRfX2NlbGwge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbkBpZiAkYmxvY3NzLWVuYWJsZS1ncmlkLW1pZGRsZSA9PSB0cnVlIHtcblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVyOiBhbGlnbiBncmlkIGNlbGxzIHZlcnRpY2FsbHlcbiAgICAgKi9cbiAgICAuI3skYmxvY3NzLWdyaWQtbmFtZXNwYWNlfWdyaWQtLW1pZGRsZSB7XG4gICAgICAgID4gLiN7JGJsb2Nzcy1ncmlkLW5hbWVzcGFjZX1ncmlkX19jZWxsIHtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLiN7JGJsb2Nzcy1ncmlkLW5hbWVzcGFjZX1ncmlkLS1ib3R0b20ge1xuICAgICAgICA+IC4jeyRibG9jc3MtZ3JpZC1uYW1lc3BhY2V9Z3JpZF9fY2VsbCB7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuQGlmICRibG9jc3MtZW5hYmxlLWdyaWQtbmFycm93ID09IHRydWUge1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGdyaWRzIHdpdGggbmFycm93ZXIgZ3V0dGVycy4gRXh0ZW5kcyBgLmdyaWRgLlxuICAgICAqL1xuICAgIC4jeyRibG9jc3MtZ3JpZC1uYW1lc3BhY2V9Z3JpZC0tbmFycm93IHtcbiAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1sZWZ0LCAtKCRibG9jc3MtZ3JpZC1ndXR0ZXIgLyAyKSk7XG5cbiAgICAgICAgPiAuI3skYmxvY3NzLWdyaWQtbmFtZXNwYWNlfWdyaWRfX2NlbGwge1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmctbGVmdCwgKCRibG9jc3MtZ3JpZC1ndXR0ZXIgLyAyKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG5AaWYgJGJsb2Nzcy1lbmFibGUtZ3JpZC13aWRlID09IHRydWUge1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGdyaWRzIHdpdGggd2lkZXIgZ3V0dGVycy4gRXh0ZW5kcyBgLmdyaWRgLlxuICAgICAqL1xuICAgIC4jeyRibG9jc3MtZ3JpZC1uYW1lc3BhY2V9Z3JpZC0td2lkZSB7XG4gICAgICAgIEBpbmNsdWRlIHJlbShtYXJnaW4tbGVmdCwgLSgkYmxvY3NzLWdyaWQtZ3V0dGVyICogMikpO1xuXG4gICAgICAgID4gLiN7JGJsb2Nzcy1ncmlkLW5hbWVzcGFjZX1ncmlkX19jZWxsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLWxlZnQsICgkYmxvY3NzLWdyaWQtZ3V0dGVyICogMikpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuQGlmICRibG9jc3MtZW5hYmxlLWdyaWQtZmx1c2ggPT0gdHJ1ZSB7XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllcjogUmVtb3ZlIGd1dHRlcnMgYmV0d2VlbiBjb2x1bW5zXG4gICAgICovXG4gICAgLiN7JGJsb2Nzcy1ncmlkLW5hbWVzcGFjZX1ncmlkLS1mbHVzaCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuXG4gICAgICAgID4gLiN7JGJsb2Nzcy1ncmlkLW5hbWVzcGFjZX1ncmlkX19jZWxsIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxufSAvLyB1c2UtZ3JpZFxuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyohIGJsb2Nzcy1sYXlvdXQgdjAuMS4xIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL0Jsb2NzcyAqL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkTEFZT1VUXG4gICAgRmx1aWQgYW5kIG5lc3RhYmxlIGxheW91dCBzeXN0ZW0gYmFzZWQgb24gZmxleGJveFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogTmFtZXNwYWNpbmdcbiAqL1xuJGJsb2Nzcy1sYXlvdXQtbmFtZXNwYWNlOiAkYmxvY3NzLW5hbWVzcGFjZSAhZGVmYXVsdDtcbiRibG9jc3MtZGltZW5zaW9ucy1yZXNwb25zaXZlLW1vZGlmaWVyOiAkYmxvY3NzLXJlc3BvbnNpdmUtbW9kaWZpZXIgIWRlZmF1bHQ7XG5cbi8qKlxuICogTW9kdWxlIGNhbiBiZSBkaXNhYmxlZCBieSBzd2l0Y2hpbmcgYCRibG9jc3MtdXNlLWxheW91dGAgdG8gYGZhbHNlYFxuICovXG4kYmxvY3NzLXVzZS1sYXlvdXQ6IHRydWUgIWRlZmF1bHQ7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZ3V0dGVyXG4gKi9cbiRibG9jc3MtbGF5b3V0LWd1dHRlcjogJGJsb2Nzcy1zcGFjZSAhZGVmYXVsdDtcbiRibG9jc3MtbGF5b3V0LWd1dHRlci10aW55OiAkYmxvY3NzLXNwYWNlLXRpbnkgIWRlZmF1bHQ7XG4kYmxvY3NzLWxheW91dC1ndXR0ZXItc21hbGw6ICRibG9jc3Mtc3BhY2Utc21hbGwgIWRlZmF1bHQ7XG4kYmxvY3NzLWxheW91dC1ndXR0ZXItbGFyZ2U6ICRibG9jc3Mtc3BhY2UtbGFyZ2UgIWRlZmF1bHQ7XG4kYmxvY3NzLWxheW91dC1ndXR0ZXItaHVnZTogJGJsb2Nzcy1zcGFjZS1odWdlICFkZWZhdWx0O1xuXG4vKipcbiAqIERlZmluZSB3aGljaCBuYW1lc3BhY2VkIGJyZWFrcG9pbnRzIHlvdSB3b3VsZCBsaWtlIHRvIGdlbmVyYXRlIGZvciBgZml0YCAmIGBmaWxsYC5cbiAqIFRoaXMgaXMgaGFuZHkgaWYgeW91IG9ubHkgbmVlZCBgZml0YCBvbiwgc2F5LCBkZXNrLCBvciB5b3Ugb25seSBuZWVkIGBmaWxsYFxuICogYXQgbW9iaWxlIHNpemVzLiBJdCBhbGxvd3MgeW91IHRvIG9ubHkgY29tcGlsZSBhcyBtdWNoIENTUyBhcyB5b3UgbmVlZC5cbiAqIEFsbCBhcmUgZW1wdHkgYnkgZGVmYXVsdCwgYnV0IHlvdSBjYW4gYWRkIGJyZWFrcG9pbnRzIGF0IHdpbGwuXG4gKlxuICogJGJsb2Nzcy1kaW1lbnNpb25zLWJyZWFrcG9pbnQtaGFzLXg6ICAgICAgICgncGFsbScsICdkZXNrJyk7XG4gKlxuICogTm90ZTogdGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgbXVzdCBleGlzdCBpbiB0aGUgbGlzdCBvZiBgJGJsb2Nzcy1icmVha3BvaW50c2BcbiAqICAgICAgIGluIHRoZSBCbG9jc3MgYmFzZSByZXBvc2l0b3J5XG4gKi9cbiRibG9jc3MtZGltZW5zaW9ucy1icmVha3BvaW50LWhhcy1maXQ6ICgpICFkZWZhdWx0O1xuJGJsb2Nzcy1kaW1lbnNpb25zLWJyZWFrcG9pbnQtaGFzLWZpbGw6ICgpICFkZWZhdWx0O1xuXG5cblxuLyogIE1peGluc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogTW9kaWZpZXI6IE1ha2UgYSB1bml0IHNocmluayB3cmFwIGl0cyBjb250ZW50LlxuICovXG5AbWl4aW4gYmxvY3NzLWxheW91dC1maXQgKCkge1xuICAgIGZsZXgtYmFzaXM6IGF1dG87XG59XG5cblxuLyoqXG4gKiBNb2RpZmllcjogTWFrZSBhIGNlbGwgZmlsbCB0aGUgcmVtYWluaW5nIHNwYWNlLlxuICpcbiAqIDEuIEJlIGV4cGxpY2l0IHRvIHdvcmsgYXJvdW5kIElFMTAgYnVnIHdpdGggc2hvcnRoYW5kIGZsZXhcbiAqIDIuIElFMTAgaWdub3JlcyBwcmV2aW91cyBgZmxleC1iYXNpc2AgdmFsdWUuIFNldHRpbmcgYWdhaW4gaGVyZSBmaXhlc1xuICovXG5AbWl4aW4gYmxvY3NzLWxheW91dC1maWxsICgpIHtcbiAgICBmbGV4OiAxIDEgMCU7IC8qIFsxXSAqL1xuICAgIGZsZXgtYmFzaXM6IDAlOyAvKiBbMl0gKi9cbn1cblxuXG5cbkBpZiAkYmxvY3NzLXVzZS1sYXlvdXQgPT0gdHJ1ZSB7XG5cbi8qICBMYXlvdXQgcm9vdFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogQWxsIGNvbnRlbnQgbXVzdCBiZSBjb250YWluZWQgd2l0aGluIGNoaWxkIGBsYXlvdXRfX2NlbGxgIGVsZW1lbnRzLlxuICpcbiAqIDEuIEFjY291bnQgZm9yIGJyb3dzZXIgZGVmYXVsdHMgb2YgZWxlbWVudHMgdGhhdCBtaWdodCBiZSB0aGUgcm9vdCBub2RlIG9mXG4gKiAgICB0aGUgY29tcG9uZW50LlxuICovXG4uI3skYmxvY3NzLWxheW91dC1uYW1lc3BhY2V9bGF5b3V0IHtcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBbMV0gKi9cbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgIHBhZGRpbmc6IDA7IC8qIFsxXSAqL1xuICAgIG1hcmdpbi1sZWZ0OiAwOyAvKiBbMV0gKi9cbiAgICBsaXN0LXN0eWxlOiBub25lOyAvKiBbMV0gKi9cbn1cblxuXG4vKipcbiAqIE1vZGlmaWVyOiBjZW50ZXIgYWxpZ24gYWxsIGxheW91dCBjZWxsc1xuICovXG4uI3skYmxvY3NzLWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS1hbGlnbi1jZW50ZXIge1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG5cbi8qKlxuICogTW9kaWZpZXI6IHJpZ2h0IGFsaWduIGFsbCBsYXlvdXQgY2VsbHNcbiAqL1xuLiN7JGJsb2Nzcy1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0tYWxpZ24tcmlnaHQge1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG59XG5cblxuLyoqXG4gKiBNb2RpZmllcjogbWlkZGxlLWFsaWduIGxheW91dCBjZWxsc1xuICovXG4uI3skYmxvY3NzLWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS1hbGlnbi1taWRkbGUge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cblxuLyoqXG4gKiBNb2RpZmllcjogYm90dG9tLWFsaWduIGxheW91dCBjZWxsc1xuICovXG4uI3skYmxvY3NzLWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS1hbGlnbi1ib3R0b20ge1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbn1cblxuXG4vKipcbiAqIE1vZGlmaWVyOiBhbGxvdyBjZWxscyB0byBlcXVhbCBkaXN0cmlidXRlIHdpZHRoXG4gKlxuICogMS4gUHJvdmlkZSBhbGwgdmFsdWVzIHRvIGF2b2lkIElFMTAgYnVnIHdpdGggc2hvcnRoYW5kIGZsZXhcbiAqICAgIGh0dHA6Ly9naXQuaW8vdmxsQzdcbiAqXG4gKiAgICBVc2UgYDAlYCB0byBhdm9pZCBidWcgaW4gSUUxMC8xMSB3aXRoIHVuaXRsZXNzIGZsZXggYmFzaXNcbiAqICAgIGh0dHA6Ly9naXQuaW8vdmxsV3hcbiAqL1xuLiN7JGJsb2Nzcy1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0tZml0IHtcbiAgICA+IC4jeyRibG9jc3MtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2NlbGwge1xuICAgICAgICBmbGV4OiAxIDEgMCU7IC8qIFsxXSAqL1xuICAgIH1cbn1cblxuXG4vKipcbiAqIE1vZGlmaWVyOiBhbGwgY2VsbHMgbWF0Y2ggaGVpZ2h0IG9mIHRhbGxlc3QgY2VsbCBpbiBhIHJvd1xuICogMS4gVGhlIGRpcmVjdCBjaGlsZCBvZiB0aGUgZmxleGJveCBtdXN0IGJlIGEgc2luZ2xlIGVsZW1lbnQgd2hlbiB5b3Ugd2FudFxuICogICAgdG8gdXNlIGVxdWFsaGVpZ2h0XG4gKi9cbi4jeyRibG9jc3MtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLWVxdWFsaGVpZ2h0IHtcbiAgICA+IC4jeyRibG9jc3MtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2NlbGwge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICAgID4gKiB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTsgLyogWzFdICovXG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLyoqXG4gKiBNb2RpZmllcjogR3V0dGVyXG4gKi9cbi4jeyRibG9jc3MtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLWd1dHRlciB7XG4gICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1sZWZ0LCAtJGJsb2Nzcy1sYXlvdXQtZ3V0dGVyKTtcblxuICAgID4gLiN7JGJsb2Nzcy1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9fY2VsbCB7XG4gICAgICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLWxlZnQsICRibG9jc3MtbGF5b3V0LWd1dHRlcik7XG4gICAgfVxufVxuXG5cbi8qKlxuICogTW9kaWZpZXI6IFRpbnkgZ3V0dGVyXG4gKi9cbi4jeyRibG9jc3MtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLWd1dHRlci10aW55IHtcbiAgICBAaW5jbHVkZSByZW0obWFyZ2luLWxlZnQsIC0kYmxvY3NzLWxheW91dC1ndXR0ZXItdGlueSk7XG5cbiAgICA+IC4jeyRibG9jc3MtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2NlbGwge1xuICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZy1sZWZ0LCAkYmxvY3NzLWxheW91dC1ndXR0ZXItdGlueSk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogTW9kaWZpZXI6IFNtYWxsIGd1dHRlclxuICovXG4uI3skYmxvY3NzLWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS1ndXR0ZXItc21hbGwge1xuICAgIEBpbmNsdWRlIHJlbShtYXJnaW4tbGVmdCwgLSRibG9jc3MtbGF5b3V0LWd1dHRlci1zbWFsbCk7XG5cbiAgICA+IC4jeyRibG9jc3MtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2NlbGwge1xuICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZy1sZWZ0LCAkYmxvY3NzLWxheW91dC1ndXR0ZXItc21hbGwpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBNb2RpZmllcjogTGFyZ2UgZ3V0dGVyXG4gKi9cbi4jeyRibG9jc3MtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLWd1dHRlci1sYXJnZSB7XG4gICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1sZWZ0LCAtJGJsb2Nzcy1sYXlvdXQtZ3V0dGVyLWxhcmdlKTtcblxuICAgID4gLiN7JGJsb2Nzcy1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9fY2VsbCB7XG4gICAgICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLWxlZnQsICRibG9jc3MtbGF5b3V0LWd1dHRlci1sYXJnZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIE1vZGlmaWVyOiBIdWdlIGd1dHRlclxuICovXG4uI3skYmxvY3NzLWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS1ndXR0ZXItaHVnZSB7XG4gICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1sZWZ0LCAtJGJsb2Nzcy1sYXlvdXQtZ3V0dGVyLWh1Z2UpO1xuXG4gICAgPiAuI3skYmxvY3NzLWxheW91dC1uYW1lc3BhY2V9bGF5b3V0X19jZWxsIHtcbiAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmctbGVmdCwgJGJsb2Nzcy1sYXlvdXQtZ3V0dGVyLWh1Z2UpO1xuICAgIH1cbn1cblxuXG5cbi8qICBMYXlvdXQgY2VsbFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogTm8gZXhwbGljaXQgd2lkdGggYnkgZGVmYXVsdC4gUmVseSBvbiBjb21iaW5pbmcgYGxheW91dF9fY2VsbGAgd2l0aCBhIGRpbWVuc2lvblxuICogdXRpbGl0eSBvciBhIGNvbXBvbmVudCBjbGFzcyB0aGF0IGV4dGVuZHMgJ2xheW91dCcuXG4gKlxuICogMS4gU2V0IGZsZXggaXRlbXMgdG8gZnVsbCB3aWR0aCBieSBkZWZhdWx0XG4gKiAyLiBGaXggaXNzdWUgd2hlcmUgZWxlbWVudHMgd2l0aCBvdmVyZmxvdyBleHRlbmQgcGFzdCB0aGVcbiAqICAgIGBsYXlvdXRfX2NlbGxgIGNvbnRhaW5lclxuICovXG4uI3skYmxvY3NzLWxheW91dC1uYW1lc3BhY2V9bGF5b3V0X19jZWxsIHtcbiAgICBmbGV4LWJhc2lzOiAxMDAlOyAvKiBbMV0gKi9cbiAgICBtaW4td2lkdGg6IDA7IC8qIFsyXSAqL1xufVxuXG5cbi8qKlxuICogTW9kaWZpZXI6IGhvcml6b250YWxseSBjZW50ZXIgb25lIHVuaXRcbiAqIFNldCBhIHNwZWNpZmljIHVuaXQgdG8gYmUgaG9yaXpvbnRhbGx5IGNlbnRlcmVkLiBEb2Vzbid0IGFmZmVjdFxuICogYW55IG90aGVyIHVuaXRzLiBDYW4gc3RpbGwgY29udGFpbiBhIGNoaWxkIGBsYXlvdXRgIG9iamVjdC5cbiAqL1xuLiN7JGJsb2Nzcy1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9fY2VsbC0tY2VudGVyIHtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG5cblxuLyoqXG4gKiBNb2RpZmllcjogTWFrZSBhIGNlbGwgc2hyaW5rIHdyYXAgaXRzIGNvbnRlbnQuXG4gKi9cbi4jeyRibG9jc3MtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2NlbGwtLWZpdCB7XG4gICAgQGluY2x1ZGUgYmxvY3NzLWxheW91dC1maXQ7XG59XG5cblxuLyoqXG4gKiBNb2RpZmllcjogTWFrZSBhIGNlbGwgZmlsbCB0aGUgcmVtYWluaW5nIHNwYWNlLlxuICovXG4uI3skYmxvY3NzLWxheW91dC1uYW1lc3BhY2V9bGF5b3V0X19jZWxsLS1maWxsIHtcbiAgICBAaW5jbHVkZSBibG9jc3MtbGF5b3V0LWZpbGw7XG59XG5cblxuXG4vKiAgUmVzcG9uc2l2ZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBlYWNoICRuYW1lIGluICRibG9jc3MtZGltZW5zaW9ucy1icmVha3BvaW50LWhhcy1maXQge1xuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KCRuYW1lKSB7XG4gICAgICAgIC4jeyRibG9jc3MtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2NlbGwtLWZpdCN7JGJsb2Nzcy1kaW1lbnNpb25zLXJlc3BvbnNpdmUtbW9kaWZpZXJ9I3skbmFtZX0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYmxvY3NzLWxheW91dC1maXQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBlYWNoICRuYW1lIGluICRibG9jc3MtZGltZW5zaW9ucy1icmVha3BvaW50LWhhcy1maWxsIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeSgkbmFtZSkge1xuICAgICAgICAuI3skYmxvY3NzLWxheW91dC1uYW1lc3BhY2V9bGF5b3V0X19jZWxsLS1maWxsI3skYmxvY3NzLWRpbWVuc2lvbnMtcmVzcG9uc2l2ZS1tb2RpZmllcn0jeyRuYW1lfSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBibG9jc3MtbGF5b3V0LWZpbGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuXG59IC8vIHVzZS1sYXlvdXRcbiIsIi8qISBibG9jc3MtZGltZW5zaW9ucyB2MS4yLjEgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vQmxvY3NzICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRESU1FTlNJT05TXG4gICAgU2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0LiBUaGVzZSBhcmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyXG4gICAgb2JqZWN0cyBhbmQgYWJzdHJhY3Rpb25zIGZvdW5kIGluIGJsb2NzcywgbW9zdCBjb21tb25seSB0aGUgZ3JpZCBzeXN0ZW1cbiAgICBhbmQgdGhlIGFycmFuZ2UgbW9kdWxlLlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qICBWYXJpYWJsZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIE5hbWVzcGFjaW5nXG4gKi9cbiRibG9jc3MtZGltZW5zaW9ucy1uYW1lc3BhY2U6ICRibG9jc3MtbmFtZXNwYWNlICFkZWZhdWx0O1xuJGJsb2Nzcy1kaW1lbnNpb25zLXJlc3BvbnNpdmUtbW9kaWZpZXI6ICRibG9jc3MtcmVzcG9uc2l2ZS1tb2RpZmllciAhZGVmYXVsdDtcblxuXG4vKipcbiAqIEZsYWdzIHRvIGVuYWJsZSBvciBkaXNhYmxlIGRpbWVuc2lvbiB0cmFpdHNcbiAqL1xuJGJsb2Nzcy1kaW1lbnNpb25zLXVzZS11bml0czogdHJ1ZSAhZGVmYXVsdDtcbiRibG9jc3MtZGltZW5zaW9ucy11c2UtcHVzaDogZmFsc2UgIWRlZmF1bHQ7XG4kYmxvY3NzLWRpbWVuc2lvbnMtdXNlLXB1bGw6IGZhbHNlICFkZWZhdWx0O1xuJGJsb2Nzcy1kaW1lbnNpb25zLXVzZS1mbGV4Ym94OiAkYmxvY3NzLXVzZS1mbGV4Ym94ICFkZWZhdWx0O1xuXG4vKipcbiAqIERpdmlzaW9ucywgbWFrZXMgaXQgZWFzeSB0byBjcmVhdGUgc2V2ZXJhbCBwcm9wb3J0aW9uYWxcbiAqIGRpbWVuc2lvbnMgKGUuZy4sIGJvdGggYSAyLXBhcnQgYW5kIGEgMTItcGFydCBncmlkKS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgYDIgNCA2IDEyYCB3aWxsIGxldCB5b3UgdXNlIHRoZSB1bml0LTEtMiwgdW5pdC0yLTQsXG4gKiB1bml0LTMtNiwgYW5kIHVuaXQtNi0xMiBjbGFzc2VzIHRvIHNwZWNpZnkgdGhhdCBhbiBlbGVtZW50IHNob3VsZFxuICogdGFrZSB1cCA1MCUgb2YgaXRzIGNvbnRhaW5lci5cbiAqL1xuJGJsb2Nzcy1kaW1lbnNpb25zLWRpdmlzaW9uczogMTIgIWRlZmF1bHQ7XG5cbi8qKlxuICogRGVmaW5lIHdoaWNoIG5hbWVzcGFjZWQgYnJlYWtwb2ludHMgeW91IHdvdWxkIGxpa2UgdG8gZ2VuZXJhdGUgZm9yIGVhY2hcbiAqIG9mIHRoZSBkaW1lbnNpb25zLiBUaGlzIGlzIGhhbmR5IGlmIHlvdSBvbmx5IG5lZWQgcHVzaCBvbiwgc2F5LFxuICogZGVzaywgb3IgeW91IG9ubHkgbmVlZCBhIG5ldyB1bml0IGJyZWFrcG9pbnQgYXQgbW9iaWxlIHNpemVzLiBJdCBhbGxvd3NcbiAqIHlvdSB0byBvbmx5IGNvbXBpbGUgYXMgbXVjaCBDU1MgYXMgeW91IG5lZWQuIEFsbCBhcmUgZW1wdHkgYnlcbiAqIGRlZmF1bHQsIGJ1dCB5b3UgY2FuIGFkZCBicmVha3BvaW50cyBhdCB3aWxsLlxuICpcbiAqICRibG9jc3MtYnJlYWtwb2ludC1oYXMteDogICAgICAgKCdwYWxtJywgJ2Rlc2snKTtcbiAqXG4gKiBOb3RlOiB0aGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBtdXN0IGV4aXN0IGluIHRoZSBsaXN0IG9mIGAkYnJlYWtwb2ludHNgXG4gKiAgICAgICBpbiB0aGUgQmxvY3NzIGJhc2UgcmVwb3NpdG9yeVxuICovXG4kYmxvY3NzLWRpbWVuc2lvbnMtYnJlYWtwb2ludC1oYXMtdW5pdHM6ICgpICFkZWZhdWx0O1xuJGJsb2Nzcy1kaW1lbnNpb25zLWJyZWFrcG9pbnQtaGFzLXB1c2g6ICgpICFkZWZhdWx0O1xuJGJsb2Nzcy1kaW1lbnNpb25zLWJyZWFrcG9pbnQtaGFzLXB1bGw6ICgpICFkZWZhdWx0O1xuXG4vKipcbiAqIFlvdSBjYW4gcmVuYW1lIHRoZSBkaW1lbnNpb24gcHJlZml4ZXMgdG8geW91ciBsaWtpbmdcbiAqL1xuJGJsb2Nzcy1kaW1lbnNpb25zLW5hbWUtdW5pdHM6IHVuaXQgIWRlZmF1bHQ7XG4kYmxvY3NzLWRpbWVuc2lvbnMtbmFtZS1wdXNoOiBwdXNoICFkZWZhdWx0O1xuJGJsb2Nzcy1kaW1lbnNpb25zLW5hbWUtcHVsbDogcHVsbCAhZGVmYXVsdDtcblxuXG5cbi8qICBNaXhpbnMgJiBmdW5jdGlvbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEZpbmQgdGhlIGdyZWF0ZXN0IGNvbW1vbiBmYWN0b3Igb2YgdHdvIGludGVnZXJzXG4gKi9cbkBmdW5jdGlvbiBnY2YoJGEsICRiKSB7XG4gICAgQGlmICRiID09IDAgeyBAcmV0dXJuICRhOyB9XG4gICAgQGVsc2UgeyBAcmV0dXJuIGdjZigkYiwgJGEgJSAkYik7IH1cbn1cblxuXG5AZnVuY3Rpb24gY29udGFpbnMoJGxpc3QsICR2YWx1ZSkge1xuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGEgbGlzdCBjb250YWlucyBhIHZhbHVlXG4gICAgICovXG4gICAgQGlmIHR5cGUtb2YoJGxpc3QpID09IGxpc3QgeyBAcmV0dXJuIG5vdCBub3QgaW5kZXgoJGxpc3QsICR2YWx1ZSk7IH1cbiAgICBAZWxzZSB7IEByZXR1cm4gJGxpc3QgPT0gJHZhbHVlOyB9XG59XG5cbi8qKlxuICogRmx1aWQgdW5pdHNcbiAqIFVTQUdFOiBwcm92aWRlIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgaW50ZWdlcnMsIGVhY2ggb2Ygd2hpY2hcbiAqIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBwYXJ0cyB0aGF0IG1ha2UgdXAgYSB1bml0IGNvbXBvbmVudC5cbiAqIE9wdGlvbmFsbHkgcHJvdmlkZSBhIG1vZGlmaWVyIHN1ZmZpeCB0aGF0IGNhbiBiZSB1c2VkIHRvIGFkanVzdFxuICogZ3JpZHMgaW4gZGlmZmVyZW50IGNvbnRleHRzIChlLmcuIHZpZXdwb3J0IGRpbWVuc2lvbnMpLlxuICovXG5AbWl4aW4gZGltZW5zaW9ucy1idWlsZCgkdW5pdHMsICRwcmVmaXg6ICRibG9jc3MtZGltZW5zaW9ucy1uYW1lLXVuaXRzLCAkbW9kaWZpZXI6ICcnKSB7XG5cbiAgICAvKipcbiAgICAgKiBQcm9wb3J0aW9uYWwgdW5pdHNcbiAgICAgKiBTcGVjaWZ5IHRoZSBwcm9wb3J0aW9uYWwgd2lkdGggb2YgYW4gb2JqZWN0LlxuICAgICAqIFByaW1hcmlseSBmb3IsIGJ1dCBub3QgbGltaXRlZCB0bywgdXNlIHdpdGggYC5ncmlkX19jZWxsYCBjb21wb25lbnRzLlxuICAgICAqIEludGVudGlvbmFsIHJlZHVuZGFuY3kgYnVpbGQgaW50byBlYWNoIHNldCBvZiB1bml0IGNsYXNzZXMuXG4gICAgICovXG4gICAgQGVhY2ggJG4gaW4gJHVuaXRzIHtcbiAgICAgICAgLyogQXZvaWQgY3JlYXRpbmcgcnVsZXMgbGlrZSAnLnVuaXQtMTItMTIge30nJyAqL1xuICAgICAgICAkeDogJG4gLSAxO1xuXG4gICAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJHgge1xuICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB2YXJpYWJsZXMgKi9cbiAgICAgICAgICAgICRpLXI6ICgpO1xuICAgICAgICAgICAgJG4tcjogKCk7XG5cbiAgICAgICAgICAgIC8qIEZpbmQgdGhlIGdyZWF0ZXN0IGNvbW1vbiBmYWN0b3IgKi9cbiAgICAgICAgICAgICRnOiBnY2YoJGksICRuKTtcblxuICAgICAgICAgICAgQGlmICRnID4gMSB7XG4gICAgICAgICAgICAgICAgLyogUmVkdWNlZCB2YWx1ZSBvZiAkaSAqL1xuICAgICAgICAgICAgICAgICRpLXI6ICRpLyRnO1xuICAgICAgICAgICAgICAgIC8qIFJlZHVjZWQgdmFsdWUgb2YgJG4gKi9cbiAgICAgICAgICAgICAgICAkbi1yOiAkbi8kZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDaGVjayBpZiB0aGUgcmVkdWNlZCB2YWx1ZSBvZiAkbiB3YXMgYWxzbyBzdXBwbGllZCBpbiB0aGVcbiAgICAgICAgICAgICAqIGxpc3Qgb2YgdW5pdHMgdG8gYmUgYnVpbHRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgJGNhbnJlZHVjZTogY29udGFpbnMoJHVuaXRzLCAkbi1yKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDcmVhdGUgdW5pdHMgYmFzZWQgb24gZnJhY3Rpb25zXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC4jeyRibG9jc3MtZGltZW5zaW9ucy1uYW1lc3BhY2V9I3skcHJlZml4fS0jeyRpfS0jeyRufSN7JG1vZGlmaWVyfSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgdGhpcyB1bml0IGNhbiBiZSByZWR1Y2VkIHRoZW4gZXh0ZW5kIHRoZSBwcmV2aW91cyBydWxlXG4gICAgICAgICAgICAgICAgICogMS4gVXNlIGBmbGV4LWJhc2lzOiBhdXRvYCB3aXRoIGEgd2lkdGggdG8gYXZvaWQgYm94LXNpemluZyBidWcgaW4gSUUxMC8xMVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIEBpZiAkaS1yIGFuZCAkY2FucmVkdWNlIHtcbiAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAuI3skYmxvY3NzLWRpbWVuc2lvbnMtbmFtZXNwYWNlfSN7JHByZWZpeH0tI3skaS1yfS0jeyRuLXJ9I3skbW9kaWZpZXJ9O1xuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBAaWYgJHByZWZpeCA9PSAkYmxvY3NzLWRpbWVuc2lvbnMtbmFtZS11bml0cyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgJGJsb2Nzcy11c2UtZmxleGJveCA9PSB0cnVlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWJhc2lzOiBhdXRvICFpbXBvcnRhbnQ7IC8qIFsxXSAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHBlcmNlbnRhZ2UoJGkgLyAkbikgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAkcHJlZml4ID09ICRibG9jc3MtZGltZW5zaW9ucy1uYW1lLXB1c2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogcGVyY2VudGFnZSgkaSAvICRuKSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmICRwcmVmaXggPT0gJGJsb2Nzcy1kaW1lbnNpb25zLW5hbWUtcHVsbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogcGVyY2VudGFnZSgkaSAvICRuKSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFJlc2V0IGRpbWVuc2lvbnNcbiAgICAgKiAxLiBVc2UgYGZsZXgtYmFzaXM6IGF1dG9gIHdpdGggYSB3aWR0aCB0byBhdm9pZCBib3gtc2l6aW5nIGJ1ZyBpbiBJRTEwLzExXG4gICAgICovXG4gICAgQGlmICRwcmVmaXggPT0gJGJsb2Nzcy1kaW1lbnNpb25zLW5hbWUtdW5pdHMge1xuICAgICAgICAuI3skYmxvY3NzLWRpbWVuc2lvbnMtbmFtZXNwYWNlfSN7JHByZWZpeH0tMS0xI3skbW9kaWZpZXJ9IHtcbiAgICAgICAgICAgIEBpZiAkYmxvY3NzLXVzZS1mbGV4Ym94ID09IHRydWUge1xuICAgICAgICAgICAgICAgIGZsZXgtYmFzaXM6IGF1dG8gIWltcG9ydGFudDsgLyogWzFdICovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIC4jeyRibG9jc3MtZGltZW5zaW9ucy1uYW1lc3BhY2V9I3skcHJlZml4fS1hdXRvI3skbW9kaWZpZXJ9IHtcbiAgICAgICAgICAgIEBpZiAkYmxvY3NzLXVzZS1mbGV4Ym94ID09IHRydWUge1xuICAgICAgICAgICAgICAgIGZsZXgtYmFzaXM6IGF1dG8gIWltcG9ydGFudDsgLyogWzFdICovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkcHJlZml4ID09ICRibG9jc3MtZGltZW5zaW9ucy1uYW1lLXB1c2gge1xuICAgICAgICAuI3skYmxvY3NzLWRpbWVuc2lvbnMtbmFtZXNwYWNlfSN7JHByZWZpeH0tMC0wI3skbW9kaWZpZXJ9IHtcbiAgICAgICAgICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJHByZWZpeCA9PSAkYmxvY3NzLWRpbWVuc2lvbnMtbmFtZS1wdWxsIHtcbiAgICAgICAgLiN7JGJsb2Nzcy1kaW1lbnNpb25zLW5hbWVzcGFjZX0jeyRwcmVmaXh9LTAtMCN7JG1vZGlmaWVyfSB7XG4gICAgICAgICAgICByaWdodDogMCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cblxuLyogIERpbWVuc2lvbnMgY29yZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogU2V0dXAgZ2VuZXJpYyB3aWR0aHNcbiAqL1xuQGlmICRibG9jc3MtZGltZW5zaW9ucy11c2UtdW5pdHMgPT0gdHJ1ZSB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1idWlsZCgkYmxvY3NzLWRpbWVuc2lvbnMtZGl2aXNpb25zKTtcbn1cblxuXG4vKipcbiAgKiBTZXR1cCBnZW5lcmljIHB1c2hcbiAgKi9cbkBpZiAkYmxvY3NzLWRpbWVuc2lvbnMtdXNlLXB1c2ggPT0gdHJ1ZSB7XG4gICAgW2NsYXNzKj1cIiN7JGJsb2Nzcy1kaW1lbnNpb25zLW5hbWVzcGFjZX0jeyRibG9jc3MtZGltZW5zaW9ucy1uYW1lLXB1c2h9LVwiXSB7XG4gICAgICAgIHBvc2l0aW9uOnJlbGF0aXZlO1xuICAgIH1cbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLWJ1aWxkKCRibG9jc3MtZGltZW5zaW9ucy1kaXZpc2lvbnMsICRibG9jc3MtZGltZW5zaW9ucy1uYW1lLXB1c2gpO1xufVxuXG5cbi8qKlxuICAqIFNldHVwIGdlbmVyaWMgcHVsbFxuICAqL1xuQGlmICRibG9jc3MtZGltZW5zaW9ucy11c2UtcHVsbCA9PSB0cnVlIHtcbiAgICBbY2xhc3MqPVwiI3skYmxvY3NzLWRpbWVuc2lvbnMtbmFtZXNwYWNlfSN7JGJsb2Nzcy1kaW1lbnNpb25zLW5hbWUtcHVsbH0tXCJdIHtcbiAgICAgICAgcG9zaXRpb246cmVsYXRpdmU7XG4gICAgfVxuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtYnVpbGQoJGJsb2Nzcy1kaW1lbnNpb25zLWRpdmlzaW9ucywgJGJsb2Nzcy1kaW1lbnNpb25zLW5hbWUtcHVsbCk7XG59XG5cblxuXG4vKiAgUmVzcG9uc2l2ZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBpZiAkYmxvY3NzLWRpbWVuc2lvbnMtdXNlLXVuaXRzID09IHRydWUge1xuICAgIEBlYWNoICRuYW1lIGluICRibG9jc3MtZGltZW5zaW9ucy1icmVha3BvaW50LWhhcy11bml0cyB7XG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KCRuYW1lKSB7XG4gICAgICAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtYnVpbGQoJGJsb2Nzcy1kaW1lbnNpb25zLWRpdmlzaW9ucywgJGJsb2Nzcy1kaW1lbnNpb25zLW5hbWUtdW5pdHMsICcjeyRibG9jc3MtZGltZW5zaW9ucy1yZXNwb25zaXZlLW1vZGlmaWVyfSN7JG5hbWV9Jyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBpZiAkYmxvY3NzLWRpbWVuc2lvbnMtdXNlLXB1c2ggPT0gdHJ1ZSB7XG4gICAgQGVhY2ggJG5hbWUgaW4gJGJsb2Nzcy1kaW1lbnNpb25zLWJyZWFrcG9pbnQtaGFzLXB1c2gge1xuICAgICAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeSgkbmFtZSkge1xuICAgICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLWJ1aWxkKCRibG9jc3MtZGltZW5zaW9ucy1kaXZpc2lvbnMsICRibG9jc3MtZGltZW5zaW9ucy1uYW1lLXB1c2gsICcjeyRibG9jc3MtZGltZW5zaW9ucy1yZXNwb25zaXZlLW1vZGlmaWVyfSN7JG5hbWV9Jyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBpZiAkYmxvY3NzLWRpbWVuc2lvbnMtdXNlLXB1bGwgPT0gdHJ1ZSB7XG4gICAgQGVhY2ggJG5hbWUgaW4gJGJsb2Nzcy1kaW1lbnNpb25zLWJyZWFrcG9pbnQtaGFzLXB1bGwge1xuICAgICAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeSgkbmFtZSkge1xuICAgICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLWJ1aWxkKCRibG9jc3MtZGltZW5zaW9ucy1kaXZpc2lvbnMsICRibG9jc3MtZGltZW5zaW9ucy1uYW1lLXB1bGwsICcjeyRibG9jc3MtZGltZW5zaW9ucy1yZXNwb25zaXZlLW1vZGlmaWVyfSN7JG5hbWV9Jyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKiEgYmxvY3NzLXR5cG9ncmFwaHkgdjEuMC4xIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL0Jsb2NzcyAqL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICBUWVBPR1JBUEhZXG4gICAgUHJhZ21hdGljICYgcHJhY3RpY2FsIGZvbnQgc2l6aW5nXG4gICAgQXMgcGVyOiBodHRwOi8vY3Nzd2l6YXJkcnkuY29tLzIwMTIvMDIvcHJhZ21hdGljLXByYWN0aWNhbC1mb250LXNpemluZy1pbi1jc3MvXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogIFZhcmlhYmxlc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogTW9kdWxlIGNhbiBiZSBkaXNhYmxlZCBieSBzd2l0Y2hpbmcgYCRibG9jc3MtdXNlLXR5cG9ncmFwaHlgIHRvIGBmYWxzZWBcbiAqL1xuJGJsb2Nzcy11c2UtdHlwb2dyYXBoeTogdHJ1ZSAhZGVmYXVsdDtcblxuXG4vKipcbiAqIE5hbWVzcGFjaW5nXG4gKi9cbiRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2U6ICRibG9jc3MtbmFtZXNwYWNlICFkZWZhdWx0O1xuXG5cbi8qKlxuICogU2l6ZXMgKGluIHBpeGVscylcbiAqL1xuJGJsb2Nzcy1naWdhOiA5NnB4ICFkZWZhdWx0O1xuJGJsb2Nzcy1tZWdhOiA3MnB4ICFkZWZhdWx0O1xuJGJsb2Nzcy1raWxvOiA0OHB4ICFkZWZhdWx0O1xuXG4kYmxvY3NzLWFscGhhOiAzNnB4ICFkZWZhdWx0O1xuJGJsb2Nzcy1iZXRhOiAzMnB4ICFkZWZhdWx0O1xuJGJsb2Nzcy1nYW1tYTogMjhweCAhZGVmYXVsdDtcbiRibG9jc3MtZGVsdGE6IDI0cHggIWRlZmF1bHQ7XG4kYmxvY3NzLWVwc2lsb246IDIwcHggIWRlZmF1bHQ7XG4kYmxvY3NzLXpldGE6IDE4cHggIWRlZmF1bHQ7XG5cbiRibG9jc3Mtbm9ybWFsaXM6ICRibG9jc3MtYmFzZS1mb250LXNpemUgIWRlZmF1bHQ7XG5cbiRibG9jc3MtbWlsbGk6IDE0cHggIWRlZmF1bHQ7XG4kYmxvY3NzLW1pY3JvOiAxMnB4ICFkZWZhdWx0O1xuXG5cblxuLyogIE1vZHVsZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBpZiAkYmxvY3NzLXVzZS10eXBvZ3JhcGh5ID09IHRydWV7XG5cbi8qICBTaXplc1xuICAgIEFwcGx5IHZhcmlvdXMgZm9udCBzaXplcyBieSBjbGFzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9Z2lnYSB7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKCRibG9jc3MtZ2lnYSk7XG59XG4uI3skYmxvY3NzLXR5cG9ncmFwaHktbmFtZXNwYWNlfW1lZ2Ege1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLW1lZ2EpO1xufVxuLiN7JGJsb2Nzcy10eXBvZ3JhcGh5LW5hbWVzcGFjZX1raWxvIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGJsb2Nzcy1raWxvKTtcbn1cbi4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9YWxwaGEge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLWFscGhhKTtcbn1cbi4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9YmV0YSB7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKCRibG9jc3MtYmV0YSk7XG59XG4uI3skYmxvY3NzLXR5cG9ncmFwaHktbmFtZXNwYWNlfWdhbW1hIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGJsb2Nzcy1nYW1tYSk7XG59XG4uI3skYmxvY3NzLXR5cG9ncmFwaHktbmFtZXNwYWNlfWRlbHRhIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGJsb2Nzcy1kZWx0YSk7XG59XG4uI3skYmxvY3NzLXR5cG9ncmFwaHktbmFtZXNwYWNlfWVwc2lsb24ge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLWVwc2lsb24pO1xufVxuLiN7JGJsb2Nzcy10eXBvZ3JhcGh5LW5hbWVzcGFjZX16ZXRhIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGJsb2Nzcy16ZXRhKTtcbn1cbi4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9bm9ybWFsaXMge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLW5vcm1hbGlzKTtcbn1cbi4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9bWlsbGkge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLW1pbGxpKTtcbn1cbi4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9bWljcm8ge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLW1pY3JvKTtcbn1cblxuXG5cbi8qICBIZWFkaW5nc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmgxIHtcbiAgICBAZXh0ZW5kIC4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9YWxwaGE7XG59XG5oMiB7XG4gICAgQGV4dGVuZCAuI3skYmxvY3NzLXR5cG9ncmFwaHktbmFtZXNwYWNlfWJldGE7XG59XG5oMyB7XG4gICAgQGV4dGVuZCAuI3skYmxvY3NzLXR5cG9ncmFwaHktbmFtZXNwYWNlfWdhbW1hO1xufVxuaDQge1xuICAgIEBleHRlbmQgLiN7JGJsb2Nzcy10eXBvZ3JhcGh5LW5hbWVzcGFjZX1kZWx0YTtcbn1cbmg1IHtcbiAgICBAZXh0ZW5kIC4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9ZXBzaWxvbjtcbn1cbmg2IHtcbiAgICBAZXh0ZW5kIC4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9emV0YTtcbn1cblxuXG4vKipcbiAqIERvdWJsZSBzdHJhbmRlZCBoZWFkaW5nIGhpZXJhcmNoeVxuICovXG4uI3skYmxvY3NzLXR5cG9ncmFwaHktbmFtZXNwYWNlfWgxIHtcbiAgICBAZXh0ZW5kIGgxO1xufVxuLiN7JGJsb2Nzcy10eXBvZ3JhcGh5LW5hbWVzcGFjZX1oMiB7XG4gICAgQGV4dGVuZCBoMjtcbn1cbi4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9aDMge1xuICAgIEBleHRlbmQgaDM7XG59XG4uI3skYmxvY3NzLXR5cG9ncmFwaHktbmFtZXNwYWNlfWg0IHtcbiAgICBAZXh0ZW5kIGg0O1xufVxuLiN7JGJsb2Nzcy10eXBvZ3JhcGh5LW5hbWVzcGFjZX1oNSB7XG4gICAgQGV4dGVuZCBoNTtcbn1cbi4jeyRibG9jc3MtdHlwb2dyYXBoeS1uYW1lc3BhY2V9aDYge1xuICAgIEBleHRlbmQgaDY7XG59XG5cblxuLyoqXG4gKiBIZWFkaW5nIGdyb3VwcyBhbmQgZ2VuZXJpYyBhbnktaGVhZGluZyBjbGFzcy5cbiAqIFRvIHRhcmdldCBhbnkgaGVhZGluZyBvZiBhbnkgbGV2ZWwgc2ltcGx5IGFwcGx5IGEgY2xhc3Mgb2YgYC5oTmBcbiAqIFNhbXBsZSBtYXJrdXA6XG48ZGl2IGNsYXNzPVwiaGdyb3VwXCI+XG4gICAgPGgxIGNsYXNzPVwiaE5cIj48L2gxPlxuICAgIDxoMiBjbGFzcz1cImhOXCI+PC9oMj5cbjwvaGdyb3VwPlxuICovXG5oZ3JvdXAsXG4uI3skYmxvY3NzLXR5cG9ncmFwaHktbmFtZXNwYWNlfWhncm91cCB7XG4gICAgLiN7JGJsb2Nzcy10eXBvZ3JhcGh5LW5hbWVzcGFjZX1oTiB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxufVxuXG59IC8vIEBlbmRpZiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRDT0xPUlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qIENvbG9yIGZ1bmN0aW9uXG4gICBVc2luZyBjb2xvcnMgaW4gY3NzIGV4YW1wbGU6XG4gICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihicmFuZCk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuQGZ1bmN0aW9uIGNvbG9yKCRrZXkpIHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJGNvbG9ycywgJGtleSkge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQoJGNvbG9ycywgJGtleSk7XG4gICAgfVxuXG4gICAgQGVycm9yIFwiVW5rbm93biBgI3ska2V5fWAgaW4gJGNvbG9ycy5cIjtcbiAgICBAcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQmFja2dyb3VuZHMgJiBjb2xvcnNcbiAqL1xuQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJGNvbG9yc3tcbiAgICAuYmctLSN7JGNvbG9yfSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR2YWx1ZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAuY29sb3ItLSN7JGNvbG9yfSB7XG4gICAgICAgIGNvbG9yOiAkdmFsdWUgIWltcG9ydGFudDtcbiAgICB9XG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkRk9OVFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRDT05URU5UU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKlxuICAgIENPTlRFTlRTLi4uLi4uLi4uLi4uLi4uLllvdSdyZSByZWFkaW5nIGl0LCBMT0xcbiAgICBNT0RVTEUuLi4uLi4uLi4uLi4uLi4uLi5JbmNsdWRlcyBiYXNlIG1vZHVsZSAmIHN1Ym1vZHVsZXNcbiAgICBTVEFURS4uLi4uLi4uLi4uLi4uLi4uLi5TdGF0ZXMgdGhlIG1vZHVsZSBjYW4gYmUgaW5cbiAgICBUSEVNRS4uLi4uLi4uLi4uLi4uLi4uLi5UaGVtaW5nIG9mIHRoZSBtb2R1bGVcbiAgICAqL1xuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRNT0RVTEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRTVEFURVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKiBNZWRpYSBRdWVyaWVzXG4gICAgICAgVGhlIGRlZmF1bHQgbWVkaWEgcXVlcmllcyBzaGlwcGVkIHdpdGggQmxvY3NzOlxuICAgICAgIFVuY29tbWVudCB0aGUgb25lcyB5b3UgbmVlZFxuICAgIFxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlc2std2lkZSBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShndC1kZXNrKXt9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogRGVzayBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShkZXNrKXt9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUG9ydGFibGUgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkobHQtZGVzayl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExhcCBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShsYXApe31cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMYXB1cCBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShndC1wYWxtKXt9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUGFsbSBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShwYWxtKXt9XG5cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJFRIRU1FXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICBGT1JNXG4gICAgSW5wdXRzIGFuZCBsYWJlbHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiAgVmFyaWFibGVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXG5cbi8qICBDb21wb25lbnRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLmZvcm1fX2xhYmVse1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAuZm9ybV9faW5wdXR7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRvcDogLTFweDtcbiAgICAgICAgYmFja2dyb3VuZDogY29sb3IoYmxhbmspIG5vLXJlcGVhdCByaWdodCAjeyRibG9jc3Mtc3BhY2UtaGFsZn0gY2VudGVyO1xuICAgICAgICBvdXRsaW5lOiAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvcihiYXNlLW1lZCk7XG4gICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuMTc1cyAkdHJhbnNpdGlvbjtcbiAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1ib3R0b20sICRibG9jc3Mtc3BhY2UgLSAycHgpO1xuXG5cbiAgICAgICAgJlt0eXBlPWVtYWlsXSxcbiAgICAgICAgJlt0eXBlPW51bWJlcl0sXG4gICAgICAgICZbdHlwZT10ZXh0XXtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLWJhc2UtZm9udC1zaXplKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLCAkYmxvY3NzLXNwYWNlLWhhbGYpO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKGJvcmRlci1yYWRpdXMsICRibG9jc3Mtc3BhY2UvNik7XG4gICAgICAgIH1cblxuICAgICAgICAmOmZvY3Vze1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yKGJyYW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgICZbZGlzYWJsZWRde1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3IoYmFzZS1saWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZm9ybV9faW5wdXQtLWRpc2FibGVke1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3IoYmFzZS1saWdodCk7XG4gICAgfVxuXG4gICAgLmZvcm1fX2lucHV0LS1zaG93b25maWxse1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4zNzVzICR0cmFuc2l0aW9uO1xuXG4gICAgICAgICY6aW52YWxpZHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAuZm9ybV9faW5wdXQtLXNob3dvbmZpbGw6dmFsaWR7XG4gICAgLy8gICAgIC8vIG9wYWNpdHk6IDE7XG4gICAgLy8gICAgIGJhY2tncm91bmQ6IHJlZDtcbiAgICAvLyB9XG5cbiAgICBzZWxlY3QuZm9ybV9faW5wdXR7XG4gICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2dmeC9pY29ucy9pY29uLWV4cGFuZC5zdmcpO1xuICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZywgJGJsb2Nzcy1zcGFjZS1oYWxmICRibG9jc3Mtc3BhY2UqMS41ICRibG9jc3Mtc3BhY2UtaGFsZiAkYmxvY3NzLXNwYWNlLWhhbGYpO1xuICAgIH1cblxuICAgIC5mb3JtX19maWVsZHNldC0tZXh0cmF7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAuMzc1cyAkdHJhbnNpdGlvbjtcbiAgICAgICAgbWF4LWhlaWdodDogMDtcblxuICAgICAgICAmW2RhdGEtc3RhdGU9dmlzaWJsZV17XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0obWF4LWhlaWdodCwgJGJsb2Nzcy1zcGFjZSo4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5mb3JtX19sYWJlbC0tZXh0cmF7XG4gICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAuMzc1cyAkdHJhbnNpdGlvbjtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgQGluY2x1ZGUgcmVtKGhlaWdodCwgJGJsb2Nzcy1zcGFjZSk7XG5cbiAgICAgICAgJltkYXRhLXN0YXRlPWludmlzaWJsZV17XG4gICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG5cbi8qICBNZWRpYSBxdWVyaWVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGRlc2spe1xuXG4gICAgICAgIHNlbGVjdC5mb3JtX19pbnB1dCxcbiAgICAgICAgLmZvcm1fX2lucHV0W3R5cGU9ZW1haWxdLFxuICAgICAgICAuZm9ybV9faW5wdXRbdHlwZT1udW1iZXJdLFxuICAgICAgICAuZm9ybV9faW5wdXRbdHlwZT10ZXh0XXtcblxuICAgICAgICAgICAgJjpob3Zlcjpub3QoOmZvY3VzKTpub3QoW2Rpc2FibGVkXSl7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgY29sb3IoYnJhbmQtc2VjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRUT1BMRVZFTFxuICAgIGh0bWwsIGJvZHksIC53cmFwcGVyXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJENPTlRFTlRTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qXG4gICAgQ09OVEVOVFMuLi4uLi4uLi4uLi4uLi4uWW91J3JlIHJlYWRpbmcgaXQsIExPTFxuICAgIE1PRFVMRS4uLi4uLi4uLi4uLi4uLi4uLkluY2x1ZGVzIGJhc2UgbW9kdWxlICYgc3VibW9kdWxlc1xuICAgIFNUQVRFLi4uLi4uLi4uLi4uLi4uLi4uLlN0YXRlcyB0aGUgbW9kdWxlIGNhbiBiZSBpblxuICAgIFRIRU1FLi4uLi4uLi4uLi4uLi4uLi4uLlRoZW1pbmcgb2YgdGhlIG1vZHVsZVxuICAgICovXG5cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJE1PRFVMRVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKiBjb21tZW50ZWQgYmFja3NsYXNoIGhhY2sgXFwqL1xuICAgIGh0bWwsIGJvZHkgeyBoZWlnaHQ6IDEwMCU7IH1cbiAgICAvKiBlbmQgaGFjayAqL1xuICAgICogaHRtbCAud3JhcHBlciB7IGhlaWdodDogMTAwJTsgfVxuXG4gICAgYm9keXtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmYWNlLWJhc2U7XG4gICAgICAgIGNvbG9yOiBjb2xvcihiYXNlKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIE1ha2Ugd3JhcHBlciAxMDAlIGhlaWdodFxuICAgICAqL1xuICAgIC53cmFwcGVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG5cbiAgICAgICAgLnNpdGUtd2lkdGh7XG4gICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgQGluY2x1ZGUgcmVtKG1heC13aWR0aCwgJHNpdGUtd2lkdGggKyAkYmxvY3NzLXNwYWNlKTtcbiAgICAgICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZywgMCAkYmxvY3NzLXNwYWNlLWhhbGYpO1xuICAgICAgICAgfVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgVFlQT0dSQVBHSFlcbiAgICBUZXh0IHN0eWxpbmdcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiAgVmFyaWFibGVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXG5cbi8qICBDb21wb25lbnRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyogIGZvbnRzaXplc1xuICAgIFxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgICAgIC5nYW1tYS13aWRle1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9udC1zaXplKCRibG9jc3MtZ2FtbWEsIDEuNSk7XG4gICAgICAgIH1cblxuXG5cbiAgICAvKiAgZm9udCB3ZWlnaHRzXG4gICAgXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAgICAgLndlaWdodC0tbWVke1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgfVxuXG5cblxuICAgIC8qICBoZWFkaW5nc1xuICAgIFxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgICAgIC5oZWFkaW5nLS1icmFuZHtcbiAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgICAvLyBAaW5jbHVkZSByZW0obWFyZ2luLWJvdHRvbSwgJGJsb2Nzcy1zcGFjZSk7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb250LXNpemUoJGJsb2Nzcy1iZXRhKTtcbiAgICAgICAgfVxuXG5cblxuICAgIC8qICB0ZXh0IGFsaWdubWVudHNcbiAgICBcXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgICAgICAudGV4dC0tY2VudGVye1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRleHQtLXJpZ2h0e1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIH1cblxuXG5cbi8qICBNZWRpYSBxdWVyaWVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGd0LXBhbG0pe1xuXG4gICAgICAgIC5nYW1tYS13aWRle1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmctcmlnaHQsICRibG9jc3Mtc3BhY2UqMyk7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGluZy0tYnJhbmR7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb250LXNpemUoJGJsb2Nzcy1hbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShkZXNrKXtcblxuICAgICAgICAuaGVhZGluZy0tYnJhbmR7XG5cbiAgICAgICAgICAgIHNwYW57XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDU1JTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgIEZPT1RFUlxuICAgIEJvdHRvbSBvZiBwYWdlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogIFZhcmlhYmxlc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblxuXG4vKiAgQ29tcG9uZW50XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC5mb290ZXJ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG5cbiAgICAgICAgaW1ne1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICAgICAuZm9vdGVyX19pbnRyb3tcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLWRlbHRhKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLCAkYmxvY3NzLXNwYWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm9vdGVyX19saW5re1xuICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcihibGFuayk7XG4gICAgICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLWdhbW1hKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlcl9faGVhZGluZ3tcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcihibGFuayk7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmcsICRibG9jc3Mtc3BhY2UpO1xuICAgICAgICAgICAgfVxuXG5cblxuLyogIE1lZGlhIHF1ZXJpZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkoZ3QtcGFsbSl7XG5cbiAgICAgICAgLmZvb3Rlcnt9XG5cbiAgICAgICAgICAgIC5mb290ZXJfX2ludHJve1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLWdhbW1hKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5mb290ZXJfX2xpbmt7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY3NzLWJldGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5mb290ZXJfX2hlYWRpbmd7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yKGJsYW5rKTtcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5mb290ZXJfX2hlYWRpbmctLXNlY3tcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yKGJyYW5kLXNlYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5mb290ZXJfX2hlYWRpbmctLXRlcntcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yKGJyYW5kLXRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5mb290ZXJfX2hlYWRpbmctLXF1YXtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yKGJyYW5kLXF1YSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgfVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgSEVBREVSXG4gICAgVG9wIG9mIHBhZ2VcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiAgVmFyaWFibGVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXG5cbi8qICBDb21wb25lbnRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLmhlYWRlcntcbiAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmcsICRibG9jc3Mtc3BhY2UgMCk7XG4gICAgfVxuXG4gICAgICAgIC5oZWFkZXJfX2JyYW5ke1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0obWFyZ2luLCAwIGF1dG8pO1xuICAgICAgICB9XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkTEFZRVJcbiAgICBwYWdlIHBhcnRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkQ09OVEVOVFNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLypcbiAgICBDT05URU5UUy4uLi4uLi4uLi4uLi4uLi5Zb3UncmUgcmVhZGluZyBpdCwgTE9MXG4gICAgTU9EVUxFLi4uLi4uLi4uLi4uLi4uLi4uSW5jbHVkZXMgYmFzZSBtb2R1bGUgJiBzdWJtb2R1bGVzXG4gICAgU1RBVEUuLi4uLi4uLi4uLi4uLi4uLi4uU3RhdGVzIHRoZSBtb2R1bGUgY2FuIGJlIGluXG4gICAgVEhFTUUuLi4uLi4uLi4uLi4uLi4uLi4uVGhlbWluZyBvZiB0aGUgbW9kdWxlXG4gICAgKi9cblxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkTU9EVUxFXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC5sYXllcntcbiAgICAgICAgLy8gcGFkZGluZzogJGJsb2Nzcy1zcGFjZSoyIDA7XG4gICAgfVxuXG4gICAgYm9keVxuICAgIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2dmeC9odW50ZXIuanBnJyk7XG4gICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSByaWdodDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgICAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgXG4gICAgfVxuXG5oMVxuICAgIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdQbGF5ZmFpciBEaXNwbGF5JztcbiAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgZm9udC1zaXplOiA4MnB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMnB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuXG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KHBhbG0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSBcbiAgICAgICAge1xuICAgICAgICAgICAgZm9udC1zaXplOiA0MHB4O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cbnBcbntcbiAgICBmb250LWZhbWlseTogJ1JvYm90byc7IFxuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwcHg7XG59XG4uYnRuVGl0bGVcbntcbiAgICBmb250LWZhbWlseTogJ1JvYm90byc7IFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4uc2lnbi0tbGFyZ2V7XG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbn1cblxuQGluY2x1ZGUgbWVkaWEtcXVlcnkocGFsbSlcbntcbiAgICAuc2lnbi0tbGFyZ2V7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgfVxufVxuXG5cbi5tYXgtd2lkdGgtLXNcbntcbiAgICBtYXgtd2lkdGg6IDIwcHg7XG59XG4uYnRuQ29udGFjdFxue1xuICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3IoYnJhbmQpO1xuICAgIHBhZGRpbmc6IDEwcHggNDBweDtcbiAgICBib3JkZXItcmFkaXVzOiAxN3B4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGNvbG9yOiBjb2xvcihkYXJrKTtcblxuICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIFxuICAgICAgICB7XG4gICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDMzcHg7XG4gICAgICAgIH1cbn1cblxuLldyYXBwZXJcbntcbiAgICB3aWR0aDogOTAlO1xuICAgIG1heC13aWR0aDogMTAyNHB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IDI1MHB4O1xuXG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkocGFsbSlcbiAgICAgICAge1xuICAgICAgICAgICAgdG9wOiAxNzBweDtcbiAgICAgICAgfVxuICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIFxuICAgICAgICB7XG4gICAgICAgICAgICB0b3A6MTM1cHg7XG4gICAgICAgIH1cbn1cblxuXG4uQ29udGVudFxue1xuICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgbWF4LXdpZHRoOiA2MDBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uTGlua1RleHRcbntcbiAgICBtYXJnaW4tbGVmdDogMjVweDtcbn1cbi5Mb2dvXG57XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNDBweDtcbiAgICBsZWZ0OiA3MHB4O1xuICAgIGhlaWdodDogMTkxcHg7XG4gICAgd2lkdGg6IDE0N3B4O1xuXG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkocGFsbSlcbiAgICAgICAge1xuICAgICAgICAgICAgaGVpZ2h0OiAxNDFweDtcbiAgICAgICAgICAgIHdpZHRoOiA5N3B4O1xuICAgICAgICAgICAgdG9wOiAxMHB4O1xuICAgICAgICAgICAgbGVmdDogMjBweDtcbiAgICAgICAgfVxuXG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkobGFwKVxuICAgICAgICB7XG4gICAgICAgICAgICBoZWlnaHQ6IDE0MXB4O1xuICAgICAgICAgICAgd2lkdGg6IDk3cHg7XG4gICAgICAgIH1cblxuICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIFxuICAgIHtcbiAgICAgICAgd2lkdGg6IDc3cHg7XG4gICAgICAgIGhlaWdodDogMTIxcHg7XG4gICAgfVxufVxuXG5cbiAgICBcblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkU1RBVEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyogTWVkaWEgUXVlcmllc1xuICAgICAgIFRoZSBkZWZhdWx0IG1lZGlhIHF1ZXJpZXMgc2hpcHBlZCB3aXRoIEJsb2NzczpcbiAgICAgICBVbmNvbW1lbnQgdGhlIG9uZXMgeW91IG5lZWRcbiAgICBcXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXNrLXdpZGUgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZ3QtZGVzayl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlc2sgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZGVzayl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBvcnRhYmxlIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICAvL0BpbmNsdWRlIG1lZGlhLXF1ZXJ5KGx0LWRlc2spe31cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMYXAgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkobGFwKXt9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogTGFwdXAgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZ3QtcGFsbSl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhbG0gc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkocGFsbSl7fVxuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRUSEVNRVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICBCVVRUT05cbiAgICBiaWcgaW50ZXJhY3Rpb24gaW5kaWNhdG9yc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qICBWYXJpYWJsZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cblxuLyogIENvbXBvbmVudFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAuYnV0dG9ue1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihicmFuZCk7XG4gICAgICAgIGNvbG9yOiBjb2xvcihibGFuayk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yKGJyYW5kKTtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3IgLjE3NXMgJHRyYW5zaXRpb24sXG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yIC4xNzVzICR0cmFuc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICBjb2xvciAuMTc1cyAkdHJhbnNpdGlvbjtcbiAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgQGluY2x1ZGUgZm9udC1zaXplKCRibG9jc3MtYmFzZS1mb250LXNpemUpO1xuICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZywgJGJsb2Nzcy1zcGFjZS1oYWxmKTtcbiAgICAgICAgQGluY2x1ZGUgcmVtKGJvcmRlci1yYWRpdXMsICRibG9jc3Mtc3BhY2UvNik7XG5cbiAgICAgICAgJjphY3RpdmV7XG4gICAgICAgICAgICBjb2xvcjogY29sb3IoYnJhbmQpO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3IoYmxhbmspO1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbi8qICBNZWRpYSBxdWVyaWVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGRlc2spe1xuXG4gICAgICAgIC5idXR0b257XG5cbiAgICAgICAgICAgICY6aG92ZXI6bm90KDphY3RpdmUpe1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogY29sb3IoYnJhbmQtc2VjKTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihicmFuZC1zZWMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJEhlbHBlcnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkQ09OVEVOVFNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLypcbiAgICBDT05URU5UUy4uLi4uLi4uLi4uLi4uLi5Zb3UncmUgcmVhZGluZyBpdCwgTE9MXG4gICAgTU9EVUxFLi4uLi4uLi4uLi4uLi4uLi4uSW5jbHVkZXMgYmFzZSBtb2R1bGUgJiBzdWJtb2R1bGVzXG4gICAgU1RBVEUuLi4uLi4uLi4uLi4uLi4uLi4uU3RhdGVzIHRoZSBtb2R1bGUgY2FuIGJlIGluXG4gICAgVEhFTUUuLi4uLi4uLi4uLi4uLi4uLi4uVGhlbWluZyBvZiB0aGUgbW9kdWxlXG4gICAgKi9cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRGVU5DVElPTlNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gei1pbmRleCgka2V5cykge1xuICAgICRtYXA6ICR6LWluZGV4ZXM7XG4gICAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gICAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSBcIm1hcFwiKSB7XG4gICAgICAgICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG5AZnVuY3Rpb24geigka2V5cy4uLikge1xuICAgIEByZXR1cm4gei1pbmRleCgka2V5cyk7XG59XG5cbi52aXN1YWxseWhpZGRlbntcbiAgICBib3JkZXI6IDA7XG4gICAgY2xpcDogcmVjdCgwIDAgMCAwKTtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBtYXJnaW46IC0xcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMXB4O1xufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgSElEREVOXG4gICAgaGlkZSBlbGVtZW50c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qICBWYXJpYWJsZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cblxuLyogIENvbXBvbmVudFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAuaGlkZGVuLS1wYWxte1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuXG5cbi8qICBNZWRpYSBxdWVyaWVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGd0LXBhbG0pe1xuXG4gICAgICAgIC5oaWRkZW4tLXBhbG17XG4gICAgICAgICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhpZGRlbi0tZ3QtcGFsbXtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICBJU0xBTkRcbiAgICBQYWRkZWQgYmxvY2tcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiAgVmFyaWFibGVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXG5cbi8qICBDb21wb25lbnRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLmlzbGFuZHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLCAkYmxvY3NzLXNwYWNlKTtcbiAgICB9XG5cbiAgICAuaXNsYW5kLS1zbWFsbHtcbiAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmcsICRibG9jc3Mtc3BhY2UtaGFsZik7XG4gICAgfVxuXG4gICAgLyogIElzdGhtdXNcbiAgICAgICAgbGlrZSBpc2xhbmQgYnV0IG9ubHkgb24gMiBvcHBvc2luZyBzaWRlc1xuICAgIFxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgICAgIC5pc3RobXVze1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmcsIDAgJGJsb2Nzcy1zcGFjZSk7XG4gICAgICAgIH1cblxuICAgICAgICAuaXN0aG11cy0tc21hbGx7XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZywgMCAkYmxvY3NzLXNwYWNlLWhhbGYpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmlzdGhtdXMtLWxhcmdle1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmcsIDAgJGJsb2Nzcy1zcGFjZSoyKTtcbiAgICAgICAgfVxuXG5cblxuLyogIE1lZGlhIHF1ZXJpZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkoZ3QtcGFsbSl7XG5cbiAgICAgICAgLmlzbGFuZC0tZ3QtcGFsbXtcbiAgICAgICAgICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLCAkYmxvY3NzLXNwYWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pc2xhbmQtLWxhcmdlLS1ndC1wYWxte1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmcsICRibG9jc3Mtc3BhY2UqMik7XG4gICAgICAgIH1cblxuICAgICAgICAuaXN0aG11cy0tbGFyZ2UtLWd0LXBhbG17XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZywgMCAkYmxvY3NzLXNwYWNlKjIpO1xuICAgICAgICB9XG5cbiAgICB9XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICBPVkVSRkxPV1xuICAgIERpc3BsYXllZCBvdXRzaWRlIGNvbnRhaW5lclxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qICBWYXJpYWJsZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgJG92ZXJmbG93LWxlZnQ6ICRibG9jc3Mtc3BhY2UqMjtcbiAgICAkb3ZlcmZsb3ctdG9wOiAgJGJsb2Nzcy1zcGFjZSozO1xuXG4vKiAgQ29tcG9uZW50XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC5vdmVyZmxvd3tcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAub3ZlcmZsb3ctLXVwcGVye1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgIH1cblxuICAgIC5vdmVyZmxvdy0tbG93ZXJ7XG4gICAgICAgIHotaW5kZXg6IDA7XG4gICAgfVxuXG4gICAgLm92ZXJmbG93LS10b3B7XG4gICAgICAgIEBpbmNsdWRlIHJlbSh0b3AsIC0kYmxvY3NzLXNwYWNlKTtcbiAgICB9XG5cbiAgICAub3ZlcmZsb3ctLWNvbnRlbnQtdG9wbGVmdHtcbiAgICAgICAgQGluY2x1ZGUgcmVtKHRvcCwgJG92ZXJmbG93LXRvcCk7XG4gICAgICAgIEBpbmNsdWRlIHJlbShtYXJnaW4tYm90dG9tLCAkb3ZlcmZsb3ctdG9wKTtcblxuICAgICAgICAub3ZlcmZsb3dfX292ZXJmbG93aW5ne1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHRvcCwgLSRvdmVyZmxvdy10b3ApO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKGxlZnQsIC0kYmxvY3NzLXNwYWNlKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIHJlbShtYXJnaW4tYm90dG9tLCAtJG92ZXJmbG93LXRvcCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4vKiAgTWVkaWEgcXVlcmllc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShndC1wYWxtKXtcblxuICAgICAgICAub3ZlcmZsb3ctLWxlZnR7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgI3skb3ZlcmZsb3ctbGVmdH0pO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1sZWZ0LCAtJG92ZXJmbG93LWxlZnQpO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmctbGVmdCwgJG92ZXJmbG93LWxlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLm92ZXJmbG93LS10b3AtLWd0LXBhbG17XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0odG9wLCAtJGJsb2Nzcy1zcGFjZSk7XG4gICAgICAgIH1cblxuICAgICAgICAub3ZlcmZsb3ctLWNvbnRlbnQtdG9wbGVmdHtcblxuICAgICAgICAgICAgLm92ZXJmbG93X19vdmVyZmxvd2luZ3tcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSByZW0obGVmdCwgLSRibG9jc3Mtc3BhY2UqMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICBTSUdOXG4gICAgbWFyZ2luIGJvdHRvbSBtb2RpZmllcnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiAgVmFyaWFibGVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXG5cbi8qICBDb21wb25lbnRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLnNpZ257XG4gICAgICAgIEBpbmNsdWRlIHJlbShtYXJnaW4tYm90dG9tLCAkYmxvY3NzLXNwYWNlKTtcbiAgICB9XG5cbiAgICAuc2lnbi0taW52LS1oYWxme1xuICAgICAgICBAaW5jbHVkZSByZW0obWFyZ2luLWJvdHRvbSwgLSRibG9jc3Mtc3BhY2UtaGFsZik7XG4gICAgfVxuXG4gICAgLnNpZ24tLWludi0tZXh0cmFsYXJnZXtcbiAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1ib3R0b20sICRibG9jc3Mtc3BhY2UqLTQpO1xuICAgIH1cblxuXG5cbi8qICBNZWRpYSBxdWVyaWVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGd0LXBhbG0pe1xuXG4gICAgICAgIC5zaWduLS1pbnYtLWhhbGYtLWd0LXBhbG17XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0obWFyZ2luLWJvdHRvbSwgLSRibG9jc3Mtc3BhY2UtaGFsZik7XG4gICAgICAgIH1cblxuICAgICAgICAuc2lnbi0taW52LS1leHRyYWxhcmdlLS1ndC1wYWxte1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1ib3R0b20sICRibG9jc3Mtc3BhY2UqLTQpO1xuICAgICAgICB9XG4gICAgfVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgVE9HR0xFXG4gICAgZGlzZ3Vpc2VkIGNoZWNrYm94L3JhZGlvIGlucHV0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qICBWYXJpYWJsZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cblxuLyogIENvbXBvbmVudFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAudG9nZ2xle1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvcihicmFuZCk7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuMTc1cyAkdHJhbnNpdGlvbjtcbiAgICAgICAgQGluY2x1ZGUgcmVtKGJvcmRlci1yYWRpdXMsICRibG9jc3Mtc3BhY2UtaGFsZik7XG4gICAgfVxuXG4gICAgICAgIC50b2dnbGVfX2l0ZW17XG4gICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICBmbGV4LWJhc2lzOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgIC50b2dnbGVfX2lucHV0e1xuICAgICAgICAgICAgICAgIEBleHRlbmQgLnZpc3VhbGx5aGlkZGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudG9nZ2xlX19sYWJlbHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yICAgICAgICAgICAgLjE3NXMgJHRyYW5zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3IgLjE3NXMgJHRyYW5zaXRpb247XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgcmVtKGJvcmRlci1yYWRpdXMsICRibG9jc3Mtc3BhY2UtaGFsZik7XG5cbiAgICAgICAgICAgICAgICAmOmFjdGl2ZXtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3IoYnJhbmQtc2VjKTtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yKGJsYW5rKTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudG9nZ2xlX19pbnB1dDpjaGVja2VkICsgJntcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3IoYnJhbmQpO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3IoYmxhbmspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgIC50b2dnbGUtLXNlY3tcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1sZWZ0LCAtJGJsb2Nzcy1zcGFjZS1oYWxmKTtcblxuICAgICAgICAudG9nZ2xlX19pdGVte1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmctbGVmdCwgJGJsb2Nzcy1zcGFjZS1oYWxmKTtcbiAgICAgICAgfVxuXG4gICAgICAgICAgICAudG9nZ2xlX19sYWJlbHtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvcihicmFuZCk7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmcsICRibG9jc3Mtc3BhY2UgMCk7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgcmVtKGJvcmRlci1yYWRpdXMsICRibG9jc3Mtc3BhY2UvNik7XG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgICAgIC50b2dnbGVfX2ljb257XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogZmlsdGVyIC4xNzVzICR0cmFuc2l0aW9uO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHdpZHRoLCAkYmxvY3NzLXNwYWNlKjIpO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKGhlaWdodCwgJGJsb2Nzcy1zcGFjZSoyKTtcblxuICAgICAgICAgICAgLnRvZ2dsZV9fbGFiZWw6YWN0aXZlICZ7XG4gICAgICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDAlKSBpbnZlcnQoMTAwJSk7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cblxuLyogIE1lZGlhIHF1ZXJpZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkoZ3QtcGFsbSl7XG5cbiAgICAgICAgLnRvZ2dsZXt9XG5cbiAgICAgICAgLnRvZ2dsZS0tc2Vje1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1sZWZ0LCAtJGJsb2Nzcy1zcGFjZSk7XG5cbiAgICAgICAgICAgIC50b2dnbGVfX2l0ZW17XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmctbGVmdCwgJGJsb2Nzcy1zcGFjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGRlc2spe1xuXG4gICAgICAgIC50b2dnbGV7XG5cbiAgICAgICAgICAgICY6aG92ZXJ7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgY29sb3IoYnJhbmQtc2VjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC50b2dnbGUtLXNlY3tcblxuICAgICAgICAgICAgJjpob3ZlcntcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICBWSVNVQUxcbiAgICBiaWcgcGhvdG9cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiAgVmFyaWFibGVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgICR2aXN1YWwtd2lkZS1oZWlnaHQ6ICRibG9jc3Mtc3BhY2UqMTIuNTtcblxuLyogIENvbXBvbmVudFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAudmlzdWFse1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAgICAgLnZpc3VhbF9faW1hZ2V7fVxuXG4gICAgICAgIC52aXN1YWxfX2NhcHRpb257XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDMwJTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yKGJyYW5kLXF1aSk7XG4gICAgICAgICAgICBjb2xvcjogY29sb3IoYnJhbmQtc2VjKTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTBkZWcpO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmcsICRibG9jc3Mtc3BhY2UgMCk7XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0ocmlnaHQsICRibG9jc3Mtc3BhY2UqLTEuNSk7XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0od2lkdGgsICRibG9jc3Mtc3BhY2UqNCk7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb250LXNpemUoJGJsb2Nzcy1kZWx0YSwgMSk7XG4gICAgICAgIH1cblxuICAgIC52aXN1YWwtLXdpZGV7XG5cbiAgICAgICAgaW1ne1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKGhlaWdodCwgJHZpc3VhbC13aWRlLWhlaWdodCk7XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZywgJHZpc3VhbC13aWRlLWhlaWdodC8yIDUwJSk7XG4gICAgICAgIH1cbiAgICB9XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICBNYWluXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJENPTlRFTlRTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLypcbkNPTlRFTlRTLi4uLi4uLi4uLi4uLi4uLllvdSdyZSByZWFkaW5nIGl0LCBMT0xcbk1PRFVMRS4uLi4uLi4uLi4uLi4uLi4uLkluY2x1ZGVzIGJhc2UgbW9kdWxlICYgc3VibW9kdWxlc1xuU1RBVEUuLi4uLi4uLi4uLi4uLi4uLi4uU3RhdGVzIHRoZSBtb2R1bGUgY2FuIGJlIGluXG5USEVNRS4uLi4uLi4uLi4uLi4uLi4uLi5UaGVtaW5nIG9mIHRoZSBtb2R1bGVcbiovXG5cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJE1PRFVMRVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5uYXZNYWlue1xuXG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRTVEFURVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qIE1lZGlhIFF1ZXJpZXNcbiAgIFRoZSBkZWZhdWx0IG1lZGlhIHF1ZXJpZXMgc2hpcHBlZCB3aXRoIEJsb2NzczpcbiAgIFVuY29tbWVudCB0aGUgb25lcyB5b3UgbmVlZFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBEZXNrLXdpZGUgc3RhdGVcbiAqL1xuLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShndC1kZXNrKXt9XG5cblxuLyoqXG4gKiBEZXNrIHN0YXRlXG4gKi9cbi8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZGVzayl7fVxuXG5cbi8qKlxuICogUG9ydGFibGUgc3RhdGVcbiAqL1xuLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShsdC1kZXNrKXt9XG5cblxuLyoqXG4gKiBMYXAgc3RhdGVcbiAqL1xuLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShsYXApe31cblxuXG4vKipcbiAqIExhcHVwIHN0YXRlXG4gKi9cbi8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZ3QtcGFsbSl7fVxuXG5cbi8qKlxuICogUGFsbSBzdGF0ZVxuICovXG4vL0BpbmNsdWRlIG1lZGlhLXF1ZXJ5KHBhbG0pe31cblxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkVEhFTUVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0E7O2dGQUdnRjtBQUVoRjtnRkFFZ0Y7QUFFNUU7Ozs7OztNQU1FO0FBS047O2dGQUdnRjtBQ3hCaEY7Ozs7Ozs7Z0ZBUWdGO0FBTTVFLFlBQVk7QUFHWixhQUFhO0FBS2IsVUFBVTtBQVVWLGFBQWE7QUFJYix1QkFBdUI7QUFJbkIseUJBQXlCO0FBU3pCLFVBQVU7QUFJVixTQUFTO0FBSVQsb0JBQW9CO0FBTzVCOztnRkFHZ0Y7QUF5QmhGOztnRkFHZ0Y7QUM5RmhGLHNEQUFzRDtBQUV0RDs7O2dGQUlnRjtBQUVoRjtnRkFDZ0Y7QUNUaEYsK0RBQStEO0FBRS9EOzs7Z0ZBSWdGO0FBRWhGO2dGQUNnRjtBQUVoRjs7OztHQUlHO0FBT0g7Z0ZBQ2dGO0FBRWhGOzs7R0FHRztBQVNIOzs7O2dGQUlnRjtBQVNoRjs7Z0ZBRWdGO0FBT2hGOztnRkFFZ0Y7QUQ5Q2hGOztnRkFFZ0Y7QUVsQmhGLDRFQUE0RTtBQUU1RTs7OztHQUlHO0FBRUgsQUFBQSxJQUFJLENBQUM7RUFDSCxXQUFXLEVBQUUsVUFBVTtFQUFHLE9BQU87RUFDakMsb0JBQW9CLEVBQUUsSUFBSTtFQUFHLE9BQU87RUFDcEMsd0JBQXdCLEVBQUUsSUFBSTtFQUFHLE9BQU8sRUFDekM7O0FBRUQ7O0dBRUc7QUFFSCxBQUFBLElBQUksQ0FBQztFQUNILE1BQU0sRUFBRSxDQUFDLEdBQ1Y7O0FBRUQ7Z0ZBQ2dGO0FBRWhGOzs7OztHQUtHO0FBRUgsQUFBQSxPQUFPO0FBQ1AsQUFBQSxLQUFLO0FBQ0wsQUFBQSxP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 */
